当前位置: 代码迷 >> Web前端 >> narcissus 试工
  详细解决方案

narcissus 试工

热度:865   发布时间:2012-10-15 09:45:25.0
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。

?

?

?