narcissus 试用

narcissus 是一个由 javascript 自身实现的 javascript 解释器,最终效果和 spidermonkey 引擎保持一致,足以证明 javascript 本身就是一个完备的元循环 语言。

 

运行@shell

narcissus 可以跑在 spidermonkey shell 以及浏览器 spidermonkey 引擎环境下,经过修改也可运行于最新的 firefox 4.0,其他浏览器待测,首先说下如何在 mac 下的 spidermonkey shell 中运行:

 

 

安装 spidermonkey shell

 

1.安装 xcode

 

2.安装 MacPorts ,mac 下一个不错的软件依赖管理工具

 

3.安装 autoconf213 (build spidermonkey 必须要这个版本),运行 sudo port install autoconf213 安装

 

4.下载 spidermonkey 源码,推荐 1.85 ,不推荐 1.70

 

5.进入 spidermonkey 源码目录 js/src ,先运行 autoconf213 ,再运行 make

 

6.最后在 js/src 目录下生成 js 可执行文件,大功告成,可执行 ./js 进入javascript解释器交互模式。

 

在 shell 中运行 narcissus

 

1.git clone 一分 nacissus 到本地目录 /code/narcissus

 

2.硬链接上一大步生成 js 可执行文件到 /code/narcissus : ln spidermonkey/js/src/js /code/narcissus

 

3.最后执行 ./njs python 脚本即可进入 narcissus 解释器的交互模式。

 

 

运行@browser

 

查看 njs python 脚本,可发现其实内部是通过调用spidermonkey shell 的 js 载入 narcissus 代码文件来启动 narcissus,具体执行命令实际为:

 

'/Users/yiminghe/code/javascript/narcissus/js', '-f', '/Users/yiminghe/code/javascript/narcissus/lib/jsdefs.js', '-f', '/Users/yiminghe/code/javascript/narcissus/lib/jslex.js', '-f', '/Users/yiminghe/code/javascript/narcissus/lib/jsparse.js', '-f', '/Users/yiminghe/code/javascript/narcissus/lib/jsdecomp.js', '-f', '/Users/yiminghe/code/javascript/narcissus/lib/jsresolve.js', '-f', '/Users/yiminghe/code/javascript/narcissus/lib/jsexec.js', '-e', 'Narcissus.interpreter.repl();'
 

其中载入了一些 narcissus 的代码文件,最后执行表达式:

 

Narcissus.interpreter.repl();

 

 进入了 narcissu 引擎的 repl 模式,该函数中定义在 jsexec.js,进行建立执行环境,解析语法树并执行的过程。

 

同时 jsexec.js 还提供了一个

 

Narcissus.interpreter.evaluate

 

函数,效果同 eval 一样,可直接执行 javascript 字符串,那么就可以不调用依赖 shell io 的 repl,而直接调用 evaluate,载入必要的引擎代码文件后,narcissus 就可以直接运行在浏览器上了:

 

narcissus @ firefox 4

 

要注意的是:firefox4 采用的 JägerMonkey 似乎和 spidermonkey 并不完全一致,例如不支持 let 语法,如果要运行在 firefox 4 中的话,需要将所有的 let 替换为 var。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值