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大學已開發了一個EXtension for Scientific Computing（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
Program HelloWorld(output);
begin
  writeln('Hello, world!')
 {程序块的最后一条语句后不需要";" -
   如果添加一个";"会在程序中增加一个“空语句”}
end.
```

### 數據類型

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

數據類型｜變量能存儲的值的類型｜包括的種類

integer｜整數｜包括shortint,byte;integer,word;longint,longword;int64,qword。其中int64和qword類型不能做循環變量。

real｜浮點數｜包括real;comp;single;double;extended。其中comp類型的實質是整數型。

boolean｜TRUE或FALSE｜只有boolean一種。

char｜來自有序字符集的一個單獨字符｜只有char一種。

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

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

例如：

```pascal
type
  byte = 0..255;
  signedbyte = -128..127;
  string = packed array [1..255] of char;
```

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

### 標量類型

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

```pascal
var
  r: Real;
  i: Integer;
  c: Char;
  b: Boolean;
  e: (apple, pear, banana, orange, lemon);
```

### 子範圍類型

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

```pascal
var
  x: 1..10;
  y: 'a'..'z';
  z: pear..orange;
```

### 集合類型

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

```pascal
var
  set1: set of 1..10;
  set2: set of 'a'..'z';
  set3: set of pear..orange;
```

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

```pascal
if i in [5..10] then
...
```

比以下代碼執行更快：

```pascal
if (i>4) and (i<11) then
...
```

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

```pascal
if i in [0..3, 7, 9, 12..15] then
...
```

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

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

### 類型聲明

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

```pascal
type
  x = Integer;
  y = x;
...
```

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

```pascal
type
  a = Array [1..10] of Integer;
  b = record
        x: Integer;
        y: Char
      end;
  c = File of a;
```

### 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支持指針的使用：

```pascal
type
  a = ^b;
  b = record
        a: Integer;
        b: Char;
        c: a
      end;
var
  pointertob: a;
```

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

```pascal
new(pointertob);
```

```pascal
pointertob^.a := 10;
pointertob^.b := 'A';
pointertob^.c := nil;
...
```

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

```pascal
new(pointertob);

with pointertob^ do
begin
  a := 10;
  b := 'A';
  c := nil
end;
...
```

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

通過在記錄里包含一個指針類型域（c，參見nil和null），可以創建鍊表、棧和隊列。

與許多以指針為特性的語言不同，Pascal只允許指針引用匿名的動態創建的變量，不允許引用標準的靜態或本地變量。另外，指針是類型綁定的，即字符指針與整數指針是類型不兼容的。該淨效果是Pascal指針是「安全的」，遠離其它指針實現固有的類型安全問題。

### 控制結構

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

```pascal
while a <> b do writeln('Waiting');

if a > b then writeln('Condition met')
else writeln('Condition not met');

for i := 1 to 10 do writeln('Iteration: ', i:1);

repeat
  a := a + 1
until a = 10;

case i of
  0: write('zero');
  1: write('one');
  2: write('two')
end;
```

### 過程和函數

Pascal將程序結構化成過程和函數。

```pascal
program mine(output);

var i : integer;

procedure print(var j: integer);

  function next(k: integer): integer;
  begin
    next := k + 1
  end;

begin
  writeln('The total is: ', j);
  j := next(j)
end;

begin
  i := 1;
  while i <= 10 do print(i)
end.
```

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

每個過程或函數可以有自己的正確順序的goto標籤、常量、類型、變量和其它過程和函數聲明。

此順序要求最初的本意是允許高效的單通編譯。然而，在一些方言裡聲明節嚴格的順序要求是不必要的。

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

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

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

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

```pascal
(* skip blanks *)
while GetChar() = ' ' do ;
```

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

```pascal
if alarm then;
begin;
  SendMayday;
  EjectPilot;
end;
```

## 資源

### 編譯器和解釋器

幾個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提出了嚴厲的抨擊。

## 外部連結

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

## 基本資料

- 日語原文：Pascal
- 編程范型：指令式、結構化
- 語言家族：Wirth Pascal
- 設計者：尼克勞斯·維爾特
- 發行日期：1970年
- 類型系統：靜態、強、安全
- 作用域：詞法
- 軟體實現：BSD、CDC 6000、Embarcadero Delphi、ICL 1900、Pascal語言、PDP-11、PDP-10、IBM System/370、Free Pascal、GNU Pascal
- dialects：Delphi、Turbo Pascal、UCSD Pascal
- 受影響於：ALGOL W、Simula 67
- 施影響於：Ada、C/AL、C#、Component Pascal、Go、Java、Modula / -2 / -3、Oberon /&#32、Object Pascal、Power Fx、Seed7、Standard ML、VHDL、結構式文件編程語言