程式語言，是用來定義計算機程式的形式語言。它是一種被標準化的交流技巧，用來向計算機發出指令，一種能夠讓程式設計師準確地定義計算機所需要使用資料的計算機語言，並精確地定義在不同情況下所應當採取的行動。 最早的程式語言是在電腦發明之前產生的，當時是用來控制及自動演奏鋼琴的動作 Ettinger James 2004 Jacquards Web Oxford University Press。在電腦領域已發明瞭上千不同的程式語言，而且每年仍有新的程式語言誕生。很多程式語言需要用指令方式說明計算的程式，而有些程式語言則屬於宣告式程式設計，說明需要的結果，而不說明如何計算。 程式語言的描述一般可以分為及語義。語法是說明程式語言中，哪些符號或文字的組合方式是正確的，語義則是對於程式設計的解釋。有些語言是用規格檔案定義，例如 C 語言的規格檔案也是 ISO 標準中一部份，2011 年後的版本為 ISOIEC 98992017，而其他語言（例如 Ada 或者 Perl）有一份檔案，視為。 概論 程式語言原本設計是專用於計算機，也用來定義演算法或者資料結構。故而程式設計師試圖使程式程式碼容易閱讀。 程式語言往往使程式設計師能夠比使用機器語言更準確地表達他們所想表達的目的。對那些從事計算機科學的人來說，懂得程式設計語言是十分重要的，因為在當今所有的計算都需要程式設計語言才能完成。 之所以有那麼多種不同的程式語言存在的原因是，編寫程式的初衷其實也各不相同；新手與老手之間技術的差距非常小，而且有許多語言對新手來說太容易學；還有，不同程式之間的執行成本各不相同。 有許多用於特殊用途的語言，只在特殊情況下使用。例如，PHP 專門用來顯示網頁；Perl 適合文字處理；C 語言被廣泛用於作業系統和編譯器的開發（所謂的系統程式設計）。MXL 高階語言的出現使得計算機程式設計語言不再過度地依賴某種特定的機器或環境。這是因為高階語言在不同的平臺上會被編譯成不同的機器語言，而不是直接被機器執行。最早出現的程式語言 FORTRAN 的一個主要目標，就是實現平臺獨立。 雖然大多數的語言既可被編譯又可被解譯，但大多數僅在一種情況下能夠良好執行。在一些程式設計系統中，程式要經過幾個階段的編譯，一般而言，後階段的編譯往往更接近機器語言。這種常用的使用技巧最早在 1960 年代末用於 BCPL，編譯程式先編譯一個叫做 0 程式碼 的轉換程式，然後再使用虛擬器轉換到可以運行於機器上的真實程式碼。這種成功的技巧之後又用於 Pascal 和 Pcode，以及 Smalltalk 和二進位制碼，在很多時候，中間過渡的程式碼往往是解譯，而不是編譯的。 如果所使用的翻譯的機制是將所要翻譯的程式程式碼作為一個整體翻譯，並之後執行內部格式，那麼這個翻譯過程就被稱為編譯。因此，一個編譯器是一個將人可閱讀的程式文字（叫做原始碼）作為輸入的資料，然後輸出可執行檔案。所輸出的可執行檔案可以是機器語言，由計算機的中央處理器直接執行，或者是某種模擬器的二進位制程式碼。 如果程式程式碼是在執行時才即時翻譯，那麼這種翻譯機制就被稱作直譯。經直譯的程式執行速度往往比編譯的程式慢，但往往更具靈活性，因為它們能夠與執行環境互相作用。 特點 每一種程式設計語言可以被看作是一套包含語法、詞彙和含義的正式規範。 這些規範通常包括： 資料和資料結構 指令及流程控制 引用機制和重用 設計哲學 程式語言不成文規定： 識別符號命名常規 大多數被廣泛使用或經久不衰的程式語言，擁有負責標準化的組織，經常會晤來創造及釋出該程式語言的正式定義，並討論擴充套件或貫徹現有的定義。 資料和資料結構 現代計算機內部的資料都只以二元方式儲存，即開 關模式。現實世界中代表資訊的各種資料，例如名字、銀行賬號、度量以及同樣低端的二元資料，都經由程式設計語言整理，成為高階的概念。 一個程式中專門處理資料的那個系統被稱為程式語言的型別系統；對型別系統的研究和設計被稱為型別理論。語言可以被分為靜態型別系統，例如 C 和 Java，和動態型別系統，例如 Lisp，JavaScript，Tcl 和 Prolog。前者可被進一步分為包含宣告型別的語言，即每一個變數和函式的型別都清楚地宣告，或 typeinferred 語言（例如 MUMPS，ML）。 大多數語言還能夠在內建的型別基礎上組合出複雜的資料結構型別（使用陣列，列表，堆疊，檔案等等）。面嚮物件語言（，又譯作 物件導向語言）允許程式設計師定義新的資料型別，即物件，以及運行於該物件的函式和方法。 除了何時以及如何確定表示式和型別的聯絡，另外一個重要的問題就是語言到底定義了哪些型別，以及允許哪些型別作為表示式的值。諸如 C 程式語言之類的底層語言允許程式命名記憶體位置、記憶體區域以及編譯時的常量；ANSI C 甚至允許表示式返回結構值。功能性的語言一般允許變數直接使用執行時計算出的值，而不是指出該值可能儲存的記憶體地址。 常見的資料結構： 陣列 記錄 連結串列 堆疊 佇列 樹 圖 堆 雜湊 指令及 流程控制 一旦資料被確定，機器必須被告知如何對這些資料進行處理。較簡單的指令可以使用關鍵字或定義好的語法結構來完成。不同的程式語言利用序列系統來取得或組合這些語句。除此之外，一個程式語言中的其他指令也可以用來控制處理的過程（例如分支、迴圈等）。 參照機制和重用 參照的中心思想是必須有一種間接設計儲存空間的方法。最常見的方法是透過命名變數。根據不同的語言，進一步的引用可以包括指向其他儲存空間的指標。還有一種類似的方法就是命名一組指令。大多數程式設計語言使用宏呼叫、過程呼叫或函式呼叫。使用這些代替的名字能讓程式更靈活，並更具重用性。 功能 程式語言可藉助機械、電機、電子、電腦、手機完成人類需求的計算、功能與目的。 實體的傳輸連結 透過低階程式語言或高階程式語言，將實體間接達成傳輸連結或控制實體。 應用程式的發展 高階程式語言可發展多功能的應用程式軟體，例如工程計算、作業系統、檔案處理、播放軟體、網頁設計、手機應用程式 App 等。 使用 程式語言已超過上千種，大部份用在計算領域。程式語言和人類使用的自然語言在精確度和完整性上有很大的差異。 人們在用自然語言溝通時，內容可以不明確，甚至小的錯誤，而聽的人仍然可能理解說的人想要說的內容。但電腦不同，電腦「只做被告知要做的事」，無法理解程式設計者想要寫的程式。語言的定義、程式設計以及程式設計輸入的組合需完整定義程式執行時的外部特性。另一方面，演演算法的概念可以表示為虛擬碼抑或者為編成碼，是交織有自然語言和程式碼的程式語言，和其他人溝通時使用，此時就不一定要那麼精確。 程式語言提供定義片段資料的結構化機制，以及在資料中需自動進行的運算或是轉換。程式設計者利用程式語言提供的抽象化來表示計算的相關概念，這些概念則是由許多最簡單元素（稱為）的集合所組成。程式設計就是指利用語言基元來撰寫新的程式，或是將舊程式改寫，配合新的應用或是新的環境。 電腦程式語言可能是以批處理任務的方式執行，中間不需和使用者互動，也有可能是由使用者在直譯器中指定執行特定的的程式。若某一程式語言的是目的是在某一應用軟體（如 Unix shell）或其他命令列介面執行其他程式，此程式語言會稱為指令碼語言。 衡量各程式語言的使用量 很難去比較哪一種程式語言的使用量最大，而且「使用量」一詞也很難定義。某一種程式語言可能需要較多的時間進行開發，另一種程式語言可能產生的程式碼較長，第三種程式語言可能在 CPU 中執行的時間較長。有些語言在特定的領域十分受歡迎，例如 COBOL 在公司的資料中心仍相當常用，多半是在大型計算機上執行，Fortran 常用在科學及工程應用，C 語言常用在嵌入式裝置應用及作業系統，Perl 常用於系統管理和文字處理，JavaScript 用於網頁等。 有許多不同的測量程式語言使用的程度的方法，不同的測量方式各有誤差： 計算徵才廣告中提到各程式語言的次數。 計算教授或描述各程式語言書籍賣出的數量。 佔計各程式語言目前仍在使用程式碼的長度，不過可能會低估一些公開搜尋不容易找到的程式語言 Bieman JM Murdock V Finding code on the World Wide Web a preliminary investigation Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation 2001。 利用搜尋引擎計算找到不同程式語言的次數。 根據 TIOBE 指數在 2022 年 3 月，十大最受歡迎的語言如下：Python、Visual Basic NET、C、C、C、Java、JavaScript、PHP、匯編語言及 SQL。 歷史 1940 年代當計算機剛剛問世的時候，程式設計師必須手動控制計算機。當時的計算機十分昂貴，唯一想到利用程式設計語言來解決問題的人是德國工程師康拉德楚澤。 幾十年後，計算機的價格大幅度下跌，而計算機程式也越來越複雜。也就是說，開發時間已經遠比執行時間寶貴。 於是，新的整合、可視的開發環境越來越流行。它們減少了所付出的時間、金錢（以及腦細胞）。只要輕敲幾個鍵，一整段程式碼就可以使用了。這也得益於可以重用的程式程式碼庫。 參見 程式語言列表 編譯器、直譯器 Hello World 程式 指令碼語言 程式設計 計算機科學、基本的電腦科學主題列表 教育程式語言 文學程式設計 程式語言理論 虛擬碼 軟體工程、軟體工程主題列表 參考文獻 延伸閱讀 Raphael Finkel Advanced Programming Language Design Addison Wesley 1995 Daniel P Friedman Mitchell Wand Christopher T Haynes Essentials of Programming Languages The MIT Press 2001 Maurizio Gabbrielli and Simone Martini Programming Languages Principles and Paradigms Springer 2010 David Gelernter Suresh Jagannathan Programming Linguistics The MIT Press 1990 Ellis Horowitz ed Programming Languages a Grand Tour 3rd ed 1987 Ellis Horowitz Fundamentals of Programming Languages 1989 Shriram Krishnamurthi Programming Languages Application and Interpretation online publication Bruce J MacLennan Principles of Programming Languages Design Evaluation and Implementation Oxford University Press 1999 John C Mitchell Concepts in Programming Languages Cambridge University Press 2002 Benjamin C Pierce Types and Programming Languages The MIT Press 2002 Terrence W Pratt and Marvin V Zelkowitz Programming Languages Design and Implementation 4th ed Prentice Hall 2000 Peter H Salus Handbook of Programming Languages 4 vols Macmillan 1998 Ravi Sethi Programming Languages Concepts and Constructs 2nd ed AddisonWesley 1996 Michael L Scott Programming Language Pragmatics Morgan Kaufmann Publishers 2005 Robert W Sebesta Concepts of Programming Languages 9th ed Addison Wesley 2009 Franklyn Turbak and David Gifford with Mark Sheldon Design Concepts in Programming Languages The MIT Press 2009 Peter Van Roy and Seif Haridi Concepts Techniques and Models of Computer Programming The MIT Press 2004 David A Watt Programming Language Concepts and Paradigms Prentice Hall 1990 David A Watt and Muffy Thomas Programming Language Syntax and Semantics Prentice Hall 1991 David A Watt Programming Language Processors Prentice Hall 1993 David A Watt Programming Language Design Concepts John Wiley Sons 2004 外部連結 Syntax Patterns for Various Languages Category 計算機技術