編程語言的發(fā)展趨勢(shì)及未來方向(1):歷史回顧及趨勢(shì)概述
這是Anders Hejlsberg(不用介紹這是誰了吧)在比利時(shí)TechDays 2010所做的開場(chǎng)演講。由于最近我在博客上關(guān)于語言的討論比較多,出于應(yīng)景,也打算將Anders的演講完整地聽寫出來。我希望這個(gè)講座可以從側(cè)面回答某些朋友關(guān)于“語言討論是否有價(jià)值”的疑問,并且展示出目前語言的發(fā)展?fàn)顩r以及微軟在這方面的努力。完整內(nèi)容將分為多次發(fā)表,每次一小部分,包含大約10分鐘的演講內(nèi)容。等不及的朋友也和可以下載演講視頻一睹為快?,F(xiàn)在的第1部分則包含Anders對(duì)編程語言發(fā)展的歷史回顧,以及對(duì)趨勢(shì)簡(jiǎn)單概述。
本文引用地址:http://www.ex-cimer.com/article/201703/345867.htm如果沒有特別說明,所有的文字都直接翻譯自Anders的演講,并使用我自己的口語習(xí)慣表達(dá)出來,對(duì)于Anders的口誤及反復(fù)等情況,必要時(shí)在譯文中自然也會(huì)進(jìn)行忽略。為了方便理解,我也會(huì)將視頻中關(guān)鍵部分進(jìn)行截圖,而某些代碼演示則會(huì)直接作為文章內(nèi)容發(fā)表。
(聽寫開始)
大家好,我是Anders Hejlsberg,現(xiàn)在是微軟的Technical Fellow,擔(dān)任C#編程語言的首席架構(gòu)師,也參與并領(lǐng)導(dǎo).NET Framework以及各種語言的開發(fā)。我現(xiàn)在打算談一下……實(shí)際上是我腦海中一些影響未來5到10年編程語言設(shè)計(jì)的內(nèi)容。比如C#或VB該怎么走,F(xiàn)#該怎么辦,這次演講主要就是討論這些影響我們的東西。
雖然主要內(nèi)容是談?wù)撐磥淼?,但是我還是想先回顧一下歷史。你們有些人可能對(duì)這個(gè)產(chǎn)品有印象,這是我大約27年前的工作內(nèi)容,Turbo Pascal,這也是我進(jìn)入這個(gè)領(lǐng)域的起點(diǎn)。我先在拿出這個(gè)東西是想展示當(dāng)年寫程序的情況,然后可以討論目前究竟的發(fā)展到哪兒了。
事實(shí)上,我現(xiàn)在的機(jī)器里正好有TURBO.COM文件,大約39K,嘿,現(xiàn)在還可以運(yùn)行。我們現(xiàn)在來試著寫一點(diǎn)程序。先來創(chuàng)建的程序叫做Hello.pas……(開始寫代碼)……一個(gè)Pascal小程序?qū)懞昧耍覀儊磉\(yùn)行一下……(出現(xiàn)編譯錯(cuò)誤)啊噢,有地方我寫錯(cuò)了……這個(gè)特性在當(dāng)年是個(gè)創(chuàng)新,它會(huì)自動(dòng)打開編輯器,直接把我們帶去出錯(cuò)的地方。嗯,我們現(xiàn)在來糾正語法錯(cuò)誤,把雙引號(hào)改成單引號(hào)。
再運(yùn)行一下,現(xiàn)在成功了,(觀眾掌聲)呵呵,謝謝,謝謝。事實(shí)上,在27年后這個(gè)程序還能在這臺(tái)機(jī)器上運(yùn)行還真是挺神奇的。
現(xiàn)在,我們來看一下,從那時(shí)算起硬件已經(jīng)發(fā)展了……嗯,我那時(shí)寫Pascal的機(jī)器是Z-80,擁有48K內(nèi)存。從那時(shí)算起,我現(xiàn)在這臺(tái)機(jī)器已經(jīng)有大約10萬倍的外部存儲(chǔ)容量,1萬倍的內(nèi)存大小,CPU速度也有大約1000倍的提高。
但是如果你關(guān)注一下目前的軟件……過去27年里編程語言到底進(jìn)步了多少?呵呵,有趣的是如果你仔細(xì)觀察這些代碼,會(huì)發(fā)現(xiàn)C#還比Turbo Pascal的版本多一行。這也給我們帶來了一些值得關(guān)注的東西。
首先,編程語言的發(fā)展非常緩慢。期間當(dāng)然出現(xiàn)了一些東西,例如面向?qū)ο蟮鹊?,但是遠(yuǎn)沒有好上1000倍。另一方面,你可能會(huì)想,那么這些努力都到哪里去了呢?事實(shí)上這些努力沒有體現(xiàn)在編程語言上,而是出現(xiàn)在框架及工具等方面了。如果你關(guān)注如今我們使用的框架,它們的體積的確有1000倍的增長。例如當(dāng)年Turbo Pascal所帶的框架大約有,比如說100個(gè)功能,而現(xiàn)在的.NET Framework里則有一萬個(gè)類,十萬個(gè)方法,的確有1000倍的增長。與此類似,如果你觀察現(xiàn)在的IDE,我們現(xiàn)在已經(jīng)有了無數(shù)強(qiáng)大的功能,例如語法提示,重構(gòu),調(diào)試器,探測(cè)器等等,這方面的新東西有很多。與此相比,編程語言的改進(jìn)的確很不明顯。
另一方面,如.NET,Java等框架的重要性提高了許多。而編程語言往往都傾向于構(gòu)建于現(xiàn)有的工具上,而不會(huì)從頭寫起?,F(xiàn)在出現(xiàn)的編程語言,例如F#,如果你關(guān)注Java領(lǐng)域那么還有Scala,Clojure等等,它們都是基于現(xiàn)有框架構(gòu)建的?,F(xiàn)在已經(jīng)有太多東西可以直接利用了,每次從頭開始的代價(jià)實(shí)在太高。
還有件事,便是在過去5、60年的編程歷史中,我們都不斷地提高抽象級(jí)別,我們都在不斷地讓編程語言更有表現(xiàn)力,讓我們可以用更少的代碼完成更多的工作。我們一開始先使用匯編,然后使用面向過程的語言,例如Pascal和C,然后便是面向?qū)ο笳Z言,如C++,隨后就進(jìn)入了托管時(shí)代──受托管的執(zhí)行環(huán)境,例如.NET,Java,它們的主要特性有自動(dòng)的垃圾收集,類型安全等等。我目前還沒有看出這樣的趨勢(shì)有停止的跡象,因此我們還會(huì)看到抽象級(jí)別越來越高的語言,而語言的設(shè)計(jì)者則必須理解并預(yù)測(cè)下一個(gè)抽象級(jí)別是什么樣子的。
我認(rèn)為,現(xiàn)在影響力較大的趨勢(shì)主要有3種。首先,我們會(huì)越來越多地使用聲明式的編程風(fēng)格。這里我主要會(huì)提到例如DSL(Domain Specific Language,領(lǐng)域特定語言)以及函數(shù)式編程。然后在過去的五年里,我發(fā)現(xiàn)對(duì)于動(dòng)態(tài)語言的研究變得非?;馃幔渲袑?duì)我們產(chǎn)生重大影響的無疑是動(dòng)態(tài)語言所擁有的良好的元編程能力,還有一些非常有趣的東西,例如JavaScript引擎的發(fā)展。然后便是并發(fā)編程,無論我們?cè)覆辉敢?,多核的產(chǎn)生都在迫使我們不得不重視并發(fā)編程。
有一點(diǎn)值得一提,那便是隨著語言的發(fā)展,原本的編程語言分類方式也要有所改變了。以前我們經(jīng)常說面向?qū)ο笳Z言,動(dòng)態(tài)語言或是函數(shù)式語言。但是我們現(xiàn)在發(fā)現(xiàn),這些邊界變得越來越模糊,經(jīng)常會(huì)互相學(xué)習(xí)各自的范式。靜態(tài)語言中出現(xiàn)了動(dòng)態(tài)類型,動(dòng)態(tài)語言里也出現(xiàn)了靜態(tài)能力,而如今所有主要的編程語言都受到函數(shù)式語言的影響。因此,一個(gè)越來越明顯的趨勢(shì)是“多范式程序設(shè)計(jì)語言”。
在接下來的部分中,我將深入討論以上提到的這些內(nèi)容。
評(píng)論