letoh 11/3/25 原標題:Forth - The Early Years - TopicsExpress



          

letoh 11/3/25 原標題:Forth - The Early Years (colorforth/HOPL.html) Forth-早期歲月 Chuck Moore chip...@colorforth 1991 摘要 Forth是個簡單、自然的程式語言,它之所以能達到如此卓越的接受度,多半要歸功其有價值的整體效率。它於1960年代開始發展,歷 經了大學、業界到實驗室的旅程。以下是個敘述從簡單解譯器如何慢慢擴展它的能耐而成為一個完整程式語言及作業系統的故事。 前進1999 這篇文章是為HOPL II(程式語言的歷史)會議所寫,不過它立刻被退回,很明顯的是因為寫作的風格吧。最後大部分的內容則收錄在一 般人可接受的文章中[Rather 1993]。 這個HTML的版本是由原來的手稿重新編排,在文字上有做了些許的變動,校閱人Phil Koopman建議加入原始碼的例子,在這之 前還沒有哩。 內容 Forth 麻省理工學院,史密森尼亞天文物理觀測台,1958 史丹佛大學,史丹佛線性加速中心,1961 自由程式員,1965 摩哈斯科,1968 國家無線天文台, 1971 道德論 Forth Forth發展於60年代的這個十年,橫越了整個美國、在大學、商業界及實驗室之中、在已確立的語言之中。在這段期間,我是它唯一的程 式員,一直到後來它才有個名字。這段記述是由我記憶中回憶,只能靠著稀少的文獻及倖存的列表來做些提示。 Forth幾乎不是原創,但它真是個獨特的組合,我由衷感謝那些允許我去開發它的人們及組織---雖然他們常不為人知,還有您,那麼有 興趣想知道關於它的一切。 Forth是個簡單、自然的電腦語言,今日它已是個被接受的世界級程式語言,它不是靠著業界、大學或政府的支持而達到這個目標,實在要 歸功於它的效率、可靠度及多樣化。當Forth的效率性比其他語言的流行度還重要時,它便是被選擇的語言,在現實世界中像是控制或通訊的應用,更常有這 種情形。 許多Forth的組織和很多的小型公司有提供系統、應用及文件,在北美、歐洲及亞洲都有舉行年度的研討會,ANSI標準的草案也將在近 期發出[ANS 1991]。 沒有一本有關Forth的書可以完全的捕捉它的韻味,我想最好的仍然是最早的那一本由Leo Brodie所寫的Starting Forth[Brodie 1981],另一窗口便是JFAR所提供的那無價的主題與作者索引[Martin 1987]。 我們要討論的典型Forth,它提供最少量的支援給程式員,而程式員則需要去發展最適於他的應用的一個語言,它被設計用於工作站環境: 有鍵盤、顯示器、電腦和磁碟機。 Forth是個以文字為基礎的語言,基本上是與上下文無關的(Context-Free),它結合由空格所區隔的”字”來建構了新字, 大約由150個這樣的字來組成一個系統來提供(已引入的時間排列): 史密森尼亞天文物理觀測台 1958 解譯器 史丹佛線性加速中心 1961 數據堆疊 即時系統公司 1966 鍵盤輸入 顯示輸出,OK 編輯器 摩哈斯科 1968 編譯器 返回堆疊 字典 虛擬記憶體(磁碟) 多程式員 國家無線天文台 1971 線鎖碼 固點算術 這樣的系統由10到20頁的原始碼編譯成3到8K位元組的執行碼,它可以容易地由一程式員單獨在一小電腦上實現。 這段記述無可避免地要循著我的經歷來寫,但它的用意是當成Forth的自傳。我將討論上面所列的特徵;還有與這些特徵有關的字的名稱, 許多字的意義是很明顯的,某些會賦予描述,另外有些則超出本文章的範圍。 Forth字典中那些將被引述的部分總結於下: 解譯器 WORD NUMBER INTERPRET ABORT HASH FIND FORGET BASE OCTAL DECIMAL HEX LOAD EXIT EXECUTE ( 終端機 KEY EXPECT EMIT CR SPACE SPACES DIGIT TYPE DUMP 數據堆疊 DUP DROP SWAP OVER + - * / MOD NEGATE ABS MAX MIN AND OR XOR NOT 0< 0= = @ ! +! C@ C! SQRT SIN.COS ATAN EXP LOG 返回堆疊 : ; PUSH POP I 磁碟 BLOCK UPDATE FLUSH BUFFER PREV OLDEST 編譯器 CREATE ALLOT , SMUDGE VARIABLE CONSTANT [ ] LITERAL . COMPILE BEGIN UNTIL AGAIN WHILE REPEAT DO LOOP +LOOP IF ELSE THEN 麻省理工學院,史密森尼亞天文物理觀測台,1958 1957年十月是最令人激動的史普尼克事件,我是麻省理工學院的二年級生,並在哈佛大學的史密森尼亞天文物理觀測台得到一個14節的兼 差工作。 史密森尼亞天文物理觀測台的負責人造衛星的光學追蹤網路:一是觀月視覺觀察網路及Baker-Nunn追蹤攝影機網路,由於史普尼克的 趁虛而入,他們請了大學生以佛萊登桌上型計算機來計算預測值,John Gaustad告訴我有關麻省理工學院的IBM EDPM 704電腦的事情, 並且借我他的Fortran手冊,在我的第一個程式,軌道4號,完成後結束了我的工作[Moore 1958]。 我現在是個跟George Veis一起工作的程式員,應用他的最小平方湊配(Fitting)方法來決定軌道參數、觀測站位置及到最 後是地球外型[Veis 1960],當然,這個兼差工作最少是40個小時,所以我的學業便墬入了地獄。 在麻省理工學院,John McCarthy告訴我一個難以置信的LISP語言課程,這是我第一次接觸到遞迴及令人驚歎的多種電腦語 言,Wil Baden曾注解說LISP是Lambda微積分而Forth是Lukasewcleicz後置。 APL當時也是個話題語言,由於它怪異的由右而左剖析法,雖然我佩服並且模仿它的運作,但我不能認同它們是一組最佳的集合。 在50年代的程式設計環境比現在都還嚴謹,我的原始碼填滿了兩個紙夾的打洞卡,當它們要放入機器時必須要提著,這事常常是我做的,編譯 動作花了30分鐘(就如同C一樣),但每天平均一個人的執行的電腦時間是有限的,除非有第三班。 所以我寫了這個簡單的解譯器來讀取輸入卡並且控制程式,它也可直接做計算,5個軌道參數每個都有一個經驗等式來計算大氣拖延及非球形的 地球,就這樣我可以將用於許多人造衛星的不同等式做結合,而不用再重新編譯。 因為這些等式將像是P2(二階多項式)和S(正弦)的項次總和,而36位元的浮點數主宰了計算時間,所以負擔很小,數據堆疊並不需要, 而且我可能也不知道。 由這裡開始的Forth解譯器有這些字 WORD NUMBER INTERPRET ABORT 它們以前並不是以這種拼法,而是陳述數字。 INTERPRET使用WORD來讀取以空白分隔的字,而NUMBER用來轉換字串成為二進位數字(在這個例子中是指符點數),這樣的 自由格式的輸入並不普通,但是更有效率(更小且更快)和可靠,Fortran輸入則是格式化成特定的欄位,常常由於過多的延遲而有印刷上的錯誤。 這個解譯器以Fortran來編碼,使用IF …ELSE IF的結構來找出符合的單字元,錯誤處理便是結束執行,然後就跟現在一樣, ABORT要求使用者做些事情,由於輸入卡以它們被讀取順序來排列,所以您可以知道哪裡出錯了。 史丹佛大學,史丹佛線性加速中心,1961 1961年我到史丹佛大學研究數學,雖然史丹佛有設立自己的電腦科學系,然而我有興趣的是真正的計算,我很驚訝他們能去(無懼乎?)寫 自己的Algol編譯器,而我像是命運注定般邂遘了Burroughs B5500電腦。 我在SLAC(史丹佛線性加速中心,12節)得到另一個”兼差”的工作,負責寫程式來最佳化延遲2哩的電子加速器的光束前進,這個是我 的最小平方經驗到相位空間的一個自然應用,Hal Butler是我們團隊的主事者,而TRANSPORT程式十分成功。 另一個最小平方的應用是CURVE程式,它以Algol(1964年)來編寫,它是個一般用途的非線性差分修正資料湊配程式,它精密的 統計提供模型與資料間一致性所需的洞察。 資料格式和模型等式被解譯,而一個下推的堆疊被用來方便估算,CURVE程式是個令人印象深刻的Forth先驅,它引入了下面這些字來 提供功能來湊配模型,讓它比簡單的等式更精巧。 + - * NEGATE IF ELSE THEN < DUP DROP SWAP : ; VARIABLE ! ( SIN ATAN EXP LOG 拼法可能十分不同: NEGATE 是 MINUS DROP ; SWAP . ! < VARIABLE DECLARE ; END ( ...) COMMENT ...; 解譯器使用IF…ELSE IF來驗證叫做ATOM(由LISP而來)的6個字元的輸入字。DUP、DROP和SWAP是5500的指 令;我很驚訝拼法的改變,”:”字取自Algol的標記格式,為了由左而右的剖析而翻過來(以便防止解譯器遇到一個未定義的字)。 Algol - LABEL: CURVE - : LABEL 事實上,”:”在輸入字串中標註了稍後要解譯的位置,解譯工作到”;”而停止,另一個”:”的版本名叫做DEFINE。 儲存操作子(!)出現與VARIABLE有關,但擷取(@)是自動的,請注意輸入已變得複雜到足夠去賦予註解,時常令人詬病的後置法條 件式就由這時開始: Algol - IF expression THEN true ELSE false CURVE - stack IF true ELSE false THEN 假如堆疊中非零則解譯為真值,THEN提供很獨特的結束,我常對Algol中沒有用它而感到困惑。這樣的表示式解釋為:IF將向前掃描 ELSE或THEN。 字”的出現(拼成;:)定義了某類的字(像是;CODE),藉此指定當這類字被參考到時要解譯的定義,這個發明非常投機巧妙, 但對於定義運作碼非常有用。 儘管如此,我不能說服薜倫斯維爾Forth非常合適,我不能繼續被允許對巨大陣列天線寫程式,任何團隊裡,25%喜歡Forth,而 25%討厭它,爭執常會變的強烈而妥協微乎其微,所以同好們齊心同力成立了Forth公司,而那是另一段故事。 道德論 Forth的故事常是道德劇製造者:堅持原則的年輕程式員努力搏鬥著別人的不重視而發現真理,最後解救了他的受難的同伴,不過這可以更 好的:看看Forth公司在法國銀行系統上與IBM的齊頭並進。 我知道Forth到現在為止是最好的語言,我很高興它的成功,特別是在極度保守的人工智慧領域,我常憂慮人們應該卻不能評價如何具體化 他們自己對於理想程式語言的說明。 但是我仍然無拘無束的探索,Forth已導向一個可以美妙的整合軟體與矽晶的架構,及另一個新的程式開發環境。 參考資料 [ANS 1991] Draft Proposed ANS Forth, document number X3.215-199x, available from Global Engineering Documents, 2805 McGaw Ave., Irvine CA 92714. [Brodie, 1981] Brodie, Leo, Starting FORTH, Englewood Cliffs NJ: Prentice-Hall, 1981, ISBN 0 13 842930 8. [Hart, 1968] Hart, John F. et al, Computer Approximations. Malabar FL: Krieger, 1968; (Second Edition), 1978, ISBN 0 88275 642 7. [Martin, 1987] Martin, Thea, A Bibliography of Forth References, 3rd Ed, Rochester NY: Institute for Applied Forth Research, 1987, ISBN 0 914593 07 2. [Moore, 1958] Moore, Charles H. and Lautman, Don A., Predictions for photographic tracking stations - APO Ephemeris 4, in SAO Special Report No. 11, Schilling G. F., Ed., Cambridge MA: Smithsonian Astrophysical Observatory, 1958 March. [Moore, 1970] --- and Leach, Geoffrey C., FORTH - A Language for Interactive Computing, Amsterdam NY: Mohasco Industries, Inc. (internal pub.) 1970. [Moore, 1972] --- and Rather, Elizabeth D., The FORTH program for spectral line observing on NRAOs 36 ft telescope, Astronomy & Astrophysics Supplement Series, Vol. 15, No. 3, 1974 June, Proceedings of the Symposium on the Collection and Analysis of Astrophysical Data, Charlottesville VA, 1972 Nov. 13-15. [Moore, 1980] ---, The evolution of FORTH, an unusual language, Byte, 5:8, 1980 August. [Rather, 1993] Rather, Elizabeth D., Colburn, Donald R. and Moore, Charles H., The Evolution of Forth, in History of Programming Languages-II, Bergin T. J. and Gibson, R. G., Ed., New York NY: Addison-Wesley, 1996, ISBN 0-201-89502-1. [Veis, 1960] Veis, George and Moore, C. H., SAO differential orbit improvement program, in Tracking Programs and Orbit Determination Seminar Proceedings, Pasadena CA: JPL, 1960 February 23-26. 2005.01.25譯 版本V1.0
Posted on: Fri, 01 Nov 2013 01:44:28 +0000

Trending Topics



Recently Viewed Topics




© 2015