Object Pascalは、プログラミング言語Pascalの拡張機能であり、クラスやメソッドなどのオブジェクト指向プログラミング(OOP)機能を提供します。
この言語は元々、Apple ComputerがLisa Workshop開発システム向けにClascalとして開発したものです。LisaがMacintoshに取って代わられると、AppleはPascalの作者であるNiklaus Wirthと協力して、Clascalの公式に標準化されたバージョンを開発しました。これがObject Pascalと改名されました。1980年代半ばまで、Object PascalはMacAppアプリケーションフレームワークの初期バージョンの主要なプログラミング言語でした。1991年にC++ベースのMacApp 3.0がリリースされると、この言語はMacにおける主要な開発言語としての地位を失いました。公式サポートは1996年に終了しました。
シマンテックは、自社製品であるThink Pascal向けにObject Pascalコンパイラも開発しました。これは、Apple独自のMacintosh Programmer's Workshop (MPW)よりもはるかに高速にプログラムをコンパイルできるものでした。その後、シマンテックはMacAppのコンセプトに基づいたThink Class Library(TCL)を開発しました。これはObject PascalとTHINK Cの両方から呼び出すことができました。Thinkスイートは、1980年代後半にMacにおける主要な開発プラットフォームとしてMPWに取って代わりました。
シマンテックはObject PascalをPCに移植し、そのプラットフォーム上で同様のオブジェクトフレームワークを開発した。最終的にC++に移行したTCLとは対照的に、PCライブラリは主にPascalをベースとしていた。
BorlandはTurbo Pascal 5.5にオブジェクト指向プログラミングのサポートを追加し、これが後にAnders Hejlsbergによって作成されたDelphiで使用されるObject Pascal方言の基礎となった。Delphiは2000年代初頭までPC上のビジネスアプリケーションの主流であり続けたが、2000年代にHejlsbergのC#を含む.NET Frameworkの導入により、その地位を部分的に奪われた。
Pascalは1970年代にプログラミングの世界で主要な言語となり、ほとんどのミニコンピュータやマイクロコンピュータで高品質な実装が実現しました。後者の中には、UCSD Pascalシステムがあり、これは中間的なp-Systemコード形式にコンパイルされ、複数のプラットフォームで実行可能でした。AppleはUCSDのライセンスを取得し、 Apple IIおよびApple III向けのApple Pascalシステムの基盤として使用しました。
この時期、Pascalは同社における主要なプログラミング言語の一つとなった。Apple Lisaプロジェクトの開始に伴い、Pascalはプラットフォームの主要プログラミング言語として選定されたが、今回はp-Systemのインタプリタとは異なり、コンパイラとして採用された。
Object Pascal は、Pascal 言語の拡張版で、Apple Computerでラリー・テスラー率いるチームが、Pascal の発明者であるニクラウス・ヴィルトと協議して開発しました。 [ 2 ] [ 3 ]これは、 Lisaコンピュータで利用可能だったClascalという名の、Pascal の初期のオブジェクト指向バージョンから派生したものです。
Object Pascalは、現在ではクラスライブラリと呼ばれる拡張可能なMacintoshアプリケーションフレームワークであるMacAppをサポートするために必要でした。Object Pascalの拡張機能とMacAppは、Barry Haynes、Ken Doyle、Larry Rosensteinによって開発され、Dan Allenによってテストされました。Larry Teslerがこのプロジェクトを監督し、プロジェクトは1985年のごく初期に開始され、1986年に製品化されました。
Think Pascal統合開発環境(IDE)には Object Pascal 拡張機能も実装されました。IDE には、構文強調表示とチェック機能を備えたコンパイラとエディタ、強力なデバッガ、クラスライブラリが含まれています。[ 4 ]多くの開発者は、Think Pascal の方がコンパイル、リンク、デバッグのサイクルがはるかに速く、ツールが緊密に統合されているため、Apple の Object Pascal 実装よりも Think Pascal を好みました。Think Pascal の最後の公式リリースは 1992 年の 4.01 でした。Symantecは後に非公式バージョン 4.5d4 を無償でリリースしました。
Appleは1994年にMotorola 68000シリーズのチップからIBMのPowerPCアーキテクチャに移行した際に、Object Pascalのサポートを終了した。MacApp 3.0は既にC++で書き直され、このプラットフォームに移植されていた。
Metrowerks は、 CodeWarriorに Object Pascal コンパイラをバンドルし、IDE と MPW ツールの両方で68kとPowerPC の両方をターゲットにしました。Object Pascal を使用する Macintosh 開発者は、Apple と Symantec の両方がサポートを終了した後でも、 PowerPCに移植する道がありました。Object Pascal で書かれたMacApp 2.0 は、 CodeWarriorを使用して PowerPC に移植されました。[ 5 ] [ 6 ]
1986年、Borlandは同様の拡張機能(これもObject Pascalという名称)をMacintosh向けTurbo Pascal製品に導入し、1989年にはDOS向けTurbo Pascal 5.5にも導入しました。1994年にBorlandがDOSからWindowsへと事業の焦点を移した際、Turbo Pascalの後継となるDelphiという製品を開発し、現在Delphi言語として知られるものを作成するための新たな拡張機能セットを導入しました。
Delphi の開発は 1993 年に始まり、Delphi 1.0 は 1995 年 2 月 14 日に米国で正式にリリースされました。Turbo Pascal オブジェクト モデルを使用したコードは引き続きコンパイルできましたが、Delphi では、キーワードをclass優先して使用する新しい構文object、Create コンストラクタ、仮想 Destroy デストラクタ (およびプロシージャを呼び出す必要がないNew) Dispose、プロパティ、メソッド ポインタ、その他いくつかの機能が導入されました。これらはオブジェクト指向拡張に関するISOワーキングドラフトに触発されたものですが、Turbo Pascal の方言との多くの相違点 (ドラフトの要件であるすべてのメソッドが仮想である必要があるなど) は無視されました。
Delphi 言語は、動的配列、ジェネリクス、匿名メソッドなどの構造をサポートするために長年にわたって進化を続けています。Apple が導入した古いオブジェクト構文 (「旧式オブジェクト型」) も引き続きサポートされています。[ 7 ]
asmObject Pascalコンパイラは、幅広いオペレーティングシステムとアーキテクチャに対応しています。
Pascal Script (旧称InnerFuse ) とDWScript (Delphi Web Script) は、Delphi で書かれたオープンソースの Object Pascalインタープリタおよびスクリプト エンジンです。これらは Object Pascal のサブセットをサポートしています。DWScript は、Object Pascal コードを JavaScript コード (Smart Pascal) にコンパイルすることもでき、ジャストインタイム コンパイル(JIT) をサポートしています。Modern Pascal は、スクリプトのソース コードをコンパイルして保護する機能に加えて、コマンドライン インターフェイス(CLI)、Apache モジュール (Celerity)、CodeRunner (ポートごとに異なるスクリプトを処理できる node.js のようなソリューション) の 3 種類のインタープリタを提供しています。[ 16 ]
以下は、異なるバージョンのObject Pascalで書かれたいくつかの「Hello World」プログラムです。
プログラムObjectPascalExample ;type THelloWorld = object procedure Put ; end ;var HelloWorld : THELLOWorld ;procedure THelloWorld.Put ; begin ShowMessage ( 'Hello, World ! ' ) ; end ;begin New ( HelloWorld ) ; HelloWorld . Put ; Dispose ( HelloWorld ) ; end .DelphiとFree Pascalでは引き続きサポートされています。FPCはライブラリ/ユニットの代替品も独自にパッケージ化していますが、Delphiはそうではありません。Free Pascal 1.0シリーズとFPCテキストモードIDEは、この方言における最大のオープンコードベースです。Free Pascal 2.0はよりDelphiに近い方言で書き直され、テキストモードIDEと関連フレームワーク(Free Vision)は、Object PascalのTPバージョンに含まれる唯一の部分です。
プログラムObjectPascalExample ;type THelloWorld = object procedure Put ; end ;procedure THelloWorld.Put ; begin WriteLn ( 'Hello, World ! ' ) ; end ;var HelloWorld : THelloWorld ; { スタックに割り当てられ、明示的な割り当てなしで使用できます。 } begin HelloWorld . Put ; end .プログラムObjectPascalExample ;type PHelloWorld = ^ THelloWorld ; THelloWorld = object procedure Put ; end ;procedure THelloWorld.Put ; begin WriteLn ( 'Hello, World ! ' ) ; end ;var HelloWorld : PHelloWorld ; { これは THelloWorld への型付きポインタです }begin New ( HelloWorld ) ; HelloWorld ^. Put ; Dispose ( HelloWorld ) ; end .別の例:
プログラムObjectPascalExample ;type PHelloWorld = ^ THelloWorld ; THelloWorld = object procedure Put ; end ;procedure THelloWorld.Put ; begin WriteLn ( 'Hello, World ! ' ) ; end ;var HelloWorld : PHelloWorld ; { これは THelloWorld への型付きポインタです } HelloWorld2 : ^ THelloWorld ; { これは構文が異なるだけでまったく同じです } HelloWorld3 : ^ THelloWorld ; HelloWorld4 : PHelloWorld ; begin { これは上記のコードと同様の方法で動作しますが、割り当てと解放に注意してください 。ただし、多くの人が混乱します。以前は、ここに間違った例と間違ったコメントがありました... }New ( HelloWorld ) ; { 1 つのインスタンス } HelloWorld4 := HelloWorld ; { これは有効です - ポインタのコピー } HelloWorld2 := HelloWorld ; { これは有効です - ポインタのコピー } New ( HelloWorld3 ) ; { 2 番目のインスタンス } HelloWorld4 := HelloWorld3 ; { これは有効です - ポインタのコピー } HelloWorld2 := HelloWorld3 ; { これは有効です - ポインタのコピー } Dispose ( HelloWorld ) ; { 2 つのインスタンスのみを割り当てます } Dispose ( HelloWorld3 ) ; { したがって、2 つのインスタンスのみを解放する必要があります } end .これはポインタコピーに基づいて動作しますが、より深いコピーのための特別な割り当てがある場合は除きます。
プログラムObjectPascalExample ;type THelloWorld = class procedure Put ; end ;procedure THelloWorld.Put ; begin Writeln ( 'Hello, World ! ' ) ; end ;var HelloWorld : THelloWorld ; { これは暗黙のポインタです }begin HelloWorld := THelloWorld . Create ; { コンストラクタは THelloWorld 型のオブジェクトへのポインタを返します } HelloWorld . Put ; HelloWorld . Free ; { この行は HelloWorld が指す THelloWorld オブジェクトを解放します } end .オブジェクト構造は、DelphiとFree Pascalでも引き続き利用可能です。
名前空間ObjectPascalExample ;インタフェースtype ConsoleApp = class class method Main ; end ;THelloWorld =クラスメソッドPut ; end ;実装メソッドTHelloWorld.Put ; begin Console.WriteLine ( ' Hello , World ! ' ) ; end ;class method ConsoleApp . Main ; begin var HelloWorld := new THelloWorld ; HelloWorld . Put ; end ;終わり。type THelloWorld = class procedure Put ; begin PrintLn ( 'Hello, World!' ) ; end end ;var HelloWorld : = THELLOWorld.Create ; HelloWorld.Put ;メソッドの実装は、他のオブジェクトパスカル方言と同様に、別の場所に配置することも可能です。
Object Pascal には、Delphi への拡張や FreePascal への拡張によって、多くの機能が継続的に導入されてきました。批判を受けて、Free Pascal は Delphi 互換モードが選択されている場合に Delphi と同じ構文のジェネリクスを採用し、Delphi (部分的) と Free Pascal (より広範囲) の両方で演算子オーバーロードをサポートしています。Delphi はバージョン 7 以降、ジェネリクスを含む他の多くの機能も導入しています[ 17 ]。FreePascal は Delphi 互換モードで Delphi と互換性を持つように努めていますが、通常は Delphi では必ずしも利用できない多くの新機能も言語に導入しています。