ECMA-262 Edition 4 Reference Implementation試用
Mon, 11 Jun 2007 16:20:53 +0800ECMA-262 Edition 4(Javascript 2.0)規格似乎正在緊鑼密鼓地開發中。今天偶爾翻到一個新聞,就是ECMAScript組織剛發佈了一個用standard ml開發的Reference Implementation,可以讓我們試用es4的功能。馬上就去下載了:
ECMAScript Group的網站:http://www.ecmascript-lang.org(沒有打直接下載的連結,因為還有一些操作跟說明:))
接下來就來試試看。
仔細看了一下說明,ES4目前的RI版本似乎得在Cygwin下面執行,所以就先安裝Cygwin。(下載:http://www.cygwin.com/,網頁中有最新版本安裝程式(setup.exe)的連結)
安裝cygwin不難,但是因為要從網路上抓安裝的package,所以最好選擇本地的mirror site,我看到有ftp.ntu.edu.tw,就用這個選項了。其他大致上只要用預設值就可以。但是ES4需要sml/nj來執行,所以必須另外手動安裝sml/nj。預防萬一,所以在安裝cygwin的時候,選擇packages->Devel底下把可能會用到的都選了,應該至少要有make,但是我還選了autoconf、automake、binutils、bison、byacc、flex、gcc、gccmingw、libtool等等,另外為了可以在文字模式下編輯,還安裝了Editors->vim。
安裝sml/nj是比較麻煩的事情,如果常在linux手動安裝東西當然就不算難啦....。首先當然要下載sml/nj,EMCAScript的網站有一個連結:http://www.smlnj.org/dist/working/110.64/index.html,大致上按照他的說明就可以順利安裝。接下來就按照sml/nj網站上的說明來弄了,我的步驟如下:
- 打開cygwin,出現console
- 我想把東西安裝到/usr/share/smlnj目錄下,所以先 "cd /usr/share" 然後 "mkdir smlnj" 接著 "cd smlnj"
- 一些必要的檔案,包括config.tgz、runtime.tgz我放在c:/Downloads目錄下
- 在cygwin的/usr/share/smlnj目錄中,用 "tar zxf /cygdrive/c/Downloads/boot.x86-unix.tgz" 、 "tar zxf /cygdrive/c/Downloads/config.tgz" 、 "tar zxf /cygdrive/c/Downloads/runtime.tgz base" 等把必要的package解到目錄中
- 用 "export SMLNJ_CYGWIN_RUNTIME=1" 設定好環境變數,讓安裝程式知道用的是cygwin
- 如果要改安裝的項目,用 "vi config/targets" ,但是我沒有改.....所以需要另外下載trace-debug-profile.tgz、smlnj-lib.tgz、MLRISC.tgz、ml-yacc.tgz、ml-lpt.tgz、ml-lex、cml.tgz等幾個檔案,同樣用 "tar zxf filename" 的方法解開到/usr/share/smlnj目錄中
- 接著用 "config/install.sh" 來安裝
- 安裝完畢後,要建立連結,方便使用: "cd /usr/bin" 、 "ln -s /usr/share/smlnj/bin/sml"
- 然後解開下載的ECMA-262 Edition 4 RI,例如要解開到/home/fillano目錄中,則 "tar zxf /cygdrive/c/Downloads/es4-pre-release.M0.cygwin-x86.tar.gz /home/fillano"
- 進到es4的目錄: "cd /home/fillano/es4" ,然後執行: "./es4" 就可以了
安裝完畢!!接著來試用一下。這裡是用直譯的方式,我又不太熟悉操作......所以先把一些敘述放到同一行來測試一下:
測試的code: interface Greetings { function hello(); function goodmorning(); } class Greeter implements Greetings { public function hello() { print("hello, world") }; public function goodmorning() { print("goodmorning, world") }; } var greeter : Greetings = new Greeter() greeter.hello() greeter.goodmorning() 稍微修改一下,讓他在直譯器裡面可以執行: interface Greetings { function hello(); function goodmorning();} class Greeter implements Greetings { public function hello() { print("hello, world") }; public function goodmorning() { print("goodmorning, world") };} var greeter : Greetings = new Greeter() greeter.hello() greeter.goodmorning()
(這個ES4 RI直譯器有一些內建命令可以用,我還不太清楚他的作用,不過用 ":help" 可以看一下哪一些命令可以使用)