Python編程語言的發(fā)展簡史

Python編程語言是我喜歡的語言凌盯,簡潔、優(yōu)美烹玉、易用驰怎。前兩天,我很激昂地向朋友宣傳Python的好處二打。

“好吧县忌,我承認(rèn)Python不錯,但它為什么叫Python呢继效?”
“呃症杏,似乎是一個電視劇的名字∪鹦牛”
“那你說的Guido是美國人么厉颤?”
“他從Google換到Dropbox工作,但他的名字像是荷蘭人的喧伞∽哂螅”
“你確定你很熟悉Python嗎绩郎?”

所以為了雪恥潘鲫,我花時間調(diào)查了Python的歷史。我看到了Python中許多功能的來源和Python的設(shè)計理念肋杖,看到了一門編程語言的演化歷史溉仑,看到了Python與開源運動的奇妙聯(lián)系。從Python的歷史中状植,我們可以一窺開源開發(fā)的理念和成就浊竟。

這也可以作為我寫的Python快速教程的序篇怨喘。

起源

Python的作者,Guido von Rossum振定,確實是荷蘭人必怜。1982年,Guido從阿姆斯特丹大學(xué)獲得了數(shù)學(xué)和計算機碩士學(xué)位后频。然而梳庆,盡管他算得上是一位數(shù)學(xué)家,但他更加享受計算機帶來的樂趣卑惜。用他的話說膏执,盡管擁有數(shù)學(xué)和計算機雙料資質(zhì),他總趨向于做計算機相關(guān)的工作露久,并熱衷于做任何和編程相關(guān)的活兒更米。最后,如果你的時間不是很緊張毫痕,并且又想快速的提高征峦,最重要的是不怕吃苦,建議你可以價位@762459510 消请,那個真的很不錯眶痰,很多人進步都很快,需要你不怕吃苦哦梯啤!大家可以去添加上看一下~

在那個時候竖伯,Guido接觸并使用過諸如Pascal、C因宇、 Fortran等語言七婴。這些語言的基本設(shè)計原則是讓機器能更快運行。在80年代察滑,雖然IBM和蘋果已經(jīng)掀起了個人電腦浪潮打厘,但這些個人電腦的配置很低。比如早期的Macintosh贺辰,只有8MHz的CPU主頻和128KB的RAM户盯,一個大的數(shù)組就能占滿內(nèi)存。所有的編譯器的核心是做優(yōu)化饲化,以便讓程序能夠運行莽鸭。為了增進效率,語言也迫使程序員像計算機一樣思考吃靠,以便能寫出更符合機器口味的程序硫眨。在那個時代,程序員恨不得用手榨取計算機每一寸的能力巢块。有人甚至認(rèn)為C語言的指針是在浪費內(nèi)存礁阁。至于動態(tài)類型巧号,內(nèi)存自動管理,面向?qū)ο蟆?別想了姥闭,那會讓你的電腦陷入癱瘓朦佩。

這種編程方式讓Guido感到苦惱窒朋。Guido知道如何用C語言寫出一個功能,但整個編寫過程需要耗費大量的時間,即使他已經(jīng)準(zhǔn)確的知道了如何實現(xiàn)莱坎。他的另一個選擇是shell银亲。Bourne Shell作為UNIX系統(tǒng)的解釋器已經(jīng)長期存在眼滤。UNIX的管理員們常常用shell去寫一些簡單的腳本寺渗,以進行一些系統(tǒng)維護的工作,比如定期備份疼进、文件系統(tǒng)管理等等薪缆。shell可以像膠水一樣,將UNIX下的許多功能連接在一起伞广。許多C語言下上百行的程序拣帽,在shell下只用幾行就可以完成。然而嚼锄,shell的本質(zhì)是調(diào)用命令减拭。它并不是一個真正的語言。比如說区丑,shell沒有數(shù)值型的數(shù)據(jù)類型拧粪,加法運算都很復(fù)雜〔捉模總之可霎,shell不能全面的調(diào)動計算機的功能。

Guido希望有一種語言宴杀,這種語言能夠像C語言那樣癣朗,能夠全面調(diào)用計算機的功能接口,又可以像shell那樣旺罢,可以輕松的編程旷余。ABC語言讓Guido看到希望。ABC是由荷蘭的數(shù)學(xué)和計算機研究所開發(fā)的扁达。Guido在該研究所工作正卧,并參與到ABC語言的開發(fā)。ABC語言以教學(xué)為目的罩驻。與當(dāng)時的大部分語言不同穗酥,ABC語言的目標(biāo)是“讓用戶感覺更好”。ABC語言希望讓語言變得容易閱讀惠遏,容易使用砾跃,容易記憶,容易學(xué)習(xí)节吮,并以此來激發(fā)人們學(xué)習(xí)編程的興趣抽高。比如下面是一段來自Wikipedia的ABC程序,這個程序用于統(tǒng)計文本中出現(xiàn)的詞的總數(shù):

HOW TO RETURN words document:
PUT {} IN collection
FOR line IN document:
FOR word IN split line:
IF word not.in collection:
INSERT word IN collection
RETURN collection

HOW TO用于定義一個函數(shù)透绩。一個Python程序員應(yīng)該很容易理解這段程序翘骂。ABC語言使用冒號和縮進來表示程序塊。行尾沒有分號帚豪。for和if結(jié)構(gòu)中也沒有括號()碳竟。賦值采用的是PUT,而不是更常見的等號狸臣。這些改動讓ABC程序讀起來像一段文字莹桅。最后,如果你的時間不是很緊張烛亦,并且又想快速的提高诈泼,最重要的是不怕吃苦,建議你可以價位@762459510 煤禽,那個真的很不錯铐达,很多人進步都很快,需要你不怕吃苦哦檬果!大家可以去添加上看一下~

盡管已經(jīng)具備了良好的可讀性和易用性瓮孙,ABC語言最終沒有流行起來。在當(dāng)時选脊,ABC語言編譯器需要比較高配置的電腦才能運行衷畦。而這些電腦的使用者通常精通計算機,他們更多考慮程序的效率知牌,而非它的學(xué)習(xí)難度祈争。除了硬件上的困難外,ABC語言的設(shè)計也存在一些致命的問題:

可拓展性差角寸。ABC語言不是模塊化語言菩混。如果想在ABC語言中增加功能,比如對圖形化的支持扁藕,就必須改動很多地方沮峡。

不能直接進行IO。ABC語言不能直接操作文件系統(tǒng)亿柑。盡管你可以通過諸如文本流的方式導(dǎo)入數(shù)據(jù)邢疙,但ABC無法直接讀寫文件。輸入輸出的困難對于計算機語言來說是致命的。你能想像一個打不開車門的跑車么疟游?

過度革新呼畸。ABC用自然語言的方式來表達程序的意義,比如上面程序中的HOW TO 颁虐。然而對于程序員來說蛮原,他們更習(xí)慣用function或者define來定義一個函數(shù)。同樣另绩,程序員更習(xí)慣用等號來分配變量儒陨。盡管ABC語言很特別,但學(xué)習(xí)難度也很大笋籽。

傳播困難蹦漠。ABC編譯器很大,必須被保存在磁帶上车海。當(dāng)時Guido在訪問的時候笛园,就必須有一個大磁帶來給別人安裝ABC編譯器。 這樣容劳,ABC語言就很難快速傳播喘沿。

1989年,為了打發(fā)圣誕節(jié)假期竭贩,Guido開始寫Python語言的編譯器蚜印。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus留量。他希望這個新的叫做Python的語言窄赋,能符合他的理想:創(chuàng)造一種C和shell之間,功能全面楼熄,易學(xué)易用忆绰,可拓展的語言。Guido作為一個語言設(shè)計愛好者可岂,已經(jīng)有過設(shè)計語言的嘗試错敢。這一次,也不過是一次純粹的hacking行為缕粹。

一門語言的誕生

1991年稚茅,第一個Python編譯器誕生。它是用C語言實現(xiàn)的平斩,并能夠調(diào)用C語言的庫文件亚享。從一出生,Python已經(jīng)具有了:類绘面,函數(shù)欺税,異常處理侈沪,包含表和詞典在內(nèi)的核心數(shù)據(jù)類型,以及模塊為基礎(chǔ)的拓展系統(tǒng)晚凿。

Python語法很多來自C亭罪,但又受到ABC語言的強烈影響。來自ABC語言的一些規(guī)定直到今天還富有爭議晃虫,比如強制縮進皆撩。但這些語法規(guī)定讓Python容易讀扣墩。另一方面哲银,Python聰明的選擇服從一些慣例,特別是C語言的慣例呻惕,比如回歸等號賦值荆责。Guido認(rèn)為,如果“常識”上確立的東西亚脆,沒有必要過度糾結(jié)做院。

Python從一開始就特別在意可拓展性。Python可以在多個層次上拓展濒持。從高層上键耕,你可以直接引入.py文件。在底層柑营,你可以引用C語言的庫屈雄。Python程序員可以快速的使用Python寫.py文件作為拓展模塊。但當(dāng)性能是考慮的重要因素時官套,Python程序員可以深入底層酒奶,寫C程序,編譯為.so文件引入到Python中使用奶赔。Python就好像是使用鋼構(gòu)建房一樣惋嚎,先規(guī)定好大的框架。而程序員可以在此框架下相當(dāng)自由的拓展或更改站刑。最后另伍,如果你的時間不是很緊張,并且又想快速的提高绞旅,最重要的是不怕吃苦摆尝,建議你可以價位@762459510 ,那個真的很不錯玻靡,很多人進步都很快结榄,需要你不怕吃苦哦!大家可以去添加上看一下~

最初的Python完全由Guido本人開發(fā)囤捻。Python得到Guido同事的歡迎臼朗。他們迅速的反饋使用意見,并參與到Python的改進。Guido和一些同事構(gòu)成Python的核心團隊视哑。他們將自己大部分的業(yè)余時間用于hack Python绣否。隨后,Python拓展到研究所之外挡毅。Python將許多機器層面上的細節(jié)隱藏蒜撮,交給編譯器處理,并凸顯出邏輯層面的編程思考跪呈。Python程序員可以花更多的時間用于思考程序的邏輯段磨,而不是具體的實現(xiàn)細節(jié)。這一特征吸引了廣大的程序員耗绿。Python開始流行苹支。

image.png

人生苦短,我用python

時勢造英雄

我們不得不暫停我們的Python時間误阻,轉(zhuǎn)而看一看瞬息萬變的計算機行業(yè)债蜜。1990年代初,個人計算機開始進入普通家庭究反。Intel發(fā)布了486處理器寻定,windows發(fā)布window 3.0開始的一系列視窗系統(tǒng)。計算機的性能大大提高精耐。程序員開始關(guān)注計算機的易用性 狼速,比如圖形化界面。

image.png

Windows 3.0

由于計算機性能的提高黍氮,軟件的世界也開始隨之改變唐含。硬件足以滿足許多個人電腦的需要。硬件廠商甚至渴望高需求軟件的出現(xiàn)沫浆,以帶動硬件的更新?lián)Q代捷枯。C++和Java相繼流行。C++和Java提供了面向?qū)ο蟮木幊谭妒阶ㄖ矗约柏S富的對象庫淮捆。在犧牲了一定的性能的代價下,C++和Java大大提高了程序的產(chǎn)量本股。語言的易用性被提到一個新的高度攀痊。我們還記得,ABC失敗的一個重要原因是硬件的性能限制拄显。從這方面說苟径,Python要比ABC幸運許多。

另一個悄然發(fā)生的改變是Internet躬审。1990年代還是個人電腦的時代棘街,windows和Intel挾PC以令天下蟆盐,盛極一時。盡管Internet為主體的信息革命尚未到來遭殉,但許多程序員以及資深計算機用戶已經(jīng)在頻繁使用Internet進行交流石挂,比如使用email和newsgroup。Internet讓信息交流成本大大下降险污。一種新的軟件開發(fā)模式開始流行:開源痹愚。程序員利用業(yè)余時間進行軟件開發(fā),并開放源代碼蛔糯。1991年拯腮,Linus在comp.os.minix新聞組上發(fā)布了Linux內(nèi)核源代碼,吸引大批hacker的加入渤闷。Linux和GNU相互合作疾瓮,最終構(gòu)成了一個充滿活力的開源平臺脖镀。

硬件性能不是瓶頸飒箭,Python又容易使用,所以許多人開始轉(zhuǎn)向Python蜒灰。Guido維護了一個maillist弦蹂,Python用戶就通過郵件進行交流。Python用戶來自許多領(lǐng)域强窖,有不同的背景凸椿,對Python也有不同的需求。Python相當(dāng)?shù)拈_放翅溺,又容易拓展脑漫,所以當(dāng)用戶不滿足于現(xiàn)有功能,很容易對Python進行拓展或改造咙崎。隨后优幸,這些用戶將改動發(fā)給Guido,并由Guido決定是否將新的特征加入到Python或者標(biāo)準(zhǔn)庫中褪猛。如果代碼能被納入Python自身或者標(biāo)準(zhǔn)庫网杆,這將極大的榮譽。由于Guido至高無上的決定權(quán)伊滋,他因此被稱為“終身的仁慈獨裁者”碳却。

Python被稱為“Battery Included”,是說它以及其標(biāo)準(zhǔn)庫的功能強大笑旺。這些是整個社區(qū)的貢獻昼浦。Python的開發(fā)者來自不同領(lǐng)域,他們將不同領(lǐng)域的優(yōu)點帶給Python筒主。比如Python標(biāo)準(zhǔn)庫中的正則表達是參考Perl关噪,而lambda, map, filter, reduce等函數(shù)參考了Lisp迷帜。Python本身的一些功能以及大部分的標(biāo)準(zhǔn)庫來自于社區(qū)。Python的社區(qū)不斷擴大色洞,進而擁有了自己的newsgroup戏锹,網(wǎng)站,以及基金火诸。從Python 2.0開始锦针,Python也從maillist的開發(fā)方式,轉(zhuǎn)為完全開源的開發(fā)方式置蜀。社區(qū)氣氛已經(jīng)形成奈搜,工作被整個社區(qū)分擔(dān),Python也獲得了更加高速的發(fā)展盯荤。

到今天馋吗,Python的框架已經(jīng)確立。Python語言以對象為核心組織代碼秋秤,支持多種編程范式宏粤,采用動態(tài)類型,自動進行內(nèi)存回收灼卢。Python支持解釋運行绍哎,并能調(diào)用C庫進行拓展。Python有強大的標(biāo)準(zhǔn)庫鞋真。由于標(biāo)準(zhǔn)庫的體系已經(jīng)穩(wěn)定崇堰,所以Python的生態(tài)系統(tǒng)開始拓展到第三方包。這些包涩咖,如Django海诲、web.py、wxpython檩互、numpy特幔、matplotlib、PIL盾似,將Python升級成了物種豐富的熱帶雨林敬辣。

啟示錄

Python崇尚優(yōu)美、清晰零院、簡單溉跃,是一個優(yōu)秀并廣泛使用的語言。Python在TIOBE排行榜中排行第八告抄,它是Google的第三大開發(fā)語言撰茎,Dropbox的基礎(chǔ)語言,豆瓣的服務(wù)器語言打洼。Python的發(fā)展史可以作為一個代表龄糊,帶給我許多啟示逆粹。

在Python的開發(fā)過程中,社區(qū)起到了重要的作用炫惩。Guido自認(rèn)為自己不是全能型的程序員僻弹,所以他只負責(zé)制訂框架。如果問題太復(fù)雜他嚷,他會選擇繞過去蹋绽,也就是cut the corner。這些問題最終由社區(qū)中的其他人解決筋蓖。社區(qū)中的人才是異常豐富的卸耘,就連創(chuàng)建網(wǎng)站,籌集基金這樣與開發(fā)稍遠的事情粘咖,也有人樂意于處理蚣抗。如今的項目開發(fā)越來越復(fù)雜,越來越龐大瓮下,合作以及開放的心態(tài)成為項目最終成功的關(guān)鍵翰铡。

Python從其他語言中學(xué)到了很多,無論是已經(jīng)進入歷史的ABC唱捣,還是依然在使用的C和Perl两蟀,以及許多沒有列出的其他語言≌痃裕可以說,Python的成功代表了它所有借鑒的語言的成功战虏。同樣拣宰,Ruby借鑒了Python,它的成功也代表了Python某些方面的成功烦感。每個語言都是混合體巡社,都有它優(yōu)秀的地方,但也有各種各樣的缺陷手趣。同時晌该,一個語言“好與不好”的評判,往往受制于平臺绿渣、硬件朝群、時代等等外部原因。程序員經(jīng)歷過許多語言之爭中符。其實姜胖,以開放的心態(tài)來接受各個語言,說不定哪一天淀散,程序員也可以如Guido那樣右莱,混合出自己的語言蚜锨。

無論Python未來的命運如何,Python的歷史已經(jīng)是本很有趣的小說慢蜓。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亚再,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晨抡,更是在濱河造成了極大的恐慌针余,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凄诞,死亡現(xiàn)場離奇詭異圆雁,居然都是意外死亡,警方通過查閱死者的電腦和手機帆谍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門伪朽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人汛蝙,你說我怎么就攤上這事烈涮。” “怎么了窖剑?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵坚洽,是天一觀的道長。 經(jīng)常有香客問我西土,道長讶舰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任需了,我火速辦了婚禮跳昼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肋乍。我一直安慰自己鹅颊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布墓造。 她就那樣靜靜地躺著堪伍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪觅闽。 梳的紋絲不亂的頭發(fā)上帝雇,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音谱煤,去河邊找鬼摊求。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的室叉。 我是一名探鬼主播睹栖,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼茧痕!你這毒婦竟也來了野来?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤踪旷,失蹤者是張志新(化名)和其女友劉穎曼氛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體令野,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡舀患,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了气破。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聊浅。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖现使,靈堂內(nèi)的尸體忽然破棺而出低匙,到底是詐尸還是另有隱情,我是刑警寧澤碳锈,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布顽冶,位于F島的核電站,受9級特大地震影響售碳,放射性物質(zhì)發(fā)生泄漏强重。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一团滥、第九天 我趴在偏房一處隱蔽的房頂上張望竿屹。 院中可真熱鬧,春花似錦灸姊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至召嘶,卻和暖如春父晶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弄跌。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工甲喝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铛只。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓埠胖,卻偏偏與公主長得像糠溜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子直撤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容