點擊上方“零一視界”,選擇“星標”公眾號
資源干貨,第一時間送達
匯編器仍然強迫程序員思考 用什么寄存器和內存地址,如果你突然要一個額外的數(shù),可能要改很多代碼讓我們想一想。
一、用膠帶來補"漏洞"
葛麗絲·霍普博士(作為美國海軍軍官,她是哈佛1號計算機的首批程序員之一)也遇到了這個問題,這臺機器我們在前面提過。這臺巨大機電野獸在 1944 年戰(zhàn)時建造完成,幫助盟軍作戰(zhàn)。程序寫在打孔紙帶上匯編語言轉換成機器碼,放進計算機執(zhí)行。順便一說,如果程序里有漏洞,真的就直接用膠帶來補"漏洞"。
Mark 1 的指令集非常原始,甚至沒有 JUMP 指令,如果代碼要跑不止一次,得把帶子的兩端連起來 做成循環(huán),換句話說,給 Mark 1 編程簡直是噩夢。
二、第一個編譯器
戰(zhàn)后,霍普繼續(xù)在計算機前沿工作,為了釋放電腦的潛力,她設計了一個高級編程語言,叫"算術語言版本 0",簡稱"A-0"。匯編與機器指令是一一對應的,但一行高級編程語言可能會轉成幾十條二進制指令,為了做到這種復雜轉換 在 1952 年創(chuàng)造了第一個編譯器。編譯器專門把高級語言 轉成低級語言,比如匯編或機器碼(CPU 可以直接執(zhí)行機器碼)。
盡管"使編程更簡單"很誘人,但很多人對霍普的點子持懷疑態(tài)度。她曾說"我有能用的編譯器,但沒人愿意用,他們告訴我計算機只能做算術,不能運行程序"。
但這個點子是好的。
不久,很多人嘗試創(chuàng)造新編程語言,如今有上百種語言!可惜的是,沒有任何 A-0 的代碼遺留下來。所以我們用舉例(一門現(xiàn)代編程語言)。
假設我們想相加兩個數(shù)字,保存結果。
記住,如果用匯編代碼,我們得從內存取值,和寄存器打交道,以及其他底層細節(jié)。但同樣的程序可以用 這樣寫:不用管寄存器或內存位置,編譯器會搞定這些細節(jié),不用管底層細節(jié)。程序員只需要創(chuàng)建 代表內存地址的抽象,叫"變量",給變量取名字。現(xiàn)在可以把兩個數(shù) 存在變量里,這里取名 A 和 B, 實際編程時你可以隨便取名。然后相加兩個數(shù),把結果存在變量 C。底層操作時,編譯器可能把變量 A 存在寄存器 A,但我不需要知道這些!眼不見心不煩。
這是個重要歷史里程碑,但 A-0 和之后的版本沒有廣泛使用.
三、主宰了早期計算機編程
,名字來自 "公式翻譯"。這門語言數(shù)年后由 IBM 在 1957 年發(fā)布,主宰了早期計算機編程。
項目總監(jiān) John 說過,"我做的大部分工作都是因為懶,我不喜歡寫程序,所以我寫這門語言,讓編程更容易"。你懂的,典型的"懶人",創(chuàng)造自己的編程語言。
平均來說, 寫的程序,比等同的手寫匯編代碼短 20 倍,然后 編譯器會把代碼轉成機器碼。人們懷疑性能是否比得上手寫代碼,但因為能讓程序員寫程序更快,所以成了一個更經濟的選擇,運行速度慢一點點,編程速度大大加快。
四、COBOL的誕生
當時 IBM 在賣計算機,因此最初 代碼只能跑在 IBM 計算機上。1950 年代大多數(shù)編程語言和編譯器,只能運行在一種計算機上。如果升級電腦,可能要重寫所有代碼!因此工業(yè)界,學術界,政府的計算機專家在 1959 年組建了一個聯(lián)盟—數(shù)據(jù)系統(tǒng)語言委員會,Grace 擔任顧問。開發(fā)一種通用編程語言,可以在不同機器上通用,最后誕生了一門高級,易于使用,"普通面向商業(yè)語言",簡稱 COBOL。
為了兼容不同底層硬件,每個計算架構需要一個 COBOL 編譯器,最重要的是,這些編譯器都可以接收相同 COBOL 代碼。不管是什么電腦,這叫"一次編寫,到處運行"。如今大多數(shù)編程語言都是這樣匯編語言轉換成機器碼,不必接觸 CPU 特有的匯編碼和機器碼,不必接觸 CPU 特有的匯編碼和機器碼,減小了使用門檻。
五、計算機成為大眾化工具
在高級編程語言出現(xiàn)之前,編程只是計算機專家和愛好者才會做的事,而且通常是主職。但現(xiàn)在,科學家,工程師,醫(yī)生,經濟學家,教師等等,都可以把計算機用于工作。‘’
感謝這些語言,計算機科學從深奧學科變成了大眾化工具。同時,編程的抽象也讓計算機專家,現(xiàn)在叫"專業(yè)程序員",制作更復雜的程序。如果用匯編寫可能要上百萬行。
六、編程語言的飛速發(fā)展
當然,計算機的歷史沒有在 1959 年結束,編程語言設計的黃金時代才剛剛開始。和硬件一起飛速發(fā)展。
在 1960 年代,有 ALGOL, LISP 和 BASIC 等語言;
70年代有:,C 和 ;
80年代有:C++,-C 和 Perl;
90年代有:,Ruby 和 Java;
新千年 Swift, C#, Go 在崛起;
有些語言你可能聽起來耳熟 - 很多現(xiàn)在還存在,你現(xiàn)在用的瀏覽器很可能是 C++ 或 -C 寫的,我剛才說的編程語言名字 只是冰山一角。新的編程語言在不斷誕生,新語言想用更聰明的抽象,讓某些方面更容易或更強大或利用新技術和新平臺帶來的優(yōu)勢,讓更多人能快速做出美妙的事情。
許多人認為編程的"圣杯"是直接用英文,直接對計算機說話,然后它會理解并執(zhí)行,這種智能系統(tǒng)目前只存在于科幻小說。