上一章講到了V8的編譯和安裝,這一章開始從一個demo著手。
這裡選用了官方文檔的一個非常簡潔的HelloWorld.cc,代碼如下:
#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;}
我的目錄結構如下:
編譯運行:
g++ -I../include helloworld.cc -o helloworld -lpthread -lv8
./helloworld
就可以在螢幕上看到輸出結果了。
看到demo上有一些Context,Scope,Value等等,先不要慌張,其實就是V8的一些基本 資料類型,這些在後面會逐個一一講到。
Handle<String> source = String::New("'Hello' + ', World!'");
看到這句話,其實就是在載入一個js檔案了。只不過這個js檔案內容為:
'Hello' + ', World!'
那麼這裡,source就已經是載入過的js檔案字串內容了,接下來V8需要對js進行編譯解釋。
Handle<Script> script = Script::Compile(source); Handle<Value> result = script->Run();
最後就是JS的執行了。這裡雖然只有簡單的幾個語句,但是V8對於JS的編譯和運行做了很多很複雜的操作。關於V8是如何編譯和運行JS的,在後面章節將做詳細的分析。
著作權申明:
轉載文章請註明原文出處,任何用於商業目的,請聯絡本人:hyman_tan@126.com