正文

閑聊計算機語言

(2022-08-13 12:46:19) 下一個

任何最複雜的計算(比如求解非線性偏微分方程組)最終都歸結為算術運算(加減乘除
)。電子計算機就是能執行二進製算術運算的工具。二進製(0,1)算術運算在電子計
算機中是由數字電路(門電路)等來物理實現。在電子計算機中有兩種運算:定點運
算和浮點運算。定點運算就是整數運算。而浮點運算是帶小數點的數的運算。馮-諾

曼式計算機(現在大多數計算機還是這種形式)是指令和數據不分的。比如,11001010 
在程序的不同位置可以是指令也可以是數據。起初人們直接用機器指令來編寫程序,
這當然是很繁複的勞動。後來人們用匯編語言(如,MOV,INT 等)來代替機器指令。
再後來人們開發出很多高級語言。計算機高級語言的出現,使非專業的人員都能編
程和使用計算機,大大地促進了計算機普及使用,而且也促進了計算機理論的發展。
現有一千多種計算機語言,但其中隻有十幾種被廣泛使用。在計算機語言領域,人
們的創造力是無限的。有以函數為對象的語言,如ML;有以表(LIST)為對象的語言,
如LISP;有以

OBJECT 為對象的語言,如SMALLTALK,等等。就程序語言來說,可以分為三類:函數
語言,如ML;邏輯語言,如PROLOG;IMPERATIVE語言,如C。(有些語言,如XML,不
是程序語言。)  人們是用編譯方法將高級語言轉換成機器碼,而編譯器的設計是基
於自動機理論。現有四種自動機:有限自動機,堆棧自動機,線性有界(LINEAR BOUNDED)
自動機和圖靈(TURING)機。其中以圖靈機功能最強。圖靈機由磁帶,讀寫頭和控製
器等組成。圖靈機計算模型雖然簡單,但它的功能和每秒運算數億次的電子計算機
是一樣的,而且至今人們還沒有找到比圖靈機功能更強的計算模型。
編譯器的設計必須麵對如下的事實:
1) 不是所有的語言都有編譯器存在。設有一字母集合A。由集合A中的字母組成的所
有單詞的集合B是一個可數無窮集合。由集合B中的所有子集(單詞組)組成的集合(語
言)將是一個不可數無窮集合(集合的冪集)。而圖靈機隻能處理可數無窮集合,所以
說不是所有的語言都有編譯器存在。
2) 最佳編譯器是不存在的。早在世界上第一個編譯器出現以前,就有人證明最佳編
譯器是不存在的。證明的思路也很簡單:如果最佳編譯器存在,圖靈的HALTING問題
也就解決了。因為最佳編譯器可以將死循環程序變成:
L1      SOME CODE
           GOTO  L1
隻要發現程序中有上述程序,就可判斷該程序是死循環。事實上圖靈的HALTING問題
是不能解決,所以說最佳編譯器是不存在的。
早期廣泛應用的程序語言都是PROCEDURE語言,比如 COBOL,FORTRAN,C 等。
PROCEDURE語言的運行就像流水帳一樣,當然不適用於大型係統的設計。於是,近二
十多年發展的OBJECT-ORIENTED語言,比如 C++,JAVA 等得到廣泛應用。在OBJECT-ORIENTED語
言中,OBJECT自帶數據和方法,並且可以重複使用。不過,OBJECT也有機器碼兼容
問題,因此人們進一步發展COMPONENT和INTERFACE設計。
顯然,不是所有的東西都可以設計成OBJECT(比如SECURITY就不能設計成一個OBJECT)。
所以人們進一步發展ASPECT-ORIENTED語言。
應用程序在運行時也會出錯,但錯誤原因在機器碼上。這使得糾錯(DEBUG)變成很複
雜。有人研究用示範的方法讓計算機自動生成執行程序,但至今在這方麵的研究進
展很慢。編譯完的程序還必須鏈接。鏈接過程也是很複雜。早些年,“程序的增量
鏈接”還是美國斯丹福大學計算機係研究課題。最後的執行程序也有它的結構,比
如 COFF 結構。這結構分為頭部和執行碼。頭部的數據顯示有關執行程序的信息。
在頭部和執行碼之間通常有中斷(微軟用 INT 3),以便於操作係統加載DLL和DEBUG。

 

[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.