開源C++項目Google JavaScript引擎V8挑戰實錄,帶你進入V8之旅


 


--寫在開始

按照今年的計划,需要研究一個有使用價值的linux下的C++開源項目,無意中發現了V8,覺得還不錯,於是記錄下來,希望對大家有所幫助。V8是一個由丹麥Google開發的開源JavaScript引擎,用於Google Chrome中,Chrome是現有的瀏覽器中速度相對比較快的一個,這完全得益於V8的效率,另外,作為一個獨立的項目,V8也可以嵌入到我們自己開發的項目中運行,查了一下才知道,前一這被大家熱炒的Node.js也是基於V8的,可見V8值得大家稍微研究一番。


作為一個開源JavaScript引擎,V8是以源代碼的形式開源,而我們使用的時候是以庫的形式進行使用,這就涉及到源代碼的編譯,當然你可以上網找別人build好的libv8.a或者libv8.so,使用就是了,但是既然是學習這個庫,我們有時候是需要進行代碼調試的,用別人的庫,有的時候調試可能會有問題,還是自己動手豐衣足食啊,呵呵,那么我們開始自己build吧。 

按照項目官方Wiki上面的介紹,我用Git clone 了一份代碼,命令如下: 

git clone git: // github.com/v8/v8.git v8 && cd v8 

但是當我build的時候我才發現,原來最新版的V8 build 腳本已經改成了GYP,而make dependencies 這個時候在GIT的代碼庫里面怎么也下不了GYP這些腳本,於是我不得不重新安裝Subversion,然后用:


svn checkout http: // v8.googlecode.com/svn/trunk/ v8

make dependencies

 這才拿齊了build所需要的所有文件,let’s go, V8的路徑下執行如下命令:

make native library=shared

經過大約5分鍾的編譯,終於成功的build出來了我需要的libv8.so.

 

那么這個庫是否已經成功的build好了呢,那么讓我們來驗證一下吧,找個最簡單的demo

一下是google官方的demo,簡單明了。

#include <v8.h>
using  namespace v8;

int main( int argc,  char* argv[]) {

   //  Create a stack-allocated handle scope.
  HandleScope handle_scope;

   //  Create a new context.
  Persistent<Context> context = Context::New();
  
   //  Enter the created context for compiling and
  
//  running the hello world script. 
  Context::Scope context_scope(context);

   //  Create a string containing the JavaScript source code.
  Handle<String> source = String::New( " 'Hello' + ', World!' ");

   //  Compile the source code.
  Handle<Script> script = Script::Compile(source);
  
   //  Run the script to get the result.
  Handle<Value> result = script->Run();
  
   //  Dispose the persistent context.
  context.Dispose();

   //  Convert the result to an ASCII string and print it.
  String::AsciiValue ascii(result);
  printf( " %s\n ", *ascii);
   return  0;
}

 

 將段代碼存成hello_world.cpp,並執行下面命令:

g++ -I include hello_world.cpp -o hello_world libv8.so  -lpthread

 

然后執行./ hello_world 這個時候你會看到屏幕上已經輸出了 Hello World!

如果對代碼的某一部分感興趣你就可以打開GDB在相應的位置設置斷點,單步的走代碼。

恭喜你到現在為止,你已經可以無所顧忌的開始 V8 之旅啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM