V8编程入门
本文档介绍了V8引擎的一些关键概念,并提供了例子hello world指引你入门。
Hello World
让我们看一个Hello World的示例,它将一个字符串参数作为JavaScript语句,执行JavaScript代码,并将结果打印到控制台。
- int main(int argc, char* argv[]) {
- // Create a string containing the JavaScript source code.
- String source = String::New("'Hello' + ', World'");
- // Compile the source code.
- Script script = Script::Compile(source);
- // Run the script to get the result.
- Value result = script->Run();
- // Convert the result to an ASCII string and print it.
- String::AsciiValue ascii(result);
- printf("%s\n", *ascii);
- return 0;
- }
要真正使用V8引擎运行此示例,您还需要添加句柄(handle),句柄作用域(handle scope),以及上下文(context):
- 句柄(handle)是一个指向对象的指针。由于V8垃圾回收器的工作原理,所有的V8对象都是使用句柄访问的。
- 作用域(scope)可以被当做一个容器,可以容纳任何数量的句柄(handle)。当您完成对句柄的操作,你可以简单地删除它们的范围(scope)而不用删除每一个单独的句柄。
- 上下文(context)是一个执行环境,允许JavaScript代码独立的运行在一个V8引擎实例中。要执行任何JavaScript代码,您必须显式的指定其运行的上下文。
如下的例子和上面的相同,但是它包含句柄(handle),作用域(scope),上下文(context),它也包含命名空间和V8头文件:
- #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;
- }
运行示例
按照下列步骤来运行示例程序:
- 下载V8引擎的源代码并依据下载构建指南编译V8 。
- 复制上一节中的代码(第二部分),粘贴到您最喜爱的文本编辑器,其命名为
hello_world.cpp
并保存在构建V8引擎时创建的目录中。 - 编译hello_world.cpp,并链接编译V8时生成的库文件
libv8.a
。例如,在Linux上使用GNU编译器:g++ -Iinclude hello_world.cpp -o hello_world libv8.a -lpthread
- 在终端中运行
hello_world
可执行文件。
例如,在Linux上,还是在V8引擎的目录中,在命令行键入以下内容:./hello_world
- 你将会看到
Hello, World!
。
V8编程入门的更多相关文章
- PHP面向对象(OOP)编程入门教程
面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...
- Windows编程入门程序详解
引用:http://blog.csdn.net/jarvischu/article/details/8115390 1. 程序 /******************************* ...
- Google V8编程详解(四)Context
http://blog.csdn.net/feiyinzilgd/article/details/8266780 上一章,比较略提了下V8的Context.本章将详细的讲解下Context的概念以及用 ...
- Google V8编程详解附录
Google V8编程详工具函数 头文件:utils.h #ifndef UTILS_H_ #define UTILS_H_ #include "v8.h" #include &l ...
- Google V8编程详解(三)Handle & HandleScope
上一章简单的演示了一个Helloworld Demo.里面涉及到了V8的一些基本类型和概念,本章将围绕这个Demo对V8的基本类型和相关概念进行讲解. 这里还是先把Demo贴出来便于后面分析: #in ...
- 【PHP面向对象(OOP)编程入门教程】1.什么是面向对象?
面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成 ...
- Linux 利器- Python 脚本编程入门(一)
导读 众所周知,系统管理员需要精通一门脚本语言,而且招聘机构列出的职位需求上也会这么写.大多数人会认为 Bash (或者其他的 shell 语言)用起来很方便,但一些强大的语言(比如 Python)会 ...
- 转载自~浮云比翼:Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)
Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥) 介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可 ...
- OpenAl编程入门:播放一段音频
OpenAl编程入门 关于OpenAl我就不多介绍了,这两篇说明对于初步了解已经足够了:http://baike.baidu.com/view/1355367.htmhttp://en.wikiped ...
随机推荐
- PhpStorm 10.0注册
ntelliJ IDEA开源社区 提供了如下通用激活方法:注册时选择License server,填http://idea.lanyus.com/,然后点击 OK,再点一次OK,就搞定了.注意http ...
- Python之路: 模版篇
模块 随着python越来越强大,相同的代码也在不段复杂.为了能够更好更方便的维护,人们越来越愿意把很多写出来的功能函数保存在不同的文件夹中,这样在用的时候调用,不用的时候可以忽略.这就是模块的由 ...
- css3选择器总结--强大如jquery
最近发现,阿里的笔试考了许多css3的知识,像query media.box-flex等等.主要是移动浏览器的开发,让html5和css3如虎添翼,再也不用担心兼容了.so总结一下css3的选择器: ...
- python函数的参数传递问题---传值还是传引用?
摘要:在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象.不可更改对象的传递属于传值,可更改对象属于传引用.想要在函数中传递 ...
- 贪心法基础题目 HDU
贪心算法的基本步骤: 1.从问题的某个初始解出发.2.采用循环语句,当可以向求解目标前进一步时,就根据局部最优策略,得到一个部分解,缩小问题的范围或规模.3.将所有部分解综合起来,得到问题的最终解. ...
- 打包程序时的证书问题(上传APP就出现Missing iOS Distribution signing indetity for)
现象: 解决办法: 1.删除本地钥匙串中的这个文件,注意“系统”中的同名文件也必须删除 2.进入http://www.apple.com/certificateauthority/ 下载新的(WWDR ...
- Exception和RuntimeException的区别
Exception:在程序中必须使用try...catch进行处理. RuntimeException:可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理.
- bzoj-4318 OSU! 【数学期望】
Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...
- HDU1429 bfs
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- 5)Javascript设计模式:extends模式
简单的方式 function Person() { this.name = 'person'; } Person.prototype.say = function() {}; function Chi ...