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。

 

 

 

發佈了218 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章