好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

开源C++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅

开源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 之旅啦。

分类:  C++

C++

 

开源C++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅

摘要: --写在开始 按照今年的计划,需要研究一个有使用价值的linux下的C++开源项目,无意中发现了V8,觉得还不错,于是记录下来,希望对大家有所帮助。V8是一个由丹麦Google开发的开源JavaScript引擎,用于Google Chrome中,Chrome是现有的浏览器中速度相对比较快的一个,这完全得益于V8的效率,另外,作为一个独立的项目,V8也可以嵌入到我们自己开发的项目中运行,查了一下才知道,前一这被大家热炒的Node.js也是基于V8的,可见V8值得大家稍微研究一番。作为一个开源JavaScript引擎,V8是以源代码的形式开源,而我们使用的时候是以库的形式进行使用,这就涉及到源代. 阅读全文

posted @  2012-04-02 22:03  SolidMango 阅读(1215) |  评论 (6)   编辑

《Effective STL》读书总结--关于STL 你不一定都懂的

摘要: 春节期间一次用手机上网无意间发现了这本书,说起来还得感谢智能手机的发展,有时候还是很方便的。当时随便的翻了几页,于是我停不下来了,因为我发现原来我不知道的东西太多了。我第一次接触STL的时候大约在7年前,那个时候刚从C语言转到C++,记得那个时候知道了STL 的vector, list, map, 但是只是把这些东西当作C++的语法,一带而过,用的时候查查文档,只要逻辑和结果对了就OK,到处是for循环,到处是迭代器,现在回想起来的感触是:… 没文化,真可怕。第二次我想深入学习STL的时候是研究生毕业以后,记得那个时候刚入行,公司的产品出现了一个问题,是关于STL 的一个容器的erase()  阅读全文

posted @  2012-02-10 18:30  SolidMango 阅读(1381) |  评论 (10)   编辑

Windows程序员需要学什么

摘要: 经常发现有人在网上提出这样的问题,现实中也确实有不少人在经历了3-5年的Windows开发之后就开始迷失方向,每天浑浑噩噩混日子,可能是因为这个问题粒度太大,没人愿意花时间回答,希望本文可以抛砖引玉,给大家节省些时间,同时也希望园子里面的兄弟们能尽力的补充,从而使这篇文章可以帮助更多的后来人。 首先说明的是,本文提到的各种技术不分先后,没有顺序,虽然先学什么,再学什么对某些人来说可能更方便,但是这些都不是绝对的,因为每个人的情况不同。 Windows开发首先必须学习的就是操作系统的API,因为其他的一切都是构建于OS之上,所谓九层之台,起于垒土,如果你对linux的系统调用很熟悉就会发现其.. 阅读全文

posted @  2011-11-26 10:45  SolidMango 阅读(3699) |  评论 (42)   编辑

.NET互操作技术杂谈

摘要: 关键字:COM,.NET,互操作,封送 多年来在程序设计领域微软技术一直引领着每个时代,在每一代的技术背后都有相关的动机,而这些动机及其实现细节往往是大部分的程序设计课程没有涉及的,但是对于我们理解相关的技术又十分重要,本文将对几种相关技术和隐藏在动机背后的细节做简要的阐述,算是抛砖引玉。 COM技术于1993年首次发布,称得上是微软技术的一个里程碑,其意义在于使组件编程化得以实现。COM技术最初的思想起源于将类做成可重用的二进制组件,把类的实现和接口分离以便把类的实现封装到二进制防火墙的背后,而这道防火墙以VPTR和VTBL的形式保证了这个防火墙的不变性。.NET技术则在语言层面上支持了基于 阅读全文

posted @  2010-04-21 14:22  SolidMango 阅读(1311) |  评论 (6)   编辑

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于开源C++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅的详细内容...

  阅读:36次