Javascript多线程引擎(二)
多线程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多线程引擎(二)的更多相关文章
- Javascript多线程引擎(十)---Web服务器
Javascript多线程引擎(十)---Web服务器 经过一天的努力, 引擎可以支持web服务的功能了并且支持UTF-8的编码, 具有对HTTP参数的解析,状态码的配置, 响应报文的输出等. 提供 ...
- Javascript多线程引擎(九)
Javascript多线程引擎(九)--垃圾回收 垃圾回收这个话题对Programer来说是非常老旧的话题, 从手动的malloc/free 到半自动的 引用计数 再到全自动的 mark-sweep ...
- Javascript多线程引擎(八)
Javascript多线程引擎(八) Javascript 多线程项目, 做到现在已经快3个月了(加上前期准备编译原理和必要的文档), 该项目(js-engine)已经快进入尾声了, 现在该引擎 ...
- Javascript多线程引擎(七)
Javascript多线程引擎(七)--synchronized关键字 经过两天的努力, 今天synchronzied关键字终于支持了, 如下是测试代码 thread() 是一个开启新线程的API, ...
- Javascript多线程引擎(六)
Javascript多线程引擎(六) 经过三个月的时间, Javascript 引擎已经完成beta版本(还不支持多线程特性, 预计下个星期就可以支持了, 现阶段还在进行测试基本JS单元功能), 并且 ...
- Javascript多线程引擎(五)
Javascript多线程引擎(五)之异常处理 C语言没有提供一个像Java一样的异常处理机制, 这就带来了一个问题, 对于一个子函数中发生异常后, 需要在父函数调用子函数的位置进行Check, 如果 ...
- Javascript多线程引擎(四)
Javascript多线程引擎(四)--之C语言单继承 因为使用C语言做为开发语言, 而C语言在类的支持方面几乎为零, 而Javascript语言的Object类型是一个非常明显的类支持对象,所以这里 ...
- Javascript多线程引擎(三)
Javascript多线程引擎(三) 完成对ECMAScript-262 3rd规范的阅读后, 列出了如下的限制条件 1. 去除正则表达式( 语法识别先不编写) 2. 去除对Function Decl ...
- Javascript多线程引擎(一)
Javascript多线程引擎(一) Javascript 天生是单线程的语言, 不支持synchronized等线程操作, 但是这便不妨碍Javascript作为web语言中最具有魅力语言之一. 虽 ...
随机推荐
- 选中文件夹设定为IIS站点主目录的批处理bat
原文:选中文件夹设定为IIS站点主目录的批处理bat 我使用的OS是winxp,安装的IIS版本为5.1,不支持多站点,下载的一些源代码想测试浏览一下就得设定虚拟目录,而且有些还必须设为站点根目录,每 ...
- Android Bitmap OutOfMemory 解决的方法
在Android应用里,最耗费内存的就是图片资源.并且在Android系统中.读取位图Bitmap时,分给虚拟机中的图片的堆栈大小仅仅有8M.假设超出了.就会出现OutOfMemory异常 E/And ...
- MVC 快速开发框架
ASP.NET MVC 快速开发框架之 SqlSugar+SyntacticSugar+JQWidgetsSugar+jqwidgets jqwidgets.js: 是一个功能完整的框架,它具有专业的 ...
- 对于VS相关的插件
原文:对于VS相关的插件 本人使用这款IDE时间不长,但是很佩服其强大的功能. 编写代码时候的插件辅助,确实让人很舒服. 网上找了好多,有几个是很有用的,但是忘记了他们的网址,再次,总结下,也是给自己 ...
- 向西项目管理工具Maven一片
前言 相信仅仅要做过 Java 开发的童鞋们,对 Ant 想必都不陌生,我们往往使用 Ant 来构建项目,尤其是涉及到特别繁杂的工作量.一个 build.xml 可以完毕编译.測试.打包.部署等非常多 ...
- JS 添加到事件的多个对象
费周折码如下面: 方法一: <em>v</em>ar pArys=document.getElementsByClassName("ps"); for(va ...
- Java
递归算法
其基本思路是递归算法设计:对于一个复杂的问题,原问题分为几个子问题相似相对简单.继续下去,直到孩子可以简单地解决问题,这是导出复发,因此,有复发的原始问题已经解决. 关键是要抓住: (1)递归出口 ( ...
- java基金会 之 HashMap统计csvWord文档
一:知识的补充( 这个HashMap Map 和 c++的Map还是有非常大的区别,惊人的差异大的人,当然,两者的作用是相同的,但函数名出一个非常大的.即使iterator的差是非常大的 ) (1)H ...
- Linux下df与du两个命令的差别?
Linux下df与du两个命令的差别? 一.df显示文件系统的使用情况,与du比較,就是更全盘化. 最经常使用的就是 df -T,显示文件系统的使用情况并显示文件系统的类型. 举比例如以下: [roo ...
- Google Guice结合模式
于Guice于,喷油器装配工作是一个对象图,当请求类型实例,喷油器根据推断对象如何映射到创建的实例.解决依赖.要确定如何解决的依赖就需要配置喷油器结合的方式. 要创建绑定(Binding)对象,能够继 ...