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

2014-03-15 02:41:34 +08:00
 guushen
本人暂时对静态语言以及编译机制不太了解,如今比较流行的JS引擎V8采用的语言为C++ & JS,其中大部分C++代码实现了引擎的底层核心,一些不涉及硬件的外围API和wrapper之类的用JS来写。其实JS引擎就相当于一门语言的“编译器”,既然能用C语言本身来写C的编译器,那么我的问题就是「从理论上说能否用JS语言本身来实现JS引擎呢?」谢谢!

PS:本人觉得不能。
4197 次点击
所在节点    问与答
12 条回复
dreampuf
2014-03-15 02:52:50 +08:00
jybox
2014-03-15 03:43:51 +08:00
理论上肯定没问题啊,任何一个图灵完备的语言都可以实现自举。
kurtis
2014-03-15 08:39:01 +08:00
eval
jsonline
2014-03-15 08:43:00 +08:00
当然可以啊
Mutoo
2014-03-15 09:28:25 +08:00
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
2014-03-15 09:32:47 +08:00
可以啊。用JS实现一个JS的编译器,然后自举
mantianyu
2014-03-15 09:48:39 +08:00
@kurtis eval 应该是把里面的参数直接送给解释器取得执行结果吧,感觉不一定是js自己解释里面的内容
zoowii
2014-03-15 11:39:45 +08:00
@dreampuf 我也创建过一个这个js.js项目,不过因为没时间去做这个玩具后来删掉了。竟然真有人做了
Numbcoder
2014-03-15 16:45:26 +08:00
JS 是图灵完备的,当然可以!
guushen
2014-03-15 19:07:47 +08:00
@Mutoo 感谢回复,我觉得JS本身不能直接操作硬件,如果用JS语言本身来写JS解析器的话,最基础的比如,如何分配变量地址呢?我不是很懂,谢谢!
guushen
2014-03-15 19:08:49 +08:00
@dreampuf 感谢,我研究下!
yangff
2014-03-15 20:01:13 +08:00
vm.js...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/104384

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX