多线程Javascript解释器的大致架构

    由于一个完整的解释器类似Google V8的解释器需要的工作量非常的大如需要实现如下的模块:

    词法分析,语法分析器,AST转Byte模块,解释执行模块和JIT模块,当然也包括了垃圾回收模块和全局控制器模块, 而JIT模块需要对不同平台进行细分具体有IA32, ARM 两个平台的实现.

    所以这个解释器在实现的模块上虽然也和其他解释器相同,但是不包括垃圾回收模块和JIT模块. 但是包括了一个多线程模块,用来扩展Javascript的多线程能力,功能类似与Java的线程模型,具有synchronized和Thread类.

    该解释器的基本架构如下图:

    1. Lex+Parse模块是通过输入String或者一个Stream来获得一个组织完成的AST中间表示, 如果中间出现错误,则可以进行提示.

    2. EVAL模块是根据ECMAScript-262 3th Edition中10-15章的算法描述组织的解释执行模块.

3. VM模块是该软件的总控模块,每一个VM持有一个Global全局对象池,而通过共享Global对象池,实现同进程中不同线程的资源共享。

      3.1 其中Engine代表了具体某个执行的线程表示, 而Context代表了上下文,同一个Engine下的Context需要竞争Engine来获得调用EVAL的功能.

    4. Util模块中包括了Node等常用的数据结构, 来支持整个软件.

如下是该解释器和系统之间通信模式:

组件解析:

   1. File.js :具体的某个脚本

   2. 词法分析: Javascript引擎的词法分析部分, 把File.js 中的字符流进行归类到某个Token, 如function关键字使用tFUNCTION 这个Token表示该意思, 并且把词法分析独立出来有利于对部分输入源的解耦, 如String输入流,File输入流等不同的输入方式。

    3. 语法分析: 将词法分析得到的Token根据具体的ECMAScript语法构建AST(抽象语法树)

4. 虚拟机: 使用AST, 结合Javascript语言的具体机制来完成对AST的具体解释运行, 在运行过程中, 会使用到各个对象来完成I/O操作, 如File对象, Socket对象等, 并且通过这些对象完成了对脚本语言和操作系统的联系,使得Javascript能够在Server上运行任务。

5. Host对象: 操作系统相关的对象, 如File 它代表了具体某个文件的基本信息(大小, 可读属性, 是否已经被打开,用户权限等), Socket它代表了操作系统的socket操作(建立TCP连接, 发送字节流, 接受字节流,关闭一个连接等)

6. 内部对象: 提供基本型的对象类型, 如语言中经常使用的String类型以及它的相关操作(substr, charAt)等等.

上述的基本架构就是本次项目的基本介绍, 具体的设计会结合现在已经存在的标准建立。

而选用Linux平台作为运行环境(Linux 有免费的编译环境 ~~)

   https://github.com/darkgem/js-engine

Javascript多线程引擎(二)的更多相关文章

  1. Javascript多线程引擎(十)---Web服务器

     Javascript多线程引擎(十)---Web服务器 经过一天的努力, 引擎可以支持web服务的功能了并且支持UTF-8的编码, 具有对HTTP参数的解析,状态码的配置, 响应报文的输出等. 提供 ...

  2. Javascript多线程引擎(九)

    Javascript多线程引擎(九)--垃圾回收 垃圾回收这个话题对Programer来说是非常老旧的话题, 从手动的malloc/free 到半自动的 引用计数 再到全自动的 mark-sweep ...

  3. Javascript多线程引擎(八)

    Javascript多线程引擎(八)    Javascript 多线程项目, 做到现在已经快3个月了(加上前期准备编译原理和必要的文档), 该项目(js-engine)已经快进入尾声了, 现在该引擎 ...

  4. Javascript多线程引擎(七)

    Javascript多线程引擎(七)--synchronized关键字 经过两天的努力, 今天synchronzied关键字终于支持了, 如下是测试代码 thread() 是一个开启新线程的API, ...

  5. Javascript多线程引擎(六)

    Javascript多线程引擎(六) 经过三个月的时间, Javascript 引擎已经完成beta版本(还不支持多线程特性, 预计下个星期就可以支持了, 现阶段还在进行测试基本JS单元功能), 并且 ...

  6. Javascript多线程引擎(五)

    Javascript多线程引擎(五)之异常处理 C语言没有提供一个像Java一样的异常处理机制, 这就带来了一个问题, 对于一个子函数中发生异常后, 需要在父函数调用子函数的位置进行Check, 如果 ...

  7. Javascript多线程引擎(四)

    Javascript多线程引擎(四)--之C语言单继承 因为使用C语言做为开发语言, 而C语言在类的支持方面几乎为零, 而Javascript语言的Object类型是一个非常明显的类支持对象,所以这里 ...

  8. Javascript多线程引擎(三)

    Javascript多线程引擎(三) 完成对ECMAScript-262 3rd规范的阅读后, 列出了如下的限制条件 1. 去除正则表达式( 语法识别先不编写) 2. 去除对Function Decl ...

  9. Javascript多线程引擎(一)

    Javascript多线程引擎(一) Javascript 天生是单线程的语言, 不支持synchronized等线程操作, 但是这便不妨碍Javascript作为web语言中最具有魅力语言之一. 虽 ...

随机推荐

  1. u_boot启动过程中的具体分析(1)

    闭上眼睛,细致的回顾一下从NAND FLASH 启动的整个流程,首先,当我们打开板子的时候,先执行的就是嵌入在芯片上的iROM,它的作用就是为了把.NAND Flash 中的bootloader的一部 ...

  2. getBoundingClientRect的用法

    getBoundingClientRect用于获取某个元素相对于视窗的位置集合.集合中有top, right, bottom, left等属性. 1.语法:这个方法没有参数. rectObject = ...

  3. ABP应用层——审计日志

    ABP应用层——审计日志 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之19.ABP应用层——审计日志 ABP是“ASP.NET Boilerplate Pro ...

  4. Javascript学习5 - 函数

    原文:Javascript学习5 - 函数 在Javascript中,函数和对象是交织在一起的.有些函数的特性与对象相关联.这一点的内容在第六部分会讨论到. 这一部分主要讨论函数与其它比较熟悉的语言( ...

  5. JAVA多线程编程(详细例子)

    http://wenku.baidu.com/view/e4afbf36a32d7375a417808b.html

  6. ASP.NET——两个下拉框来实现动态联动

    介绍: 在网页中.我们常常会遇到下图中的情况.首先在下拉框中选择所在的省.选择之后,第二个下拉框会自己主动载入出该省中的市.这样设计极大的方便了用户的查找.那这是怎样实现的呢? 1.建立数据库 &qu ...

  7. POJ 3013 Big Christmas Tree(最短Dijkstra+优先级队列优化,SPFA)

    POJ 3013 Big Christmas Tree(最短路Dijkstra+优先队列优化,SPFA) ACM 题目地址:POJ 3013 题意:  圣诞树是由n个节点和e个边构成的,点编号1-n. ...

  8. Android 阅读Manifest在文件Application 在与其他节点meta-data定义自己的数据

    介绍 Android提供meta-date使用键值在实现自己的自定义配置的形式. 通常用作信道标识.它可以用在<application>,<activity>,<acti ...

  9. ASP.NET——RequiredFieldValidator控制和ValidationSummary控制

    我们的登录页面,忘记承担损失password然后username,该页面将永远是一个小提醒. 那么我们在网也制作的时候怎样实现这一功能呢?这就用到了RequiredFieldValidator控件和V ...

  10. yii 使用 mongodb 小工具 YiiMongoDbSuite

    YiiMongoDbSuite下载链接: http://www.yiiframework.com/extension/yiimongodbsuite/ 如果你的yii和mongodb它已经建立了一个良 ...