編程語言1800年至2018年人事物編年史 文|秦隴紀(jì),數(shù)據(jù)簡化DataSimp?20190107Mon-20190416Tue 編年史指一個整體對紀(jì)年的統(tǒng)一的體裁,是一種形象化的歷史記錄方式。特點是以時間為經(jīng)、以事件為緯來記載歷史事件。有利于讀者按照事件發(fā)展的先后順序了解歷史事件,便于了解歷史事件間的互相聯(lián)系;但是不便于集中描寫人物、事件,一個人物、事件分散在不同的年代,讀者不易了解其全貌。自公元9世紀(jì)下半葉后,編年史與年代記之間的差別變得模糊不清。 圖1:編程語言簡史Medium網(wǎng)文配圖 編程語言的歷史早于真正意義的計算機的出現(xiàn)。19世紀(jì)就有“可編程的”織布機和鋼琴彈奏裝置出現(xiàn),它們都是領(lǐng)域特定語言(DSL)的樣例。有一些常用的或?qū)嵱玫木幊陶Z言,比如: 1951 –Regional Assembly Language 1952 –Autocode 1954 – IPL(LISP語言的祖先) 1955 –FLOW-MATIC (COBOL語言的祖先) 1957 – FORTRAN(第一個編譯型語言) 1957 – COMTRAN(COBOL語言的祖先) 1958 – LISP 1958 – ALGOL58 1959 – FACT(COBOL語言的祖先) 1959 – COBOL 1959 – RPG 1962 – APL 1962 – Simula 1962 – SNOBOL 1963 – CPL (C語言的祖先) 1964 – BASIC 1964 – PL/I 1966 – JOSS 1967 – BCPL (C語言的祖先) 1968 – Logo 1969 – B (C語言的祖先) 1970 – Pascal 1970 – Forth 1972 – C 1972 –Smalltalk 1972 – Prolog 1973 – ML 1975 – Scheme 1978 – SQL 1980 – C++ (既有類的C語言,更名于1983年7月) 1983 – Ada 1984 – CommonLisp 1984 – MATLAB 1985 – Eiffel 1986 –Objective-C 1986 – Erlang 1987 – Perl 1988 – Tcl 1988 –Mathematica 1989 – FL 1990 – Haskell 1991 – Python 1991 – VisualBasic 1993 – Ruby 1993 – Lua 1994 – CLOS(ANSI Common Lisp的一部分) 1995 – Java 1995 – Delphi(Object Pascal) 1995 –JavaScript 1995 – PHP 1996 – WebDNA 1997 – Rebol 1999 – D 2000 –ActionScript 2001 – C# 2001 – VisualBasic .NET 2002 – F# 2003 – Groovy 2003 – Scala 2007 – Clojure 2009 – Go 2011 – Dart 編寫程序代碼用到一門門計算機語言,各種語言搭建了人與計算機溝通的橋梁。通過編寫代碼,人類可以用各種“指令”來“命令”計算機執(zhí)行算術(shù)、音像媒體、開發(fā)網(wǎng)頁、開發(fā)軟件、搭建游戲... ... 編程語言是前輩們發(fā)揮聰明才智創(chuàng)造出來的,前輩們的創(chuàng)造過程雖然充滿了有趣與巧合,但是并不神秘。本文綜合著名媒體Medium網(wǎng)文https:///commitlog/a-brief-totally-accurate-history-of-programming-languages-cd93ec806124,Neostrategos于2013年4月17日分享的博文《編程語言的歷史》,Rackspace公司發(fā)布的編程語言演變的數(shù)據(jù)圖表等相關(guān)報道,按年份綜合梳理編程語言發(fā)展歷史。描述時加入了很多個人情感和社會流行元素,有調(diào)侃語句,但配圖基本是靠譜的。 從1951年至今,人類一共發(fā)明了256種編程語言,每一種語言的出現(xiàn)都帶有某些新特征。編程語言不斷的在革新,很快就會有超出這個清單的新編程語言出現(xiàn)。從1800年算起總體上編程語言分三階段:一是1800年到1950年,從最早1800年Jacquard寫的打孔卡指令開始,到匯編語言;二是1951年到1990年,從Fortran演變,貫穿了Cobol,Basic,C,Pascal,C++,Perl等早期高級語言,以及3個曾相當(dāng)具有影響力的語言:Lisp,Algol60和Smalltalk;三是1991年至2018年,從Python,Ruby,PHP,Java,JavaScript,直到Ruby on Rails為止。兩大通用高級語言和三大膠水語言時代,軟件架構(gòu)開始出現(xiàn)并逐步形成當(dāng)下編程主流。 一、最早1800年到1950年的編程語言 圖2:Joseph Marie Jacquard 1800年,Joseph Marie Jacquard讓織布機學(xué)會了讀穿孔卡片,造出了第一臺重度使用多線程處理單元的機器,并打印出了Hello world字樣。預(yù)見到天網(wǎng)(Skynet)誕生的織布工們激烈地反對該項發(fā)明。 圖3:1801年Jacquard寫的打孔卡指令 圖4:Ada Lovelace 1842年,Ada Lovelace(英國詩人拜倫之女)厭倦了貴族生活,于是在記事本上寫寫畫畫,而記事本上的這些內(nèi)容被后世稱作第一個發(fā)布的計算機程序??上М?dāng)年沒有電腦,真是不巧。 圖5:Ada Lovelace寫了世界上第一個程序 圖6:Alan Turing 1936年,Alan Turing啥都發(fā)明了,但英國法庭看他不順眼,還閹了他。后來女王免了他的罪名,雖然當(dāng)時他已經(jīng)死去幾百年了。 圖7:Alan Turing發(fā)明了一切程序語言的最終形態(tài) 圖8:Alonzo Church 1936年,Alonzo Church和Turing一樣啥都發(fā)明了,但他生活在太平洋彼岸(也不是基佬)所以沒被女王人道主義。 圖9:Alonzo Church同時發(fā)明了一切語言的最終形態(tài),還有λ 1940年代,實現(xiàn)Alonzo Church和Turing發(fā)明的低進制機器(詳見科學(xué)Sciences網(wǎng)文)成批出現(xiàn)。 二、從1951年到1990年的編程語言 二是1951年到1990年,從Fortran演變,貫穿了Cobol,Basic,C,Pascal,C++,Perl等早期高級語言,以及3個曾相當(dāng)具有影響力的語言:Lisp,Algol60和Smalltalk。 圖11:John Backus 1957年,John Backus發(fā)明Fortran語言,也是“真正的編程者”使用的第一種計算機語言。 1958年,John McCarthy發(fā)明Lisp語言,引入遞歸。 圖13:John McCarthy 圖14:Grace Hopper 1959年,Grace Hopper發(fā)明了第一個面向企業(yè)、可用的編程語言,命名為“通用的業(yè)務(wù)導(dǎo)向語言”,簡稱為COBOL。 圖16:John Kemeny 1964年,John Kemeny和Thomas Kurtz都覺得現(xiàn)有計算機語言的編程太難了,人們需要回歸基礎(chǔ)(basic),因而將他們發(fā)明的計算機語言稱之為BASIC。進一步降低了編程門檻。 圖17:John Kemeny和ThomasKurtz 圖18:Niklaus Wirth 1970年,Niklaus Wirth創(chuàng)造了Pascal和幾門其它語言(他就是這么愛創(chuàng)造語言),他還創(chuàng)造了沃斯定律。相形之下摩爾定律就過時了,因為軟件開發(fā)者基于摩爾定律寫的軟件太臃雜了,連主機都帶不動。后來Electron.js的發(fā)明和基于它的抽象概念也證明了這一點。 圖19:Guy Steele和GeraldSussman 圖20:Dennis Ritchie 1972年,Dennis Ritchie在貝爾實驗室里對工作產(chǎn)生了厭倦,于是決定搞個帶大括號的C語言,并取得了巨大的成功。之后,他在語言中加入分段錯誤和其它一些對開發(fā)者友好的功能來增強C語言的生產(chǎn)力。干完這些工作后,離下班還有幾小時,所以他和貝爾實驗室的小伙伴們決定開發(fā)個程序來展示C語言,然后他們就造了個叫Unix的操作系統(tǒng)(紅紅火火恍恍惚惚)。 圖24:Alan Kay 1980年,Alan Kay建立了一門叫做Smalltalk的面向?qū)ο蟮木幊陶Z言。這門語言里,什么都是對象,對象本身也是一個對象??上Т蠹叶紱]時間思考閑聊(small talk)的意義。 圖26:Jean David Ichbiah 1983年,Jean Ichbiah發(fā)現(xiàn)Ada Lovelace的程序就從來沒真正運行過,于是決定以她名字創(chuàng)建一門語言。但她的語言也沒運行過。 圖28:Bjarne Stroustrup 1983年,Bjarne Stroustrup從未來穿越過去,發(fā)現(xiàn)C語言沒給編譯留足時間,于是他把所有能夠想到的功能加進去了,并命名為C++。幾乎所有的編程者都在使用它,這樣他們就有理由在工作的時候擼貓片和看科學(xué)Sciences科普了。 1986年,Brac Box和Tom love決定要創(chuàng)建一門基于Smalltalk、不可讀版本的C語言,并稱之為Objective C語言,但沒人看得懂這門語言的語法。 圖31:Larry Wall 1987年,Larry Wall經(jīng)歷了一次宗教體驗,成為了一名傳教者,他傳播的教義就是Perl。 三、從1991年到2018年的編程語言 三是1991年至2018年,從Python,Ruby,PHP,Java,JavaScript,直到Ruby on Rails為止。膠水語言時代,軟件架構(gòu)開始出現(xiàn)并逐步形成編程主流。 圖34:Guido van Rossum 1991年,Guido van Rossum寫了本關(guān)于蛋蛋和火腿的食譜(Python之父)。 圖35:Guido van Rossum 圖36:Roberto Ierusalimschy 1993年,Roberto Ierusalimschy和他的朋友們覺得他們需要一門英國本地化的腳本語言,在本地化過程中出了個錯,使得本應(yīng)該從0開始的計數(shù)從1開始了,然后他們把這個叫做Lua。 圖37:Rasmus Lerdorf 1994年,Rasmus Lerdorf為他個人主頁的CGI腳本弄了個模版引擎,并把這個文件發(fā)布在網(wǎng)上了。世界各國人民欽定這個文件哪哪都要用上,于是興奮炸裂的Rasmus又放了點額外的綁定數(shù)據(jù)庫上去,并稱之為PHP。 圖39:Yukihiro Matsumoto 1995年,Yukihiro Matsumoto不是很開心,還發(fā)現(xiàn)其它碼農(nóng)也不是很開心,所以他創(chuàng)建了Ruby語言讓大家開心開心。Ruby語言面世后,Matz挺開心,Ruby社區(qū)也挺開心,大家都很開心(*^__^*)。 圖40:Mad Matz 圖41:Brendan Eich 1995年,Brendan Eich花了個周末設(shè)計了門語言,希望能夠為世上所有的網(wǎng)頁瀏覽器賦能,最終也影響天網(wǎng)。他最開始去了網(wǎng)景,并稱自己設(shè)計的語言為LiveScript,但Java在代碼審查環(huán)節(jié)火了,于是他們決定用大括號才好,改名叫JavaScript。后來Java一團糟,于是他們覺得這語言跟Java沾親帶故會出事,所以又在標(biāo)準(zhǔn)化時候把它改名叫ECMAScript,但人們還是按習(xí)慣稱之為JavaScript。 圖43:James Gosling 1996年,James Gosling創(chuàng)建了Java,第一個真正的過于詳細(xì)的、設(shè)計模式高于實用性的、面向?qū)ο蟮木幊陶Z言。這么一個非常有效的、管理員供應(yīng)商集裝箱供應(yīng)商服務(wù)管理者單件模式管理者供應(yīng)商模式就誕生了。 圖45:Anders Hejlsberg 2001年Anders Hejlsberg重建了Java,并稱之為C#,因為用C語言編程比Java要更酷。 大家都很愛這個Java新版本因為它一點也不像Java。 2003年,Martin Odersky創(chuàng)造Scala語言。 圖48:David Heinemeier Hansson 2005年,David Hanselmeyer Hansen創(chuàng)建了個叫做Ruby on Rails的網(wǎng)頁框架,人們從此把紅寶石與鐵路聯(lián)系起來了。 圖49:John Resig 2006年,John Resig給JavaScript寫了個助手庫,所有人都覺得這也是門計算機語言,給許多從網(wǎng)上復(fù)制粘貼jQuery代碼的人們解決了就業(yè)問題。 圖50:Ken Thompson 2009年,Ken Thompson和Rob Pike打算也造個類似于C語言但有更安全的設(shè)備的語言,而且用金花鼠當(dāng)作吉祥物讓它更好推銷。他們把這門語言叫做Go語言,也開源了,支持社區(qū)的資金來源就是賣金花鼠的周邊護膝和頭盔。 2010年,Graydon Hoare也想造一門類似C語言的語言,并稱之為Rust。人們表示,所有的軟件都應(yīng)該現(xiàn)在立即馬上用Rust語言重寫一遍。但Graydon喜歡一閃一閃的亮晶晶而不是生銹的(rust)東西,所以去Apple開發(fā)Swift去了。 2012年,Anders Hjelsberg想在網(wǎng)頁瀏覽器里重寫C#,于是他設(shè)計了TypeScript,其實也是JavaScript的一種,但更像Java了。 2013年,Jeremy Ashkenas也想像Ruby開發(fā)者那么開心,所以他搞了個CoffeScript,也就是JavaScript的編譯,但看起來更像Ruby。然鵝,Jeremy并沒有像Matz和Ruby開發(fā)者那樣開心。 圖51:Chris Lattner 2014年,Chris Lattner設(shè)計Swift的初衷是讓它別像Objective-C一樣,所以最后Swift看起來就像是Java了。 四、總結(jié)1950年匯編到2018年Simula 在互聯(lián)互通日益增多的世界中,編程語言構(gòu)成了基礎(chǔ)。您是否知道由一位女性Ada Lovelace撰寫第一種編程語言已有近180多年歷史?現(xiàn)在的編程語言是一種正式語言,旨在將指令傳達給機器,特別是計算機。編程語言可用于創(chuàng)建控制機器行為的程序,并用于構(gòu)建Web應(yīng)用程序,計算機軟件或任何其他應(yīng)用程序。計算機編程使用戶能夠為特定算法編寫程序。第一批計算機代碼專門用于其應(yīng)用程序。在20世紀(jì)的前幾十年,數(shù)值計算基于十進制數(shù)。 第一種編程語言早于現(xiàn)代計算機。19世紀(jì)發(fā)現(xiàn)了“可編程”織機和播放器鋼琴卷軸,兩者都實現(xiàn)了領(lǐng)域特定語言的例子。從1951年到今年,共開發(fā)了256種編程語言,所有這些語言都帶來了新的功能。編程語言總是更新,并且總是如您在列表中看到的那樣增長。 The firstprogramming languages predate the modern computer. The 19th century saw theinvention of “programmable” looms and player piano scrolls, both of whichimplemented examples of domain-specific languages. 1951 to upto this year thereare Totally 256 Programming Languages are Developed and that all are comingwith the something new features. the programming languages are always updatedand always growing as you seen on the list. 編程語言本身并不是架構(gòu)的人工制品,但我覺得如果我不寫它的話,軟件架構(gòu)編年史會遺漏一些東西。因此,讓我們快速回顧一下編程語言的歷史,它的演變并檢查我們可以從中學(xué)到什么。我作為一個好奇心添加了一些日期,他們應(yīng)該被視為粗略的估計,重要的是進化序列和他們試圖解決的問題。 Programminglanguages themselves are not an artefact of architecture, but I would feel thatThe Chronicles of Software Architecture would be missing something if Iwouldn’t write about it. So, let’s make a quick review of programming languageshistory, its evolution and check what we can learn from it. I’ve added somedates to the post just as a curiosity, they should be seen as roughestimates, the important is the evolution sequence and the problems they weretrying to solve. 20世紀(jì)50年代——非結(jié)構(gòu)化編程 匯編?1951年 軟件開發(fā)是一項非常模糊的活動,僅在世界上的幾個地方進行。匯編是當(dāng)時的熱門語言,它使用非常低級的操作,如“add”,“sub”,“goto”和直接操作的內(nèi)存地址。構(gòu)建一個簡單的應(yīng)用程序既緩慢又困難。要創(chuàng)建一個簡單的IF語句,我們需要很少的代碼行,對于一個循環(huán),它需要多行...后來分組和重用代碼片段的可能性,所以編碼風(fēng)格非常線性,代碼重用是僅限于文件內(nèi)或文件之間的復(fù)制粘貼代碼。 1950s –Non-structured Programming Assembly ~1951 SoftwareDevelopment was a very obscure activity, performed in only a few places in theworld. Assembly was the hot language back then, it used very low-leveloperations like “add”, “sub”, “goto” and manipulated memory addresses directly.It was slow and difficult to build a simple application. To create asimple IF statement we needed few lines of code and for a loop, it would takemore than a few lines… The possibility of grouping and reusing pieces of codecame later on, so the coding style was very linear and code reuse was limitedto copy-pasting code within a file or between files. 20世紀(jì)60年代——結(jié)構(gòu)化編程 Algol~1958 結(jié)構(gòu)化編程出現(xiàn)了,引入了代碼塊,控制結(jié)構(gòu)的構(gòu)造(if / then /else,case,for,while,do,...)和子例程。然后,我們可以創(chuàng)建更有趣的代碼流,更重要的是,我們可以將代碼指令分組并重用它,盡管有一些限制,例如子例程總是作用于相同的全局變量。正是在這個時候,可重用性的第一個想法開始實踐。 1960s –Structured Programming Algol ~1958 Structuredprogramming came up, introducing code blocks, constructs for controlstructures (if/then/else, case, for, while, do, …) and sub-routines. We could,then, create more interesting code flows and, more important, we could groupcode instructions and reuse it, although with some limitations, like thesub-routines always acting on the same global variables. It was at this timethat the first ideas of reusability came to practice. 20世紀(jì)70年代——程序和功能編程 Pascal~1970,C~1972 程序和功能代碼在20世紀(jì)70年代開始生動。此時我們終于: ·程序:一組不返回數(shù)據(jù)的指令; ·功能:一組返回數(shù)據(jù)的指令; ·數(shù)據(jù)結(jié)構(gòu):記錄,類似于關(guān)聯(lián)數(shù)組; ·模塊:可以導(dǎo)入其他代碼文件的代碼文件。 在20世紀(jì)70年代,“意大利面條代碼”一詞也被創(chuàng)造出來,繼Edsger W.Dijkstra于1968年致計算機械協(xié)會通訊(CACM)后,題為“Go ToStatement Considered Harmful”。 在20世紀(jì)70年代后期,面向事件的編程表面和TrygveReenskaug的第一個想法寫了他關(guān)于MVC(使用事件)的論文。 1970s – Procedural& Functional Programming Pascal ~1970,C ~1972 Procedural andfunctional code came to life during the 1970s. At this point wefinally had: · Procedures: Set ofinstructions that don’t return data; · Functions: Set ofinstructions that do return data; · Data structures: Records,similar to an associative array; · Modules: Code filesthat could be imported into other code files. During the1970s was also when the term “Spaghetti code” got coined, following Edsger W.Dijkstra letter to the Communications of the Association for ComputingMachinery (CACM) in 1968, titled “Go To Statement Considered Harmful“. It was duringthe late 1970s that the first ideas of Event Oriented Programmingsurfaces and Trygve Reenskaug writes his paper about MVC (which used events). 因此,通過這些改進,我們具有更好的可重用性,因為子程序(過程和函數(shù))可以使用不同的數(shù)據(jù)執(zhí)行相同的邏輯。我們還可以通過將相關(guān)數(shù)據(jù)分組到復(fù)雜數(shù)據(jù)結(jié)構(gòu)中來對域概念進行建模。最后,我們給出了解耦和模塊化的第一步,我們可以在其他代碼文件和事件中創(chuàng)建可重用的代碼,以將客戶端代碼與正在執(zhí)行的邏輯分離。 Thus, withthese improvements, we had better reusability, as subroutines(procedures and functions) could perform the same logic with different data. Wecould also model domain concepts by grouping related data into complexdata structures. And, finally, we gave the first steps in decoupling andmodularity where we could create code reusable in other code files andevents to decouple the client code from the logic being executed. 20世紀(jì)80年代——面向?qū)ο缶幊?/span> Simula~1965,Smalltalk-71~1971,C ++?1980,Erlang~1986,Perl~1987, Phyton~1991,Ruby~1993,Delphi,Java,Javascript,PHP~1995 OOP的理論和思想早在20世紀(jì)60年代就已開始,并在20世紀(jì)60年代首次實施:Simula。 然而,正是在20世紀(jì)80年代,當(dāng)前編程范式的使用變得普遍:面向?qū)ο缶幊?,具有可見性級別,方法(消息),對象,類以及稍后的包。這與增加封裝和模塊化相同: ·可見性級別允許我們控制哪些代碼可以訪問特定的數(shù)據(jù)集; ·類允許我們定義/建模域概念; ·對象允許我們擁有相同域概念的不同實例; ·包允許我們將表示域或功能概念的類分組,并一起工作以執(zhí)行某些任務(wù); ·方法,在功能上表示過程和函數(shù),但在概念上應(yīng)該被視為可以發(fā)布到特定類型對象的消息(或更好的命令)。 1980s – ObjectOriented Programming Simula ~1965,Smalltalk-71 ~1971, C++ ~1980, Erlang ~1986, Perl ~1987, Phyton ~1991,Ruby ~1993, Delphi, Java, Javascript, PHP ~1995 Theory and thoughts on OOP start as early as the 1960s, and was implementedfor the first time during the 1960s: Simula. Nevertheless,it was during the 1980s that the usage of the current programming paradigmbecame generalized: Object Oriented Programming, with visibility levels,methods (messages), objects, classes, and later on packages. This is the sameas saying increased encapsulation and modularity: · Visibility levels allow us tocontrol what code can access a specific set of data; · Classes allow us todefine/model domain concepts; · Objects allow us tohave different instances of the same domain concepts; · Packages allow us togroup classes that together represent a domain or functional conceptand work together to perform some task; · Methods, whichfunctionally represent procedures and functions, but conceptually should beseen as messages (or better yet, commands) that can be issued to a specifictype of objects. 20世紀(jì)90年代——主題和面向方面的編程 在20世紀(jì)90年代,面向主題的編程和面向方面的編程被曝光。 面向主題的編程根據(jù)誰“看”它來調(diào)用對象的不同表示。例如,當(dāng)一個人看到一棵樹時可能看到木頭,一只鳥可能會看到一定數(shù)量的食物和住所。將其轉(zhuǎn)換為編程,這意味著對象屬性和行為可以不同,具體取決于誰向?qū)ο蟀l(fā)送消息(誰觸發(fā)對象上的方法)。 面向方面編程試圖通過在“編譯”時注入額外的代碼來完全將交叉問題與實際業(yè)務(wù)邏輯分開。一方面是,例如,方法名稱。例如,一個跨領(lǐng)域的問題是伐木。使用AOP,我們可以簡單地配置系統(tǒng)以注入執(zhí)行登錄到符合特定模式的所有方法的代碼,例如,“記錄對名稱以'find'開頭的方法的所有調(diào)用”。(TYPO3是使用AOP的CMS的示例) 超越OOP 在OOP建立之后,我們的重點一直是調(diào)整自己的網(wǎng)絡(luò)編程,發(fā)展現(xiàn)有語言,創(chuàng)建專門用于Web開發(fā)的新語言,開發(fā)框架,調(diào)整工具和架構(gòu),以滿足當(dāng)今大量的請求和數(shù)據(jù)。 有一些嘗試發(fā)展編程語言,如面向主題編程(對象行為不同,取決于主題觸發(fā)行為),或面向方面編程(編譯時代碼注入),但實質(zhì)上是編程語言范例由于我們在大多數(shù)情況下仍然使用OOP,但是功能語言似乎最近已經(jīng)獲得了一些采用(可能是炒作?)。 1990s –Subject & Aspect Oriented Programming During the1990s Subject Oriented Programming and Aspect Oriented Programming came tolight. SubjectOriented Programming calls for the different representations of objects,according to who is “looking” at it. For example, while a human mightsee wood when he looks at a tree, a bird might see an amount of food andshelter. Translating this to a programming, it means that objectproperties and behaviour can be different, depending on who sends a message tothe object (who triggers a method on an object). AspectOriented Programming tries to completely separate cross-cutting concerns fromthe actual business logic by injecting the extra code at “compile” time. An aspectis, for example, a method name. A cross-cutting concern is, for example,logging. Using AOP, we can simply configure the system to inject code thatperforms logging into all methods that comply to a specific pattern, forexample, “log all calls to methods whose name starts with ‘find’“. (TYPO3 is an exampleof a CMS using AOP) Beyond OOP After theestablishment of OOP, the big focus has been in adjusting ourselves toprogramming for the web, evolving existing languages, creating newlanguages specialised for web development, developing frameworks,adjusting the tools and architectures for the massive amount of requests anddata of today. There weresome attempts to evolve the Programming Languages, like Subject-OrientedProgramming (objects behavior is different, depending on the subject firing thebehavior), or Aspect-Oriented Programming (code injection at compile time), butin essence the programming language paradigm didn’t change much as we still useOOP for most cases, although functional languages seem to have been gainingsome adoption as of late (maybe a hype?). 結(jié)論 我想說的是,在軟件開發(fā)歷史的前幾十年,編程語言的發(fā)展是為了提供可重用性,同時也為變革準(zhǔn)備軟件(無論是改變功能,重構(gòu)還是完全交換一段代碼) ),它們朝著模塊化(低耦合)和封裝(高內(nèi)聚)的方向發(fā)展。正如我們將在下一篇文章中看到的那樣,架構(gòu)繼續(xù)這種演變,盡管在更高的抽象層次上。正如我們將在下一篇文章中看到的那樣,架構(gòu)繼續(xù)這種演變,盡管在更高的抽象層次上。 Conclusion The point I amtrying to make is that in the first decades of software development history,programming languages evolved in order to provide for reusability, but also toprepare software for change (be it changing the functionality, refactoring orswapping a section of code completely), they evolved in the direction of Modularity (lowcoupling) and Encapsulation (high cohesion). As we will see inmy next posts, Architecture continues this evolution, although at a higherlevel of abstraction. As we will see in my next posts, Architecture continuesthis evolution, although at a higher level of abstraction. 來源 1979年——Trygve Reenskaug——MVC 1993年——Alan C. Kay——Smalltalk的早期歷史 1993年——威廉哈里森,哈羅德奧索爾——面向主題的編程:對純粹物體的批判 1997年——Gregor Kiczales,John Lamping,AnuragMendhekar,Chris Maeda,Cristina Videira Lopes,Jean-Marc Loingtier,John Irwin——面向方面編程 2005年——David R. Tribble——Go To Statement認(rèn)為有害:回顧 2017 *——維基百科——編程范式 2018年*——維基百科——Simula Sources 1979 – TrygveReenskaug – MVC 1993– Alan C. Kay – TheEarly History of Smalltalk 1993 – WilliamHarrison, Harold Ossher – Subject-Oriented Programming: A Critique ofPure Objects 1997 – GregorKiczales, John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Videira Lopes,Jean-Marc Loingtier, John Irwin – Aspect Oriented Programming 2005 – DavidR. Tribble – GoTo Statement Considered Harmful: A Retrospective 2017* –Wikipedia – ProgrammingParadigm 2018* – Wikipedia – Simula 編程語言是一組用來定義計算機程序的語法規(guī)則。它是一種被標(biāo)準(zhǔn)化的交流語言,用來向計算機發(fā)出指令。一種計算機語言讓程序員能夠準(zhǔn)確地定義計算機所需要使用的數(shù)據(jù),并精確地定義在不同情況下所應(yīng)當(dāng)采取的行動。盡管人們多次試圖創(chuàng)造一種通用的程序設(shè)計語言,卻沒有一次嘗試是成功的。那么多種不同的編程語言,因為設(shè)計程序語言的初衷不同、對語言學(xué)習(xí)曲線的追求不同、不同程序之間的運行成本差異等而無法統(tǒng)一。如果追求極致簡化的通用編程語言,則必須跳出來。 (注:材料來自網(wǎng)文[1-16],相應(yīng)圖文版權(quán)歸原作者。) 參考文獻(2780字) [1]. From Wikipedia, the free encyclopedia. History of programminglanguages. [EB/OL], wikipedia.https://en./wiki/History_of_programming_languages, 22 December2018, at 01:50 (UTC), visiting data: 2019-01-06. [2]. shared by Neostrategos. The History ofProgramming Languages. [EB/OL], > infographic > Computers,https:///community/infographic/computers/history-programming-languages,on Apr 17, 2013, visiting data: 2019-01-06. [3]. 可訪問但404. 以上圖片上的文字內(nèi)容來自這篇文章[1]。[EB/OL], soimort, https://www./posts/160/ [4]. 可訪問但404. 英文原文:James Iry’shistory of programming languages[2]. [EB/OL], wordpress, http://thequickword./2014/02/16/james-irys-history-of-programming-languages-illustrated-with-pictures-and-large-fonts/ [5]. via:http://www./history-of-programming-languages-illustrated-with-pictures-and-large-fonts/ [6]. medium. a brief totally accurate history ofprogramming languages. [EB/OL], medium,https:///commitlog/a-brief-totally-accurate-history-of-programming-languages-cd93ec806124,2019-01-01, visiting data: 2019-01-06. [7]. Infographics · Programming by Harshil Barot.Homepage ? Infographics ? History of Programming Languages Must Know[Infographic]. History of Programming Languages Must Know [Infographic].[EB/OL], justwebworld,https://www./history-programming-languages-infographic/,September 3, 2017, visiting data: 2019-01-07. [8]. @herbertograca. Programming Languageevolution. [EB/OL], herbertograca. https:///2017/07/10/programming-language-evolution/,July 10, 2017, visiting data: 2019-01-07. [9]. jack-zhu. 作為程序員必須知道的編程語言編年史.[EB/OL], csdn, https://blog.csdn.net/zhu_xun/article/details/17347289,2013-12-16, visiting data: 2019-01-07. [10]. 惡搞版的大話編年史. 圖文大話編程語言史. [EB/OL],linux, https:///article-2659-1.html, 2014-03-10 21:34, visiting data:2019-01-07. [11]. 阿里云. 編年史-簡介. [EB/OL], aliyun,https://www.aliyun.com/zixun/aggregation/20312.html, visiting data: 2019-01-05. [12]. 百家號最近更新:2019-01-07 16:11,編譯:狗小白、云舟,大數(shù)據(jù)文摘翻譯2019/01/05 18:45. 編程語言的“別樣”編年史.[EB/OL], jiqizhixin, https://www./articles/2019-01-07-16,2019-01-05, visiting data: 2019-01-07. [13]. iteye_8644. 鮮為人知的編程語言的發(fā)展史--編程語言1800年至2018年人事物編年史. [EB/OL], csdn, https://blog.csdn.net/iteye_8644/article/details/82102129,2011-08-04, visiting data: 2019-01-07. [14]. 編譯:狗小白、云舟, 大數(shù)據(jù)文摘. 編程語言的“別樣”編年史. [EB/OL], baijiahao,https://baijiahao.baidu.com/s?id=1621988430705465609, 2019-01-07, visitingdata: 2019-01-07. [15].herbertograca. 1.軟件架構(gòu)編年史(譯).[EB/OL], herbertograca,https:///2017/07/03/the-software-architecture-chronicles/,2017-07-03, visiting data: 2019-01-07. [16]. qinyu. 1.軟件架構(gòu)編年史(譯). [EB/OL],https://www.jianshu.com/p/b477b2cc6cfa, 2018.08.27, visiting data: 2019-01-07. 簡介:編程語言1800年至2018年人事物編年史。作者:秦隴紀(jì)等。素材:wikipedia/medium,/soimort/wordpress/vaikan/aliyun/csdn/baijiahaohu/知識簡化/數(shù)據(jù)簡化社區(qū)NC非商業(yè)授權(quán)/秦隴紀(jì)微信群聊公眾號,參考文獻附引文出處。下載:本文18字52圖25頁PDF資料,公號輸入欄發(fā)送關(guān)鍵字“編程語言史”或文末“閱讀原文”鏈接;關(guān)注“數(shù)據(jù)簡化DataSimp”分類菜單。版權(quán):科普文章僅供學(xué)習(xí)研究,公開資料?版權(quán)歸原作者,請勿用于商業(yè)非法目的。秦隴紀(jì)2010數(shù)據(jù)簡化DataSimp匯譯編,投稿合作、轉(zhuǎn)載授權(quán)/侵權(quán)、原文引文錯誤等請聯(lián)系DataSimp@126.com。轉(zhuǎn)載:請寫明并保留作者、出處、時間等信息:如“此文出自:?數(shù)據(jù)簡化DataSimp,作者:秦隴紀(jì),時間:20190107Mon。”等字樣?秦隴紀(jì)2010-2019匯譯編。數(shù)據(jù)簡化社區(qū)保留相應(yīng)版權(quán),若有引文/譯注/出處不明或遺漏/版權(quán)問題等,請給公號留言或郵件咨詢QinDragon2010@qq.com。 |
|