| オブジェクトパスカル | |
|---|---|
| パラダイム | 命令型、構造化、オブジェクト指向、関数型(Delphi 方言のみ)、コンポーネントベース、イベント駆動型、ジェネリック |
| 家族 | ヴィルト・パスカル |
| デザイン: | ラリー・テスラー(アップル)ニクラウス・ヴィルト(アップル)アンダース・ヘアスバーグ(ボーランド)[ 1 ] |
| 開発者 | アップルコンピュータ(初期)ボーランドインターナショナル[ 1 ] |
| 初登場 | 1986 (1986年) |
| タイピングの規律 | 静的および動的(バリアント、 const配列、RTTIによる動的型付け)、強力、安全 |
| 範囲 | 語彙(静的) |
| プラットフォーム | ARM、x86、PowerPC、ppc64、SPARC、MIPS、CLI、Java |
| ファイル名拡張子 | .p、、.pp.pas |
| 主要な実装 | |
| Delphi ( x86、ARM )、Free Pascal ( x86、PowerPC、ppc64、SPARC、MIPS、ARM )、Oxygene ( CLI、Java、 Native Cocoa )、 Smart Mobile Studio ( JavaScript ) | |
| 方言 | |
| Apple、Turbo Pascal、Free Pascal(objfpcまたはDelphiモードを使用)、Delphi、Delphi.NET、Delphi Web Script、PascalABC.NET、Oxygene | |
| 影響を受けた | |
| Pascal、Simula、Smalltalk | |
| 影響を受けた | |
| C#、Genie、Java、Nim、C/AL | |
Object Pascalは、クラスやメソッドなどのオブジェクト指向プログラミング(OOP) 機能を提供するプログラミング言語Pascalの拡張機能です。
この言語はもともと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の両方から呼び出すことができました。1980年代後半には、Thinkスイートが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 は、 Apple Computerで、Pascal の発明者であるNiklaus Wirthと相談しながら、 Larry Tesler率いるチームによって開発された Pascal 言語の拡張です。 [ 2 ] [ 3 ]これは、 Lisaコンピュータで利用可能だったClascalと呼ばれる、以前のオブジェクト指向バージョンの Pascal から派生したものです。
Object Pascalは、現在ではクラスライブラリと呼ばれることになる、拡張可能なMacintoshアプリケーションフレームワークであるMacAppをサポートするために必要でした。Object Pascalの拡張機能とMacAppは、バリー・ヘインズ、ケン・ドイル、ラリー・ローゼンスタインによって開発され、ダン・アレンによってテストされました。ラリー・テスラーは、1985年の早い時期に開始され、1986年に製品化されたこのプロジェクトを監督しました。
Object Pascalの拡張機能は、Think Pascal統合開発環境(IDE)にも実装されていました。この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は、 68kとPowerPCの両方を対象としたObject PascalコンパイラをCodeWarriorにバンドルしました。これはIDEとMPWツールの両方で使用できました。AppleとSymantecがサポートを終了した後も、 Object Pascalを使用していたMacintosh開発者はPowerPCへの移植が可能でした。Object Pascalで書かれたMacApp 2.0は、 CodeWarriorを使用してPowerPCに移植されました。[ 5 ] [ 6 ]
1986年、ボーランドはMacintosh向けTurbo Pascal製品に、同じくObject Pascalと名付けられた同様の拡張機能を導入しました。また、1989年にはDOS向けTurbo Pascal 5.5にも導入されました。1994年にボーランドが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)は、オープンソースのObject PascalインタープリタおよびDelphiで書かれたスクリプトエンジンです。Object Pascalのサブセットをサポートしています。DWScriptはObject PascalコードをJavaScriptコード(Smart Pascal)にコンパイルすることもでき、ジャストインタイムコンパイル(JIT)もサポートしています。現代のPascalは、コマンドラインインターフェース(CLI)、Apacheモジュール(Celerity)、CodeRunner(ポートごとに異なるスクリプトを処理できるNode.js風のソリューション)の3つの異なるインタープリタを提供し、スクリプトのソースコードをコンパイルして保護する機能も備えています。[ 16 ]
ここに、さまざまな Object Pascal バージョンの「Hello World」プログラムがいくつかあります。
プログラムObjectPascalExample ;type THelloWorld =オブジェクトプロシージャPut ; end ;var HelloWorld : THelloWorld ;手順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)は、TPバージョンのObject Pascalに含まれる唯一の部分です。
プログラムObjectPascalExample ;type THelloWorld =オブジェクトプロシージャPut ; end ;手順THelloWorld.Put ; begin WriteLn ( 'Hello , World! ' ) ; end ;var HelloWorld : THelloWorld ; { スタック上に割り当てられ、明示的な割り当てなしでも使用できます。 } begin HelloWorld . Put ; end .プログラムObjectPascalExample ;type PHelloWorld = ^ THelloWorld ; THelloWorld =オブジェクトプロシージャPut ; end ;手順THelloWorld.Put ; begin WriteLn ( 'Hello , World! ' ) ; end ;var HelloWorld : PHelloWorld ; { これは THelloWorld への型付きポインタです }begin New ( HelloWorld ) ; HelloWorld ^ .Put ; Dispose ( HelloWorld ) ; end .別の例:
プログラムObjectPascalExample ;type PHelloWorld = ^ THelloWorld ; THelloWorld =オブジェクトプロシージャPut ; end ;手順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 つのインスタンスのみを解放する必要があります }終了。より深いコピーのための特定の割り当てがない限り、これはポインターのコピーに基づいて機能します。
プログラムObjectPascalExample ;type THelloWorld =クラスプロシージャPut ; end ;手順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 =クラスクラスメソッドMain ; end ;THelloWorld =クラスメソッドPut ; end ;実装メソッドTHelloWorld.Put ; begin Console.WriteLine ( ' Hello , World ! ' ) ; end ;クラスメソッドConsoleApp.Main ; begin var HelloWorld : = new THelloWorld ; HelloWorld.Put ; end ;終わり。type THelloWorld =クラスプロシージャPut ; begin PrintLn ( 'Hello, World!' ) ; end end ;var HelloWorld : = THelloWorld.Create ; HelloWorld.Put ;メソッドの実装は、他の Object Pascal 方言と同様に、別の場所で行うこともできます。
Object Pascalには、Delphiの拡張とFreePascalの拡張により、継続的に多くの機能が導入されてきました。批判を受けて、Free PascalはDelphi互換モードが選択されている場合に限り、Delphiと同じ構文のジェネリックを採用しました。また、Delphi(部分的)とFree Pascal(より広範囲)の両方で演算子オーバーロードをサポートしています。Delphiもバージョン7以降、ジェネリックを含む多くの機能を導入しています[ 17 ]。FreePascalはDelphi互換モードでDelphiとの互換性を維持しようとしますが、通常、Delphiでは必ずしも利用できない多くの新機能も言語に導入しています。