新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 編程語言的發(fā)展趨勢及未來方向(1):歷史回顧及趨勢概述

編程語言的發(fā)展趨勢及未來方向(1):歷史回顧及趨勢概述

作者: 時間:2017-03-28 來源:網(wǎng)絡 收藏

  這是Anders Hejlsberg(不用介紹這是誰了吧)在比利時TechDays 2010所做的開場演講。由于最近我在博客上關(guān)于語言的討論比較多,出于應景,也打算將Anders的演講完整地聽寫出來。我希望這個講座可以從側(cè)面回答某些朋友關(guān)于“語言討論是否有價值”的疑問,并且展示出目前語言的發(fā)展狀況以及微軟在這方面的努力。完整內(nèi)容將分為多次發(fā)表,每次一小部分,包含大約10分鐘的演講內(nèi)容。等不及的朋友也和可以下載演講視頻一睹為快?,F(xiàn)在的第1部分則包含Anders對發(fā)展的歷史回顧,以及對趨勢簡單概述。

本文引用地址:http://butianyuan.cn/article/201703/345867.htm

  如果沒有特別說明,所有的文字都直接翻譯自Anders的演講,并使用我自己的口語習慣表達出來,對于Anders的口誤及反復等情況,必要時在譯文中自然也會進行忽略。為了方便理解,我也會將視頻中關(guān)鍵部分進行截圖,而某些代碼演示則會直接作為文章內(nèi)容發(fā)表。

  (聽寫開始)

    

 

  大家好,我是Anders Hejlsberg,現(xiàn)在是微軟的Technical Fellow,擔任C#的首席架構(gòu)師,也參與并領導.NET Framework以及各種語言的開發(fā)。我現(xiàn)在打算談一下……實際上是我腦海中一些影響未來5到10年設計的內(nèi)容。比如C#或VB該怎么走,F(xiàn)#該怎么辦,這次演講主要就是討論這些影響我們的東西。

    

 

  雖然主要內(nèi)容是談論未來的,但是我還是想先回顧一下歷史。你們有些人可能對這個產(chǎn)品有印象,這是我大約27年前的工作內(nèi)容,Turbo ,這也是我進入這個領域的起點。我先在拿出這個東西是想展示當年寫程序的情況,然后可以討論目前究竟的發(fā)展到哪兒了。

    

 

  事實上,我現(xiàn)在的機器里正好有TURBO.COM文件,大約39K,嘿,現(xiàn)在還可以運行。我們現(xiàn)在來試著寫一點程序。先來創(chuàng)建的程序叫做Hello.pas……(開始寫代碼)……一個小程序?qū)懞昧?,我們來運行一下……(出現(xiàn)編譯錯誤)啊噢,有地方我寫錯了……這個特性在當年是個創(chuàng)新,它會自動打開編輯器,直接把我們帶去出錯的地方。嗯,我們現(xiàn)在來糾正語法錯誤,把雙引號改成單引號。

    

 

  再運行一下,現(xiàn)在成功了,(觀眾掌聲)呵呵,謝謝,謝謝。事實上,在27年后這個程序還能在這臺機器上運行還真是挺神奇的。

    

 

  現(xiàn)在,我們來看一下,從那時算起硬件已經(jīng)發(fā)展了……嗯,我那時寫的機器是Z-80,擁有48K內(nèi)存。從那時算起,我現(xiàn)在這臺機器已經(jīng)有大約10萬倍的外部存儲容量,1萬倍的內(nèi)存大小,CPU速度也有大約1000倍的提高。

    

 

  但是如果你關(guān)注一下目前的軟件……過去27年里編程語言到底進步了多少?呵呵,有趣的是如果你仔細觀察這些代碼,會發(fā)現(xiàn)C#還比Turbo Pascal的版本多一行。這也給我們帶來了一些值得關(guān)注的東西。

    

 

  首先,編程語言的發(fā)展非常緩慢。期間當然出現(xiàn)了一些東西,例如面向?qū)ο蟮鹊?,但是遠沒有好上1000倍。另一方面,你可能會想,那么這些努力都到哪里去了呢?事實上這些努力沒有體現(xiàn)在編程語言上,而是出現(xiàn)在框架及工具等方面了。如果你關(guān)注如今我們使用的框架,它們的體積的確有1000倍的增長。例如當年Turbo Pascal所帶的框架大約有,比如說100個功能,而現(xiàn)在的.NET Framework里則有一萬個類,十萬個方法,的確有1000倍的增長。與此類似,如果你觀察現(xiàn)在的IDE,我們現(xiàn)在已經(jīng)有了無數(shù)強大的功能,例如語法提示,重構(gòu),調(diào)試器,探測器等等,這方面的新東西有很多。與此相比,編程語言的改進的確很不明顯。

  另一方面,如.NET,Java等框架的重要性提高了許多。而編程語言往往都傾向于構(gòu)建于現(xiàn)有的工具上,而不會從頭寫起?,F(xiàn)在出現(xiàn)的編程語言,例如F#,如果你關(guān)注Java領域那么還有Scala,Clojure等等,它們都是基于現(xiàn)有框架構(gòu)建的。現(xiàn)在已經(jīng)有太多東西可以直接利用了,每次從頭開始的代價實在太高。

    

 

  還有件事,便是在過去5、60年的編程歷史中,我們都不斷地提高抽象級別,我們都在不斷地讓編程語言更有表現(xiàn)力,讓我們可以用更少的代碼完成更多的工作。我們一開始先使用匯編,然后使用面向過程的語言,例如Pascal和C,然后便是面向?qū)ο笳Z言,如C++,隨后就進入了托管時代──受托管的執(zhí)行環(huán)境,例如.NET,Java,它們的主要特性有自動的垃圾收集,類型安全等等。我目前還沒有看出這樣的趨勢有停止的跡象,因此我們還會看到抽象級別越來越高的語言,而語言的設計者則必須理解并預測下一個抽象級別是什么樣子的。

    

 

  我認為,現(xiàn)在影響力較大的趨勢主要有3種。首先,我們會越來越多地使用聲明式的編程風格。這里我主要會提到例如DSL(Domain Specific Language,領域特定語言)以及函數(shù)式編程。然后在過去的五年里,我發(fā)現(xiàn)對于動態(tài)語言的研究變得非常火熱,其中對我們產(chǎn)生重大影響的無疑是動態(tài)語言所擁有的良好的元編程能力,還有一些非常有趣的東西,例如JavaScript引擎的發(fā)展。然后便是并發(fā)編程,無論我們愿不愿意,多核的產(chǎn)生都在迫使我們不得不重視并發(fā)編程。

  有一點值得一提,那便是隨著語言的發(fā)展,原本的編程語言分類方式也要有所改變了。以前我們經(jīng)常說面向?qū)ο笳Z言,動態(tài)語言或是函數(shù)式語言。但是我們現(xiàn)在發(fā)現(xiàn),這些邊界變得越來越模糊,經(jīng)常會互相學習各自的范式。靜態(tài)語言中出現(xiàn)了動態(tài)類型,動態(tài)語言里也出現(xiàn)了靜態(tài)能力,而如今所有主要的編程語言都受到函數(shù)式語言的影響。因此,一個越來越明顯的趨勢是“多范式程序設計語言”。

  在接下來的部分中,我將深入討論以上提到的這些內(nèi)容。



關(guān)鍵詞: 編程語言 Pascal

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉