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语言中最具有魅力语言之一. 虽 ...
随机推荐
- Cocos2d-X字体
Cocos2d-X顺便文本显示在以下三个: CCLabelTTF: 使用系统字体.每一个字符串会生成一个纹理.显示效率比較低下,适合不变化的文字 CCLabelAtlas: 使用NodeAtlas优化 ...
- UVALive 5099 Nubulsa Expo 全球最小割 非网络流量 n^3
主题链接:点击打开链接 意甲冠军: 给定n个点m条无向边 源点S 以下m行给出无向边以及边的容量. 问: 找一个汇点,使得图的最大流最小. 输出最小的流量. 思路: 最大流=最小割. 所以题意就是找全 ...
- springMVC注解优化
本文是本人在学习网络视频的过程中的一些总结. 本文是对关于一些springMVC在使用注解的优化. 使用以下的标签,会自己主动引入Annotation的配置 <mvc:annotation-dr ...
- Serverlet具体解释
Serverlet简单介绍: Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的server端程序.其主要功能在于交互式地浏览和改动数据,生成 ...
- js 正则学习小记之NFA引擎
原文:js 正则学习小记之NFA引擎 之前一直认为自己正则还不错,在看 次碳酸钴,Barret Lee 等大神都把正则玩的出神入化后发现我只是个战五渣. 求抱大腿,求大神调教. 之前大致有个印象,正 ...
- 跳水Hibernate(一)实例解说
此语一与高二接触SSH三框架,但是,当能力有限.我们没有继续下行.今天,我们正在采取的优势Java金痴迷,随即再次上调,另一项研究SSH.让我们先从SSH中间Hibernate说起. 或许你会问.为什 ...
- shell变量赋值进阶
首先,要理解shell中变量的3种赋值情况: unset 例子. unset a 空字符串, null 例子. a='' 非空,即不是unset,并且不是空字符串 例子: a=1 or a=b等 然后 ...
- Studio-Class Diagram
UML Design Via Visual Studio-Class Diagram 用过几个建模设计工具,小的有staruml,大的有rational rose,EA.最后发现还是Visual St ...
- C# foreach 有用方法具体解释
网上查资料,说foreach 不能改动迭代变量,仅仅能訪问迭代变量.自己理解也不是非常深,通过几个代码进行验证,发现foreach的使用方法还有点特别 验证方法: 1. 迭代变量 为int int[] ...
- asp.net webForm 前后台类关系
要研究这个,首先要新建网站, protected void Page_Load(object sender, EventArgs e) { string str = System.Reflection ...