オブジェクトパスカル

オブジェクトパスカル
パラダイム命令型構造化オブジェクト指向関数型(Delphi 方言のみ)、コンポーネントベースイベント駆動型ジェネリック
家族ヴィルト・パスカル
デザイン:ラリー・テスラー(アップル)ニクラウス・ヴィルト(アップル)アンダース・ヘアスバーグ(ボーランド)[ 1 ]
開発者アップルコンピュータ(初期)ボーランドインターナショナル[ 1 ]
初登場1986 (1986年
タイピングの規律静的および動的(バリアント、 const配列RTTIによる動的型付け)、強力安全
範囲語彙(静的)
プラットフォームARMx86PowerPCppc64SPARCMIPSCLIJava
ファイル名拡張子.p、、.pp.pas
主要な実装
Delphi ( x86ARM )、Free Pascal ( x86PowerPCppc64SPARCMIPSARM )、Oxygene ( CLIJava、 Native Cocoa )、 Smart Mobile Studio ( JavaScript )
方言
Apple、Turbo PascalFree PascalobjfpcまたはDelphiモードを使用)、Delphi、Delphi.NET、Delphi Web Script、PascalABC.NETOxygene
影響を受けた
PascalSimulaSmalltalk
影響を受けた
C#、Genie、JavaNimC/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インタプリタではなくコンパイラとして採用されました。

ClascalとAppleの初期のObject Pascal

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は、 68kPowerPCの両方を対象とした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デストラクタ(および プロシージャの呼び出しを不要にするNewDispose、プロパティ、メソッドポインタなどが導入されました。これらはオブジェクト指向拡張に関するISOワーキングドラフトに着想を得ていましたが、Turbo Pascal方言との多くの違い(すべてのメソッドを仮想 にするというドラフトの要件など)は無視されました。

Delphi言語は長年にわたり進化を続け、動的配列ジェネリック匿名メソッドといった構造をサポートしてきました。Appleが導入した古いオブジェクト構文(「旧式オブジェクト型」)も現在もサポートされています。[ 7 ]

バージョン

コンパイラ

Object Pascalコンパイラは、幅広いオペレーティング システムとアーキテクチャで利用できます。

レガシー製品

  • Borland Kylixは、 Qtライブラリを使用するIntel 32ビットLinuxのみを対象としたDelphiのLinux版です。ほとんどの最近のLinuxディストリビューションでは、そのままでは動作しません。
  • Virtual Pascalは、主にOS/2とMicrosoft Windows向けの、Turbo PascalおよびDelphi互換のフリー32ビットコンパイラでした。後にDOS+ Extenderと実験的なLinuxクロスコンパイラも追加されました。このコンパイラの開発はDelphi 2程度のレベルで停止しました。2007年には公式ウェブサイトが閉鎖され、開発も停止しました。

通訳者

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 ]

サンプル「Hello World」プログラム

ここに、さまざまな Object Pascal バージョンの「Hello World」プログラムがいくつかあります。

Apple版

プログラムObjectPascalExample ;type THelloWorld =オブジェクトプロシージャPut ; end ;var HelloWorld : THelloWorld ;手順THelloWorld.Put ; begin ShowMessage ( 'Hello, World ! ' ) ; end ;begin New ( HelloWorld ) ; HelloWorld.Put ; Dispose ( HelloWorld ) ; end .

Turbo Pascal版

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 つのインスタンスのみを解放する必要があります }終了

より深いコピーのための特定の割り当てがない限り、これはポインターのコピーに基づいて機能します。

DelphiとFree Pascalバージョン

プログラム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 ;終わり

DWScript(スマートパスカル)バージョン

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では必ずしも利用できない多くの新機能も言語に導入しています。

参考文献

  1. ^ a b Gibson, Steve (1989年5月8日). 「BorlandとMicrosoftがオブジェクト指向Pascalリングに参入」 . InfoWorld . 第11巻第19号. p. 28. 2024年2月29日時点のオリジナルよりアーカイブ。 2021年9月18日閲覧
  2. ^テスラー、ラリー (1985). 「Object Pascalレポート」.構造化言語の世界. 9 (3): 10–7 .
  3. ^ Tesler, Larry (1985年2月4日). 「Object Pascal for the Macintosh」(PDF) . 2025年3月13日閲覧
  4. ^ Seiter, Charles (1990年11月). 「Think Pascal 3」 . Macworld . 第7巻第11号. 236ページ.
  5. ^ Arnold, Brian; McCarthy, Guy (1995年11月). 「MacApp Pascal が再び登場」 . MacTech . 第11巻第11号. pp.  30– 31.
  6. ^ Arnold, Brian (1996年2月). 「Object Pascalで書かれたPowerPC用MacApp 2」 . MacTech . 第12巻第2号. pp.  25– 32.
  7. ^ Lischner, Ray (2000). Delphi in a nutshell: a desktop quick reference (第1版). Sebastopol, CA: O'Reilly and Associates. ISBN 1565926595
  8. ^コミュニティレター:エンバカデロ・テクノロジーズ、BorlandからCodeGearを買収することに合意Archived 2018-03-02 at the Wayback Machine . Edn.embarcadero.com. 2013-07-21 取得。
  9. ^ 「iPhone/iPod 開発」 Free Pascal 開発チーム。2009年4月28日時点のオリジナルよりアーカイブ。 2009年4月13日閲覧
  10. ^ A Smart Book . Leanpub. 2012年5月18日. 2013年5月25日時点のオリジナルよりアーカイブ。 2013年6月19日閲覧
  11. ^ Funa, Igor (2021). 「Turbo51: 8051マイクロコントローラ向けTurbo Pascalコンパイラ」 2018年9月25日時点のオリジナルよりアーカイブ。
  12. ^ Draxler, Wolfgang. 「WDSibil: ビジュアル開発環境」 . 2020年2月12日時点のオリジナルよりアーカイブ。
  13. ^ “EDM/2: WDSibyl” . 2021年3月24日時点のオリジナルよりアーカイブ。
  14. ^ 「EDM/2: ツール一覧」 。2022年8月21日時点のオリジナルよりアーカイブ
  15. ^ 「eCSoft/2: The Complete OS/2 Software Encyclopedia: WDSibyl」 。2021年10月17日時点のオリジナルよりアーカイブ
  16. ^ “Modern Pascal” . 2018年12月11日時点のオリジナルよりアーカイブ2018年10月22日閲覧。
  17. ^ 「Delphi 7以降の新しいDelphi言語機能」。CodeGear。2008年7月2日時点のオリジナルよりアーカイブ2008年7月6日閲覧。

デルファイ