2009年2月18日 星期三

為何使用Forth

會使用Forth是一場機緣。但並不是完全沒有理由,在學的時候也有查過其特性才學的。
當時找到的資料是Forth是最小的作業系統混合語言。當時自認為對電腦很熟,想說已給了組合語言原始碼。大約千行的程式碼,應是不難破解其運作。
要了解作業系統及電腦語言的產生,Forth可以一次學會,這比一般分開學作業系統及電腦語言會快些。
結果是除了捷徑這件事是對的,其餘都是錯估。

初看Forth語言,很像是組合語言。因為有很多特性和C語言差很多,感覺要原始得多。
不過原始碼實在很難懂它是如何運作,最大的原因是,Forth系統的運作方式也是用Forth定義的。即使是用組合語言寫的,但高階部分是使用Forth語法。
故在自學Forth上是覺得入門門檻是高了些,因為還要去習慣Forth的習慣。
後來是和使用Forth的人在一起討論才對這個語言開始熟悉。在有人指點的狀況下,才能抓到Forth的重心。

在使用Forth上,最令我驚訝的是8051 Forth。因為在8051上是可以使用組合語言及C語言,但沒有一個語言可以做到動態編解譯程式,Forth就可以。
就以目前的功力來說,要在8051上做到動態編解譯程式,還真的找不到更精簡的架構。
動態解譯這項能力對Forth程式開發有很獨特的吸引力,它可以單獨執行函式,對機器做單一功能測試。這對於將電腦應用於機器測試上是很好的除錯能力。
大部分狀況用8051做控制是不大可能要做動態解譯來測試機器,但我在其他16位元及32位元上也不常見。

所以在Forth的功能表現上,有語言編譯的能力及作業系統管理特性。所以想說學了應可以學會編譯語言的方法及作業系統的知識。
剛好以Forth語言做為開發平台的公司有免費的討論會。所以有機會我便去參加討論會。
中間有許多人參與這個討論會,但我參加了二年才開始了解Forth的核心。可見得一開始真的是估錯了。
之所以會花二年的時間,一則是我並沒有急著用,另一個是一個月才一次討論,其中包括軟硬體設計。

Forth系統其程式碼很少,因為其函式很容易長得深,也造成其不易閱讀的特性。
但是確實有實現語言及作業系統機制,也因程式碼少,可以看見最簡單的作業系統及語言編譯方法,這對我了解電腦應用及原理有很大的幫助。
所以有段時間想用,但一直不易去使用。原因是可用的模組少。
以Win32Forth為例,是目前Windows平台上使用的Forth。但程式碼在Windows的函式太多(Windows內部函式也很多),一直不好上手。

最後目前我只能放在Dll的實驗上,看何時有比較好的機會再使用。


3 則留言:

  1. "動態解譯", 是指在runtime時做解譯嗎? 那應該稱為interprter, BASIC即是這種程式語言. 倘若是"動態組譯", Just-In-Time compiler也已經有了, Java的JVM.

    [版主回覆05/16/2009 21:41:41]Forth在一開始出現就有編出機器碼的能力。你說是interpreter,但又和現代的interpreter不太一樣。一般的interpreter是編出中間語法結構就去執行。
    要說成JIT,可是Forth出現在1970年代,當時又沒有這個名字。去用後出技術名是比較好理解。
    有些Forth很早就在用的技術,現代語言才使用並精進,不過Forth都沒有起名字。

    回覆刪除
  2. Simula作為第一個物件導向語言, 卻只成為教科書上的歷史, C++/Java成為物件導向的代表. Forth甚至還有eForth這個32 bits mcu系統, 聽起來很美好不是嗎?  但是卻沒佔有一席之地. 原因是?
    Java以後起之秀成為熱門語言前十之一, 表示C並不是不能被動搖. 我的想法是, Forth雖然有很新穎的設計理念, 卻有某個讓人無法接受的原因而沒有被推廣. 這個想法讓我對它卻步.

    [版主回覆05/17/2009 01:58:45]目前會想用Forth的人,都是從組合語言來的。Forth沒有語法,這是它的創造性,卻也同時是它推展的障礙。不過它也一直沒有掉出前五十名電腦語言外(最近已在吊車尾),足以證明它有其存在的特性。
    是要創造或是要推廣,所使用的特性並不相同。
    微軟不是一直想用C#取代VB並打擊JAVA,至今VB仍活的好好。
    每一種語言都有存活之地,重點在語言的特性。如果某語言存在的領域是不可能踏入,那學了也是浪費時間。但現代職業無法做一輩子,沒人可以知下個十年要做何種行業。
    學習不同特性的語言也是為了多去了解另一個領域的特性,語言不必學多,但特性概念有了解就可以了。

    回覆刪除
  3. 請問 51 的 forth 您是用那一個版本,
    謝謝.
    [版主回覆05/23/2013 09:52:35]有拿過eForth及CamelForth51。
    不過很少碰到8051,所以未實際安裝過。
    CamelForth網路上仍可以抓到。eForth要找符氏協會拿了。
    符氏協會的Google社群也可能可以拿到:
    http://groups.google.com/group/figtaiwan/topics

    回覆刪除