Pascal语言

**Pascal** 是一個指令式編程和程序導向程式語言，由尼克勞斯・維爾特在 1968 年 9 月設計，在 1970 年發行，作為一個小型的和高效的語言，意圖鼓勵使用結構化編程和資料結構進行良好的編程實踐。

稱作 Object Pascal 的一個衍生是為物件導向程式設計設計的。

## 歷史

Pascal 基於 ALGOL 程式語言，為紀念法國數學家和哲學家布萊茲・帕斯卡而命名。維爾特後來開發了類似 Pascal 的 Modula-2 和 Oberon。在開發 Pascal 之前，維爾特開發了語言 Euler，然後開發了 Algol-W。

最初，Pascal 在很大程度上但不是完全地為了教授學生結構化編程。很多代學生已使用 Pascal 作為本科課程的入門語言。Pascal 的變種也逐漸地用於從研究專案到 PC 遊戲和嵌入式系統的所有領域。更新的 Pascal 編譯器存在於廣泛使用它的領域。

GCC，Gnu C 編譯器，最初是用 Pascal 的一種方言 Pastel 編寫的（見 GCC# 概觀）。Pascal 是 Apple Lisa 和早期 Mac 開發使用的高階語言；最初 Macintosh 作業系統的部分是從 Pascal 原始碼手工翻譯成 Motorola 68000 組合語言的。流行的排版系統 TeX 是由高德納使用基於 DEC PDP-10 Pascal 的最初文學編程系統 WEB 編寫的，而像 Total Commander 的應用是使用 Delphi（即 Object Pascal）編寫的。

Object Pascal 仍然廣泛用於開發像 Skype 這樣的 Windows 應用。

## 簡要描述

維爾特的意圖是，基於結構化編程，建立一個高效（無論是編譯速度還是生成代碼）的執行速度。Pascal 植根於 Algol 60 語言，但是也引進了一些概念和機制，使程式設計師（在 Algol 的純量和陣列之上）能定義他們自己的複雜（結構化）資料類型，也使建立諸如 lists、trees 和 graphs 這樣的動態和遞迴資料結構更容易。這些重要的特性包括記錄、列舉、子範圍、使用關聯指標去動態分配變數和集合。為了使這些有可能和有意義，Pascal 在所有物件上有一個強型別，意味著如果不使用顯式轉換，一種資料類型不能轉換或解釋成另外一種。類似的機制是今天許多程式語言的標準。影響 Pascal 開發的其它語言是 COBOL、Simula 67 和維爾特自己的 Algol-W。

Pascal，像今天的許多程式語言一樣（但是不像 C 家族的絕大多數語言），允許任意層次的巢狀過程定義，也允許過程和函式內部的絕大多數種類的定義和聲明。這使得一個非常簡單和一致的語法，能讓一個完整的 **program** 與一個單獨的 **procedure** 或 **function** 語法上近似相同（當然除了關鍵字本身外）。

## 實現

第一個 Pascal 編譯器是在 Zurich 為 CDC 6000 系列大型電腦家族設計的。維爾特報導，在 1969 年第一次使用 Fortran 實現的嘗試沒有成功，由於 Fortran 不足以表達複雜的資料結構。第二次嘗試以 Pascal 語言本身來制定，並在 1970 年代中期實施。由於許多 Pascal 編譯器已類似地自代管，即編譯器本身是以 Pascal 編寫的，因此在新特性加入語言或編譯器移植到一個新環境時編譯器通常能重編譯其本身。用 C 編寫的 GNU Pascal 編譯器是一個顯著的例外。

1972 年，Welsh 和 Quinn 在貝爾法斯特女王大學，第一次將 CDC Pascal 編譯器成功地移植到另外一個主機。目標主機是 ICL1900 系列。這個編譯器反過來說是 ICS Multum 微電腦 Pascal 編譯器的父母。以一個使用 Pascal 作為系統程式語言的視角，Glasgow University 電腦科學系的 Findlay，Cupples，Cavouras 和 Davis 開發了 Multum 介面。完成於 1973 年夏季的 Multum Pascal 被認為是第一個 16 位元實現。

一個全新的編譯器由 QUB 的 Welsh et al. 在 1977 年完成。它提供了一個由 Glasgow University 的 Findlay 和 Watt 實現的源語言診斷特性（結合分析，跟蹤和類型辨識格式化事後轉儲）。該實現在 1980 年由南安普敦大學和 Glasgow University 的一個小組移植到 ICL 2900 系列。標準 Pascal 模式實現也基於該編譯器，曼徹斯特大學的 Welsh 和 Hay 在 1984 年已將其改編，以嚴格檢查與 BSI 6192/ISO 7185 標準的一致性，以及為可移植抽象機生成代碼。

在北美洲為 PDP-11 編寫的第一個 Pascal 編譯器在 Donald B. Gillies 的伊利諾伊大學厄巴納 - 香檳分校構造，並生成了本地機器碼。Pascal 在整個 1970 年代和 1980 年代大受歡迎。

為了迅速地傳播該語言，一個編譯器「移植工具包」在 Zurich 產生，包括一個為「虛擬」堆疊機（即引導本身合理有效解釋的代碼）生成代碼的編譯器，一個解釋這些代碼的直譯器 ——Pascal-P 系統。雖然 SC（堆疊電腦）代碼的主要意圖是在至少一個系統上編譯成真實的機器碼，著名的 UCSD 實現使用它建立了解釋性 UCSD p-System。P - 系統編譯器被稱作 P1-P4，P1 是來自於 Zurich 的第一個版本，P4 是最後一個。

P4 編譯器 / 直譯器仍然可以在相容最初 Pascal 的系統上執行和編譯。然而，它本身只是 Pascal 語言的一個子集。接受全部 Pascal 語言和包含 ISO 7185 相容性的一個 P4 版本建立了，稱作 P5 編譯器，它在源形式上可用。

一個為 IBM System/370 大型電腦產生本地二機制代碼的 P4 編譯器版本由澳大利亞原子能委員會發布；縮寫該委員會的名稱後，它被稱作「AAEC Pascal 編譯器」。從 1975 年 6 月起，一個包含編譯器原始碼和二機制代碼，以及 PDP-10 主機執行時庫檔案的 P4 版本可以從這裡下載。

在 1980 年代早期，也是為 IBM System 370 開發的 Watcom Pascal 開發了。

IP Pascal 是一個使用 Micropolis DOS 的 Pascal 程式語言的實現，但是被迅速地移植到執行於 Z80 上的 CP/M。在 1994 年它被移植動 80386 類型機器上，今天作為 Windows/XP 和 Linux 實現存在。在 2008 年，該系統達到一個新層次，該結果語言稱作「Pascaline」（Pascal 的計算機之後）。它包括物件，命名空間控制，動態陣列和許多其它擴充，以及與 C 有相同功能和類型保護的通用特性。它僅是也相容最初 Pascal 實現（作為 ISO 7185 的標準）的這樣一個實現。

在 1980 年代早期，UCSD Pascal 移植到 Apple II 和 Apple III 電腦，以提供一個隨著機器而來的 BASIC 直譯器的結構化替代品。

Apple Computer 在 1982 年為 Lisa Workshop 建立了自己的 Lisa Pascal，在 1985 年將該編譯器移植到 Apple Macintosh 和 MPW。在 1985 年，經諮詢維爾特，Larry Tesler 定義了 Object Pascal，這些擴充合併進 Lisa Pascal 和 Mac Pascal 編譯器。

在 1980 年代，Anders Hejlsberg 為 Nascom-2 編寫了 Blue Label Pascal 編譯器。為 IBM PC 編寫的該編譯器的重實現在 Borland 收購之前以 Compas Pascal 和 PolyPascal 的名稱銷售。重新命名為 Turbo Pascal 後，它變得廣受歡迎，一方面由於一個積極的定價策略，一方面由於是第一個全螢幕整合式開發環境之一，以及快速的周轉時間（只需要數秒編譯，連結和執行）。另外，它用組合語言編寫，並整體高度最佳化，使它比許多競爭對手更小和更快。1986 年 Anders 將 Turbo Pascal 移植到 Macintosh，並將 Apple 的 Object Pascal 擴充合併進 Turbo Pascal。這些擴充然後加回到 Turbo Pascal v5.5 的 PC 版本中。與此同時 Microsoft 也實現了 Object Pascal 編譯器。 Turbo Pascal 5.5 給在 1980 年代後期開始主要關注於 IBM PC 的 Pascal 社群帶來巨大影響力。許多研究 BASIC 結構化替代品的 PC 愛好者使用該產品。它也開始被專業開發人員接受。幾乎同時，為了讓 Pascal 程式設計師直接使用 Microsoft Windows 的基於 C 的 API，許多概念從 C 語言引入。這些擴充包括空終止字串，指標算術運算，函式指標，address-of 運算子和非安全類型轉換。

然而，Borland 後來決定需要更多精細的物件導向特性，並在 Delphi 里使用 Apple 提議的 Object Pascal 草圖示准作為基礎重新開始。（該 Apple 草圖仍然不是一個正式的標準。）Delphi 程式語言的第一版相應地命名為 Object Pascal。與老的 OOP 擴充相比較，主要的增加是基於參考物件模型，虛擬構建器和解構器，以及屬性。幾個其它編譯器也實現了該方言。

Turbo Pascal，和其它有單元或模組概念的衍生物是模組化語言。然而，它不提供一個巢狀模組概念或合格的匯入和匯出指定符號。

Super Pascal 是一個增加了非數字標籤，作為類型名稱的返回語句和表達式的變異。

Zurich、Karlsruhe 和 Wuppertal 大學已開發了一個 E**X**tension for **S**cientific **C**omputing（Pascal XSC），為有控制精度的數字計算編程提供了一個自由的解決方案。

## 語言結構

最初形式的 Pascal 是一個純粹的程序化語言，包括有諸如 **if**，**then**，**else**，**while**，**for** 等等保留字的類 Algol 控制結構的傳統陣列。然而，Pascal 也有許多最初 Algol60 不包括的資料結構工具和其它抽象概念，像類型定義、記錄、指標、列舉和集合。這些結構部分從 Simula67、Algol68、尼克勞斯・維爾特自己的 Algol-W 和 C. A. R. Hoare 的建議繼承或獲得靈感。

### Hello world

Pascal 程式開始於外部檔案描述子作為參數的 **program** 關鍵字；然後跟著 **begin** 和 **end** 關鍵字封裝的主要塊。分號分割語句，句點終結整個程式（或單元）。Pascal 原始碼不區分大小寫。

這裡是一個非常簡單的「Hello world」程式範例的原始碼：
（註：在實際編程中，通常可以省略第一行的 output 甚至 program 行）

### 資料類型

Pascal 和幾種其它流行程式語言的類型以定義變數能儲存的值的範圍的方式定義一個變數，也定義了一個允許在該類別變數上執行的運算子集。預定義類型是：

每種類型（除了 boolean）允許的值的範圍是定義實現的。為一些資料轉換提供了函式。為了將 `real` 轉換成 `integer`，下面的捨入函式可用：使用四捨五入取整的 `round` 和 `roundto`（非標準）；分別向上和向下捨入的 `ceil` 和 `floor`；向零捨入的 `trunc`。注意在 `str` 和 `floattostr` 函式（非標準）中轉換成十進位的輸出，和 `write` 命令不使用銀行家捨入。

程式設計師可以使用 Pascal 類型聲明工具以預定義類型，自由地定義其它常用資料類型（例如，byte，string 等等。)。
例如：

（註：實際上，常用的資料類型如 byte，string 等在很多實現中已經定義過）

### 純量類型

Pascal 的純量類型是 real、integer、character、boolean 和引進 Pascal 的新類型列舉：

### 子範圍類型

可以構造任意有序類型（除了 real 的簡單類型）的子範圍：

### 集合類型

不同於同時期的其它程式語言，Pascal 支援集合類型：

集合是現代數學的基礎概念，可能在很多演算法中使用。這樣一個特性是非常有用的，可能比不支援集合的語言的同等結構更快。例如，對於許多 Pascal 編譯器：

比以下代碼執行更快：

同時，非連續值的集合可能有利於效能和可讀性：

對於像這些涉及小域上集合的例子，效能的提高通常是編譯器將集合變數看作位遮罩實現的。集合運算子然後可以作為按位元機器碼運算有效實現。

然而，對於值範圍顯著大於本地字長的例子，集合表達式比使用關係運算子的同等表達式可能導致更糟的效能和更多的記憶體使用。

### 類型聲明

使用類型聲明，可以從其它類型定義新類型：

更進一步，複雜的類型可以從簡單的類型構建：

### File 類型

正如上面的例子所示，Pascal 的檔案是組件序列。每個檔案有一個用 f^ 表示的緩衝變數。過程 get（讀）和 put（寫）移動到緩衝變數的下一個元素。引進了讀，使得 read (f, x) 與 x:=f^; get (f); 相同。引進了寫，使得 write (f, x) 與 f^ := x; put (f); 相同。列印的文字作為字元檔案預定義了。當緩衝變數能用於檢查下一個字元可用（讀一個整數前檢查一個數字）時，這個概念導致了早期實現的互動程式的嚴重問題，但是後來用「lazy I/O」概念解決了。

在 Jensen & Wirth 的 Pascal 裡，字串用封裝的字元陣列表示；因此有固定長度和通常是空間填充。有些方言有一個自訂字串類型。

### 指標類型

Pascal 支援指標的使用：

這裡變數 pointertob 是資料類型記錄 b 的一個指標。指標在聲明之前可用。這是前向聲明，一個使用之前必須聲明的規則的例外。建立一個新記錄，將值 10 和字元 A 分配給記錄的域 a 和 b，將指標 c 初始化為 nil，命令是這樣的：

也可以如下面這樣使用 **with** 語句來做：

在 **with** 語句範圍內，a 和 b 指記錄指標 **pointertob** 的子域，而不是記錄 b 或指標類型 a。

通過在記錄里包含一個指標類型域（c，參見 nil 和 null），可以建立連結串列、棧和佇列。

與許多以指標為特性的語言不同，Pascal 只允許指標參照匿名的動態建立的變數，不允許參照標準的靜態或本地變數。另外，指標是類型繫結的，即字元指標與整數指標是類型不相容的。該淨效果是 Pascal 指標是「安全的」，遠離其它指標實現原生的類型安全問題。

### 控制結構

Pascal 是結構化編程語言，意味著控制流被結構化成標準語句，理想地沒有「go to」命令。

### 過程和函式

Pascal 將程式結構化成過程和函式。

過程和函式可以巢狀任意深度，「program」構造是邏輯上最外層的塊。

每個過程或函式可以有自己的正確順序的 goto 標籤、常數、類型、變數和其它過程和函式聲明。
此順序要求最初的本意是允許高效的單通編譯。然而，在一些方言裡聲明節嚴格的順序要求是不必要的。

### 分號作為語句分割符

Pascal 從 ALGOL 語言裡吸納了許多語言語法特性，包括使用分號作為語句分割符。這與其它諸如 PL/I、C 等的語言是不同的。它們使用分號作為語句終止符。正如上述例子演示的，記錄類型聲明、塊或 case 語句的 **end** 關鍵字之前，repeat 語句的 **until** 關鍵字之前，if 語句的 **else** 關鍵字之前，不需要分號。

在 Pascal 的早期版本裡，不允許存在額外的分號。然而，1973 年的修訂報告，後來成為 ISO 7185:1983 里的額外的類 ALGOL 空語句現在允許這些情況的絕大多數可選地使用分號。例外是仍然不允許分號立即出現在 if 語句的 else 關鍵字之前。

在一些情況下，真正需要空語句：

然而，濫用可能會產生問題。雖然下面語句是語法正確的，但是結果不大可能是想要的：

## 資源

### 編譯器和直譯器

幾個 Pascal 編譯器和直譯器可供一般公眾使用：

* Delphi 是 Embarcadero（前身為 Borland/CodeGear）的旗艦 RAD（快速應用開發）產品。它使用繼承自 Pascal 的 Object Pascal 語言（Borland 稱作「Delphi 程式語言」）為 Windows 平台建立應用。從 Delphi 8 到 Delphi 2007 就存在的.NET 支援已終止，被一個不完全向下相容的語言（Prism，更名為 Oxygene，參見下面）所替代。最新版本（Delphi XE5）支援 iOS、Android、Mac OS X 和 Microsoft Windows 平台的開發。
* Free Pascal 是一個 Pascal 編寫的多平台編譯器（它是自舉的）。它旨在提供一個方便而強大的編譯器，既能編譯遺留應用又是開發新應用的手段。它在 GNU GPL 下發布，而包和執行時庫遵守一個修改的 GNU LGPL。除了 Turbo Pascal、Delphi 和 Mac Pascal 的相容模式，它也有自己的過程和物件導向語法模式，以支援諸如運算子多載的擴充特性。它支援許多平台和作業系統。
* Lazarus 是一個 RAD（快速應用開發）的類 Delphi 的可視跨平台 IDE。基於 Free Pascal，Lazarus 可用於包括 Linux、FreeBSD、Mac OS X 和 Microsoft Windows 的無數平台。
* Dev-Pascal 是一個以 Borland Delphi 設計的，支援 Free Pascal 和 GNU Pascal 作為後台的 Pascal IDE。與它的 C++ 兄弟相反，多年來還沒見到它的重要發布。
* Oxygene（前身是 Chrome）是一個.NET 和 Mono 平台上的下一代 Object Pascal 編譯器。它由 RemObjects Software 建立和銷售，最近由 Codegear/Embarcadero 作為 Prism 開發和出售。它試圖將 Pascal 的精神帶到.NET，但不是很相容其它 Pascals。
* Kylix 是 Delphi 的一個後代，支援 Linux 作業系統，有一個改善的物件庫。其編譯器和 IDE 現已用於非商業用途。Borland 不再支援該產品。
* GNU Pascal 編譯器（GPC）是 GNU 編譯器集（GCC）的 Pascal 編譯器。編譯器本身是用 C 編寫的，執行時庫絕大多數用 Pascal 編寫。在 GNU 通用公共許可下自由發布，它執行在許多平台和作業系統上。它支援 ANSI/ISO 標準語言和部分 Borland/Turbo Pascal 語言支援。比較痛苦的疏漏之一是缺乏 100% TP 相容的字串類型。可能除了 Mac Pascal，對 Borland Delphi 和其他語言版本的支援是非常有限的，不過對它們的支援在快速增長。
* Virtual Pascal 是作為一個相容 Borland Pascal 語法的本地 OS/2 編譯器由 Vitaly Miryanov 在 1995 年建立的。然後，由 fPrint 進行商業開發，增加了 Win32 支援；在 2000 年成為了自由軟體。今天它可以為 Win32、OS/2 和 Linux 編譯，主要相容於 Borland Pascal 和 Delphi。該編譯器的開發在 2005 年 4 月 4 日終止了。
* P4 編譯器，許多後來的包括 UCSD p-System 的用 Pascal 實現的 Pascal 編譯器的基礎。它實現了完全 Pascal 的一個子集。
* P5 編譯器，是一個 P4 的 ISO 7185（完全 Pascal）適應。
* Turbo Pascal 是 1980 年代和 1990 年代早期，PC 的主要 Pascal 編譯器，由於強大的擴充和極短的編譯時間而流行。Turbo Pascal 是緊湊編寫的，可以完全從記憶體編譯、執行和除錯，而不需要存取磁碟。那時慢速軟碟機對程式設計師來說是常見的，進一步放大了 Turbo Pascal 的速度優勢。目前，Turbo Pascal 的老版本（直到 5.5）可從 Borland 的站點免費下載。
* Turbo51 是一個 8051 家族微控制器上的自由 Pascal 編譯器。（使用 Turbo Pascal 7 語法）
* IP Pascal 實現了語言「Pascaline」（後來命名為 Pascal 計算機），是一個相容 ISO 7185 原始 Pascal 的高度擴充 Pascal。它具有命名空間控制模組，包括並行任務模組、訊號、物件、在執行時分配的任意維陣列、多載、覆蓋和許多其它擴充。IP Pascal 有一個對 Pascal 語言自訂客製化的內建可移植庫。例如，1970 年代原始 Pascal 的一個標準文字輸出應用可以重編譯以執行在一個窗口裡，甚至可以添加圖形結構。
* Pascal-XT 由 Siemens 為他們的主機作業系統 BS2000 和 SINIX 建立的。
* PocketStudio 是一個 Pascal 子集編譯器和 RAD 工具，針對 Palm OS 和 MC68xxx 處理器，有一些自己的擴充以輔助與 Palm OS API 介面。它仿製 Delphi 和 Lazarus，有一個可視表單設計器，一個物件檢視器和一個原始碼編輯器。
* MIDletPascal—— 一個生成小而快的專門設計來為手機建立軟體的 Java 位元組碼的 Pascal 編譯器和 IDE。
* Vector Pascal 是一個針對諸如 MMX 和 AMD 3d Now 的 SIMD 指令集的語言，支援所有 Intel 和 AMD 處理器，以及 Sony Playstation 2 Emotion Engine。
* Morfik Pascal 允許 Web 應用的開發全部（伺服器和瀏覽器端）用 Object Pascal 編寫。
* web Pascal 是一個線上 IDE 和 Pascal 編譯器。
* WDSibyl——win32 和 OS/2 的可視開發環境和 Pascal 編譯器。
* PP 編譯器，直接執行在手持電腦上的 Palm OS 的編譯器。
* CDC 6000 Pascal 編譯器第一個（CDC 6000）Pascal 編譯器的原始碼。
* Pascal-S - "Pascal-S: A Subset and Its Implementation", N. Wirth in Pascal - The Language and Its Implementation, by D.W. Barron, Wiley 1979.

一個非常廣泛的清單可以在 Pascaland 上找到。該站點在法國，但是它基本上是一個編譯器的 URL 清單；對不講法語者沒有障礙。站點 Pascal Central，Mac 中心的一個有文章檔案的豐富集合的 Pascal 資訊和宣傳站點，加上許多編譯器和教程的連結。

## 標準

1983 年，該語言標準化為國際標準 IEC/ISO 7185，以及一些當地國家的具體標準，包括美國 ANSI/IEEE770X3.97-1983 和 ISO 7185:1983。這 2 個標準的區別僅在於 ISO 標準包含一個 conformant 陣列的「級別 1」擴充，而 ANSI 不允許對原始（維爾特版本）語言擴充。1989 年，對 ISO 7185 進行了修正（ISO 7185:1990），糾正了原始文件中找到的各種錯誤和模糊。

1990 年，一個擴充的 Pascal 標準作為 ISO/IEC 10206 建立。1993 年，ANSI 組織用 ISO 7185:1990 標準代替了 ANSI 標準，有效地終結了作為一個不同標準的狀態。

ISO 7185 被說成是對《使用者手冊和報告（Jensen 和維爾特）》詳述的維爾特的 1974 年語言的澄清，但是引人注意的是增加了作為標準級別 1 的「Conformant Array Parameters」，級別 0 是沒有 Conformant Array 的陣列。該增加是在 C. A. R. Hoare 的請求下，得到了維爾特贊同。該變動的原因是 Hoare 想建立數學演算法庫（NAG）的一個 Pascal 版本，該庫最初用 FORTRAN 編寫，發現如果沒有允許變長陣列參數的擴充就無法實現該庫。出於同樣的考慮，ISO 7185 包含了指定過程和函式參數的參數類型的工具。

注意維爾特自己將 1974 年的語言當作「標準」，以將其與 CDC 6000 編譯器的機器特定特徵相區別。該語言記錄在「Pascal 使用者手冊和報告」的第二部分報告」。

在 Pascal 起源的大型電腦（主機和微電腦）上，這些標準普遍遵循。在 IBM-PC 上，這些標準不被遵循。在 IBM-PC 上，Borland 標準 Turbo Pascal 和 Delphi 有最大量的使用者。因此，了解一個特別的實現符合原始 Pascal 語言還是 Borland 方言非常重要。

該語言的 IBM-PC 版本開始區別於 UCSD Pascal，以對該語言的幾個擴充以及幾個遺漏和變化為特性的解釋型實現。許多 UCSD 語言特性今天仍然存在，包含於 Borland 的方言。

### Divisions

Pascal 的維爾特的 Zurich 版本在 ETH 之外以 2 個基本形式發布，CDC 6000 編譯器源和一個稱作 Pascal-P 系統的移植工具。Pascal-P 編譯器遺漏了完全語言的幾個特性。例如，作為參數使用的過程和函式，無區別變體記錄，包裝，處理，過程間的 goto 方法和完全編譯器的其它特性被忽略。

Kenneth Bowles 教授的 UCSD Pascal 是基於 Pascal-P2 套件的，因此有幾個共同的 Pascal-P 語言限制。UCSD Pascal 後來作為 Apple Pascal 被接納了，並持續有幾個版本。雖然 UCSD Pascal 實際上擴充了 Pascal-P2 套件的 Pascal 子集，通過添加回標準 Pascal 結構，它仍然不是一個完整的 Pascal 標準安裝。

Borland 的 Turbo Pascal 由 Anders Hejlsberg 用組合語言獨立於 UCSD 或 Zurich 編譯器編寫。然而，它與 UCSD 編譯器一樣接納了許多相同子集和擴充。這可能是因為 UCSD 系統是適於在當時可用的資源限制的微處理器上開發應用的最常見 Pascal 系統。

### 相關標準清單

* ISO 8651-2:1988 資訊處理系統 —— 電腦圖像 —— 圖像核心系統（GKS）語言邦定 —— 第二部分：Pascal

## 評論

Pascal 在計算社群產生了廣泛的回應，包括批評和讚美。

### 批評

儘管非常流行（尤其在八十到九十年代），依據維爾特的對這種語言的定義來構建 Pascal，使它不適合非教學的使用，這遭到了廣泛的批評。 推廣了 C 語言的布萊恩・柯林漢（Brian Kernighan）早在 1981 年就在他的論文 Why Pascal Is Not My Favorite Programming Language 對 Pascal 提出了嚴厲的抨擊。

## 參看

* ALGOL
* Ada
* Delphi
* Pascal 與 Delphi 的比較
* Modula
* Modula-2
* Oberon
* Object Pascal
* Oxygene
* Concurrent Pascal
* Pascal 與 C 語言的比較
* C 語言
* Real Programmers Don't Use Pascal

## 延伸閱讀

* Niklaus Wirth: The Programming Language Pascal. 35-63, Acta Informatica, Volume 1, 1971.
* C A R Hoare: Notes on data structuring. In O-J Dahl, E W Dijkstra and C A R Hoare, editors, Structured Programming, pages 83–174. Academic Press, 1972.
* C. A. R. Hoare, Niklaus Wirth: An Axiomatic Definition of the Programming Language Pascal. 335-355, Acta Informatica, Volume 2, 1973.
* Kathleen Jensen and Niklaus Wirth: PASCAL - User Manual and Report. Springer-Verlag, 1974, 1985, 1991, ISBN 0-387-97649-3 and ISBN 3-540-97649-3[1]
* Niklaus Wirth: Algorithms + Data Structures = Programs. Prentice-Hall, 1975, ISBN 0-13-022418-9[2]
* Niklaus Wirth: An assessment of the programming language PASCAL 23-30 ACM SIGPLAN Notices Volume 10, Issue 6, June 1975.
* N. Wirth, and A. I. Wasserman, ed: Programming Language Design. IEEE Computer Society Press, 1980
* D. W. Barron (Ed.): Pascal - The Language and its Implementation. John Wiley 1981, ISBN 0-471-27835-1
* Peter Grogono: Programming in Pascal, Revised Edition, Addison-Wesley, 1980
* Richard S. Forsyth: Pascal in Work and Play, Chapman and Hall, 1982
* N. Wirth, M. Broy, ed, and E. Denert, ed: Pascal and its Successors in Software Pioneers: Contributions to Software Engineering. Springer-Verlag, 2002, ISBN 3-540-43081-4
* N. Wirth: Recollections about the Development of Pascal. ACM SIGPLAN Notices, Volume 28, No 3, March 1993.

## 參考資料

## 外部連結

* Pascal Language Tutorial
* The Pascal Programming Language
* Standard Pascal – Resources and history of original, standard Pascal
* Pascal programming. Theory, examples and exercises.