python的發展史
python是我喜歡的語言,簡潔,優美,容易使用。前兩天,我很激昂的向朋友宣傳python的好處。
聽過之後,朋友問我:好吧,我承認python不錯,但它為什麼叫python呢?
我不是很確定:呃,似乎是乙個電視劇集的名字。
朋友又問:那你說的guido是美國人麼? (guido von rossum,python的作者)
我再次不是很確定:他從google換到dropbox工作,但他的名字像是荷蘭人的 (有乙個von在中間)。
所以,後面我花了些時間調查python的歷史。這是很好的學習。我看到了python中許多功能的**和python的設計理念,比如哪些功能是歷史遺留,哪些功能是重複,如何增加功能…… 而且,python也是開源(open source)運動的乙個成功案例。從python的歷史中,我們可以一窺開源開發的理念和成就。
這也可以作為我寫的python快速教程的序篇。
python的起源
python的作者,guido von rossum,確實是荷蘭人。2023年,guido從阿姆斯特丹大學(university of amsterdam)獲得了數學和計算機碩士學位。然而,儘管他算得上是一位數學家,但他更加享受計算機帶來的樂趣。用他的話說,儘管擁有數學和計算機雙料資質,他總趨向於做計算機相關的工作,並熱衷於做任何和程式設計相關的活兒。
guido von rossum
在那個時候,他接觸並使用過諸如pascal、c、 fortran等語言。這些語言的基本設計原則是讓機器能更快執行。在80年代,雖然ibm和蘋果已經掀起了個人電腦浪潮,但這些個人電腦的配置很低 (在今天看來)。比如早期的macintosh,只有8mhz的cpu主頻和128kb的ram,乙個大的陣列就能佔滿記憶體。所有的編譯器的核心是做優化,以便讓程式能夠執行。為了增進效率,語言也迫使程式設計師像計算機一樣思考,以便能寫出更符合機器口味的程式。在那個時代,程式設計師恨不得用手榨取計算機每一寸的能力。有人甚至認為c語言的指標是在浪費記憶體。至於動態型別,記憶體自動管理,物件導向…… 別想了,那會讓你的電腦陷入癱瘓。
然而,這種思考方式讓guido感到苦惱。guido知道如何用c語言寫出乙個功能,但整個編寫過程需要耗費大量的時間 (即使他已經準確的知道了如何實現)。他的另乙個選擇是shell。bourne shell作為unix系統的直譯器(interpreter)已經長期存在。unix的管理員們常常用shell去寫一些簡單的指令碼,以進行一些系統維護的工作,比如定期備份、檔案系統管理等等。shell可以像膠水一樣,將unix下的許多功能連線在一起。許多c語言下上百行的程式,在shell下只用幾行就可以完成。然而,shell的本質是呼叫命令。它並不是乙個真正的語言。比如說,shell沒有數值型的資料型別,加法運算都很複雜。總之,shell不能全面的調動計算機的功能。
(關於shell,你可以參考linux架構和linux命令列與命令)
guido希望有一種語言,這種語言能夠像c語言那樣,能夠全面呼叫計算機的功能介面,又可以像shell那樣,可以輕鬆的程式設計。abc語言讓guido看到希望。abc是由荷蘭的cwi (centrum wiskunde & informatica, 數學和計算機研究所)開發的。guido在cwi工作,並參與到abc語言的開發。abc語言以教學為目的。與當時的大部分語言不同,abc語言的目標是「讓使用者感覺更好」。abc語言希望讓語言變得容易閱讀,容易使用,容易記憶,容易學習,並以此來激發人們學習程式設計的興趣。比如下面是一段來自wikipedia的abc程式,這個程式用於統計文字中出現的詞(word)的總數:
儘管已經具備了良好的可讀性和易用性,abc語言最終沒有流行起來。在當時,abc語言編譯器需要比較高配置的電腦才能執行。而這些電腦的使用者通常精通計算機,他們更多考慮程式的效率,而非它的學習難度。除了硬體上的困難外,abc語言的設計也存在一些致命的問題:
可拓展性差。abc語言不是模組化語言。如果想在abc語言中增加功能,比如對圖形化的支援,就必須改動很多地方。
不能直接進行io。abc語言不能直接操作檔案系統。儘管你可以通過諸如文字流的方式匯入資料,但abc無法直接讀寫檔案。輸入輸出的困難對於計算機語言來說是致命的。你能想像乙個打不開車門的跑車麼?
過度革新。abc用自然語言的方式來表達程式的意義,比如上面程式中的how to (如何)。然而對於程式設計師來說,他們更習慣用function或者define來定義乙個函式。同樣,程式設計師也習慣了用等號(=)來分配變數。這儘管讓abc語言顯得特別,但實際上增加了程式設計師的學習難度 (程式設計師大都掌握不止一種語言)。
傳播困難。abc編譯器很大,必須被儲存在磁帶(tape)上。當時guido在訪問的時候,就必須有乙個大磁帶來給別人安裝abc編譯器。 這樣,abc語言就很難快速傳播。
ibm tape drive:讀寫磁帶
python的誕生
2023年,第乙個python編譯器(同時也是直譯器)誕生。它是用c語言實現的,並能夠呼叫c庫(.so檔案)。從一出生,python已經具有了:類(class),函式(function),異常處理(exception),包括表(list)和詞典(dictionary)在內的核心資料型別,以及模組(module)為基礎的拓展系統。
最初的python logo: 由guido的兄弟just von rossum設計
python語法很多來自c,但又受到abc語言的強烈影響。來自abc語言的一些規定直到今天還富有爭議,比如強制縮排。但這些語法規定讓python容易讀。另一方面,python聰明的選擇服從一些慣例(特別是c語言的慣例)。比如使用等號賦值,使用def來定義函式。guido認為,如果「常識」上確立的東西,沒有必要過度糾結。
python從一開始就特別在意可拓展性(extensibility)。python可以在多個層次上拓展。從高層上,你可以引入.py檔案。在底層,你可以引用c語言的庫。python程式設計師可以快速的使用python寫.py檔案作為拓展模組。但當效能是考慮的重要因素時,python程式設計師可以深入底層,寫c程式,編譯為.so檔案引入到python中使用。python就好像是使用鋼構建房一樣,先規定好大的框架。而程式設計師可以在此框架下相當自由的拓展或更改。
最初的python完全由guido本人開發。python得到guido同事的歡迎。他們迅速的反饋使用意
Python的發展史
guido希望有一種語言,這種語言能夠像c語言那樣,能夠全面呼叫計算機的功能介面,又可以像shell那樣,可以輕鬆的程式設計。abc語言讓guido看到希望。abc是由荷蘭的cwi centrum wiskunde informatica,數學和計算機研究所 開發的。guido在cwi工作,並參與到...
Python的發展史
欲知其史,當然要先了解下python啦 python是一種物件導向的解釋型計算機程式語言,是一種純粹的自由軟體,源 和直譯器cpython遵循 gpl gnu general public license 協議 python語法簡潔清晰,特色之一是強制用空白符 white space 作為語句縮排。...
IT薪水發展史
1k 兄弟別做it了,不論你是什麼公司,國營的做it就是配角,那位兄弟願意一輩子做配角,非國營的嗎,看看做什麼別的合適,it不好混,趁早離開 1k 3k 初級階段,一般是剛進公司的,肯定非常缺錢,這時候動力足,也有時間,沒有男 女朋友拖累,象公司內部5k 6k的高手學習。什麼,沒有,什麼爛公司,你也...