2010年10月2日 星期六

Forth VM

看了一篇文章,討論 Forth VM 的設計:Updating the Forth Virtual Machine。在傳統的 Forth VM 中有兩個堆疊一個記憶體。這樣的設計不容易執行 C 編譯出來的程式。也不適合用做 DSP 的 VM。為此,文章中提出了對 Forth VM 的修正,多提供了以下四個 registers 用來存取記憶體:A、B、X、Y。
  • A、B:有自動加減記憶體指標的功能,適用於 DSP,也可以用做 scratch register。
  • X、Y:能對記憶體定址,可以做為 local variable 或 user variable 的指標。
閱讀過此一文章後,比對我所知的 Forth VM 設計,還必須有 TOS、IP、W。這可就用去了七個 registers。仍小於 80x86 系列的 registers 數目 8 。

特別記錄下這文章,因為我考慮以 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