理论上,可以用纯 Javascript 来实现 Javascript 引擎么?(只限于目前基于 ECMAScript 5.1 版本 spec 的,CommonJS 不在考虑范围内,如 Node) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
guushen

理论上,可以用纯 Javascript 来实现 Javascript 引擎么?(只限于目前基于 ECMAScript 5.1 版本 spec 的,CommonJS 不在考虑范围内,如 Node)

  •  
  •   guushen 2014 年 3 月 15 日 4679 次点击
    这是一个创建于 4425 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本人暂时对静态语言以及编译机制不太了解,如今比较流行的JS引擎V8采用的语言为C++ & JS,其中大部分C++代码实现了引擎的底层核心,一些不涉及硬件的外围API和wrapper之类的用JS来写。其实JS引擎就相当于一门语言的“编译器”,既然能用C语言本身来写C的编译器,那么我的问题就是「从理论上说能否用JS语言本身来实现JS引擎呢?」谢谢!

    PS:本人觉得不能。
    第 1 条附言    2014 年 3 月 15 日
    有个疑惑就是用JS来写JS解析器的话,怎么操作硬件呢,如变量地址分配、GC等。

    看了各位回复我考虑了下,同一段JS代码在浏览器中运行,用C++解析器来解析,最终在内存中得到2进制的机器码,那么换做用JS本身来写解析器的话,只要利用它将要执行的JS代码转为相当的机器码就行了,是这样么?谢谢!
    12 条回复    1970-01-01 08:00:00 +08:00
    dreampuf
        1
    dreampuf  
       2014 年 3 月 15 日   1
    jybox
        2
    jybox  
       2014 年 3 月 15 日   2
    理论上肯定没问题啊,任何一个图灵完备的语言都可以实现自举。
    kurtis
        3
    kurtis  
       2014 年 3 月 15 日   1
    eval
    jsonline
        4
    jsonline  
       2014 年 3 月 15 日 via Android   1
    当然可以啊
    Mutoo
        5
    Mutoo  
       2014 年 3 月 15 日   1
    js是解析型语言,解析器的难度比编译器低太多了。js要解析自己完全是小菜一叠。

    实际上js可以做的事情多着,可以看看js延伸出来的
    paperscript (http://paperjs.org)
    processing.js(http://processingjs.org)
    甚至 gameboy emulator (http://imrannazar.com/GameBoy-Emulation-in-Javascript)
    还有更牛的 ECMAScripten(https://github.com/kripken/emscripten/wiki) 能把cpp直接变成js跑
    zoowii
        6
    zoowii  
       2014 年 3 月 15 日   1
    可以啊。用JS实现一个JS的编译器,然后自举
    mantianyu
        7
    mantianyu  
       2014 年 3 月 15 日 via iPad   1
    @kurtis eval 应该是把里面的参数直接送给解释器取得执行结果吧,感觉不一定是js自己解释里面的内容
    zoowii
        8
    zoowii  
       2014 年 3 月 15 日   1
    @dreampuf 我也创建过一个这个js.js项目,不过因为没时间去做这个玩具后来删掉了。竟然真有人做了
    Numbcoder
        9
    Numbcoder  
       2014 年 3 月 15 日   1
    JS 是图灵完备的,当然可以!
    guushen
        10
    guushen  
    OP
       2014 年 3 月 15 日
    @Mutoo 感谢回复,我觉得JS本身不能直接操作硬件,如果用JS语言本身来写JS解析器的话,最基础的比如,如何分配变量地址呢?我不是很懂,谢谢!
    guushen
        11
    guushen  
    OP
       2014 年 3 月 15 日
    @dreampuf 感谢,我研究下!
    yangff
        12
    yangff  
       2014 年 3 月 15 日
    vm.js...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     816 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 54ms UTC 21:29 PVG 05:29 LAX 14:29 JFK 17:29
    Do have faith in what you're doing.
    /div> ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86