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

http://www.cnblogs.com/pugang/archive/2012/04/02/2430519.html


--写在开始

按照今年的计划,需要研究一个有使用价值的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++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅相关推荐

  1. JavaScript引擎大战:Google提出StrongMode和SoundScript议案,增强V8性能

    JavaScript 引擎性能大战硝烟迷漫,Chrome V8 引擎团队宣布了一个新的计划,在这个计划里他们介绍了两个新的虚拟机概念:强化模式(StrongMode)和强化脚本(StrongScrip ...

  2. V8 JavaScript引擎研究(三)垃圾回收器的实现

    V8垃圾回收机制简介 V8垃圾回收器的实现,是V8高效的一个非常重要的原因. V8在运行时自动回收不再需要使用的对象内存,也即是垃圾回收. V8使用了全暂停式(stop-the-world).分代式( ...

  3. JavaScript引擎研究与C、C++与互调用(转)

    本文转自:ice6015的专栏.为什么有些招聘需要熟悉JS和C++,这或许就是原因. 1.  概要 JavaScript是一种广泛用于Web客户端开发的脚本语言,常用来控制浏览器的DOM树,给HTML ...

  4. Google开源实时通信项目WebRTC

    Google开源实时通信项目WebRTC 作者 崔康 发布于 2011年6月3日 最近,Google正式开源了WebRTC实时通信项目,希望浏览器厂商能够将该技术内建在浏览器中,从而使Web应用开发人 ...

  5. V8 JavaScript引擎

    简介 V8 (v8.dev)是 Google 的开源高性能 JavaScript 和 WebAssembly 引擎,用 C++ 编写.它用于 Chrome 和 Node.js 等.它实现了 ECMAS ...

  6. javascript引擎V8精要(1)

    V8是谷歌的开源高性能JavaScript和WebSimulink引擎,用C++编写.它用于铬和铜节点.js,等等.它实现了ECMAScript和WebAssembly,并在使用x64.IA-32.A ...

  7. JavaScript 工作原理之二-如何在 V8 引擎中书写最优代码的 5 条小技巧(译)

    原文请查阅这里,略有删减. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第二章. 本章将会深入谷歌 V8 引擎的内部结构.我们也会为如何书写更好的 Java ...

  8. JavaScript引擎V8 5.1遵循了更多的ECMAScript规范并支持WASM

    Google宣布了其5.1版本的V8 JavaScript引擎,这个版本提升了对ECMAScript 2017草案规范的支持,并为WASM提供了初步的支持,WASM是一个低层级的.轻便式的字节码,它致 ...

  9. mozilla js 引擎_Mozilla的内容拦截器,新JavaScript引擎以及更多开源新闻

    mozilla js 引擎 在本周的开放源代码新闻摘要中,Mozilla宣布了新的内容阻止程序并结束了Firefox OS,Edge浏览器JavaScript引擎源发布等. 开源新闻让您阅读愉快. 2 ...

最新文章

  1. [JAVA] java仿windows 字体设置选项卡
  2. 迭代法移动盘子java,算法学习--日记(牛顿迭代法)
  3. P2B: Point-to-Box Network 点云目标跟踪(CVPR 2020)
  4. Linux安装git和maven的详细过程
  5. 日期居然用字符串保存?我笑了
  6. 支付宝升级商家积分等服务 商家积分权益增至60余种
  7. 手机配置网络代理服务器_两张图简说代理服务器和反向代理服务器
  8. FFmpeg安装(windows环境)
  9. JavaScript cookie js cookie设置
  10. 【TWVRP】基于matalb蚁群算法求解带时间窗的车辆路径规划问题【含Matlab源码 1406期】
  11. 冰点密码破解 — 强悍的调试器 SOFTICE
  12. 阿里云矢量图html页面引入,iconfont 阿里巴巴矢量图标库使用说明
  13. TreadLocal理解
  14. 技术牛人---章文嵩博士---阿里副总裁章文嵩:淘宝基础设施构建实践
  15. 拉结尔6月21日服务器维护,《拉结尔》3月5日更新公告-S6赛季降临
  16. 使用 keepalived 设置虚拟 IP 环境
  17. kendoUI模板概述(template)
  18. 蓝奏云PHP解析接口,蓝奏云下载地址解析API[直链]
  19. 网站管理员请注意jsDelivr因备案被取消CDN访问可能延迟或错误
  20. 全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)

热门文章

  1. linux ubuntn j经验
  2. python docx 合并文档 图片_使用python抓取大量简历文档内数据(word:docx;pdf;图片等)输出表格文件...
  3. 获取当前html的名字,c#获取当前页面名字
  4. html刘海屏高度,iphone刘海屏网页适配方法
  5. 2017蓝桥杯c语言C组承压计算,2017蓝桥杯 省赛C题(承压计算)
  6. shiro-cas------搭建基础cas服务器
  7. 如何在cmd命令提示符里打开Python
  8. python 调用 .netcore api_浅谈Python调用XBee的API来进行通讯
  9. 量化投资相关文章统计
  10. 50行python代码自动生成文章_如何通过50行Python代码获取公众号全部文章