Object Pascal

Object PascalPascal编程语言面向对象的衍生分支,是Delphi支持的主要编程语言。Pascal编译器,包括那些Object Pascal编译器,在生成高优化代码同时,一般运行非常快。

Object Pascal
指令式結構化編程面向对象函數程式語言 (仅Delphi支持)
設計者Apple, Niklaus Wirth, Anders Hejlsberg
1986年1986
型態系統static and dynamic(dynamic typing through Variants, array of const and RTTI), strong, safe
主要實作產品
Delphix86 and CLI), OxygeneCLI), Free Pascalx86, x86-64, PowerPC, ppc64, SPARC and ARM), Lazarusx86, x86-64), Virtual Pascalx86), TMT Pascalx86), Turbo51Intel 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代码用于实现将同时在浏览器和服务器上运行的代码。
  • MIDletPascal旨在Java字节代码平台。
  • 开源GNU Pascal编译器可用于GNU编译器集合的一个前端,它实现了ISO 7185 Pascal标准和ISO 10206扩展Pascal标准的“大部分”。
  • WDSybil,一个开源的可用于Microsoft WindowsOS/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析构器(并否定了必须调用NewDispose过程),属性,方法指针和一些其它特性。这些是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 的支持最终变成了一个独立产品叫做Oxygene (见下)。
  • Borland Kylix是Delphi的Linux变种,仅针对使用Qt的Intel 32位Linux。它不再更新了。现代分发通常不运行于其箱体外。
  • Free Pascal是一个命令行编译器,目标是与Turbo Pascal和Delphi方言的核心特性集的源兼容性。现在的版本,2.2是高兼容Delphi 6或7。 FPC为各种操作系统下的x86x86-64PowerPCSPARCARM处理器生成代码,这些操作系统包括Win32Win64LinuxFreeBSDMac OSMac OS X(包括Xcode集成工具)。除了命令行用法,几个开发环境可用于Free Pascal,尤其是Lazarus IDE。
  • GNU PascalGCC的一个分离分发部分)在正式地不针对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 StudioRemObjects 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]也引进了包括泛型的许多其它特性。

参见

参考

  1. . Free Pascal development team. [2009-04-13]. (原始内容存档于2009-04-28).
  2. . CodeGear. [2008-07-06]. (原始内容存档于2008-07-02).

外部链接

Embarcadero

RemObjects Software

Object Pascal介绍

Delphi社区

Free Pascal的Object Pascal参考指南

Object Pascal工具

GNU Pascal

paxCompiler

WDSybil

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.