編程語言概要
編輯編程語言是一種形式語言包括一組指令產生各種輸出。編程語言用于計算機編程中以實現算法。
大多數編程語言包括指令的計算機。有些可編程機器使用一組特定的指令,而不是通用的編程語言。自1800年代初期以來,就一直使用程序來控制諸如提花織機,音樂盒和彈奏鋼琴之類的機器的行為。這些機器的程序(例如,演奏者的鋼琴卷軸)對于不同的輸入或條件沒有產生不同的行為。
已經創建了成千上萬種不同的編程語言,并且每年都在創建更多的編程語言。許多編程語言是以命令式形式(即,作為要執行的一系列操作)編寫的,而其他語言則使用聲明式形式(即,指定了所需的結果,而不是如何實現)。
編程語言的描述通常分為語法(形式)和語義(含義)兩個部分。某些語言由規范文檔定義(例如,C編程語言由ISO標準指定),而其他語言(例如Perl)則具有占主導地位的實現,被視為參考。某些語言既具有標準定義的基本語言,又具有從主導實現中進行的擴展的通用性。
編程語言的定義
編輯編程語言是編寫程序的一種表示法,它是計算或算法的規范。一些作者將術語“編程語言”限制為可以表達所有可能算法的語言。通常被認為對構成編程語言很重要的特征包括:
-
功能和目標
- 計算機編程語言是一種語言用于寫的計算機程序,其涉及一個計算機執行某種計算或算法和可能的控制外部設備,如打印機、磁盤驅動器、機器人等。例如,PostScript程序通常由另一個程序創建以控制計算機打印機或顯示器。更一般地,編程語言可以描述某些可能是抽象的機器上的計算。公認的是,一種編程語言的完整規范包括對該語言的機器或處理器的描述(可能是理想的)。在大多數實際情況下,編程語言涉及計算機。因此,通常以這種方式定義和研究編程語言。編程語言與自然語言的不同之處在于,自然語言僅用于人與人之間的交互,而編程語言還允許人類將指令傳達給機器。
-
抽象化
- 編程語言通常包含用于定義和操作數據結構或控制執行流程的抽象。抽象原理表示了一種編程語言支持足夠抽象的實際必要性。有時將此原則表述為對程序員的建議,以正確使用此類抽象。
-
表現力
- 在計算理論通過他們能夠表達的計算分類語言。所有圖靈完備的語言都可以實現相同的算法集。ANSI / ISO SQL-92和Charity是圖靈不完整的語言示例,但通常被稱為編程語言。
諸如XML、HTML或troff之類的標記語言定義了結構化數據,通常不被視為編程語言。但是,如果定義了計算語義,則編程語言可以與標記語言共享語法。例如,XSLT是完全使用XML語法的圖靈完整語言。此外,主要用于結構化文檔的LaTeX還包含一個圖靈完整子集。
術語“計算機語言”有時可以與編程語言互換使用。但是,這兩個術語的用法在作者之間有所不同,包括每個術語的確切范圍。一種用法將編程語言描述為計算機語言的子集。類似地,在計算中使用的語言與表達計算機程序的目標不同的語言是通用指定的計算機語言。例如,標記語言有時被稱為計算機語言,以強調它們并非旨在用于編程。
另一種用法是將編程語言視為用于對抽象機進行編程的理論構造,而將計算機語言視為在具有有限硬件資源的物理計算機上運行的子集。約翰·C·雷諾茲(John C. Reynolds)強調,形式規范語言與旨在執行的語言一樣,都是編程語言。他還認為,影響計算機行為的文本甚至圖形輸入格式都是編程語言,盡管事實上它們通常不是圖靈完備的,并且指出對編程語言概念的無知是輸入格式存在許多缺陷的原因。
編程語言的設計與實現
編輯編程語言與與自然語言相關的屬性與其作為通訊工具的目的有關,它們的語法形式與其語義分開,并顯示出彼此分支的相關語言的語言族。但作為人工構造,它們在根本上也與通過用法演變的語言有所不同。一個重要的區別是,由于編程語言具有精確且有限的定義,因此可以對其進行完整地描述和研究。相反,自然語言在不同社區中的用戶賦予其不斷變化的含義。雖然人工語言?也是出于特定目的從頭開始設計的人工語言,它們缺乏編程語言所具有的精確而完整的語義定義。
許多編程語言都是從頭開始設計的,為了滿足新的需求而進行了更改,并與其他語言結合使用。許多最終都被廢棄了。盡管已經嘗試設計一種可以滿足所有目的的“通用”編程語言,但是所有這些語言都未能被普遍接受以填補這一角色。對多種編程語言的需求源于使用語言的上下文的多樣性:
- 程序范圍從單個業余愛好者編寫的小腳本到數百個程序員編寫的大型系統。
- 程序員的專業知識范圍很廣,從最需要簡單的新手到可能會感到相當復雜的專家。
- 程序必須在從微控制器到超級計算機的系統上平衡速度,大小和簡單性。
- 程序可以編寫一次,并且不會代代改變,也可以進行不斷的修改。
- 程序員的品味可能會有所不同:他們可能習慣于討論問題并以特定語言表達問題。
編程語言發展的一個共同趨勢是增加了使用更高層次的抽象來解決問題的能力。最早的編程語言與計算機的基礎硬件緊密聯系在一起。隨著新的編程語言的發展,已添加了一些功能,這些功能使程序員可以表達從簡單轉換為底層硬件指令的想法。由于程序員與計算機的復雜性關系不大,因此他們的程序可以用較少的精力進行更多的計算。這使他們可以按時間單位編寫更多功能。
已經提出了自然語言編程作為消除對編程專用語言的需要的一種方式。但是,這個目標仍然遙遙無期,其利益尚有待商debate。Edsger W. Dijkstra的立場是,使用正式語言對于防止引入無意義的結構是必不可少的,因此將自然語言編程視為“愚蠢的”。艾倫·佩里斯(Alan Perlis)同樣不屑一顧。在結構化英語和SQL中采用了混合方法。
語言的設計者和用戶必須構造許多工件,這些工件支配并支持編程實踐。這些工件中最重要的是語言規范和實現。
規格
編程語言的規范是一種語言產物,用戶和實現者可以使用該語言來約定源代碼是否是該語言中的有效程序,如果是,則其行為應如何。
編程語言規范可以采取幾種形式,包括以下幾種:
- 語言的語法,靜態語義和執行語義的明確定義。雖然通常使用形式語法來指定語法,但是可以使用自然語言(例如,如C語言)或形式化語義(例如,如Standard ML和Scheme 規范)來編寫語義定義。
- 語言翻譯器行為的描述(例如C ++和Fortran規范)。必須從該描述中推斷出該語言的語法和語義,該描述可以用自然語言或形式語言編寫。
- 甲參考或模型實現,有時被指定寫入語言(例如,序言或ANSI REXX )。語言的語法和語義在參考實現的行為中是明確的。
實施
編程語言的實現提供了一種使用該語言編寫程序并在一個或多個硬件和軟件配置上執行它們的方法。廣義上講,有兩種方法可以實現編程語言:編譯和解釋。通常可以使用任何一種技術來實現一種語言。
編譯器的輸出可以由硬件或稱為解釋器的程序執行。在一些使用解釋器方法的實現中,在編譯和解釋之間沒有明顯的界限。例如,BASIC的某些實現會先編譯然后在一行中執行源代碼。
直接在硬件上執行的程序通常比在軟件中解釋的程序運行快得多。
改善解釋程序性能的一種技術是即時編譯。在這里,虛擬機在執行之前就轉換了將用于機器碼的字節碼塊,以便在硬件上直接執行。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/120384/