Object Pascal

Object Pascal 是 Pascal 程式語言的面向物件的衍生分支，是 Delphi 支援的主要程式語言。Pascal 編譯器，包括那些 Object Pascal 編譯器，在生成高最佳化程式碼同時，一般執行非常快。

版本

總而言之，Object Pascal 現在籠統地用來指有面向物件程式設計擴充套件的 Pascal 語言的不同方言，雖然這些方言絕大多數與 CodeGear 實現相容。

Borland 將第一版 Delphi 的程式語言命名為 Object Pascal，但是後來將其重新命名為 Delphi 程式語言。然而，宣稱相容 Object Pascal 的編譯器通常試圖相容 Delphi 原始碼。
CodeGear，Borland 的前子公司，現在是 Embarcadero Technologies 的一部分，將編譯 Object Pascal 程式碼到 Windows 上的整合開發環境（IDE）出售了。
.NET 存在的對從 Delphi 8 到 Delphi 2005，Delphi 2006 和 Delphi 2007 的支援現在已被另外的語言 Oxygene（參見下面）替代，不完全向後相容。
Lazarus 是類似 Delphi 的 Object Pascal 語言整合開發環境，使用 Free Pascal 編譯器，是一款開放原始碼的自由軟體。
Oxygene 程式語言由 RemObjects Software 開發，單獨針對通用語言架構。Oxygene 編譯器已納入 Embarcadero 擁有的命名為 Delphi Prism 的一個新的 Delphi 開發解決方案，它是 Microsoft Visual Studio 的基礎。
Morfik Pascal 程式語言由 Morfik 開發，針對支援 Ajax 的 Web 應用。Morfik 編譯器已納入該公司的 AppsBuilder IDE，允許 Object Pascal 程式碼用於實現將同時在瀏覽器和伺服器上執行的程式碼。
開源 Free Pascal 專案允許為廣泛的作業系統 —— 包括 Linux（32 位和 64 位）、FreeBSD、Mac OS/Mac OS X、Win32、Win64 和 Windows CE—— 和幾個不同硬體架構編譯該語言。iPhone SDK 2.x 的第一版 Free Pascal 已於 2009 年 1 月 17 日釋出。現在它也支援嵌入式（ARM）。
MIDletPascal 旨在 Java 位元組程式碼平臺。
開源 GNU Pascal 編譯器可用於 GNU 編譯器集合的一個前端，它實現了 ISO 7185 Pascal 標準和 ISO 10206 擴充套件 Pascal 標準的 “大部分”。
也是自由編譯器的 Turbo51 用於為 Intel 8051 晶片生成程式碼。
WDSybil，一個開源的可用於 Microsoft Windows 和 OS/2 的類 Delphi 的 IDE 和編譯器，最初由一個叫做 Speedsoft 的公司釋出的商業 Borland Pascal 相容環境，後來在一個叫做 Sybil 的類 Delphi RAD 裡開發，然後在公司關閉時在 GPL 下開放原始碼。

在 Apple 的早期歷史

Object Pascal 是對 Pascal 語言的擴充套件，它是 Apple Computer 的一個由拉里・泰斯勒領導，Pascal 的發明者尼克勞斯・維爾特提供諮詢的小組開發的。它繼承自一個用於 Lisa 計算機的稱作 Clascal 的 Pascal 的面向物件的早期版本。

為了支援一個現在叫做類庫的可擴充套件 Macintosh 應用框架 MacApp，Object Pascal 是必要的。Object Pascal 擴充套件和 MacApp 本身是由 Barry Haynes，Ken Doyle 和 Larry Rosenstein 開發的，Dan Allen 測試的。拉里・泰斯勒監督該專案，開始於 1985 年早期，在 1986 年成為一個產品。

Apple 在 1994 年從 Motorola 68K 晶片轉移到 IBM's PowerPC 架構時，刪除了對 Object Pascal 的支援。

一個 Object Pascal 擴充套件也在 Think Pascal IDE 裡實現過。該 IDE 包括編譯器，一個語法高亮和檢查的編輯器，一個強大的偵錯程式和一個類庫。許多開發者首選 Think Pascal，而不是 MacApp，因為它提供了工具的緊密整合。在 4.01 之後，開發停止了，因為 Symantec 購買了該公司。開發人員然後離開了該專案。

Borland 和 CodeGear 的年代

在 1986 年，Borland 將也稱作 Object Pascal 的類似擴充套件引進到 Macintosh 的 Turbo Pascal 產品裡；在 1989 年，引進到 DOS 的 Turbo Pascal 5.5。

當 Borland 在 1994 年將重點從 MS-DOS 調整到 Windows 時，它們創造了 Turbo Pascal 的一個叫做 Delphi 的繼任者，並引進了建立現在稱作 Delphi 語言的一系列新的擴充套件。

Delphi 的開發開始於 1993 年，1995 年 2 月 14 日在美國官方釋出了 Delphi 1.0。那時，使用 Turbo Pascal 物件模型的程式碼仍舊能被編譯，Delphi 的特性有：先於 object 使用關鍵字 class 的新語法，Create 構建器和虛擬的 Destroy 析構器（並否定了必須呼叫 New 和 Dispose 過程），屬性，方法指標和一些其它特性。這些是 ISO 面向物件擴充套件工作草案所鼓勵的，但是許多與 Turbo Pascal 方言的差異（例如草案要求所有的方法是虛擬的）被忽略了。

Delphi 語言在遍及支援諸如 64 位整數和動態陣列的新語言概念的年代裡繼續演化。

編譯器

現在有許多編譯器，絕大多數相容 Delphi 的 Object Pascal 語言。許多是為了讓 Object Pascal 在不同平臺上和各種許可下編譯而建立的。

Delphi 可能是最知名的編譯器了。它針對 Win16（Delphi 1），Win32（Delphi 2+），.NET 1.x, 2.0（Delphi 8，Delphi 2005 - 2007），Mac OS (Delphi XE2 以上)，iOS (Delphi XE2 以上，在 XE4 及更高版本中生成本機二進位制檔案)，Android (Delphi XE5 以上，在 XE5 及更高版本中生成本機二進位制檔案)。其對 .NET 的支援最終變成了一個獨立產品叫做 (見下)。
Borland Kylix 是 Delphi 的 Linux 變種，僅針對使用 Qt 的 Intel 32 位 Linux。它不再更新了。現代分發通常不運行於其箱體外。
Free Pascal 是一個命令列編譯器，目標是與 Turbo Pascal 和 Delphi 方言的核心特性集的源相容性。現在的版本，2.2 是高相容 Delphi 6 或 7。 FPC 為各種作業系統下的 x86，x86-64，PowerPC，SPARC 和 ARM 處理器生成程式碼，這些作業系統包括 Win32，Win64，Linux，FreeBSD，Mac OS 和 Mac OS X（包括 Xcode 整合工具）。除了命令列用法，幾個開發環境可用於 Free Pascal，尤其是 Lazarus IDE。
（GCC 的一個分離分發部分）在正式地不針對 Pascal 的 CodeGear 方言的同時，它包含一個 Borland Pascal 相容模式，非常慢地納入一些 Delphi 語言的特性。它不適於直接重編譯 Delphi 程式碼的巨大的體，值得注意地是為作業系統和硬體架構提供了豐富的支援。
是一個相容 x86 32 位 Turbo Pascal 和 Delphi 的編譯器，主要針對 OS/2 和 Windows，雖然它也開發了一個 DOS+ 擴充套件器和一個實驗性的 Linux 交叉編譯器。該編譯器的開發在大約 Delphi V2 層次時停止了；它的站點從 2007 年關閉，Virtual Pascal 的開發也停止了。
（正式地稱作 Chrome）是一個 Object Pascal 編譯器，來自於整合進 Microsoft Visual Studio 的。它也可用作本地執行在 CLI 上的自由命令列編譯器。它針對.NET 和 Mono 平臺。
是一個生成 J2ME 位元組程式碼的手機應用開發工具。
是一個 Palm OS 的基於 Pascal 的 IDE。

直譯器

Pascal Script （正式地稱作 InnerFuse）是一個開源的用 Delphi 編寫的 Object Pascal 直譯器 / 指令碼引擎。支援有限的 Object Pascal 子集。

"Hello World" 程式樣本

6.1 Apple 的 Object Pascal

program ObjectPascalExample;

type

THelloWorld = object

procedure Put;

end;

var

HelloWorld: THelloWorld;

procedure THelloWorld.Put;

begin

WriteLn ('Hello, World!');

end;

begin

New (HelloWorld);

HelloWorld.Put;

Dispose (HelloWorld);

end.

6.2 Turbo Pascal 的 Object Pascal

在 Delphi 和 Free Pascal 裡仍然支援這種 Object Pascal。FPC 也將自己的（這種 Object Pascal）庫 / 單元的替代品打包。Delphi 不這樣做。Free Pascal 1.0 系列和 FPC 文字模式 IDE 是這種方言的最大的開發程式碼庫。Free Pascal 2.0 以更類似 Delphi 的方言重寫了。

program ObjectPascalExample;

type

PHelloWorld = ^THelloWorld;

THelloWorld = object

procedure Put;

end;

var

HelloWorld: PHelloWorld; {這是一個指向 THelloWorld 的指標}

procedure THelloWorld.Put;

begin

WriteLn ('Hello, World!');

end;

begin

New (HelloWorld);

HelloWorld^.Put;

Dispose (HelloWorld);

end.

6.3 Delphi 和 Free Pascal 的 Object Pascal

program ObjectPascalExample;

// 注意在 Free Pascal 中此處應加上或者，否則不識別 class

type

THelloWorld = class

procedure Put;

end;

procedure THelloWorld.Put;

begin

Writeln ('Hello, World!');

end;

var

HelloWorld: THelloWorld; {這是一個隱式指標}

begin

HelloWorld := THelloWorld.Create; {構建器返回一個指標}

HelloWorld.Put;

HelloWorld.Free; {本行解除引用指標}

end.

注意，物件構建器在 Delphi 和 Free Pascal（Delphi 相容模式）裡仍然有效。

6.4 Oxygene 的 Object Pascal

namespace ObjectPascalExample;

interface

type

ConsoleApp = class

class method Main

end;

THelloWorld = class

method Put;

end;

implementation

method THelloWorld.Put;

begin

Console.WriteLine ('Hello, World!');

end;

class method ConsoleApp.Main;

begin

var HelloWorld := new THelloWorld;

HelloWorld.Put;

end;

end.

進展

透過擴充套件 Delphi，許多特性已持續地引進 Object Pascal，現在 Free Pascal 也引進了一些特性。為了應對批評，Free Pascal 已接納了泛型，並且 Delphi 和 Free Pascal 現在都支援運算子過載（儘管使用不同的語法）。Delphi 從版本 7 也引進了包括泛型的許多其它特性。