Object Pascal
Object Pascal是Pascal編程語言的面向對象的衍生分支,是Delphi支持的主要編程語言。Pascal編譯器,包括那些Object Pascal編譯器,在生成高優化代碼同時,一般運行非常快。
編程範型 | 指令式,結構化編程,面向對象,函數程式語言 (僅Delphi支持) |
---|---|
設計者 | Apple, Niklaus Wirth, Anders Hejlsberg |
面市時間 | 1986年 |
型態系統 | static and dynamic(dynamic typing through Variants, array of const and RTTI), strong, safe |
主要實作產品 | |
Delphi(x86 and CLI), Oxygene(CLI), Free Pascal(x86, x86-64, PowerPC, ppc64, SPARC and ARM), Lazarus(x86, x86-64), Virtual Pascal(x86), TMT Pascal(x86), Turbo51(Intel 8051) | |
衍生副語言 | |
Apple, Turbo Pascal, objfpc, Delphi, Delphi.NET, Oxygene | |
啟發語言 | |
Pascal, Simula, Smalltalk | |
影響語言 | |
C#, Java |
版本
總而言之,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日發布。[1]現在它也支持嵌入式(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的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 的支持最終變成了一個獨立產品叫做Oxygene (見下)。
- 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。
- GNU Pascal(GCC的一個分離分發部分)在正式地不針對Pascal的CodeGear方言的同時,它包含一個Borland Pascal兼容模式,非常慢地納入一些Delphi語言的特性。它不適於直接重編譯Delphi代碼的巨大的體,值得注意地是為操作系統和硬件架構提供了豐富的支持。
- Virtual Pascal是一個兼容x86 32位Turbo Pascal和Delphi的編譯器,主要針對OS/2和Windows,雖然它也開發了一個DOS+ 擴展器和一個實驗性的Linux交叉編譯器。該編譯器的開發在大約Delphi V2層次時停止了;它的站點從2007年關閉,Virtual Pascal的開發也停止了。
- Oxygene(正式地稱作Chrome)是一個Object Pascal編譯器,來自於整合進Microsoft Visual Studio的RemObjects Software。它也可用作本地運行在CLI上的自由命令行編譯器。它針對.NET和Mono平台。
- MIDletPascal是一個生成J2ME字節代碼的手機應用開發工具。
- PocketStudio是一個Palm OS的基於Pascal的IDE。
解釋器
Pascal Script (頁面存檔備份,存於網際網路檔案館)(正式地稱作InnerFuse)是一個開源的用Delphi編寫的Object Pascal 解釋器/腳本引擎。支持有限的Object Pascal子集。
"Hello World"程序樣本
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.
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.
Delphi和Free Pascal的Object Pascal
program ObjectPascalExample;
//注意在Free Pascal中此处应加上{{$mode delphi}}或者{{$mode objfpc}},否则不识别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兼容模式)里仍然有效。
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[2]也引進了包括泛型的許多其它特性。
參見
參考
- ^ iPhone/iPod development. Free Pascal development team. [2009-04-13]. (原始內容存檔於2009-04-28).
- ^ New Delphi language features since Delphi 7. CodeGear. [2008-07-06]. (原始內容存檔於2008-07-02).
外部連結
Embarcadero
- Embarcadero Delphi
- .NET的Embarcadero Delphi Prism
- Delphi 2006和Delphi 2007里的新語言特性 (頁面存檔備份,存於網際網路檔案館)
- Delphi基礎——自由源代碼
- 關於Delphi社區 (頁面存檔備份,存於網際網路檔案館)
- Delphi Wiki
- Torry的Delphi頁面 (頁面存檔備份,存於網際網路檔案館)
- Delphi教程 (頁面存檔備份,存於網際網路檔案館)
- 俄羅斯Delphi俱樂部 (頁面存檔備份,存於網際網路檔案館)
- Object Pascal風格指南 (頁面存檔備份,存於網際網路檔案館)
RemObjects Software
- RemObjects Oxygene主頁 (頁面存檔備份,存於網際網路檔案館)
- RemObjects Oxygene官方Wiki (頁面存檔備份,存於網際網路檔案館)
- RemObjects Oxygene開發人員資源、文章和視頻
Object Pascal介紹
Delphi社區
- Delphi基礎論壇,教程和示例 (頁面存檔備份,存於網際網路檔案館)
- Delphi頁面 (頁面存檔備份,存於網際網路檔案館)
- Torry的Delphi頁面 (頁面存檔備份,存於網際網路檔案館)
- 初學者的自由Delphi源代碼 (頁面存檔備份,存於網際網路檔案館)
- About.com的Delphi編程 (頁面存檔備份,存於網際網路檔案館)
- Merlin的Delphi鍛造 (頁面存檔備份,存於網際網路檔案館)
Free Pascal的Object Pascal參考指南
- 當前版本的Object Pascal參考指南(PDF)
- 當前版本的Object Pascal參考指南(html) (頁面存檔備份,存於網際網路檔案館)
- Free Pascal對Mac Pascal擴展狀態頁面
Object Pascal工具
- MSEide+MSEgui (頁面存檔備份,存於網際網路檔案館)
- Lazarus IDE (頁面存檔備份,存於網際網路檔案館)
- Powtils Web Kit (頁面存檔備份,存於網際網路檔案館)