本條目探討程式語言在歷史上的主要發展。更詳細的事件發生年表，請參閱。 1940 之前 200pxthumb 霍列瑞斯式的打孔機 pantograph，用於 1890 年的人口普查 第一個程式語言的出現早於現代的計算機的誕生。首先，這種語言是種程式碼。 於 1804 年發明的雅卡爾織布機，運用打孔卡上的坑洞來代表縫紉織布機的手臂動作，以便自動化產生裝飾的圖案。 愛達勒芙蕾絲在 1842 年至 1843 年間花費了九個月，將義大利數學家費德里科路易吉關於查爾斯巴貝奇新發表機器分析機的回憶錄翻譯完成。她於那篇文章後面附加了一個用分析機計算伯努利數方法的細節，被部分歷史學家認為是世界上第一個電腦程式。 赫爾曼何樂禮在觀察列車長對乘客票根在特定位置打洞的方式後得到靈感，把資訊編碼記載到打孔卡上，隨後根據這項發現使用打孔卡來編碼並紀錄 1890 年的人口統計資料。 最早的計算機程式碼是針對他們的應用面設計的。例如，阿隆佐邱奇曾以公式化 formulaic 的方式表達 λ 演算。圖靈機是一種紙帶標記 tapemarking 機器 就像電話公司用的那種 操作方法抽象化後的集合。圖靈機這種透過有限數字 finite number 呈現機器的方式，奠定了程式如同馮諾伊曼結構計算機中的資料一樣地儲存的基礎。但不同於 λ 演算，圖靈機的程式碼並沒有辦法成為高階程式語言的基石，這是因為它主要的用途是分析演演算法的複雜度。 第一個現代程式語言很難界定。最一開始是因為硬體限制而限定了語言，打孔卡允許 80 行 column 的長度，但某幾行必須用來記錄卡片的順序。FORTRAN 則納入了一些與英文字詞相同的關鍵字，像是 IF、GOTO（原字詞為 GO TO），以及 CONTINUE。之後採用磁鼓作為記憶體使用，也代表計算機程式也必須插入 interleave 到磁鼓的轉動 rotation 中。和現今比較起來，這也讓程式語言必須更加依賴硬體 hardwaredependent。 對部分的人認為必須在 程式語言 的狀態確立之前，根據能力 power 以及可讀性 humanreadability 的程度來決定歷史上第一個程式語言是什麼語言。提花織布機和查爾斯巴貝奇所製作的差分機都具備在大量限制下，簡單描述機器應執行行為的語言。也有種並非設計給人類運用的受限特定領域語言，是將打孔卡運用到自動演奏鋼琴上。 1940 年代 最早被確認的現代化、電力啟動 electrically powered 的計算機約在 1940 年代被創造出來。程式設計師在有限的速度及記憶體容量限制之下，撰寫人工調整 hand tuned 過的組合語言程式。而且很快就發現到使用組合語言的這種撰寫方式需要花費大量的腦力 intellectual effort 而且很容易出錯 errorprone。 康拉德楚澤於 1948 年發表了他所設計的 Plankalkül 程式語言的論文 。但是在他有生之年卻未能將該語言實作，而他原本的貢獻也被其他的發展所孤立。 1950 與 1960 年代 有三個現代程式語言於 1950 年代被設計出來，三者衍生的語言直到今日仍舊廣泛地被採用： FORTRAN 1955，名稱取自 FORmula TRANslator公式翻譯器，由約翰巴科斯等人所發明； LISP，名稱取自 LISt Processor列舉處理器，由約翰麥卡錫等人所發明； COBOL，名稱取自 COmmon Business Oriented Language通用商業導向語言，由被葛麗絲霍普深刻影響的 Short Range Committee 所發明。 另一個 1950 年代晚期的里程碑是由美國與歐洲計算機學者針對 演演算法的新語言 所組成的委員會出版的《ALGOL 60 報告》（名稱取自 ALGOrithmic Language，即演演算法語言）。這份報告強化了當時許多關於計算的想法，並提出了兩個語言上的創新功能： 巢狀區塊結構：可以將有意義的程式碼片段群組成一個塊，而非轉成分散且特定命名的程式。 詞法作用域：區塊可以有區塊外部無法透過名稱存取，屬於區塊本身的變數、程式以及函式。 另一個創新則是關於語言的描述方式： 一種名為巴科斯 諾爾正規化 BNF 的數學化精確符號被用於描述語言的語法。之後的程式語言幾乎全部都採用類似 BNF 的方式來描述程式語法中上下文無關的部份。 Algol 60 對之後語言的設計上帶來了特殊的影響，部分的語言很快的就被廣泛採用。後續為了開發 Algol 的擴充子集合，設計了一個名為。 延續 Algol 的關鍵構想所產生的成果就是 ALGOL 68： 語法跟語意變的更加正交 orthogonal，採用匿名的例程 routines，採用高階 higherorder 功能的遞迴式型別 typing 系統等等。 整個語言及語意的部分都透過為了描述語言而特別設計的來進行正式的定義，而不僅止於上下文無關的部份。 Algol 68 一些較少被使用到的語言功能 如同步與並列區塊、語法捷徑的複雜系統，以及型態自動強制轉換 coercions，使得實作者興趣缺缺，也讓 Algol 68 獲得了 難用 的名聲。尼克勞斯維爾特就乾脆離開該設計委員會，另外再開發出更簡單的 Pascal 語言。 在這段期間被開發出來的重要語言包括有： 1951 Regional Assembly Language 1952 1954 FORTRAN 1954 IPL LISP 的先驅 1955 COBOL 的先驅 1957 COBOL 的先驅 1958 LISP 1958 ALGOL 58 1959 COBOL 的先驅 1959 COBOL 1962 APL 1962 Simula 1962 SNOBOL 1963 CPL C 的先驅 1964 BASIC 1964 PLI 1967 BCPL C 的先驅 1960 年代晚期 1970 年代晚期：確立了基礎範型 1960 年代晚期至 1970 年代晚期的期間中，程式語言的發展也有了重大的成果。大多數現在所使用的主要語言範型都是在這段期間中發明的： Simula，於 1960 年代晚期由奈加特與達爾以 Algol 60 超集合的方式發展，同時也是第一個設計支援物件導向進行開發的程式語言。 C，於 1969 至 1973 年間由貝爾實驗室的研究人員丹尼斯裡奇與肯湯普遜所開發，是一種早期的系統程式設計語言。 Smalltalk，於 1970 年代中期所開發，是一個完全從零開始 groundup 設計的物件導向程式語言。 Prolog，於 1972 年由、Roussel 以及 Kowalski 所設計，是第一個邏輯程式語言。 ML，於 1973 年由羅賓米爾納所發明，是一個基於 Lisp 所建構的多型 polymorphic 型態系統，同時也是靜態型別函式程式語言的先驅。 這些語言都各自演展出自己的家族分支，現今多數現代程式語言的祖先都可以追溯他們其中至少一個以上。 在 1960 年代以及 1970 年代中結構化程式設計的優點也帶來許多的爭議，特別是在程式開發的過程中完全不使用 GOTO。這項爭議跟語言本身的設計非常有關係：某些語言並沒有包含 GOTO，這也強迫程式設計師必須結構化地編寫程式。儘管這個爭議在當時吵翻了天，但幾乎所有的程式設計師都同意就算語言本身有提供 GOTO 的功能，在除了少數罕見的情況下去使用 GOTO 是種不良的程式風格。結果是之後世代的程式語言設計者發覺到結構化程式語言的爭議實在既乏味又令人眼花繚亂。 在這段期間被開發出來的重要語言包括有： 1968 Logo 1970 Pascal 1970 Forth 1972 C 1972 Smalltalk 1972 Prolog 1973 ML 1975 Scheme 1978 SQL 起先只是一種查詢語言，擴充之後也具備了程式結構 1980 年代：增強、模組、效能 1980 年代的程式語言與之前相較顯得更為強大。C 合併了物件導向以及系統程式設計。美國政府標準化一種名為 Ada 的系統程式語言並提供給國防承包商使用。日本以及其他地方運用了大量的資金對採用邏輯程式語言結構的第五代程式語言進行研究。函式程式語言社群則把焦點轉移到標準化 ML 及 Lisp 身上。這些活動都不是在開發新的範型，而是在將上個世代發明的構想進一步發揚光大。 然而，在語言設計上有個重大的新趨勢，就是研究運用模組或大型組織化的程式單元來進行大型系統的開發。Modula、Ada，以及 ML 都在 1980 年代發展出值得注意的模組化系統。模組化系統常拘泥於採用泛型程式設計結構：泛型存在 generics being、本質 essence，引數化模組 parameterized modules。參閱多型 儘管沒有出現新的主要程式語言範型，許多研究人員仍就擴充之前語言的構想並將它們運用到新的內容上。舉例來說，Argus 程式語言 以及系統的語言配合物件導向語言運用到分散式系統上。 1980 年代的程式語言實作情況也有所進展。計算機系統結構中 RISC 的進展假定硬體應當為編譯器設計，而非身為人類的組合語言程式設計師。藉由中央處理器速度增快的幫助，編譯技術也越來越積極，RISC 的進展對高階語言編譯技術帶來不小的關注。 語言技術持續這些發展並邁入了 1990 年代。 在這段期間被開發出來的重要語言包括有： 1980 Ada 1983 C 就像有類別的 C 1984 Common Lisp 1985 Eiffel 1986 Erlang 1987 Perl 1988 Tcl 1989 FL Backus 1990 年代：網際網路時代 1990 年代未見到有什麼重大的創新，大多都是以前構想的重組或變化。這段期間主要在推動的哲學是提升程式設計師的生產力。許多 快速應用程式開發 RAD 語言也應運而生，這些語言大多都有相應的整合開發環境、垃圾回收等機制，且大多是先前語言的衍生語言。這型別的語言也大多是物件導向的程式語言，包含有 Object Pascal、Visual Basic，以及 C。Java 則是更加保守的語言，也具備垃圾回收機制。與其他類似語言相比，也受到更多的觀注。新的指令碼語言則比 RAD 語言更新更好。這種語言並非直接從其他語言衍生，而且新的語法更加開放地 liberal 與功能契合。雖然指令碼語言比 RAD 語言來的更有生產力，但大多會有因為小程式較為簡單，但是大型程式則難以使用指令碼語言撰寫並維護的顧慮。儘管如此，指令碼語言還是網路層面的應用上大放異彩。 在這段期間被開發出來的重要語言包括有： 1990 Haskell 1991 Python 1991 Visual Basic 1993 Ruby 1993 Lua 1994 CLOS part of ANSI Common Lisp 1995 Java 1995 Delphi Object Pascal 1995 JavaScript 1995 PHP 1997 REBOL 1999 D 現今的趨勢 程式語言持續在學術及企業兩個層面中發展進化，目前的一些趨勢包含有： 在語言中增加安全性與可靠性驗證機制：額外的堆疊檢查、資訊流 information flow 控制，以及靜態執行緒安全。 提供模組化的替代機制：混入，委託，以及剖面導向。 元件導向 componentoriented 軟體開發。 超程式設計、反射或是存取抽象語法樹。 更重視分散式及移動式的應用。 與資料庫的整合，包含 XML 及關聯式資料庫。 支援使用 Unicode 編寫程式，所以原始碼不會受到 ASCII 字元集的限制，而可以使用像是非拉丁語系的指令碼或延伸標點符號。 圖形化使用者介面所使用的 XML XUL、XAML。 在這段期間被開發出來的重要語言包括有： 2000 ActionScript 2001 C 2001 D 2001 Visual Basic NET 2002 Scratch 2003 Scala 2003 Factor 2005 F 2005 HolyC 2006 Windows PowerShell 2007 Clojure 2008 Nim 2009 Go 2011 Dart 2011 Kotlin 2012 Julia 2012 TypeScript 2012 Elm 2012 Elixir 2014 Swift 程式語言 2015 Rust 2019 Bosque 2021 Microsoft Power Fx 程式語言發展史上的傑出人物 約翰巴科斯，發明瞭 Fortran。 阿蘭庫珀，開發了 Visual Basic。 艾茲格迪傑斯特拉，開創了正確運用程式語言 proper programming 的框架。 詹姆斯高斯林，開發了 Oak，該語言為 Java 的先驅。 安德斯海爾斯伯格，開發了 Turbo Pascal、Delphi，以及 C。 葛麗絲霍普，開發了，該語言對 COBOL 造成了影響。 肯尼斯艾佛森，開發了 APL，並與合作開發了 J。 比爾喬伊，發明瞭 vi，BSD Unix 的前期作者，以及 SunOS 的發起人，該作業系統後來改名為 Solaris。 艾倫凱，開創了物件導向程式語言，以及 Smalltalk 的發起人。 布萊恩柯林漢，與丹尼斯裡奇合著第一本 C 程式設計語言的書籍，同時也是 AWK 與 AMPL 程式設計語言的共同作者。 約翰麥卡錫，發明瞭 LISP。 約翰馮諾伊曼，作業系統概念的發起者。 丹尼斯裡奇，發明瞭 C。 比雅尼史特勞斯特魯普，開發了 C。 肯湯普遜，發明瞭 Unix。 尼克勞斯維爾特，發明瞭 Pascal、Modula 與 Oberon。 拉里沃爾，創造了 Perl 與 Raku。 吉多範羅蘇姆，創造了 Python。 參閱 ACM 程式設計語言研討會歷史 編譯器撰寫歷史 計算機硬體歷史 程式語言 計算年表 程式語言年表 程式語言列表 參考文獻 延伸閱讀 Sammet Jean E Programming Languages History and Fundamentals PrenticeHall 1969 外部連結 The History of Programming Languages by Diarmuid Pigott History and evolution of programming languages The Evolution of Programming Languages by Peter Grogono PDF Graph of programming language history Topics in history and comparing programming languages by Dennie Van Tassel Programming languages Category 計算機科學史