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

原文地址:https://www.cnblogs.com/tickobject/p/3595192.html