過去的幾十年間,大量的編程語言被發(fā)明、被替換、被修改或組合在一起。每種語言總在爭論中誕生,又在進(jìn)化中消亡。而這些語言的的創(chuàng)造者,無一不是編程世界中的標(biāo)志性人物,高舉探索的旗幟不斷前行。敬仰之情促使了這篇文章的誕生,這里收集并分享了這五十年來最成功、最流行的十二門編程語言和它們的創(chuàng)造者的故事。
1、Java 的起源
1990 年代初,任職于 Sun 公司的詹姆斯·高斯林等人開始開發(fā) Java 語言的雛形,最初被命名為 Oak,目標(biāo)設(shè)置在家用電器等小型系統(tǒng)的程序語言,應(yīng)用在電視機(jī)、電話、鬧鐘、烤面包機(jī)等家用電器的控制和通訊。由于這些智能化家電的市場需求沒有預(yù)期的高, Sun 公司放棄了該項計劃。隨著 1990 年代互聯(lián)網(wǎng)的發(fā)展, Sun 公司看見 Oak 在互聯(lián)網(wǎng)上應(yīng)用的前景,于是改造了 Oak,于1995年5月以 Java 的名稱正式發(fā)布。Java 伴隨著互聯(lián)網(wǎng)的迅猛發(fā)展而發(fā)展,逐漸成為重要的網(wǎng)絡(luò)編程語言。
與傳統(tǒng)型態(tài)不同, Sun 公司在推出 Java 時就將其作為開放的技術(shù)。全球數(shù)以萬計的 Java 開發(fā)公司被要求所設(shè)計的Java軟件必須相互兼容。“Java語言靠群體的力量而非公司的力量”是 Sun 公司的口號之一,并獲得了廣大軟件開發(fā)商的認(rèn)同。這與微軟公司所倡導(dǎo)的注重精英和封閉式的模式完全不同,此外,微軟公司后來推出了與之競爭的 .NET 平臺以及模仿 Java 的 C# 語言。后來 Sun 公司被甲骨文公司并購,Java 也隨之成為甲骨文公司的產(chǎn)品。
Java 的創(chuàng)造是為了完成 WORA(Write once, run anywhere 一次編寫到處運行)的理念,它的平臺獨立性使它在企業(yè)應(yīng)用中獲得了巨大成功。到目前為止,它已經(jīng)成為了最流行的一門應(yīng)用程序編程語言,被廣泛應(yīng)用于企業(yè)級Web應(yīng)用開發(fā)和移動應(yīng)用開發(fā)。
2、C++ 的起源
這個構(gòu)思起源于 Stroustrup 做博士論文時的一些程序撰寫經(jīng)驗。他發(fā)現(xiàn) Simula 具備很利于大型軟件開發(fā)的特點,但 Simula 的運行速度太慢,無法對現(xiàn)實需求發(fā)揮功效;BCPL 雖快得多,但它過于低級的特性,使其不適于大型軟件的開發(fā)。當(dāng) Stroustrup 開始在貝爾實驗室工作時,他有分析 UNIX 核心關(guān)于分布式計算的問題。回想起他的博士論文經(jīng)驗,Stroustrup 開始為 C 語言增強(qiáng)一些類似 Simula 的特點。之所以選擇 C,是因為它適于各種用途、快速和可移植性。除了 C 和 Simula 之外,同時也從其它語言中獲取靈感,如 ALGOL 68、Ada、CLU 以及 ML。剛開始時,類、派生類、存儲類型檢查、內(nèi)聯(lián)和默認(rèn)參數(shù)特性,都是通過 Cfront 引入 C 語言之中。1985 年 10 月出現(xiàn)了第一個商業(yè)化發(fā)布。
1983 年,C with Classes 改命名為 C++。加入了新的特性,其中包括虛函數(shù)、函數(shù)名和運算符重載、參考、常數(shù)、用戶可控制的自由空間存儲區(qū)控制、改良的類型檢查,以及新的雙斜線(//)單行注解風(fēng)格。1985年,發(fā)布第一版《C++程序設(shè)計語言》,提供一個重點的語言參考,至此還不是官方標(biāo)準(zhǔn)。1989年,發(fā)布了Release 2.0。引入了多重繼承、抽象類、靜態(tài)成員函數(shù)、常數(shù)成員函數(shù),以及成員保護(hù)。1990年,出版了The Annotated C++ Reference Manual。這本書后來成為標(biāo)準(zhǔn)化的基礎(chǔ)。稍后還引入了模板、異常處理、名字空間、新的強(qiáng)制類型轉(zhuǎn)換,以及布爾類型。
C++ 這個名字是 Rick Mascitti 于 1983 年中所建議的,并于 1983 年 12 月首次使用。更早以前,尚在研究階段的發(fā)展中語言曾被稱為“new C”,之后是“C with Classes”。在計算機(jī)科學(xué)中,C++ 仍被稱為 C 語言的上層結(jié)構(gòu)。它最后得名于 C 語言中的“++”操作符(其對變量的值進(jìn)行遞增)。而且在共同的命名約定中,使用“+”以表示增強(qiáng)的程序。Stroustrup 說:“這個名字象征著源自于C語言變化的自然演進(jìn)”。C+ 是一個和 C/C++ 無關(guān)的早期編程語言。
3、ASP.NET 的起源
1997 年時,微軟開始針對 ASP 的缺點(尤其是意大利面型的程序開發(fā)方法)準(zhǔn)備開始一個新項目來開發(fā),當(dāng)時 ASP.NET 的主要領(lǐng)導(dǎo)人 Scott Guthrie 剛從杜克大學(xué)畢業(yè),他和 IIS 團(tuán)隊的 Mark Anders 經(jīng)理一起合作兩個月,開發(fā)出了下一代 ASP 技術(shù)的原型,這個原型在 1997 年的圣誕節(jié)時被發(fā)展出來,并給予一個名稱:XSP,這個原型產(chǎn)品使用的是 Java 語言。不過它馬上就被納入當(dāng)時還在開發(fā)中的 CLR 平臺,Scott Guthrie事后也認(rèn)為將這個技術(shù)移植到當(dāng)時的 CLR 平臺,確實有很大的風(fēng)險,但當(dāng)時的 XSP 團(tuán)隊卻是以 CLR 開發(fā)應(yīng)用的第一個團(tuán)隊。
為了將 XSP 移植到 CLR 中,XSP 團(tuán)隊將 XSP 的核心程序全部以 C# 語言重新撰寫(在內(nèi)部的項目代號是 "Project Cool",但是當(dāng)時對公開場合是保密的),并且改名為 ASP+,作為 ASP 技術(shù)的后繼者,并且也會提供一個簡單的移轉(zhuǎn)方法給 ASP 開發(fā)人員。ASP+ Beta 版本以及應(yīng)用在 PDC 2000 中亮相,由 Bill Gates 主講,由富士通公司展示使用 COBOL 語言撰寫 ASP+ 應(yīng)用程序,并且宣布它可以使用 Visual Basic .NET、C#、Perl、Nemerle 與 Python 語言來開發(fā)。
在 2000 年第二季時,微軟正式推動 .NET 策略,ASP+ 也順理成章的改名為 ASP.NET,經(jīng)過四年的開發(fā),第一個版本的 ASP.NET 在 2002 年 1 月 5 日亮相(和.NET Framework 1.0),Scott Guthrie 也成為ASP.NET的產(chǎn)品經(jīng)理(到現(xiàn)在已經(jīng)開發(fā)了數(shù)個微軟產(chǎn)品,像 ASP.NET AJAX 和 Microsoft Silverlight)。
4、PHP 的起源
PHP 原本的簡稱為 Personal Home Page,是拉斯姆斯·勒多夫為了要維護(hù)個人網(wǎng)頁,而用 C 語言開發(fā)的一些CGI 工具程序集,來替換原先使用的 Perl 程序。最初這些工具程序用來顯示拉斯姆斯·勒多夫的個人履歷,以及統(tǒng)計網(wǎng)頁流量。他將這些程序和一些窗體解釋器集成起來,稱為 PHP/FI。PHP/FI 可以和數(shù)據(jù)庫連接,產(chǎn)生簡單的動態(tài)網(wǎng)頁程序。拉斯姆斯·勒多夫在 1995 年 6 月 8 日將 PHP/FI 公開發(fā)布,希望可以通過社區(qū)來加速程序開發(fā)與查找錯誤。這個發(fā)布的版本命名為 PHP 2,已經(jīng)有今日 PHP 的一些雛型,像是類似 Perl 的變量命名方式、窗體處理功能、以及嵌入到 HTML 中運行的能力。程序語法上也類似 Perl,有較多的限制,不過更簡單、更有彈性。
在 1997 年,任職于 Technion IIT 公司的兩個以色列程序員:Zeev Suraski 和 Andi Gutmans,重寫了PHP 的語法分析器,成為 PHP 3 的基礎(chǔ),而 PHP 也在這個時候改稱為 PHP: Hypertext Preprocessor.。經(jīng)過幾個月測試,開發(fā)團(tuán)隊在 1997 年 11 月發(fā)布了 PHP/FI 2,隨后就開始 PHP 3 的開放測試,最后在 1998 年 6 月正式發(fā)布 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 發(fā)布后開始改寫 PHP 的核心,這個在 1999 年發(fā)布的語法分析器稱為 Zend Engine,他們也在以色列的 Ramat Gan 成立了 Zend Technologies 來管理 PHP 的開發(fā)。
在 2000 年 5 月 22 日,以 Zend Engine 1.0 為基礎(chǔ)的 PHP 4 正式發(fā)布,2004 年 7 月 13 日則發(fā)布了 PHP 5,PHP 5 則使用了第二代的 Zend Engine。PHP 包含了許多新特色,像是強(qiáng)化的面向?qū)ο蠊δ堋⒁?PDO(PHP Data Objects,一個訪問數(shù)據(jù)庫的延伸庫)、以及許多性能上的增強(qiáng)。目前 PHP 4 已經(jīng)不會繼續(xù)更新,以鼓勵用戶轉(zhuǎn)移到 PHP 5。
2008 年 PHP 5 成為了 PHP 唯一維護(hù)中的穩(wěn)定版本。現(xiàn)在已經(jīng)有超過 2000 萬個網(wǎng)站和 100 萬個Web服務(wù)器使用了這門語言,F(xiàn)acebook、Wikipedia、Wordpress 以及 Joomla 這些互聯(lián)網(wǎng)巨頭都在使用它。
5、JavaScript 的起源
最初由 Netscape 的 Brendan Eich 設(shè)計。 是甲骨文公司的注冊商標(biāo)。ECMA 國際以 為基礎(chǔ)制定了 ECMAScript 標(biāo)準(zhǔn)。 也可以用于其他場合,如服務(wù)器端編程。完整的 實現(xiàn)包含三個部分:ECMAScript,文檔對象模型,瀏覽器對象模型。
Netscape 在最初將其腳本語言命名為 LiveScript,后來 Netscape 在與 Sun 合作之后將其改名為 。 最初受 Java 啟發(fā)而開始設(shè)計的,目的之一就是“看上去像 Java”,因此語法上有類似之處,一些名稱和命名規(guī)范也借自 Java。但 的主要設(shè)計原則源自 Self 和 Scheme。 與 Java 名稱上的近似,是當(dāng)時 Netscape 為了營銷考慮與 Sun 微系統(tǒng)達(dá)成協(xié)議的結(jié)果。為了取得技術(shù)優(yōu)勢,微軟推出了 JScript 來迎戰(zhàn) 的腳本語言。為了互用性,Ecma 國際(前身為歐洲計算機(jī)制造商協(xié)會)創(chuàng)建了 ECMA-262 標(biāo)準(zhǔn)(ECMAScript)。兩者都屬于 ECMAScript 的實現(xiàn)。盡管 作為給非程序人員的腳本語言,而非作為給程序人員的腳本語言來推廣和宣傳,但是 具有非常豐富的特性。
6、「紅寶石」語言的起源
1993年,松本行弘開始 Ruby 語言的研發(fā)工作,試圖集成腳本語言中最好的特點,基于 C 語言開發(fā),但比 Perl 更強(qiáng)大,比 Python 更面向?qū)ο蟆?994 年,松本行弘獨立完成 Ruby 的第一個 Alpha 版,那年他才28歲。松本行弘把它取名 Ruby,也因這名字是一種美麗珍貴的紅寶石之意。Ruby 本身也極具魅力——這種解釋型腳本語言,既有腳本語言強(qiáng)大的字符串處理能力和正則表達(dá)式,又不失解釋型語言的動態(tài)性。
此外,松本行弘還借鑒了 Perl 語言在文字處理方面的優(yōu)勢,由 Ruby 編寫的程序不需事先編譯即可直接運行,因此利于實現(xiàn)開發(fā)過程中的快速反饋,極大地方便了程序的調(diào)試。1995 年 Ruby 腳本語言的第一個版本發(fā)布后,因其大大提高了開發(fā)者的工作效率,讓編程更有樂趣,很快在日本非常流行。
1997 年開始,松本行弘在“株式會社 Network 應(yīng)用通信研究所”擔(dān)任特別研究員,專注于 Ruby 的開發(fā)。2000年,Dave Thomas 首次將這 Ruby 介紹到了英文社區(qū),很快掀起了 Ruby 語言的熱潮。Ruby 的靈活特性給動態(tài)編程語言注入了新的活力,逐漸獲得全世界范圍的程序設(shè)計者的喜愛。
世界上沒有一種完美的語言,Ruby 也一樣。盡管 Ruby 很棒,但很多人還是覺得他的性能效率較低。不過好在后來開發(fā)者也通過一些擴(kuò)展來彌補(bǔ) Ruby 的瓶頸。2004年,丹麥人 David Heinemeier Hansson 用 Ruby 語言開發(fā)的一種 Web 框架 Ruby on Rails,可達(dá)到 J2EE 開發(fā)速度的 10 倍以上,被很多人視為“軟件開發(fā)的銀彈”,Ruby 開始在全球范圍內(nèi)流行。
7、Scala 的起源
Scala 是一門多范式的編程語言,一種類似 Java 的編程語言,設(shè)計初衷是實現(xiàn)可伸縮的語言、并集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。
2001 年,洛桑聯(lián)邦理工學(xué)院的馬丁·奧德斯基開始基于 Funnel 的工作開始設(shè)計 Scala。Funnel 是把函數(shù)式編程思想和佩特里網(wǎng)相結(jié)合的一種編程語言。 奧德斯基之前工作于 Generic Java 和 javac。Java 平臺的Scala 于 2003 年底/ 2004 年初發(fā)布。.NET 平臺的 Scala 發(fā)布于 2004 年 6 月。該語言第二個版本,v2.0,發(fā)布于 2006 年 3 月。2009 年 4 月,Twitter 宣布他們已經(jīng)把大部分后端程序從 Ruby 遷移到Scala,其余部分也打算要遷移。此外, Wattzon 已經(jīng)公開宣稱,其整個平臺都已經(jīng)是基于 Scala 基礎(chǔ)設(shè)施編寫的。
2014 年,馬丁·奧德斯基宣布 Scala 2.12 將要簡化語法,推出 Scala "Don Giovanni" 項目的時候,表示:“Scala 現(xiàn)在是為聰明人創(chuàng)造的,以后也是為聰明人服務(wù)的。” 不同于 Python 讓程序員用一種方法做所有事情,Scala 提供一整套工具,讓程序員自由選擇,無論是 mutable 數(shù)據(jù)結(jié)構(gòu),immutable 數(shù)據(jù)結(jié)構(gòu),并行(parallel)數(shù)據(jù)結(jié)構(gòu)。然后在這些選擇中,Scala 再針對他們進(jìn)行算法層面的特殊優(yōu)化。Scala 相信程序員的聰明才智,讓程序員自行選擇合適的結(jié)構(gòu),以針對變化萬千的任務(wù)需求,這點是 Scala 做得好的地方。
8、Python 的起源
1989 年的圣誕節(jié)期間,吉多·范羅蘇姆為了在阿姆斯特丹打發(fā)時間,決心開發(fā)一個新的腳本解釋程序,作為 ABC 語言的一種繼承。之所以選中 Python 作為程序的名字,是因為他是 BBC 電視劇——蒙提·派森的飛行馬戲團(tuán)(Monty Python's Flying Circus)的愛好者。ABC 是由吉多參加設(shè)計的一種教學(xué)語言。就吉多本人看來,ABC 這種語言非常優(yōu)美和強(qiáng)大,是專門為非專業(yè)程序員設(shè)計的。但是 ABC 語言并沒有成功,究其原因,吉多認(rèn)為是非開放造成的。吉多決心在 Python 中避免這一錯誤,并獲取了非常好的效果,完美結(jié)合了 C 和其他一些語言。
就這樣,Python 在吉多手中誕生了。實際上,第一個實現(xiàn)是在 Mac 機(jī)上。可以說,Python 是從 ABC 發(fā)展起來,主要受到了 Modula-3(另一種相當(dāng)優(yōu)美且強(qiáng)大的語言,為小型團(tuán)體所設(shè)計的)的影響。并且結(jié)合了 Unix shell 和C 的習(xí)慣。目前吉多仍然是 Python 的主要開發(fā)者,決定整個 Python 語言的發(fā)展方向。Python 社區(qū)經(jīng)常稱呼他是仁慈的獨裁者(BDFL),意思是他仍然關(guān)注 Python 的開發(fā)進(jìn)程,并在必要的時刻做出決定。
Python 的設(shè)計哲學(xué)是“優(yōu)雅”、“明確”、“簡單”。Python 開發(fā)者的哲學(xué)是“用一種方法,最好是只有一種方法來做一件事”。在設(shè)計 Python 語言時,如果面臨多種選擇,Python 開發(fā)者一般會拒絕花俏的語法,而選擇明確沒有或者很少有歧義的語法。這些準(zhǔn)則被稱為“Python 格言”。
9、Go 的起源
Go,又稱 golang,是 Google 開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型,并發(fā)型,并具有垃圾回收功能的編程語言。
羅伯特·格瑞史莫,羅勃·派克(Rob Pike)及肯·湯普遜于 2007 年 9 月開始設(shè)計 Go 語言,稍后 Ian Lance Taylor, Russ Cox 加入項目中。谷歌把 Go 作為一個 20% 項目開始研發(fā),即讓員工抽出本職工作之外時間的 20%, 投入在該項目上。除了派克外,該項目的成員還有其他谷歌工程師也參與研發(fā)。對于開發(fā)這門語言的起因,派克說:我們之所以開發(fā) Go,是因為過去 10 多年間軟件開發(fā)的難度令人沮喪。
Go 語言是基于 Inferno 操作系統(tǒng)所開發(fā)的。Go 語言于 2009 年 11 月正式宣布推出,成為開放源代碼項目,并在 Linux 及 MacOS X 平臺上進(jìn)行了實現(xiàn),后追加 Windows 系統(tǒng)下的實現(xiàn)。2010 年 1 月 10 日,Go 語言摘得了 TIOBE 公布的 2009 年年度大獎,該獎項授予在 2009 年市場份額增長最多的編程語言
10、Android 的起源
2003 年 10 月,安迪·魯賓(Andy Rubin)在美國創(chuàng)建了 Android 科技公司(Android Inc.),并與利奇·米納爾(Rich Miner)、尼克·席爾斯(Nick Sears)、克里斯·懷特(Chris White)共同發(fā)展這家公司。Android 系統(tǒng)最初由安迪·魯賓(Andy Rubin)等人開發(fā)制作,最初開發(fā)這個系統(tǒng)的目的是創(chuàng)建一個數(shù)碼相機(jī)的先進(jìn)操作系統(tǒng),但是后來發(fā)現(xiàn)市場需求不夠大,加上智能手機(jī)市場快速成長,于是 Android 被改造為一款面向智能手機(jī)的操作系統(tǒng)。談到創(chuàng)建 Android 科技公司的原因,魯賓說:“聰明的移動設(shè)備能更好的意識到用戶的愛好和要求。”盡管 Android 科技公司的創(chuàng)始人和員工過去都具有各自的科技成就,但是 Android 科技公司的經(jīng)營只顯露出它在智能手機(jī)軟件的方面,這時魯賓為 Android 科技公司花光所有錢。
2005 年 8 月 17 日,Google 低調(diào)收購了成立僅 22 個月的高科技企業(yè) Android 及其團(tuán)隊。安迪魯賓成為Google 公司工程部副總裁,繼續(xù)負(fù)責(zé) Android 項目。2007 年 11 月 5 日,谷歌公司正式向外界展示了這款名為 Android 的操作系統(tǒng),并且在這天谷歌宣布建立一個全球性的聯(lián)盟組織,該組織由34家手機(jī)制造商、軟件開發(fā)商、電信運營商以及芯片制造商共同組成,并與 84 家硬件制造商、軟件開發(fā)商及電信營運商組成開放手持設(shè)備聯(lián)盟(Open Handset Alliance)來共同研發(fā)改良 Android 系統(tǒng)。
2013 年 09 月 24 日谷歌開發(fā)的操作系統(tǒng) Android 迎來了 5 歲生日,全世界采用這款系統(tǒng)的設(shè)備數(shù)量已經(jīng)達(dá)到 10 億臺。
11、Swift 的起源
2010 年 7 月,蘋果開發(fā)者工具部門總監(jiān)克里斯·拉特納開始著手 Swift 編程語言的設(shè)計工作,以一年時間,完成基本架構(gòu)后,他領(lǐng)導(dǎo)了一個設(shè)計團(tuán)隊大力參與其中。Swift 大約歷經(jīng)4年的開發(fā)期,2014 年 6 月發(fā)表。
蘋果宣稱 Swift 的特點是:快速、現(xiàn)代、安全、互動,而且明顯優(yōu)于 Objective-C 語言。Swift 以 LLVM 編譯,可以使用現(xiàn)有的 Cocoa 和 Cocoa Touch 框架。Xcode Playgrounds 功能是 Swift 為蘋果開發(fā)工具帶來的最大創(chuàng)新,該功能提供強(qiáng)大的互動效果,能讓 Swift 源代碼在撰寫過程中能即時顯示出其運行結(jié)果。拉特納本人強(qiáng)調(diào),Playgrounds 很大程度是受到布雷特·維克多(Bret Victor)理念的啟發(fā)。
2015 年 6 月 8 日,蘋果于 WWDC 2015 上宣布,Swift 將開放源代碼,包括編譯器和標(biāo)準(zhǔn)庫。
2015 年 12 月 3 日,蘋果宣布開源 Swift,并支持 Linux,蘋果在新網(wǎng)站 swift.org 和托管網(wǎng)站 Github 上開源了 Swift,但蘋果的 app store 并不支持開源的 Swift,只支持蘋果官方的 Swift 版本,官方版本會在新網(wǎng)站 swift.org 上定期與開源版本同步。
12、Node.js 的起源
Node.js 由 Ryan Dahl 和一些其他的開發(fā)者于2009年在 Joyent 工作時發(fā)明。Node.js 在2009年初次發(fā)布于Linux。 開發(fā)和維護(hù)工作由 Dahl 主持,其工作單位 Joyent 同時贊助這些工作。
Dahl 設(shè)計 Node.js 的靈感來自于 Flickr 上的一款上傳進(jìn)度欄,瀏覽器并不清楚多少文件內(nèi)容已被上傳,除非向服務(wù)器進(jìn)行查詢。Dahl 于是設(shè)計了一個更簡便的方法。這個集成了 Google V8 JavaScript 引擎和一個底層 I/O API 的項目由 Dahl 在 inaugural European JSConf 向公眾進(jìn)行展示。
Node.js 已經(jīng)有數(shù)十萬模塊,它們可以通過一個名為 npm 的管理器免費下載。
本文系 OneAPM 工程師整理呈現(xiàn)。OneAPM 能為您提供端到端的應(yīng)用性能解決方案,我們支持所有常見的框架及應(yīng)用服務(wù)器,助您快速發(fā)現(xiàn)系統(tǒng)瓶頸,定位異常根本原因。分鐘級部署,即刻體驗,性能監(jiān)控從來沒有如此簡單。想閱讀更多技術(shù)文章,請訪問 OneAPM 官方技術(shù)博客。
本文轉(zhuǎn)自 OneAPM 官方博客