티스토리 뷰

https://www.notion.so/simsimjae/11-V8-JS-a7de64cbdba0434295abe8af6bf89b16

아래 글들은 검색엔진 노출을 위한 글입니다. 

노션에서 확인하시면 이미지와 함께 정리된 글을 보실수 있습니다. 궁금하신점은 블로그 댓글이나 노션 코멘트를 이용해주세요(@comment)


제가 직접 만든 프로젝트입니다.

http://pickvs.com : 닥전닥후


 

 

크롬의 엔진인 V8에 대해서 살펴보자.

  • V8은 구글에서 제공하는 오픈소스 자바스크립트 엔진이다. SpiderMonkey, Rhino, JavaScriptCore등의 다른 엔진들도 있다.
  • 이런 엔진은 자바스크립트를 CPU가 해석할 수 있는 기계어로 번역해주는 역할을 한다.
  • V8엔진은 C++로 작성됬고 Node.js와 Chrome에서 사용된다.
  • C/C++와 같은 언어에 비해 자바스크립트는 더 많이 추상화 되어 있어 두 언어에 비해 속도가 느리다. (추상화가 많이 될수록 기계어가 될 떄 까지 더 많은 과정을 거쳐야 하므로)
  • 내가 만든 C++함수를 V8엔진에 추가 하는 일도 충분히 가능하다.

 

  • 이런일들이 가능하기 때문에 내가 엔진에 함수를 추가하게 되면 원래의 자바스크립트를 커스텀하는 일도 가능해진다.
  • C++은 기본적으로 JS보다 하드웨어에 더 가깝기 떄문에 더 많은 일을 할 수 있다. 따라서, 이 엔진에 함수를 추가해서 JS를 커스텀 한다는것은 강력한 효과를 낼 수 있다.
  • Node.js 자체는 V8엔진이고 C++로 구현되어있다.
  • 오픈 소스 이기 때문에 내가 엔진을 커스터마이징해서 JS를 확장시킬 수 있다. (https://github.com/v8/v8/blob/master/samples/shell.cc)

예를들어, JS에는 없는 Print라는 함수를 엔진에 추가해놓고 JS에서 Print()를 호출하면 정상 동작하게 만들 수 있다.

// 자바스크립트에서 'print' 함수가 호출될 때마다, v8엔진에 의해 콜백이 호출됩니다. // C++로 구현된 V8엔진에 Print라는 함수를 추가했고, JS에서 가져다 썼다. void Print(const v8::FunctionCallbackInfo<v8::Value>& args) { bool first = true; for (int i=0; i<args.length(); i++) { v8::HandleScope handle_scope(args.GetIsolate()); if (first) { first = false; } else { print(" "); } v8::String::Utf8Value str(args.GetIsolate(), args[i]); const char* cstr = ToCString(str); printf("%s", cstr); } printf("\\n"); fflush(stdout); }

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함