ObjectPascal

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
ObjectPascal
パラダイム命令型、構造化オブジェクト指向機能的(Delphi方言のみ)、コンポーネントベースイベント駆動型ジェネリック
家族ワース パスカル
によって設計されたラリー・テスラー(アップル)
ニクラウス・ヴィルト(アップル)
アンダース・ヘルスバーグ(ボーランド)[1]
開発者Apple Computer(初期)
Borland International [1]
初登場1986 ; 36年前 (1986
規律の入力静的および動的(バリアント、constの配列、およびRTTIによる動的型付け)、強力安全
範囲字句(静的)
プラットホームARMx86PowerPCppc64SPARCMIPSCLIJavaCocoa
ファイル名拡張子.p、、.pp_.pas
主な実装
Delphix86ARM)、Free Pascalx86PowerPCppc64SPARCMIPSARM)、OxygeneCLIJava、Native Cocoa)、Smart Mobile Studio(JavaScript
方言
Apple、Turbo PascalFree Pascalobjfpcまたはdelphiモードを使用)、Delphi、Delphi.NET、Delphi Web Script、Oxygene
に影響を受けた
PascalSimulaSmalltalk
影響を受ける
C#GenieJavaNimC / AL

Object Pascalは、プログラミング言語Pascalの拡張機能であり、クラスメソッドなどのオブジェクト指向プログラミング(OOP)機能を提供します

この言語は元々LisaWorkshop開発システムのClascalとしてAppleComputerによって開発されました。リサがマッキントッシュに取って代わったとき、アップルはパスカルの作者であるニクラウスヴィルトと協力して、正式に標準化されたバージョンのクラスカルを開発しました。これはObjectPascalに名前が変更されました。1980年代半ばまで、 ObjectPascalはMacAppアプリケーションフレームワークの初期バージョンの主要なプログラミング言語でした。この言語は、 C ++ベースのMacApp3.0のリリースにより、1991年にMacの主要な開発言語としての地位を失いました。公式サポートは1996年に終了しました。

また、 Symantecは、ThinkPascal製品用にObjectPascal用のコンパイラを開発しました。これにより、Apple独自のMacintosh Programmer's Workshop(MPW)よりもはるかに高速にプログラムをコンパイルできます。次に、Symantecは、MacAppの概念に基づいてThink Class Library(TCL)を開発しました。これは、ObjectPascalとTHINKCの両方から呼び出すことができますThinkスイートは、1980年代後半にMacの主要な開発プラットフォームとしてMPWを大幅に置き換えました。

SymantecはObjectPascalをPCに移植し、そのプラットフォームで同様のオブジェクトフレームワークを開発しました。最終的にC ++に移行したTCLとは対照的に、PCライブラリは主にPascalに基づいたままでした。

Borlandは、オブジェクト指向プログラミングのサポートをTurbo Pascal 5.5に追加しました。これは、最終的にDelphiで使用されるObjectPascal方言の基礎になります。Delphiは、2000年代初頭までPC上のビジネスアプリケーションの主流であり続け、2000年代には.NETFrameworkの導入により部分的に置き換えられまし

歴史

Apple Pascal

Pascalは、1970年代にプログラミングの世界で主要な言語になり、ほとんどのミニコンピュータープラットフォームとマイクロコンピューターに高品質の実装が施されました。後者の中には、UCSD Pascalシステムがあり、これは、複数のプラットフォームで実行できる中間のp-Systemコード形式にコンパイルされました。AppleはUCSDのライセンスを取得し、AppleIIおよびAppleIII用のApplePascalシステムの基盤として使用しました

パスカルは、この時期に会社の主要言語の1つになりました。Apple Lisaプロジェクトの開始に伴い、Pascalがプラットフォームのメインプログラミング言語として選択されましたが、今回はp-Systemインタープリターとは対照的にコンパイラーとして選択されました。

ClascalとAppleの初期のObjectPascal

Object Pascalは、Pascalの発明者であるNiklaus Wirthと相談して、LarryTeslerが率いるチームによってAppleComputerで開発されたPascal言語の拡張版です[2]これは、 Lisaコンピューター で利用可能だったClascalという名前の以前のオブジェクト指向バージョンのPascalの子孫です。

Object Pascalは、現在クラスライブラリと呼ばれる拡張可能なMacintoshアプリケーションフレームワークであるMacAppをサポートするために必要でした。Object Pascal拡張機能とMacAppは、Barry Haynes、Ken Doyle、Larry Rosensteinによって開発され、DanAllenによってテストされました。ラリー・テスラーは、1985年の非常に早い時期に始まり、1986年に製品となったプロジェクトを監督しました。

Object Pascal拡張機能は、Think Pascal統合開発環境(IDE)にも実装されました。IDEには、構文の強調表示とチェックを備えたコンパイラとエディタ、強力なデバッガ、およびクラスライブラリが含まれています。[3]多くの開発者は、AppleのObjectPascalの実装よりもThinkPascalを好みました。これは、Think Pascalがはるかに高速なコンパイル、リンク、デバッグサイクル、およびツールの緊密な統合を提供したためですThink Pascalの最後の公式リリースは1992年に4.01でした。その後、 Symantecは非公式バージョン4.5d4を無料でリリースしました。

Appleは、1994年にMotorola68000シリーズチップからIBMのPowerPCアーキテクチャに移行したときにObjectPascalのサポートを終了しました。MacApp3.0はすでにC ++で書き直され、このプラットフォームに移植されていました。

Metrowerksは、IDEとMPWツールの両方で68kPowerPCの両方を対象としたMacintosh用のObjectPascalコンパイラをCodeWarriorで提供しました。Object Pascalを使用しているMacintosh開発者は、AppleとSymantecの両方がサポートを終了した後のアーキテクチャでさえ、 PowerPCに移植するためのパスを持っていました。ObjectPascalで記述されたMacApp2.0は、 CodeWarriorを使用してPowerPCに移植されました[4] [5]

Borland、Inprise、CodeGear、およびEmbarcaderoの年

1986年に、Borlandは、Macintosh用のTurbo Pascal製品にObject Pascalとも呼ばれる同様の拡張機能を導入し、1989年にDOS用のTurbo Pascal5.5に導入しました。Borlandが1994年にDOSからWindowsに再び焦点を合わせたとき、彼らはDelphiという名前のTurbo Pascalの後継を作成し、現在Delphi言語として知られているものを作成するための新しい拡張機能のセットを導入しました。

Delphiの開発は1993年に開始され、Delphi 1.0は1995年2月14日に米国で正式にリリースされました。TurboPascalオブジェクトモデルを使用するコードは引き続きコンパイルできますが、Delphiは、Createコンストラクタよりもキーワードclassを使用する新しい構文を備えています。objectそして、仮想のDestroyデストラクタ(およびプロシージャNewDisposeプロシージャを呼び出す必要がないこと)、プロパティ、メソッドポインタ、およびその他のいくつかのもの。これらは、オブジェクト指向拡張のISO作業ドラフトに触発されましたが、Turbo Pascalの方言との違いの多く(すべてのメソッドが仮想であるというドラフトの要件など)は無視されました。

Delphi言語は、動的配列ジェネリックス匿名メソッドなどの構造をサポートするために、長年にわたって進化を続けてきましたAppleによって導入された古いオブジェクト構文(「古いスタイルのオブジェクトタイプ」)は引き続きサポートされます。[6]

バージョン

コンパイラ

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

レガシー製品

  • Borland KylixはDelphiのLinuxバリアントであり、 Qtライブラリを使用するIntel32ビットLinuxのみを対象としています。最新のLinuxディストリビューションでは、そのままでは機能しません。
  • Virtual Pascalは、主にOS / 2およびMicrosoftWindows用の無料の32ビットTurboPascalおよびDelphi互換コンパイラでした。その後、DOS + Extenderと実験的なLinuxクロスコンパイラーも受け取りました。コンパイラの開発はDelphi2のレベルで停止しました。2007年に、その公式Webサイトは動作を停止し、それ以上の開発は停止しました。

通訳者

Pascal Script(以前のInnerFuse)とDWScript(Delphi Web Script)は、Delphiで記述されたオープンソースのObjectPascalインタープリターとスクリプトエンジンです。ObjectPascalのサブセットをサポートします。DWScriptは、Object PascalコードをJavaScriptコード(Smart Pascal)にコンパイルすることもでき、ジャストインタイムコンパイル(JIT)をサポートします。Modern Pascalは、スクリプトのソースコードをコンパイルして保護する機能に加えて、コマンドラインインターフェイス(CLI)、Apache Module(Celerity)、CodeRunner(ポートごとに異なるスクリプトを処理できるnode.jsのようなソリューション)の3つの異なるインタープリターを提供します[12]

サンプルの「HelloWorld」プログラム

ObjectPascalのさまざまなバージョンの「HelloWorld」プログラムをいくつか紹介します。

Appleバージョン

プログラム ObjectPascalExample ;

   タイプ
      THelloWorld  = オブジェクト
         プロシージャ Put ; 
      終了;

   var 
      HelloWorld  THelloWorld ;

   手順 THelloWorld 置く; 
   ShowMessageを開始します
      'Hello、World!' ; 終了;
   


   新規開始HelloWorld ; 
   HelloWorld 置く; 
   破棄HelloWorld ; 
終了

TurboPascalバージョン

DelphiとFreePascalでも引き続きサポートされます。FPCは、ライブラリ/ユニットの独自の代替品もパッケージ化します。Delphiはそうではありません。Free Pascal 1.0シリーズとFPCテキストモードIDEは、この方言で最大のオープンコードベースです。Free Pascal 2.0は、よりDelphiに似た方言で書き直され、テキストモードIDEと関連するフレームワーク(Free Vision)は、ObjectPascalのTPバージョンの唯一の部分です。

スタックベースの割り当て

プログラム ObjectPascalExample ;

   タイプ
      THelloWorld  = オブジェクト
         プロシージャ Put ; 
      終了;

   手順 THelloWorld 置く; 
   WriteLnを開始します
      'Hello、World!' ; 終了;
   

var 
  HelloWorld  THelloWorld ;  {スタックに割り当てられ、明示的な割り当てなしで使用できます。} 
HelloWorldを開始します
   置く; 終了

ヒープベースの割り当て

プログラム ObjectPascalExample ;

   タイプ
      PHelloWorld  =  ^ THelloWorld ; 
      THelloWorld  = オブジェクト
         プロシージャ Put ; 
      終了;

   手順 THelloWorld 置く; 
   WriteLnを開始します
      'Hello、World!' ; 終了;
   

var 
  HelloWorld  PHelloWorld ;  {これはTHelloWorldへの型付きポインターです}


   新規開始HelloWorld ; 
   HelloWorld ^。置く; 
   破棄HelloWorld ; 
終了

もう一つの例:

プログラム ObjectPascalExample ;

   タイプ
      PHelloWorld  =  ^ THelloWorld ; 
      THelloWorld  = オブジェクト
         プロシージャ Put ; 
      終了;

   手順 THelloWorld 置く; 
   WriteLnを開始します
      'Hello、World!' ; 終了;
   

var 
  HelloWorld  PHelloWorld ;  {これはTHelloWorldへの型付きポインタです} 
  HelloWorld2  ^ THelloWorld ;  {これは異なる構文でもまったく同じです}  
  HelloWorld3  ^ THelloWorld ;                                
  HelloWorld4  PHelloWorld ;    
begin 
   {これは上記のコードと同じように機能しますが、割り当てと割り当て解除に注意してください。ただし、
     多くの人は混乱します。過去には、ここに間違ったコメントを含む間違った例がありました...}

   新規HelloWorld ;   {1つのインスタンス} 
   HelloWorld4  :=  HelloWorld ;  {これは有効です-ポインタコピー} 
   HelloWorld2  :=  HelloWorld ;  {これは有効です-ポインタコピー} 
   New HelloWorld3 ;  {2番目のインスタンス} 
   HelloWorld4  :=  HelloWorld3 ;  {これは有効です-ポインタコピー} 
   HelloWorld2  :=  HelloWorld3 ;  {これは有効です-ポインタコピー} 
   Dispose HelloWorld ;   {2つのインスタンスのみを割り当てます}
   破棄HelloWorld3 ;  {したがって、2つのインスタンスのみを解放する必要があります} 
end 

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

DelphiおよびFreePascalバージョン

プログラム ObjectPascalExample ;

タイプ
  THelloWorld  = クラス
    プロシージャ Put ; 
  終了;

手順 THelloWorld 置く; 
Writelnを開始します
  'Hello、World!' ; 終了;


var 
  HelloWorld  THelloWorld ;                {これは暗黙のポインタです}


  HelloWorld を開始します:=  THelloWorld 作成;       {コンストラクターは、タイプTHelloWorldのオブジェクトへのポインターを返します} 
  HelloWorld 置く; 
  HelloWorld 無料;                        {この行は、HelloWorldが指すTHelloWorldオブジェクトの割り当てを解除します} 
end 

オブジェクト構成は、DelphiおよびFreePascalでも引き続き使用できることに注意してください。

現代のパスカルバージョン

プログラム ObjectPascalExample ;

タイプ
  THelloWorld  =  class 
    Put オブジェクトプロシージャ ; 終了; 
  

手順 THelloWorld 置く; 
Writelnを開始します
  'Hello、World!' ; 終了;


手順 THelloWorld 無料; 
begin 
   //ポインタを破棄します// 
end ;

手順 THelloWorld Init ; 
begin 
   //変数を初期化します
   //メソッド(手動RTTI)
    Selfと リンクしますdo  begin 
      TMethod @ Put := [ @THelloWorld 置く@自己] ; TMethod @ Free = [ @THelloWorld 無料@自己] ; 終了; 終了; 
       
   


var 
  HelloWorld  THelloWorld ;                {これは暗黙のポインタです}


  HelloWorldを開始しますInit ;                        {タイプTHelloWorldの自己初期化(オブジェクトへのポインタ)} 
  HelloWorld 置く; 
  HelloWorld 無料;                        {この行は、HelloWorldが指すTHelloWorldオブジェクトの割り当てを解除します} 
end 

Oxygeneバージョン

名前空間 ObjectPascalExample ;

   インターフェース

   タイプ
      ConsoleApp  = クラス
         クラス メソッド Main ; 
      終了;

      THelloWorld  = クラス
         メソッド Put ; 
      終了;

   実装

   メソッド THelloWorld 置く; 
   Consoleを開始します
      WriteLine 'Hello、World!' ; 終了;
   

   クラス メソッド ConsoleApp メイン; 
   var HelloWorldを開始します
      := new THelloWorld ; HelloWorld 置く; 終了;    
      
   

終了

DWScript(Smart Pascal)バージョン

タイプ
   THelloWorld  = クラス
      プロシージャ Put ; 
      PrintLnを開始します
         'Hello、World!' ; エンドエンド;
      
   

var  HelloWorld  :=  THelloWorld 作成; 
HelloWorld 置く;

メソッドの実装は、他のObjectPascal方言のように別の場所で行うこともできます。

開発

多くの機能がObjectPascalに継続的に導入されており、Delphiの拡張機能とFreePascalの拡張機能があります。批判に応えて、Free PascalはDelphiと同じ構文のジェネリックを採用しました。ただし、Delphi互換モードが選択されていて、Delphi(部分的)とFree Pascal(より広範囲)の両方が演算子のオーバーロードをサポートしています。Delphiは、バージョン7 [13]以降、ジェネリックを含む他の多くの機能も導入しています。FreePascalはDelphi互換モードでDelphiとの互換性を確保しようとしますが、通常、Delphiで常に利用できるとは限らない多くの新機能を言語に導入しました。

参考文献

  1. ^ a b ギブソン、スティーブ(1989年5月8日)。「BorlandとMicrosoftがオブジェクト指向パスカルリングに入る」InfoWorld11、いいえ。19.p。28。
  2. ^ テスラー、ラリー(1985)。「ObjectPascalレポート」。構造化言語の世界9(3):10–7。
  3. ^ Seiter、Charles(1990年11月)。「パスカル3を考えて」Macworld7、いいえ。11.p。236。
  4. ^ アーノルド、ブライアン; マッカーシー、ガイ(1995年11月)。「MacAppPascalRidesagain」MacTech11、いいえ。11. pp。30–31。
  5. ^ アーノルド、ブライアン(1996年2月)。「MacApp2for PowerPC inObjectPascal」MacTech12、いいえ。2. pp。25–32。
  6. ^ Lischner、Ray(2000)。一言で言えばDelphi:デスクトップクイックリファレンス(第1版)。セバストポル、カリフォルニア州:オライリーアンドアソシエイツ。ISBN 1565926595
  7. ^ コミュニティレター:エンバカデロテクノロジーズは、ボーランドからCodeGearを買収することに同意します。Edn.embarcadero.com。2013年7月21日に取得。
  8. ^ 「iPhone / iPod開発」無料のPascal開発チーム2009年4月13日取得
  9. ^ スマートブックリーンパブ。2012年5月18日。
  10. ^ 船名、イゴール(2021)。「Turbo51:8051マイクロコントローラー用のTurboPascalコンパイラ」2018-09-25にオリジナルからアーカイブされました。
  11. ^ ドラクスラー、ヴォルフガング。「WDSibyl:ビジュアル開発環境」2020-02-12にオリジナルからアーカイブされました。
  12. ^ 「現代のパスカル」
  13. ^ 「Delphi7以降の新しいDelphi言語機能」CodeGear 2008年7月6日取得

外部リンク

Delphi