从V8引擎编程理解javascript执行环境

摘要:
以上这幅图的运行原理过程图:讲解几个概念:执行环境:Persistentcontext=Context::New();Context::Scopecontext_scope;context.Dispose();context就是这个函数的执行环境,在javascript中执行环境是一个非常重要的概念,每个函数被在调用时都会创建自己的执行环境,由它来定义代码在哪个环境被执行。文本只是对v8的相关知识进行初步的讲解,v8还是比较复杂的,很多内容还在学习当中,先简单分享些自己的学习心得吧。

一、V8简介

google code上对它的解释如下:

V8 is Google's open source JavaScript engine.

V8 is written in C++ and is used in Google Chrome, the open source browser from Google.

V8 implements ECMAScript as specified inECMA-262, 5th edition, and runs on Windows (XP or newer), Mac OS X (10.5 or newer), and Linux systems that use IA-32, x64, or ARM processors.

V8 can run standalone, or can beembeddedinto any C++ application.

翻译过来重点就是:V8引擎是一个google开发的开源javascript引擎,它是由C++编写而成,被用在google的开源游览器chrome上。

二、Hello World

学习任何一门语言,“hello world”往往是我们的第一步,这里也不例外,代码如下:

#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;
}

具体的编译运行方法可以参见,如下文章:http://code.google.com/intl/zh-CN/apis/v8/get_started.html

作为一名nodejs 的开发者,我要补充一个已经安装好node之后如何正常编译运行该代码,众所周知,nodejs是以来v8引擎的,也就是说当你成功安装好nodejs之后就已经成功安装好v8了,具体方法:

//v8 在安装nodejs时已经安装完毕
//比如在自己目录(/home/zhujiadun.pt/)中下载了node-v0.6.10,默认安装
//具体:
//1. v8.h和v8stdint.h 两个头文件在~/node-v0.6.10/deps/v8/include/和/usr/local/include/node/都有一份
//2. libv8.a可以在~/node-v0.6.10/out/Release/libv8.a找到
//运行方法
//1. 将v8.h和v8stdint.h 拷贝到 /usr/include
//2. 将libv8.a拷贝到这个文件目录
//3. g++ hello_world.cpp -o hello_world libv8.a -lpthread
//4. ./hello_world

三、执行环境讲解

js作用域的基础知识参见:《javascript高级程序设计》读书笔记——作用域
强调了这么多,终于可以进入正题,通过v8的编程来体验一把javascript执行环境相关知识。

以上这幅图的运行原理过程图(图片直接来源google的v8介绍):

从V8引擎编程理解javascript执行环境第1张

讲解几个概念:

执行环境:

 Persistent<Context> context = Context::New();
 Context::Scope context_scope(context);
 context.Dispose();

context就是这个函数的执行环境,在javascript中执行环境是一个非常重要的概念,每个函数被在调用时都会创建自己的执行环境,由它来定义代码在哪个环境被执行。当函数执行完毕时被销毁。

handle:

v8引擎如jvm一样,会自动对不用的内存进行垃圾回收,handle就是告诉v8的垃圾回收器这个函数在堆中位置。

文本只是对v8的相关知识进行初步的讲解,v8还是比较复杂的,很多内容还在学习当中,先简单分享些自己的学习心得吧。

参考资料:

http://code.google.com/intl/zh-CN/apis/v8/intro.html

http://izs.me/v8-docs/main.html

免责声明:文章转载自《从V8引擎编程理解javascript执行环境》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Power BIapache下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux 下 expect 脚本语言中交互处理常用命令

Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行。这里的 expect 其实和 Linux 下的 bash、windows 下的 cmd 是一类东西。 注意:这一行需要在脚本的第一行,从而告知操作系统采用 expect 作为 shell 执行脚本...

网站开发常用技巧收集(防复制,防另存等等)

1. 将彻底屏蔽鼠标右键 oncontextmenu="window.event.returnValue=false" 用于Table <table border oncontextmenu=return(false)><td>no</table> 2. 取消选取、防止复制 <body onselectstar...

js-对象使用

1、日期对象,Date 定义一个时间对象 : var Udate=new Date(); 注意:使用关键字new,Date()的首字母必须大写。  使 Udate 成为日期对象,并且已有初始值:当前时间(当前电脑系统时间)。 2、对象Date常用方法 Date对象中处理时间和日期的常用方法: 3、返回星期方法 getDay() 返回星期,返回的是0-6...

C#操作JSON学习

JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript语法标准的一个子集。 JSON采用完全独立于语言的文本格式,可以很容易在各种网络、平台和程序之间传输。JSON的语法很简单,易于人阅读和编写,同时也易于机器解析和生成。 JSON与XML的比较◆可读性JSON和XML的可读性相比较...

基于Idea从零搭建一个最简单的vue项目

一、需要了解的基本知识 node.js Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。 No...

nodejs源码—初始化

概述 相信很多的人,每天在终端不止一遍的执行着node这条命令,对于很多人来说,它就像一个黑盒,并不知道背后到底发生了什么,本文将会为大家揭开这个神秘的面纱,由于本人水平有限,所以只是讲一个大概其,主要关注的过程就是node模块的初始化,event loop和v8的部分基本没有深入,这些部分可以关注一下我以后的文章。(提示本文非常的长,希望大家不要看烦~)...