（基本だらだら進行で、過程を追記していきます）

ビルドしてみる まず、 svn からソースを持ってくる $ svn co http://v8.googlecode.com/svn/trunk/ v8 おおお。以外と少ない

で、 trunk の中に入って $ cd v8 scons でビルド（scons が入ってない人は、 port や apt-get で入れる） $ scons scons: Reading SConscript files ... scons: done reading SConscript files. scons: Building targets ... g++ -o obj/release/third_party/jscre/pcre_compile.o -c -ansi -w -fno-strict-aliasing -O2 -fno-rtti -fno-exceptions -ansi -w -fno-strict-aliasing -O2 -DENABLE_LOGGING_AND_PROFILING -DSUPPORT_UTF8 -DNO_RECURSE -DSUPPORT_UCP src/third_party/jscre/pcre_compile.cpp ： ： ranlib libv8.a libv8.a が出来た。ここまでは順調

Shell をビルドしてみる scons のオプションを見る $ scons --help scons: Reading SConscript files ... scons: done reading SConscript files. mode: compilation mode (debug, release) default: release actual: release sample: build sample (shell, process) default: actual: env: override environment settings (NAME1:value1,NAME2:value2) default: actual: toolchain: toolchain (gcc, msvc) default: gcc actual: gcc simulator: simulator (arm, none) default: none actual: none arch: arch (arm, ia32) default: ia32 actual: ia32 library: library (static, shared) default: static actual: static wordsize: wordsize (64, 32) default: 32 actual: 32 snapshot: snapshot (on, off) default: off actual: off os: os (linux, macos, win32) default: macos actual: macos いろいろとあるが sample フラグで shell を作れるっぽいことが分かる

shell をビルドする $ scons sample=shell scons: Reading SConscript files ... scons: done reading SConscript files. scons: Building targets ... g++ -o shell obj/sample/shell/release/shell.o -L. -lv8 -lpthread scons: done building targets. shell.o と libv8 と libpthread をリンクして完了。 shell というバイナリが出来た。

実行してみる。 $ ./shell V8 version 0.2.5 > for (var n in function () { return this } ()) print(n) n load quit print version > quit() おおおおお。 JavaScript が動いた

shell のソースを見てみる shell.cc をエディタで開く $ vim samples/shell.cc 209 行くらいのシンプルなファイルだ。

とりあえず雰囲気だけ分かった。

Hello, world を雰囲気で書いてみる 雰囲気だけ分かったので、雰囲気で Hello, world してみる #include <v8.h> v8::Handle<v8::Value> Print( const v8::Arguments& args); int main( int argc, char * argv[]) { v8::HandleScope handle_scope; v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New(); v8::Handle<v8::String> str_print = v8::String::New( "print" ); v8::Handle<v8::FunctionTemplate> fn_print = v8::FunctionTemplate::New(Print); global->Set(str_print, fn_print); v8::Handle<v8::Context> context = v8::Context::New( NULL , global); v8::Context::Scope context_scope(context); v8::Handle<v8::String> str = v8::String::New( "print('Hello, world!')" ); v8::Handle<v8::Primitive> undefined = v8::Undefined(); v8::Handle<v8::Script> script = v8::Script::Compile(str, undefined); v8::Handle<v8::Value> result = script->Run(); return 0 ; } v8::Handle<v8::Value> Print( const v8::Arguments& args) { v8::String::AsciiValue str(args[ 0 ]); printf( " %s

" , *str); return v8::Undefined(); } ビルドする（-L と -I は適宜） $ g++ helloworld.cc -L. -lv8 -Isrc おお。成功 $ ./a.out Hello, world! おおおお。動いた