Fortran的歷史
早期的電腦程式是極為繁瑣的。程式設計師需要詳細了解為之編寫代碼的計算機的指令、暫存器和中央處理器(CPU)的其他有關方面。源程式本身是用數學符號編寫的,叫做八進制碼。後來採用了助記符,就是所謂的機器碼或彙編碼的形式。這些編碼通過彙編程式轉換為指令字。在50年代,書寫和調試一個程式要用很長時間,很明顯,使用這種程式形式是很不方便的,儘管它確實能使CPU非常高效地工作。
這些問題促使由John Backus率領的IBM公司的一個小組研究開發最早的高級語言——Fortran。他們的目標是開發這樣一種語言:容易理解,幾乎能與彙編語言一樣高效地運行。在這方面,他們獲得了異常的成功。這種語言確實簡單易學,因為幾乎可能像抄寫數學教科書里的公式一樣書寫數學公式(實際上,Fortran這一名字是FORmula TRANslation的縮寫,意為“公式翻譯”)。這樣使編寫可運行程式比以前快,但由於把許多精力用在編譯程式的構造上,所以在效率上也有些小的損失。因此可以看出,用Fortran作為第一種高級語言是一種創新。但是,Fortran不儀是一次革新,而且是一次革命。程式設計師可以擺脫使用彙編語言的冗長乏味的負擔,從而使他們能用更多的精力去解決其他問題。更重要的或許是這樣一個事實:對於任何一名科學家或工程師,只要他願意稍加努力去學習和使用Fortran,他就能使用計算機,從而結束了只有計算機專家才能編寫實用程式的歷史。
因為Fortran滿足了現實的需要,所以它傳播得很快。在傳播和使用過程中不可避免地產生了Fortran語言的方言,這給在計算機語言之間交換程式帶來了一定的困難。於是經過4年的工作,當時的美國標準化協會ASA[ASA(American Standard Association)後來改名為美國國家標準協會簡稱ANSI(American Natlonat Standards Institute)),於1906年提出了程式語言的第一套標準,這就是現在所熟知的Fortran 66。實際上,Fortran 66是各種方言的公共子集,因此每種方言都可以看成這一標準的擴充。用戶希望編寫可移植的程式就必須注意避免採用這些擴充。
除了簡單易學和運行有效外,Fortran還有其他一些優點。例如,這種語言是和硬體密切聯繫的易開發的語言,而不是抽象的概念。通過COMMON語句和EQUIVALENCE語句,為程式設計師提供了用簡單的方法控制存儲器分配的可能性,這些對於早期小容量存儲器是十分必要的。最近源程式在語法上不依賴任何空格字元,使程式設計師不必在嚴格規定的列上書寫代碼並允許語句主體部分以任意所希望的方式來安排。不言而喻,在現代的情況下,並非所有這些優點都已全部滿足了人們的要求。
在1966年的標準頒布以後,方言的增加仍然是一個問題。最初的困難是有許多編譯程式甚至不向這一標準靠攏。其次是在編譯程式中,廣泛實現一些對大型程式很有用的功能,但是卻忽略了標準。其例子是直接存取檔案處理,不同的編譯程式採用了不同的方法實現這樣一些功能。
這種現狀加上語言中存在的一些明顯缺陷,例如缺少結構程式設計構造,這樣就導致了大量所謂的“預處理程式”的產生。這些程式能夠讀入一些用定義良好的Fortran擴充方言寫的源程式,生成標準Fortran的二次文本,然後按通常的方法將這些文本提供給Fortran編譯程式。這就為擴充Fortran提供了手段,同時保留了在計算機之間交換經過轉換的源程式的能力。同時,大量的這類預處理程式意味著有很多不同的高級方言在使用。雖然用預處理程式寫出來的程式可以在Fortran源程式級上交換移植,但這種自動生成的Fortran程式通常難以讀懂,所以人們一般不採用。
1978年頒布的新標準Fortran 77,部分地解決了這個問題。這種新標準包括一些新的功能,新功能是建立在預處理程式的基礎上。這種新標準不是現有方言的公共子集而是自成一體的新語言。由於新的編譯程式未能及時提供使用,Fortran 66和Fortran 77之間的過渡期比人們預計的要長得多,兩種標準不得不長時間共存。不管怎樣,到80年代中期,向Fortran 77的轉變形成潮流,Fortran 66很快被取代了。這時製造商們也開始停止提供舊的編譯程式,從而增強了轉變的壓力。用新標準編寫新的程式是相當簡單的,改寫舊標準的程式通常也很簡單,因為兩個標準之間有大量兼容的地方。男一方面,用擴充的語言編寫的程式通常較難轉換,因為新的編譯程式一般不包括Fortran77的擴充。實際上,有些編譯程式非常嚴格,僅實現了沒有任何擴充的Fortran 77。
Fortran的新標準
30年過去了,在許多計算機上,Fortran已不是唯一適用的程式設計語言,一些新的語言發展起來了。事實證明,在某些特殊的套用領域裡,一些新語言更為合適,但是Fortran的優勢仍然是在數值、科學和工程技術套用領域,而且在這些領域裡沒有更強的競爭對手。Fortran用戶已在Fortran代碼上進行了巨大的投資,有許多程式(有些長達10萬條,有些甚至更長)在頻繁地使用。然而這不是說人們完全滿足於這種語言.為此,ANSI委派的技術委員會X3J3已不止一次地推出新的標準草案。第一個草案是在1987年推出的,第二個草案在1989年推出,隨後在一段時間內徵求了意見和進行了修改,國際標準化組織(iso)終於在1991年夏季公布了Fortran 90新標準。
為什麼要繼續修訂Fortran語言呢?這是因為不但要把廠家的一些語言擴充部分標準化,而且也是為了Fortran現代化,使之能趕上語言結構的發展。在這方面,其他語言如APL、Algol68、Pascal和Ada已使用了一些新的概念.在這裡。X3J3可以利用像數據隱蔽等一些概念的優點。出於同樣的考慮,需要開始為危險的存儲結合提供代替辦法,廢棄過時的嚴格的源程式書寫格式,並繼續改善語言的正規性,同時提高用語言編程式的安全性,以及使一致性要求更為嚴格。為保護對Fortran 77程式的巨大投資,整個Fortran 77被作為Fortran 90的子集。
由此可以看出,新的標準不像以前的僅僅是現有實踐用法的標準化,而更多的是這種語言的新發展,引入了一些對Fortran來說是全新的細節,這些細節吸取了其他語言的經驗。最重要的部分是用簡單有效的記法處理數組的能力,以及定義和處理用戶定義數據類型的能力。前者使許多數學問題編碼簡化,並使Fortran在新一代的超級計算機上更為有效,因為這類數組特點與這些硬體配合得很好。後者使程式設計師能夠用滿足其要求的數據類型來表達問題。
這些新增加的部分可以概括如下:
(1)通過將某些部分標明為“過時的”而演變語言的方法;
(2)數組運算;
(3)指示字;
(4)改進數值計算的設施,其中包括一組數值詢問函式;
(5)固有類型的參數化,允許處理程式支持短整數、非常大的字元集、雙精度以上精度的實型和復型,以及壓縮邏輯;
(6)由任意數據類型組成的用戶定義的派生數據類型以及對這些結構的運算;
(7)定義稱為模組的程式段的設施,這對於全局數據定義和過程庫是有用的,它提供了一種封裝派生數據類型的安全方法;
(8)要求編譯程式能夠檢測出使用了不符合語言語法規則或過時的構造;
(9)一種更加適用於終端的新源程式書寫形式;
(10)新的控制構造,例如SELECT CASE構造和DO語句的一種新形式;
(11)具有寫內部過程和遞歸過程的能力,以及用任選變元和關鍵字變元調用過程的能力;
(12)動態存儲分配;
(13)輸入/輸出設施的改善,包括處理部分記錄和標準化的NAMELIST的設施;
(14)許多新的內部過程。
Fortran 90中新的部分將保證人們在今後長時間內繼續成功地使用Fortran語言。Fortran 90把整個Fortran 77作為一個子集的事實,意味著由Fortran 77轉換到Fortran 90是非常簡單的。
Fortran的標準化工作
1966年和1978年,美國國家標準學會(ANSI)和國際標準化組織兩次對Fortran.語言進行了標準化。負責這項工作的委員會是X3J3。X3J3本身由45名計算機硬體和軟體製造商、用戶和學術界代表組成,它是由最終頒布美國標準的ANSI任命的,直接向它的上級委員會X3報告。X3負責決定是否採用它們提出的標準草案。在決定過程中,它要儘量保證提案真正體現出有關各方的意見。相應的國際組織是ISO/IEC JTCl/SC22/WG5。這一組織由國際上的專家組成,負責使一個標準草案在成為一個國家標準的同時成為國際標準。在我們國內,全國計算機與信息處理標準化技術委員會下屬的Fortran語言標準化工作組是其成員。因此,在Fortran 90成為國際標準的過程中,採納了我國的不少建議。例如在語言中增加民族字元集處理能力是由我國和日本分別提出的,經過各成員國代表投票表決,承認了我國建議的科學性,拒絕了日本的建議,從而採用了中國的建議。
作為漫長的標準化過程的一部分,在X3考慮研究標準草案之前,需要X3J3的至少2/3的成員同意後才能向X3提交建議草案。一旦X3同意接受,首先就得有一段時間徵求公眾的意見。這時不但要求X3J3注意收集公眾的反應,而且要對X3提出草案修改的意見。這要經過幾個反覆。正常情況下,一套新標準在得到國際標準化組織承認之前需要經歷18個階段。
1986年4月,X3J3內部對當時的草案進行了一次投票,結果是16票贊成19票反對。這樣,就不得不降低所提草案的水平,以求在下述三派之間取得折衷:要求加入大量新功能的激進派,目標適中的保守派,以及強調長期兼容性的兼容派。到1989年5月,第二個草案建議稿提交給X3,1990年6月,X3J3公布了Fortran 90標準草案。委員會內部的意見不一致是正常的,之所以經歷數年的反覆討論,主要是在下列問題上存在著不同看法,如:
(1)Fortran 90應當是革新的,還是僅為現有經驗的標準化。
(2)這種語言應當是短小而簡單的,還是龐大而功能強大的?現在的方案是不是太大了,以致使它不能適合90年代的小型機,不能由小型的軟體商所實現,而且不能被非專業的程式設計師所理解(Fortran的用戶大部分是這些人)。
(3)經過10~20年的醞釀,用戶是否準備放棄現有的部分或者將現存的程式一直運行下去。
(4)這種語言的子集(作為過渡措施)是有效的還是將會阻礙可移植性。
(5)所提出的語言的體系結構是否可行。
(6)用戶需要的是一種安全可靠的語言,還是一種允許他們編寫技巧性強,往往與彙編語言聯繫在一起的程式語言。
(7)建議的語言是否實現起來有困難或不能高效率地實現。若因此用戶有一個好的新開端,這是否還成為一個問題。
(8)新部分的出現是否會使現有的部分實現起來困難。
到1991年夏季,在這些問題上終於取得了一致意見,標準化工作勝利完成,國際標準化組織正式公布了新的Fortran標準文本,即Fortran 90。在不久的將來能有符合新標準的Fortran 90編譯系統提供給我國的廣大Fortran用戶使用。