2010年11月26日 星期五
2010年10月2日 星期六
Forth VM
看了一篇文章,討論 Forth VM 的設計:Updating the Forth Virtual Machine。在傳統的 Forth VM 中有兩個堆疊一個記憶體。這樣的設計不容易執行 C 編譯出來的程式。也不適合用做 DSP 的 VM。為此,文章中提出了對 Forth VM 的修正,多提供了以下四個 registers 用來存取記憶體:A、B、X、Y。
特別記錄下這文章,因為我考慮以 Forth 做為我某種應用的 VM。
- A、B:有自動加減記憶體指標的功能,適用於 DSP,也可以用做 scratch register。
- X、Y:能對記憶體定址,可以做為 local variable 或 user variable 的指標。
特別記錄下這文章,因為我考慮以 Forth 做為我某種應用的 VM。
2010年8月13日 星期五
jonesforth
又回到 Forth,繞了一圈,在某些應用領域這個古怪的語言仍遠勝其他的 scripting languages。
在找尋一個適合我未來使用的 Forth 時我發現了 jonesforth ,依照它的文件編譯成功,執行時 Linux 卻發出了 Killed 的異警。瞭解後原來某些版本的 Linux 不允許使用 text segment at zero。
以以下方式編譯後就不會有異警。
gcc -m32 -nostdlib -static -Wl,--build-id=none -o jonesforth jonesforth.S
在找尋一個適合我未來使用的 Forth 時我發現了 jonesforth ,依照它的文件編譯成功,執行時 Linux 卻發出了 Killed 的異警。瞭解後原來某些版本的 Linux 不允許使用 text segment at zero。
以以下方式編譯後就不會有異警。
gcc -m32 -nostdlib -static -Wl,--build-id=none -o jonesforth jonesforth.S
2010年7月23日 星期五
Ringojs
有一段時間未寫部落格。但不表示這段時間什麼事都沒發生。
這段時間發生了很多事。
首先,在個人工作方面,已經確定要將 javascript 用於自己的產品中。最主要的工具是 YUI 3 和 RingoJS。
此外,在 javascript 世界也有很多值得注意的變化。由於我較重視 Server side,CommonJS 的風起雲湧以至最後的雲淡風清讓我感到一點憂心。早先,有志於 Server Side Javascript 的人們成立了 CommonJS 社群,建立 module 的架構,以及可以讓程式相容的 libraries。但在 NodeJS 出現後,NodeJS 瞬間抓出大家的眼光。以致於 CommonJS 的努力讓人們漸漸淡忘。
在這段時間,原本我極感興趣的 Helma-NG 改名為 RingoJS,採用了 CommonJS 的規範。現在它可以說是最符合 CommonJS 規範的 Server Side Javascript 平台了。比 Helma-NG 還讓我喜歡,也成了我工作上的選擇。雖然有點兒默默無聞,但它的撰寫者十多年來在 Server Side Javascript 上的堅持讓人信賴。最近,更因一篇「RingoJS vs. NodeJS」,它開始被更多的人注意。
身為 RingoJS 的愛用者,我自然也要加入這場戰局。因此,我將這篇「RingoJS vs. NodeJS」中 RingoJS 的優點翻譯於後,和我的讀者分享,在這翻譯中加上了我自己的修正。
這段時間發生了很多事。
首先,在個人工作方面,已經確定要將 javascript 用於自己的產品中。最主要的工具是 YUI 3 和 RingoJS。
此外,在 javascript 世界也有很多值得注意的變化。由於我較重視 Server side,CommonJS 的風起雲湧以至最後的雲淡風清讓我感到一點憂心。早先,有志於 Server Side Javascript 的人們成立了 CommonJS 社群,建立 module 的架構,以及可以讓程式相容的 libraries。但在 NodeJS 出現後,NodeJS 瞬間抓出大家的眼光。以致於 CommonJS 的努力讓人們漸漸淡忘。
在這段時間,原本我極感興趣的 Helma-NG 改名為 RingoJS,採用了 CommonJS 的規範。現在它可以說是最符合 CommonJS 規範的 Server Side Javascript 平台了。比 Helma-NG 還讓我喜歡,也成了我工作上的選擇。雖然有點兒默默無聞,但它的撰寫者十多年來在 Server Side Javascript 上的堅持讓人信賴。最近,更因一篇「RingoJS vs. NodeJS」,它開始被更多的人注意。
身為 RingoJS 的愛用者,我自然也要加入這場戰局。因此,我將這篇「RingoJS vs. NodeJS」中 RingoJS 的優點翻譯於後,和我的讀者分享,在這翻譯中加上了我自己的修正。
- RingoJS 是最符合 CommonJS 規範的平台。此點勝過 NarwahlJS 及 NodeJS。
- RingoJS 的執行速度快。RingoJS在執行前會經過 JVM 的編譯,同時,RingoJS 的模組是動態載入的,這使得它的 start up time很短。
- RingoJS 成熟、穩定、不會當。這是我自己的使用經驗。我還沒遇過 RingoJS 當掉的情況。
- 直接使用成千上萬的 Java libraries。Ringo架構在 Rhino javascript 引擎之上,它和 Java 之間的關係真是血溶於水般,它可以直接使用 Java libraries 及物件,就好像它們是以 javascript 寫成的。不像 NodeJS 等,呼叫 C 時必須撰寫各種 wrappers。
- 程式可以在 Linux/Windows 下執行。跨平台呢。(當然也可以在目前正熱的 Android 上執行囉。)
- 支援同步(synchronous)及非同步(asynchronous)的程式撰寫風格。NodeJS紅的原因是它強調非同步撰寫風格。但是在絕大多數的場合,以同步風格撰寫最簡單。使用 Ringo,簡單的問題可以簡單解決,複雜的問題一樣能解決。
- 因為「AppengineJS」提供了大量可以在 Google App Engine 上使用的 libraries,RingoJS 很適合用來開發 Google App Engine 上的雲端運算程式。
- RingoJS 的 Leader 技術一流,又十分親切,願意傾聽使用者的建議。
2010年3月2日 星期二
Scala vs Javascript
在撰寫 javascript 程式時,我較不習慣的是它缺少靜態型別的檢查。一直希望有一種語言能結合動態型別和靜態型別語言的優點。因此最近看到 Scala 時我充滿興趣。
我花了一些時間瞭解 Scala 並撰寫了一些程式。這語言很容易上手。不過我遇到以下的瓶頸:
我花了一些時間瞭解 Scala 並撰寫了一些程式。這語言很容易上手。不過我遇到以下的瓶頸:
- Netbeans IDE 的 Scala plugin 還不成熟。
- Scala 並不是為 embedding 設計的。
- Scala 使用 Java classes 沒問題。但是 Java 使用 Scala 的 classes 會有些問題。
2010年2月28日 星期日
Netbeans Top Ten APIs
這兒記錄了 Netbeans Top Ten APIs 的影片中的重點:
- Run time container由五個 APIs 構成:Bootstrap、Startup、Module System、File System、Utility。最小的 Netbeans platform application 只依賴這五個 APIs。
- Starup API 提供了 Main。
- Module System API : Module 可以有個 ModuleInstaller class 來管理 Module 的生命周期。
- Utility API:Utility API 中最重要的是 Lookup API。扮演 ServiceLoader 的角色。也使用 JDK 6.0 的 ServiceLoader 實現。Service Provider packages 在 src/META-INF/services Folder 中列出提供的 Services。
- Window System API:TopComponent 取代了 Swing 的 JFrame 的功能。Editor、View及Mode的概念。可使用 layer.xml 及相關的檔案來建造新的 Mode。在 project.properties 中可以以 run.args.extrac=--nosplash 來抑制 splash 畫面。可以在 Properties中的 Window System API 來限制使用者的對 Window 的操作。
- File System API:介紹了 layer.xml,以及 File System API 中的 Repository、FileUtil、FileObject。FileObject 包裝了 java.io.File,提供更強大的功能。FileObject 和 java.io.File 的轉換可由 File.Util 內的函式實現。Netbeans 提供許多 File Systems,例如 layer.xml 對應的 System File System,磁碟上的 File System,以及可以 FileUtil 建立的 memory file system。
訂閱:
文章 (Atom)