Javascript多线程引擎(三)
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 ...
随机推荐
- MySQL分页实现
mysql> select pname from product; +--------+ | pname | +--------+ | 产品1 | | 产品2 | | 产品三 | +--- ...
- 3.Chrome数据同步服务分析--server一片
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVlcjE2OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- [ACM] POJ 2418 Hardwood Species (Trie树或map)
Hardwood Species Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 17986 Accepted: 713 ...
- MFC属性页对话框
属性页对话框 分类 分页和引导 类 CPropertyPage-父亲CDialog类别,所谓的属性页或网页对话框. CPropertySheet-父类是CWnd,称为属性表单. 一个完整的属性页对话框 ...
- VS2015, .NET 4.6, C# 6.0, F# 4.0等重量级产品正式上线
VS2015, .NET 4.6, C# 6.0, F# 4.0等重量级产品正式上线 Visual Studio Visual Studio 2015 下载 VS2015新功能列表 ‘ Visual ...
- Lampda或Linq中的SqlFunctions.StringConvert()
要使用 Lampda或Linq中的SqlFunctions.StringConvert(), 需要引用命名空间using System.Data.Objects.SqlClient, 该函数可进行模拟 ...
- 软体project(四)——一生
软件生存周期是软件project中的一个重要概念,把整个生存周期划分为若干个阶段,是实现软件生产project化的重要步骤. 软件的生存周期一般划分为软件计划.软件开发和软件执行三个时期,例如以下图: ...
- 收藏的一些javascript片段
原文:收藏的一些javascript片段 学习js也很有一段时间,收集了一些js的片段.特地整理排版了一下,以一个js初学者的视界来分析注释了这些代码段,暂且不去讨论它的性能和优化问题,相信会对一些初 ...
- 找呀志_使用SQLiteDatabase增删改提供的搜索方法和事务
知识具体解释:http://blog.csdn.net/zhaoyazhi2129/article/details/9026093 MainActivity.java,User.java,BaseDa ...
- linux旁边flv注射MetaData工具
1,yamdi 官方网站:http://yamdi.sourceforge.net/ 下载链接:http://sourceforge.net/projects/ya ...