Javascript多线程引擎(三)
完成对ECMAScript-262 3rd规范的阅读后, 列出了如下的限制条件
1. 去除正则表达式( 语法识别先不编写)
2. 去除对Function Declaration的支持, 且把Function Expression 替代 FD
在运行到具体的代码的时候才进行变量声明如:
var a;
var a = 1;
function a(){};
当读取到如上的语句的时候, 直接根据上下文的环境进行PutValue操作
3. 去除lable, with 语句
4. 去除对Unicon的支持, 仅支持Ascii
5. 函数中, arguments 不再和 function(a,b,c){}
中的a , b ,c 相关联
6. Parser 模块支持:
1. 报错功能, 当出现错误的时候直接终止解析, 并且可以显示具体的错误
2. 支持文件位置记录
7. Lex 模块使用Flex, 注意yytext 会被回收, 所以需要复制具体的String
8. 对于基本类型String, 使用char* 引用, 当产生新的String类型的Value的时候, 通常会产生新的内存空间来存储该string
9. 内置类型[Object, Function, Boolean, Error, String]等构造器使用 ReadOnly, Don't ENUM, Don't Delete类型的属性
10. 内置类型通过FindValue来获得具体的构造器
11. 垃圾回收的时间定义在所有 Engine执行完一个Context或者STOP的时候, 进行垃圾回收
12. 去除Infinly变量
13. 当一个Context失效的时候需要及时的消去(Engine运行完该Context)
14. JsVm全局只有一个, 类似JVM
15. API总共有两种类型:
1. 通用API (可以在初始阶段和Runntime阶段使用的API,通常不带有Engine*参数, 尽量把API设计为该类型)
2. Runtime API( 通常带有Engine*参数)
16. 如果通用API在Runtime API中需要使用 ENV变量, 则通过从TLS获取, 且该ENV配置只在Engine的Dispatch阶段被配置
17. 整个软件的加锁处理的目标是 保证基本的完整性. 如 Object.a = 1 ; 操作能顺利完成而不会中途被打断.
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多线程引擎(一) Javascript 天生是单线程的语言, 不支持synchronized等线程操作, 但是这便不妨碍Javascript作为web语言中最具有魅力语言之一. 虽 ...
-
Javascript多线程引擎(二)
多线程Javascript解释器的大致架构 由于一个完整的解释器类似Google V8的解释器需要的工作量非常的大如需要实现如下的模块: 词法分析,语法分析器,AST转Byte模块,解释执行模块和JI ...
随机推荐
-
css+javascript 写的HTML5 微信端输入支付密码键盘
微信端没有纯数字键盘,用html5写了一个模仿ios输入支付密码键盘效果 keyboard.js var _keyboard = {}; $(document).ready(function(){ _ ...
-
网站SEO优化中内部链接的优化
重要性:内链有效的优化能够间接的提高某页面的权重达到搜索排名靠前的效果.同时有效的带领搜索引擎蜘蛛对整站进行抓取. 网站头部导航: 这个导航称为'网站主导航',当用户来到网站需要给他们看到的内容.也就 ...
-
poj2112 Optimal Milking --- 最大流量,二分法
nx一个挤奶器,ny奶牛,每个挤奶罐为最m奶牛使用. 现在给nx+ny在矩阵之间的距离.要求使所有奶牛挤奶到挤奶正在旅程,最小的个体奶牛步行距离的最大值. 始感觉这个类似二分图匹配,不同之处在于挤奶器 ...
-
java 之 简单工厂模式(大话设计模式)
以前只是看设计模式,每次看完都去理解一次,并没有手动去写代码,所以理解的还不是很深刻,最近查看框架源码,发现很多地方用到的都是设计模式,因为对设计模式理解的不够深刻,所以源码查看进度很慢!现在决定来温 ...
-
Vert.x简介
https://vertx.io/ https://vertx.io/download/ https://baike.baidu.com/item/Vert.x 近年来,移动网络.社交网络和电商的兴起 ...
-
npm介绍和使用
# npm 介绍 > 概念 : node 包管理工具 > 作用 : 通过 npm 来快速下载/安装项目中依赖的包 > 查看 版本号 : npm -v # npm 基本使用演示 ...
-
Android Studio自定义组合控件
在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件. 本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太小 ...
-
常见CEPH操作命令
1. rbd ls 查看ceph默认资源池rbd里面的镜像2. rbd info xxx.img 查看xxx.img的具体的具体信息3. rbd rm xxx.img 删除xxx.img4. rbd ...
-
Eclipse配置开发Go的插件——Goclipse
引言: 上篇 <Golang快速入门(不用急,但要快)> 我们大致过了一遍Go语言的基本语法,但在开始正式的项目创建前,有必要选择一个比较顺手的 IDE (编辑器),由于之前一直都是做Ja ...
-
js循环遍历弹框,先弹出第一个之后逐步弹出第二个。。
var data = [{ "login_advertTitle": "即使生活琐碎,也要活得优雅", "login_advertCont" ...