close

電腦基本上只認識二進位碼,也就是0101之類的東西,這個現在小學生都知道。古時候的電腦程式是靠著直接輸入這些二進位碼資料來執行,技術人員需要面對一臺大機器,然後更改許多開關的狀態(那時候的程式真的是常人無法看懂的),後來雖然有終端機出現但狀況差不了多少。而這種二進位碼,我們現在稱為「CPU指令集」。


由於0110的東西實在太難以理解,於是有人想出何不用幾個簡單的英文單字來對應這些碼?建立一組二進位碼與某個單字的對照表後,我們就可以用單字(英文)來寫程式,再寫另一個軟體用來在執行前將這些字詞按照對應表轉換成二進位碼,然後執行。

這是程式歷史上重大的一步。至此,程式不需要科學家來寫,工程師也可以寫程式了!也從此開始,程式需要經過「編譯」後才能餵給電腦執行。而這種程式碼在當時就叫做「助憶碼」,現在叫做組合語言。


電腦硬體約在二次大戰時期開始快速發展(1940~),到剛剛說的階段才不到十年,基本上是百家爭鳴、各憑本事。CPU各作各的,各有不同的指令集(相較於我們現在主流的只有幾種CPU架構比起來,當時又更亂了),至於什麼單字對應到什麼指令碼也是大家發揮想像。於是我為A電腦寫的程式到B電腦上要用B電腦的方式重寫一次,這個狀況到現在還是一樣(指組合語言而言)


回到那個關鍵的「對應表」上面,如果我們能做出一個統一的表,並且再拉高一個層次會如何?比方說要把一個數加上另一個數,在A電腦上要執行某兩個指令、B電腦上要執行另外三個指令,那我就規定X+Y這個寫法在所有的電腦上最後都要做出把他們加起來的結果,至於中間如何翻譯就大家自己想辦法吧!只要各家做電腦的願意按照我定的標準製做各自的編譯器,那麼就會有兩個好處:1.從此工程師寫的程式碼拿到別臺電腦不用重寫,只要用那臺電腦的編譯器重新編譯就行了。2.從此工程師不需要管太多電腦的執行細節,可以把心力放在解決數學問題上。

剛剛說的東西就是所謂的高階程式語言在做的事,IBM的一位工程師JohnWarner Backus有感到工程運算發展的困難而開始想做一個通用的數學轉換器,於是1957年第一個高階程式語言FORTRAN出現在世界上。此後各家電腦廠在推出一套新電腦的時候幾乎都會同時開發一套為這臺電腦設計的FORTRAN編譯器。


其實程式寫完編譯成二進位碼後,程式碼就不是必須的了,電腦只要有二進位碼就可以執行。至於程式碼是翻譯前用來給人看懂的東西,只要開發著有就好了。於是開發者需要寫程式也需要編譯器,最後的二進位檔直接發給別人就可以,別人並不需要編譯器也不需要程式碼,這是當前軟體程式發行散佈的成用模式。

但是在那個年代不流行這一套,流傳的東西仍是以程式碼為主,有幾個原因:首先是當時的電腦主要用在科學計算上,更注重計算方法的研究而不是販售軟體,畢竟全世界也沒幾臺電腦。第二是當時的電腦硬體仍然在發育階段,還沒有一個廣為流傳單一硬體架構,作業系統的概念也還在萌芽,基本上每一臺電腦都有自己的系統架構,也有自己的編譯器,程式碼在每臺電腦上都要重新編譯。因此程式碼才是真正能夠流通的東西而不是二進位檔,也因此當時每臺電腦上都有各自的編譯器,雖然在當代來看這些都不是終端用戶所必須的。


至於作業系統他本身也是一個程式,編譯完成後就是一堆二進位碼。作業系統的出現是為了因應越來越強大的電腦資源,為了資源上的統一統籌分配管理而存在。由於作業系統本身需佔用不少資源,當時的人還曾經爭論作業系統有沒有意義?是不是必須?把大量寶貴的電腦資源給作業系統佔用而不是用來做實質的計算是否值得?當然,我們不能以現在的眼光去批判當時的人的主張。


再回來提一下C語言,當時AT&TBell 實驗室的DennisMacAlistair Ritchie為了要開發新的作業系統UNIX,卻嫌棄當時眾多高階程式語言都不符合需求,於是以B語言為藍本開發出影響電腦產業至劇的C語言(時代的偉人就是不一樣),然後用C語言重寫UNIX

至於如何開發一個高階程式語言?其實語言本身重點就只有那個「轉換規則」而已,你我甚至可以自己定一個獨一無二的規則(也就是所謂的語言標準),出一張嘴空口白話都沒關係。各編譯器廠商再依這標準實做各個系統上可用的編譯器。以C語言為例,那個轉換標準就是由國際標準組織所規定的,而且還與時俱進在更新中的C89C99C11這些東西。被實做的編譯器就是像BorlandC++GCCVisualC++ 這些東西。


雖然說每個人都可以自己出一個新的語言標準,但是這個語言如果要能夠被使用流傳的話會面臨一些實際的問題:

1.定的標準是一回事,按這標準實做的編譯器能不能被做出來又是另一回事,比方說很早以前人們就對基於自然語言的程式語言遐想很久了...


參考資料 Google,人月神話
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 周志雅幹喂吼掏憾 的頭像
    周志雅幹喂吼掏憾

    williamso35的部落格

    周志雅幹喂吼掏憾 發表在 痞客邦 留言(0) 人氣()