成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一百年后 人們使用什么語言開發軟件?

開發 開發工具
我認為,編程語言就像生物物種一樣,存在一個進化的脈絡,許許多多分支最終都會成為進化的死胡同。這種現象已經發生了。而本文會討論其中的一個細節:一百年后,人們使用什么語言開發軟件?

很難預測一百年后的人類生活,只有少數幾件事是可以確定的。那時,汽車將具備低空飛行能力,城市規劃的法規將放寬,大樓可以造到幾百層,大街上一天到晚看不見太陽,女性個個都學過防身術。本文只想討論其中的一個細節:一百年后,人們使用什么語言開發軟件?

51CTO推薦專題:51CTO編程語言排行榜

為什么這個問題值得思考?

原因不是我們最終會用上這些語言,而是幸運的話,我們從現在開始就能用上這些語言。

我認為,編程語言就像生物物種一樣,存在一個進化的脈絡,許許多多分支最終都會成為進化的死胡同。這種現象已經發生了。Cobol語言曾經流行一時,但是現在看來沒有任何后續語言繼承它的思想。它就像尼安德特人①一樣,進化之路已經走到了盡頭。(①尼安德特人(Neanderthal),一種生活在歐洲的古人類,三萬多年前已經全部滅絕。——譯者注)

我預言Java也會如此。有人寫信說:“你怎么能說Java不會成功呢?它已經成功了。”我覺得這要看你的成功標準是什么。如果標準是相關書籍的出版量,或者是相信學會Java就能找到工作的大學生數量,那么Java確實已經成功了。當我說Java不會成功時,我的意思是它和Cobol一樣,進化之路已經走到了盡頭。

這只是我的猜測,未必正確。這里的重點不是看衰Java,而是提出編程語言存在一個進化的脈絡,從而引導讀者思考,在整個進化過程中,某一種語言的位置到底在哪里?之所以要問這個問題,不是為了一百年后讓后人感嘆我們曾經如此英明,而是為了找到進化的主干。它會啟發我們去選擇那些靠近主干的語言,這樣對當前的編程最有利。

無論何時,選擇進化的主干可能都是***方案。要是你不幸選錯了,變成了一個尼安德特人,那就太糟了。你的對手克魯馬努人時不時就會來攻打你,把你的食物全部偷走。

這就是我想找出一百年后的編程語言的原因。我不愿意押錯賭注。

編程語言的進化與生物學進化的區別

編程語言的進化與生物學進化還是有區別的,因為不同分支的語言會發生聚合。比如,Fortran分支看來正在與Algol的繼承者聚合。理論上,不同的生物物種也可能發生聚合,但是可能性很低,所以大概從來沒有真正出現過。

編程語言之所以可能出現聚合,一個原因是它的概率空間②比較小,另一個原因是它的突變不是隨機的。語言的設計者們總是有意識地借鑒其他語言的設計思想。(①Algol語言誕生于20世紀50年代,是最早的計算機語言之一,對后來的許多語言產生了極大的影響。——譯者注)

對于語言設計者來說,認清編程語言的進化路徑特別有用,因為這樣就可以照著樣子設計語言了。這時,認清進化的主干就不僅有助于識別現存的優秀語言,還可以把它當作設計語言的指南。

任何一種編程語言都可以分成兩大組成部分:基本運算符的集合(扮演公理的角色)以及除運算符以外的其他部分(原則上,這個部分可以用基本運算符表達出來)。

我認為,基本運算符是一種語言能否長期存在的最重要因素。其他因素都不是決定性的。這有點像買房子的時候你應該先考慮地理位置。別的地方將來出問題都有辦法彌補,但是地理位置是沒法變的。

慎重選擇公理還不夠,還必須控制它的規模。數學家總是覺得公理越少越好,我覺得他們說到了點子上。你仔細審視一種語言的內核,考慮哪些部分可以被摒棄,這至少也是一種很有用的訓練。在長期的職業生涯中,我發現冗余的代碼會導致

更多冗余的代碼,不僅軟件如此,而且像我這樣性格懶散的人,我發現在床底下和房間的角落里這個命題也成立,一件垃圾會產生更多的垃圾。

我的判斷是,那些內核最小、最干凈的編程語言才會存在于進化的主干上。一種語言的內核設計得越小、越干凈,它的生命力就越頑強。

②概率空間是一個數學術語,大致指概率的可能取值范圍。這里的意思是,不管編程語言怎么變,它的形式總是很有限的。——譯者注

當然,猜測一百年后人們使用什么編程語言,這本身就是一個很大的假設。也許一百年后人類已經不編程了,或者直接告訴計算機想做什么,計算機就會自動完成。

編程語言進化緩慢的原因

不過,到目前為止,計算機智能并沒有取得太大進展。我猜測一百年后,人們還是使用與現在差不多的程序指揮計算機。可能有一些我們今天需要編程解決的問題,那時已經不需要編程了,但是我想,那時還會存在大量與今天一樣的編程任務。

你可能認為只有那些自以為是的人才會去預言一百年后的技術。但是,請不要忘記,軟件發展的歷史已經走過了50年。在這50年中,編程語言的進化其實是非常緩慢的,因此展望一百年后的語言并不是虛無縹緲的想法。

編程語言進化緩慢的原因在于它們并不是真正的技術。語言只是一種書寫法,而程序則是一種嚴格符合規則的描述,以書面形式記錄計算機應該如何解決你的問題。所以,編程語言的進化速度更像數學符號的進化速度,而不像真正的技術(比如交通或通信技術)的進化速度。數學符號的進化是緩慢的漸變式變化,而不是真正技術的那種跳躍式發展。

無論一百年后的計算機是什么樣子,我們基本上可以斷定它們的運行速度一定會快得多。如果摩爾定律依然成立,一百年后計算機的運行速度將是現在的74乘以10的18次方倍(準確地說是73786976294838206464倍)。真是讓人難以想象。不過實際上更現實的預測并不是速度會提高這么多,而是摩爾定律最終將不成立。不管是什么東西,如果每18個月就增長一倍,那么***很可能會達到極限。但那時的計算機比現在快得多大概是毫無疑問的。即使***只是略微快了100萬倍,也將實質性地改變編程的基本規則。如果其他條件不變,現在被認為運行速度慢的語言(即運行的效率不高)將來會有更大的發展空間。那時,依然會有對運行速度要求很高的應用程序。我們希望計算機解決的有些問題其實是計算機本身引起的。比如,計算機處理視頻的速度取決于生成這些視頻的另一臺計算機。此外,還有一些問題本身就要求無限快的處理能力,比如圖像渲染、加密/解密、模擬運算等。

既然在現實中一些應用程序本身的效率較低,而另一些應用程序會耗盡硬件提供的所有運算能力,那么有了更快速的計算機就意味著編程語言不得不應付更多的極端情況,涵蓋更大范圍的效率要求。我們已經看到這種情況發生了。要是以幾十年前的標準衡量,有一些使用新語言開發的熱門應用程序對硬件資源的浪費非常驚人。

不僅編程語言有這種現象,這實際上是一種普遍的歷史趨勢。隨著技術的發展,每一代人都在做上一代人覺得很浪費的事情。30年前的人要是看到我們今天如此隨意地使用長途電話,一定會感到震驚。100年前的人要是看到一個普通的包裹竟然也能享受一天內從波士頓發件、途經孟菲斯、抵達紐約的待遇,恐怕就要更震驚了。

我已經預測了,一旦未來硬件的性能大幅提高將會發生什么事。新增加的運算能力都會被糟蹋掉。

在我學習編程的年代,計算機還是稀罕玩意。我記得當時使用的微機型號是TRS-80,它的內存只有4K,為了把BASIC程序裝入內存,我不得不把源碼中的空格全部刪除。我一想到那些極其低效率的軟件,不斷重復某些愚蠢的運算,把硬件的計算能力全部占用,就感到無法忍受。但是,我的這種反應是錯的,我就像某個出身貧寒的窮孩子,一聽到要花錢就舍不得,即使把錢用在重要場合(比如去醫院看病)都覺得很難接受。

某些浪費確實令人厭惡。比如有人就很討厭SUV(運動型多用途車),即使它采用可再生的清潔能源也改變不了看法,因為SUV來自一個令人厭惡的想法(如何使得小貨車看上去更有男子漢氣概)。但是,并非所有的浪費都是壞的。既然如今的電信基礎設施已經如此發達,再掐著時間打長途電話就有點錙銖必較了。如果有足夠的資源,你可以將長途電話和本地電話視為同一件事,一切會變得更輕松。

浪費可以分成好的浪費和壞的浪費。我感興趣的是好的浪費,即用更多的錢得到更簡單的設計。所以,問題就變成了如何才能充分利用新硬件更強大的性能最有利地“浪費”它們?

對速度的追求是人類內心深處根深蒂固的欲望。當你看著計算機這個小玩意,就會不由自主地希望程序運行得越快越好,真的要下一番功夫才能把這種欲望克制住。設計編程語言的時候,我們應該有意識地問自己,什么時候可以放棄一些性能,換來一點點便利性的提高。

很多數據結構存在的原因都與計算機的速度有關。比如,今天的許多語言都同時有字符串和列表。從語義上看,字符串或多或少可以理解成列表的一個子集,其中的每一個元素都是字符。那么,為什么還需要把字符串單列為一種數據類型呢?完全可以不這么做。只是為了提高效率,所以字符串才會存在。但是,這種以加快運行速度為目的、卻使得編程語言的語義大大復雜的行為,很不可取。編程語言設置字符串似乎就是一個過早優化的例子。

如果我們把一種語言的內核設想為一些基本公理的集合,那么僅僅為了提高效率就往內核添加多余的公理,卻沒有帶來表達能力的提升,這肯定是一件很糟的事。沒錯,效率是很重要,但是我認為修改語言設計并不是提高效率的正確方法。

正確做法應該是將語言的語義與語言的實現予以分離。在語義上不需要同時存在列表和字符串,單單列表就夠了。而在實現上做好編譯器優化,使它在必要時把字符串作為連續字節的形式處理。① (①我相信,LispMachineLisp(Lisp語言的一種方言)是***個具體表達這樣一種觀點的語言:變量的聲明(除了動態類型變量之外)只是優化的建議,對一個正確程序本身的含義不構成影響。CommonLisp(Lisp語言的另一種方言)則好像***個明確提出了這一點。)

對于大多數程序,速度不是最關鍵的因素,所以你通常不需要費心考慮這種硬件層面上的微觀管理。隨著計算機速度越來越快,這一點已經越發明顯了。

語言設計時,對實現方式少作限制還會使得程序具備更大的靈活性。

語言的規格發生變化不僅是無法避免的,也是合理的。通過編譯器的處理,按照以前規格開發的軟件就會照常運行,這就提供了靈活性。

essay(論文)這個詞來自法語的動詞essayer,意思是“試試看”。從這個原始意義來說,論文就是你寫一篇文章,試著搞清楚某件事。軟件也是如此。我覺得一些***的軟件就像論文一樣,也就是說,當作者真正開始動手寫這些軟件的時候,他們其實不知道***會寫出什么結果。

Lisp語言的黑客早就明白數據結構靈活性的價值。我們寫程序的***版時,往往會把所有事情都用列表的形式處理。所以,這些最初版本可能效率低下得驚人,你必須努力克制自己才能忍住不動手優化它們,這就好像吃牛排的時候,必須努力克制自己才能不去想牛排是從哪里來的一樣,至少對我來說是這樣的。

一百年后的程序員最需要的編程語言就是可以讓你毫不費力地寫出程序***版的編程語言,哪怕它的效率低下得驚人(至少按我們今天的眼光來看是如此)。他們會說,他們想要的就是很容易上手的編程語言。

效率低下的軟件并不等于很爛的軟件。一種讓程序員做無用功的語言才真正稱得上很爛。浪費程序員的時間而不是浪費機器的時間才是真正的無效率。隨著計算機速度越來越快,這會變得越來越明顯。

我覺得,放棄字符串類型已經是大家可以接受的想法了。Arc語言已經這樣做了,看上去效果不錯。以前用正則表達式很難描述的一些操作,現在用回歸函數可以表達得很簡單。

這種數據結構的扁平化趨勢會怎么發展?我極其努力地設想各種可能,得到的結果甚至令我自己都嚇了一跳。比如,數組會不會消失?畢竟數組只是散列表的一個子集,其特點就是數組的鍵全部都是整數向量。進一步說,散列表本身會不會被列表取代呢?

還有比這更驚人的預言。在邏輯上其實不需要對整數設置單獨的表示法,因為可以把它們也看作列表,整數n可以用一個n元素的列表表示。這一樣能完成數學運算,只是效率低得讓人無法忍受。編程語言會發展到放棄基本數據類型之一的整數這一步嗎?我這樣

問并不是真的要你嚴肅思考這個問題,更多的是希望打開你對未來的思路。我只是提出一種假想的情況:如果一股不可抗拒的力量遇到了一個不可移動的物體,會發生什么事。具體就本文而言:一種效率低得不可想象的語言遇到了性能強大得不可想象的硬件,會發生什么事。我看不出放棄整數類型有什么不妥。未來相當漫長。如果我們想要減少語言內核中基本公理的數目,不妨把眼光放得遠一點,想一想如果時間變量t趨向無限會怎么樣。一百年是一個很好的參考指標,如果你覺得某個想法在一百年后仍然可能是難以令人接受,那么也許一千年后它也依然難以令人接受。

讓我說清楚,我的意思不是說所有的整數運算都用列表來實現,而是說語言的內核(不涉及任何編譯器的實現)可以這樣定義。在現實中,任何進行數學運算的程序可能都是以二進制形式表示數字,但是這屬于編譯器的優化,而不屬于語言內核語義的一部分。

另一種消耗硬件性能的方法就是,在應用軟件與硬件之間設置很多的軟件層。這也是我們已經看到的一種趨勢,許多新興的語言就被編譯成字節碼①。比爾·伍茲曾經對我說,根據經驗判斷,每增加一個解釋層,軟件的運行速度就會慢一個數量級。但是,多余的軟件層可以讓編程靈活起來。(①字節碼(bytecode)是已經經過編譯但是需要進一步處理才能變成機器碼的中間代碼。它的好處是與硬件和軟件環境無關,在編譯器的配合下,可以在不同的操作系統上運行。字節碼的典型運用就是Java語言。——譯者注)

Arc語言

(②Arc是Lisp的一種方言,由本書作者提出,目前由他本人和羅伯特·莫里斯負責開發。——譯者注)

最初的版本就是一個極端的例子,它的層很多,運行速度非常慢,但是確實帶來了相應的好處。Arc是一個典型的“元循環”(metacircular)解釋器,在CommonLisp的基礎上開發,很像約翰·麥卡錫在他經典的Lisp論文中定義的eval函數。Arc解釋器一共只有幾百行代碼,所以很便于理解和修改。我們采用的CommonLisp版本是CLisp,它本身是在另一個字節碼解釋器的基礎上開發的。所以,我們一共有兩層解釋器,最上面那層效率低下得驚人,但是語言本身是能用的。我承認只是勉強可用,但是確實能用。

即使是應用程序,使用多層形式開發也是一種很強大的技巧。自下而上的編程方法意味著要把軟件分成好幾層,每一層都可以充當它上面那一層的開發語言。這種方法往往會產生更小、更靈活的程序。它也是通往軟件圣杯——可重用性(reusability)——的***路線。從定義上看,語言就是可以重用的。在編程語言的幫助下,你的應用程序越是采用這種多層形式開發,它的可重用性就越好。

可重用性這個概念多多少少與20世紀80年代興起的面向對象編程有些關聯。不管怎樣尋找證據,也不可能把這兩件事完全分開。某些使用面向對象編程開發出來的軟件確實具有可重用性,但是這不是因為它使用了面向對象編程,而是因為它的開發方法是自下而上的。以函數庫為例,它們具有可重用性,是因為它們屬于語言的一部分,而不是因為它們采用面向對象或者其他編程方法。

順便說一句,我不認為面向對象編程將來會消亡。我覺得,除了某些特定的領域,這種編程方法其實沒有為優秀程序員帶來很多好處,但是它對大公司有不可抗拒的吸引力。面向對象編程使得你有辦法對一團亂碼似的代碼進行可持續性開發。通過不斷地打補丁,它讓你將軟件一步步做大。大公司總是傾向于采用這樣的方式開發軟件。我預計一百年后也是如此。

#p#

并行計算為未來而存在?

既然是談論未來,***談談并行計算(parallelcomputation),因為看上去并行計算好像就是為未來而存在的。無論怎么想,并行計算似乎都是未來生活的一部分。

它會在未來實現嗎?過去二十年,人們都在說并行計算馬上就會來臨。但是,到目前為止,它對編程實踐并沒有太大影響。這是真的嗎?芯片設計師已經不得不把它考慮在內,為多CPU計算機開發系統軟件的程序員也是如此。

但是,真正的問題在于,并行計算到底能達到哪個抽象層次?一百年后它就會影響到開發應用軟件的程序員嗎?或者,它還只是編譯器作者需要考慮的事情,在應用軟件的代碼中根本就無處尋覓?

一種可能是,大多數可以用到并行計算的場合,人們都會放棄使用并行計算。雖然我總的預測是未來的軟件會揮霍掉大部分新增的硬件性能,但是并行計算是一個特例。我估計隨著硬件性能得到驚人的提升,如果你明確地說想要并行計算,那么肯定可以得到它,但是通常情況下你不會用到它。這意味著,除了一些特殊的應用程序,一百年后的并行計算不會是那種大規模的并行計算(massiveparallelism)。我預料,對于普通程序員來說,一切更像對進程進行分叉,然后讓多個進程在后臺并行運行。

這是編程進行到很后期才要做的事情,屬于對程序的優化,類似于你想開發一種特定的數據結構來取代現有的數據結構。程序的***個版本通常會忽略并行計算提供的各種好處,就好像編程開始時會忽略某種特定的數據結構給你帶來的好處一樣。

除了某些特定的應用軟件,一百年后,并行計算不會很流行。如果應用軟件真的大量使用并行計算,這就屬于過早優化了。

一百年后會有多少種編程語言?從最近來看,出現了大量的新語言。硬件性能提高是一個原因,這就允許程序員根據使用目的在運行速度和編程便利性之間做出不同的取舍。如果這就是未來的趨勢,那么一百年后強大的硬件只會使得語言數目變得更多。

但是,另一方面,一百年后的常用語言可能只有很少幾種。部分原因是基于我的樂觀主義,我相信在未來,如果你的作品確實很出色,你可能選擇的是一種開發起來很方便的語言。使用這種語言寫出來的軟件***版的運行速度很慢,只有對編譯器進行優化設置后運行速度才會提升。既然我抱有這種樂觀主義,那么我還要做一個預言。有些語言可以達到機器的***效率,另一些語言的效率則慢到剛剛可以運行而已,兩者之間存在巨大的差距。我預言一百年后,這段差距之間的各個點上都會有對應的編程語言存在。

因為這段差距正在變得越來越大,所以性能分析器(profiler)將變得越來越重要。目前,性能分析并沒有受到重視。許多人好像仍然相信,程序運行速度提升的關鍵在于開發出能夠生成更快速代碼的編譯器。代碼效率與機器性能的差距正在不斷加大,我們將會越來越清楚地看到,應用軟件運行速度提升的關鍵在于有一個好的性能分析器幫助指導程序開發。

我說將來可能只有很少幾種常用語言,但沒有把用于特定領域的“小眾語言”(littlelanguage)算進去。我覺得,這些嵌入式語言的想法很不錯,一定會蓬勃發展。但是我判斷這些“小眾語言”會被設計成相當薄的一層,使得用戶可以一眼看出在底下作為基礎的通用型語言,這樣就減少了學習時間,降低了使用成本。

誰來設計這些未來的語言?過去10年最激動人心的趨勢之一就是開源語言的崛起,比如Perl、Python和Ruby。語言設計已經被黑客接管。到目前為止這樣到底是好是壞還看不清楚,但是發展勢頭令人鼓舞。比如,Perl就有一些絕妙的創新。不過,它也包含了一些很糟糕的想法。對于一種充滿進取心、大膽探索的語言來說,這也是很正常的事。以它現在這種變化的速率,大概只有上帝才知道一百年后Perl會變成什么樣。

有一句俗話說,如果你自己做不到,那就去當老師。這在語言設計領域不成立,我認識的一些最出色的黑客就在當教授。但是,當老師的人確實有很多事情不能做。研究性職位給黑客帶來了一些限制。在任何學術領域,都有一些題目是可以做的,另一些題目是不可以做的。不幸的是,這兩類題目的區別通常取決于它們寫成論文后看上去是不是很高深,而不是取決于它們對軟件業的發展是否重要。最極端的例子可能就是文學,文學研究者的任何成果幾乎對文學創作者都毫無影響。

雖然科學領域的狀況要稍好一點,但是研究者可以做的題目與能夠對設計優秀語言有所幫助的題目之間的交集小得令人沮喪。(奧林·希弗斯曾經對這一點表達不滿,而且說得頭頭是道。)比如,研究變量類型的論文好像多得無窮無盡,盡管事實上靜態類型語言看來無法真正支持宏(在我看來,一種語言不支持宏,那就不值得使用了)。

新語言更多地以開源項目的形式出現,而不是以研究性項目的形式出現。這是語言的一種發展趨勢。另一種發展趨勢是,新語言的設計者更多的是本身就需要使用它們的應用軟件作者,而不是編譯器作者。這似乎是好的趨勢,我期待它繼續保持下去。

一百年后的物理學基本上不可能預測。但是計算機語言不一樣,現在就動手設計一種一百年后可以吸引使用者的新語言,這在理論上似乎是可能的。

設計新語言的方法之一就是直接寫下你想寫的程序,不管編譯器是否存在,也不管有沒有支持它的硬件。這就是假設存在無限的資源供你支配。不管是今天還是一百年后,這樣的假設好像都是有道理的。

你應該寫什么程序?隨便什么,只要能讓你最省力地寫出來就行。但是要注意,這必須是在你的思維沒有被當前使用的編程語言影響的情況下。這種影響無處不在,必須很努力才能克服。你也許覺得,對于人類這樣懶惰的生物,喜歡用最省力的方式寫程序是再自然不過的事情。但是事實上,我們的思想可能往往會受限于某種現存的語言,只采用在這種語言看來更簡單的形式,它對我們思想的束縛作用會大得令人震驚。新語言必須靠你自己去發現,不能依靠那些讓你自然而然就沉下去的思維定勢。

采用程序的長度作為它耗費工作量的近似指標是個很有用的技巧。這里的程序長度當然不是指字符的數量,而是指各種句法元素的總長度,基本上就是整個解析樹的大小。也許不能說最短的程序就是寫起來最省力的程序,但是當你一心想把程序寫得簡潔而不是松松垮垮時,你就更接近省力這個目標,你的日子也會變得好過得多。所以,設計語言的正確做法就變成了,看著一段程序,然后問自己是不是能把它寫得更短一點?

實際上,用想象出來的一種一百年后的語言來寫程序,這件事情的可靠程度,取決于你對語言內核的估計是否足夠正確。常規的排序,你現在就可以寫出來。但是,想要預測一百年后的語言使用什么函數庫就很難了。很可能許多函數庫針對的領域現在還根本不存在。比如,如果SETI@home①計劃成功,我們就需要與外星人聯系的函數庫了。當然,如果外星人的文明高度發達,已經到了用XML格式交換信息的地步,那就不需要新的函數庫了。(①SETI@home是一個尋找地球以外智慧生命的科學實驗,由加州大學伯克利分校發起并主持。它使用射電望遠鏡監聽太空中的無線電信號,然后用計算機進行數據分析,如果發現有些信號不可能自然產生,就可以證明外星文明的存在。1995年,該項目決定向志愿者開放,使用全球聯網的大量計算機進行分布式計算,1999年5月開始正式運行。詳細情況參見http://setiathome.berkeley.edu。——譯者注)

另一個極端是,我覺得今天你就能設計出一百年后的語言內核。事實上,在有些人看來,大部分語言內核在1958年就已經設計出來了。②(②Lisp語言的***版規格說明書是1958年發布的。——譯者注)

如果今天就能使用一百年后的編程語言,我們會用它編程嗎?觀古而知今。如果1960年就能使用今天的編程語言,那時的人們會用它們嗎?

在某些方面,回答是否定的。今天的編程語言依賴的硬件在1960年并不存在。比如,Python這樣的語言,正確的縮進(indentation)在編寫時很重要,但是1960年的計算機沒有顯示器,只有打印機終端,所以編寫起來就不會很順利。但是,如果把這些因素排除在外(你可以假設,我們只在紙上編程),20世紀60年代的程序員會喜歡用現在的語言編程嗎?

我想他們會的。某些缺乏想象力、深受早期編程語言思想影響的人可能會覺得不可能。(沒有指針運算,如何復制數據?沒有goto語句,如何實現流程圖?)但是我想,那時最聰明的程序員一定能輕松地使用今天的大多數語言,假定他們能得到的話。

如果我們現在就能擁有一百年后的編程語言,那就至少能用來寫出優秀的偽碼③。我們會用它開發軟件嗎?因為一百年后的編程語言需要為某些應用程序生成快速代碼,所以很可能它生成的代碼能夠在我們的硬件上運行,速度也還可以接受。相比一百年后的用戶,我們也許不得不對這種語言做更多的優化,但是總的來看,它應該仍然會為我們帶來凈收益。(③偽碼又稱虛擬代碼,用來抽象地描述算法,而不是現實存在的編程代碼。——譯者注)

現在,我們的兩個觀點就是:(1)一百年后的編程語言在理論上今天就能設計出來;(2)如果今天真能設計出這樣一種語言,很可能現在就適合編程,并且能夠產生更好的結果。如果我們把這兩個觀點聯系起來,那就得出了一些有趣的可能性。為什么不現在就動手嘗試寫出一百年后的編程語言呢?

當你設計語言的時候,心里牢牢記住這個目標是有好處的。學習開車的時候,一個需要記住的原則就是要把車開直,不是通過將車身對齊畫在地上的分隔線,而是通過瞄準遠處的某個點。即使你的目標只在幾米開外,這樣做也是正確的。我認為,設計編程語言時,我們也應該這樣做。

原文鏈接:http://article.yeeyan.org/view/159737/178070

【編輯推薦】

  1. 注釋里的詛咒:哪種語言遭受最多的咒罵?
  2. Java專家孫衛琴:專精一門編程語言也能成功
  3. 動態語言會淘汰靜態語言嗎?
  4. 匯編語言:從機器語言到高級語言的進化
責任編輯:陳貽新 來源: 譯言網
相關推薦

2012-07-04 15:05:14

ibmdw

2022-11-06 15:42:16

軟件開發KPI團隊

2011-09-01 09:07:30

程序員

2011-06-22 14:11:47

Flash

2011-07-25 18:40:43

iPad iPad開發 界面

2024-11-21 16:31:48

2021-03-31 08:00:00

開發工具游戲

2009-08-14 15:10:47

C# Windows服

2022-02-12 00:05:53

開發軟件硬件

2016-12-30 13:52:29

2017-01-17 16:39:50

2010-03-04 17:59:38

2010-09-10 09:05:03

XNAWindows Pho

2010-11-17 11:26:49

2011-06-09 13:45:26

惠普甲骨文安騰

2012-05-22 22:53:54

ipad

2020-08-31 11:10:57

編程語言PythonJava

2021-06-17 14:05:26

馬克思主義建黨中國

2020-11-14 15:43:35

人工智能算法象棋

2013-05-22 10:14:17

開發者軟件開發自閉癥患者
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天拍天天操 | 亚洲精品久久久久久久久久久 | 在线免费看毛片 | 欧美日韩电影一区二区 | 怡红院成人在线视频 | 国产精品视频999 | 久草在线| 亚洲国产精品成人久久久 | 免费一级做a爰片久久毛片潮喷 | 国产免费一区二区 | 亚洲网址 | 成人一区av | 在线观看深夜视频 | 日日夜夜天天 | 久久午夜电影 | 国产成人精品一区二区三区网站观看 | 日韩精品无码一区二区三区 | 日本一道本| 色片在线观看 | 精品精品视频 | 日韩三级免费观看 | 91毛片在线看 | 精品久久久久久亚洲国产800 | 欧美综合精品 | 欧美一级黄色片免费观看 | 日韩视频在线播放 | 国产在线高清 | 成人网在线观看 | 精品国产一区二区三区免费 | 午夜国产精品视频 | 精品九九九 | 欧美一级大片免费观看 | 日本精品一区二区三区在线观看视频 | 国产成人综合一区二区三区 | 欧美情趣视频 | 91精品国产综合久久久久久漫画 | 拍拍无遮挡人做人爱视频免费观看 | 欧美在线视频不卡 | av资源中文在线天堂 | 日韩免费福利视频 | 国产激情视频网 |