Pascal(プログラミング言語)

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
パスカル
LagrangePAS.png
パラダイム
家族ワースパスカル
によって設計されたニクラウス・ヴィルト
初登場1970 ; 51年前 (1970)
規律の入力
範囲語彙
ファイル名拡張子.pp.pas.inc
主要な実装
方言
に影響を受けた
影響を受ける

パスカルはあるが不可欠手続き型 プログラミング言語で設計し、ニクラウス・ヴィルト小さな、効率的な言語が使用して良いプログラミングプラクティスを奨励することを目的として、構造化プログラミングデータ構造をフランスの数学者、哲学者、物理学者のブレーズパスカルにちなんで名付けられました

Wirthの著書Algorithms + Data Structures = Programs基づいて、PascalはALGOL60言語のパターンに基づいて開発されました。ヴィルトはの一部として言語改善するためのプロセスに関与していたALGOL Xの努力と命名提案バージョンALGOL Wを。これは受け入れられず、ALGOLXプロセスは行き詰まりました。 1968年、WirthはALGOL Xプロセスを放棄し、ALGOL Wをさらに改善することを決定し、1970年にこれをPascalとしてリリースしました。

Pascalは、ALGOLのスカラー配列に加えて、複雑なデータ型を定義し、リストツリーグラフなどの動的で再帰的なデータ構造を構築できるようにしました。 Pascalはすべてのオブジェクトに強い型持っています。つまり、明示的な変換なしに、あるタイプのデータを別のタイプに変換したり、別のタイプとして解釈したりすることはできません。 C(およびCファミリのほとんどの言語)とは異なり、Pascalでは、ネストされたプロシージャ定義を任意の深さまで許可し、サブルーチン内でほとんどの種類の定義と宣言を許可します。(手順と機能)。したがって、プログラムは構文的に単一のプロシージャまたは関数に似ています。これはALGOL60のブロック構造に似ていますが、任意のブロックステートメントからプロシージャと関数のみに制限されています。

パスカルは1970年代に、特に急成長しているミニコンピューター市場で大成功を収めました1970年代後半にこの分野が出現したため、多くのマイクロコンピューターでコンパイラーが利用可能になりました。1980年代大学レベルのプログラミングコースで教育言語として広く使用され、同じ時期に商用ソフトウェアを作成するための制作環境でも使用されました。UNIXベースのシステムが普及するにつれて、特にC ++のリリースにより、1980年代後半から1990年代初頭にかけてCプログラミング言語置き換えられました

派生という名前のPascalはオブジェクトのために設計された、オブジェクト指向プログラミングは、 1985年これで開発されたことにより、使用されたApple Computer社ボーランド1980年代後半以降に発展デルファイのMicrosoft Windowsプラットフォーム。Pascalの概念の拡張により、Modula-2およびOberonという言語が生まれました

歴史

以前の取り組み

1960年代のコンピューター言語設計の歴史の多くは、ALGOL60言語にまでさかのぼることができます。ALGOLは、アルゴリズムを明確に記述できるようにするという明確な目標を掲げて1950年代に開発されました。これには、今日まで言語で一般的である構造化プログラミングの多くの機能が含まれていました

導入直後の1962年、ワースはオイラープログラミング言語に関するヘルムートウェーバーとの論文に取り組み始めました。オイラーはALGOLの構文と多くの概念に基づいていましたが、派生物ではありませんでした。その主な目標は、動的なリストとタイプを追加して、Lispと同様の役割で使用できるようにすることでした。この言語は1965年に発行されました。

この時までに、ALGOLの多くの問題、特に標準化された文字列システムの欠如が特定されていました。言語の維持を任務とするグループは、改善点を特定するためのALGOL Xプロセスを開始し、提出を求めました。 WirthとTonyHoareは、文字列を追加し、構文の一部をクリーンアップするための保守的な一連の変更を提出しました。これらはマイナーすぎて新しい標準ALGOLとして使用する価値がないと見なされたため、Wirthは言語用のコンパイラを作成し、ALGOLWという名前になりました

ALGOL Xの取り組みは、さらに複雑な言語であるALGOL68を選択することになりますこの言語は複雑であるため、高性能コンパイラの作成がかなり困難になり、業界では広く使用されていませんでした。これは新しい言語への入り口を残しました。

パスカル

Pascalは、コンパイラと実行時の両方で効率的な言語を作成し、適切に構造化されたプログラムの開発を可能にし、学生に構造化プログラミングを教えるのに役立つという明確な目標を掲げて、ALGOLWの取り組みの影響を受けました[4]ある世代の学生は、学部課程の入門言語としてパスカルを使用していました。

この言語の初期の成功の1つは、さまざまなプラットフォームに移植できるカスタムオペレーティングシステム実行されるバージョンであるUCSDPascalの導入でした。主要なプラットフォームはAppleIIであり、広く使用されていました。これにより、Pascalは、Apple Lisa、そして後にMacintoshでの開発に使用される主要な高級言語になりました。元のMacintoshオペレーティングシステムの一部は、PascalソースコードからMotorola68000アセンブリ言語に手作業で翻訳されました[5]

組版システムのTeXによってドナルドE. Knuthのは、中に書かれたWEBオリジナル、文芸プログラミングに基づいて、システム12月 PDP-10パスカル。Adobe Photoshop [6]などの成功した商用アプリケーションMacintoshProgrammer's Workshop Pascalで作成され、Total CommanderSkype [7]、Macromedia CaptivateなどのアプリケーションはDelphi(Object Pascal)で作成されましたApollo Computerは、1980年以降、オペレーティングシステムのシステムプログラミング言語としてPascalを使用していました。

Pascalのバリエーションは、研究プロジェクトからPCゲーム組み込みシステムまであらゆるものに使用されています広く使用されている新しいPascalコンパイラが存在します。[8]

Object Pascal

Lisaでの作業中に、Larry Teslerは、言語にオブジェクト指向拡張機能を追加するというアイデアについてWirthとのやり取りを開始しました。これは当初、1983年に導入されたClascalつながりました。Lisaプログラムが衰退し、Macintoshに置き換えられると、別のバージョンが作成され、ObjectPascalという名前が付けられましたこれは、MacApp アプリケーションフレームワークの一部として1985年にMacに導入され、1990年代初頭にAppleの主要な開発言語になりました。

Object Pascalの拡張が追加されたターボパスカル1989年にバージョン5.5のリリースで[9]長年にわたり、Object Pascalのはの基礎となったDelphiのためのシステムのMicrosoft Windows、まだWindowsアプリケーションを開発するために使用される、とすることができ交差します-コードを他のシステムにコンパイルします。Free Pascalは、Lazarusと呼ばれる独自のグラフィカルIDEを備えた、オープンソースのクロスプラットフォームの代替手段です。

実装

初期のPascalコンパイラ

最初のPascalコンパイラは、CDC6000シリーズ メインフレームコンピュータファミリチューリッヒ設計されましたNiklaus Wirth、1969年FORTRAN 66それを実装する最初の試みは、複雑なデータ構造を表現するためのFORTRAN66の不十分さのために失敗したと報告しています。 2番目の試みは、Cのような言語(Max EngeliによるScallop)で実装され、ブートストラップのために手動で(R. Schildによって)Pascal自体に翻訳されました。[10] 1970年半ばまでに運用可能になりました。それ以来、多くのPascalコンパイラは同様にセルフホスティングを行ってきましたつまり、コンパイラー自体はPascalで記述されており、コンパイラーは通常、言語に新しい機能が追加されたとき、またはコンパイラーが新しい環境に移植されるときに、それ自体を再コンパイルできます。GNU Pascalのコンパイラは、一つの注目すべき例外、Cで書かれています

CDC Pascalコンパイラの別のメインフレームへの最初の成功した移植は、1972年にクイーンズ大学ベルファスト(QUB)のウェールズとクインによって完了しました。ターゲットはInternational Computers Limited(ICL)1900シリーズでした。このコンパイラーは、Information Computer Systems(ICS)Multumミニコンピューター用のPascalコンパイラーの親でした。 Multumポートは、Pascalをシステムプログラミング言語として使用することを目的として、グラスゴー大学の情報科学部で働くFindlay、Cuples、Cavouras、およびDavisによって開発されました。 1973年の夏に完成したMultumPascalは、最初の16ビット実装であった可能性があります。

完全に新しいコンパイラがWelshetalによって完成されました。 1977年にQUBで開催されました。グラスゴー大学のFindlayとWattによって実装された、ソース言語の診断機能(プロファイリング、トレース、およびタイプ対応のフォーマットされた事後ダンプを組み込んでいます)を提供しました。この実装はサウサンプトン大学とグラスゴー大学に拠点を置くチームによって1980年にICL2900シリーズに移植されました。標準パスカルモデルの実装もこのコンパイラに基づいており、1984年にマンチェスター大学のウェールズとヘイによってBSI 6192 / ISO 7185標準への準拠を厳密にチェックし、ポータブル抽象マシンのコードを生成するように適合されました。

北米で作成された最初のPascalコンパイラは、イリノイ大学のドナルドB.ギリースの下でPDP-11に構築され、ネイティブマシンコードを生成しました。

Pascal-Pシステム

言語を迅速に広めるために、コンパイラ移植キットがチューリッヒで作成されました。これには、仮想スタックマシンのいわゆるpコード、つまり、そのコードのインタプリタとともに、適度に効率的な解釈に役立つコードを生成するコンパイラが含まれていました。パスカル-Pのシステム。 Pシステムコンパイラは、Pascal-P1、Pascal-P2、Pascal-P3、およびPascal-P4という名前でした。 Pascal-P1は最初のバージョンであり、Pascal-P4はチューリッヒからの最後のバージョンでした。 Pascal-P1と呼ばれるバージョンは、存在していたPascal-Pのさまざまなソースの事実に基づいて造られました。コンパイラは移植性を高めるために再設計され、Pascal-P2として発行されました。このコードは後で拡張されてPascal-P3になり、中間コードが追加されました下位互換性下位互換性がありませんでしたパスカル-P2、およびパスカル-P4、です。

Pascal-P4コンパイラー・インタープリターは、元のPascalと互換性のあるシステムで引き続き実行およびコンパイルできます。ただし、Pascal言語のサブセットのみを受け入れます。

チューリッヒグループ外で作成されたPascal-P5は、完全なPascal言語を受け入れ、ISO7185互換性を備えています。

UCSD PascalはPascal-P2から分岐し、KennethBowlesがそれを使用して解釈的なUCSDp-Systemを作成しました。これは、元のIBMパーソナルコンピュータの発売時に利用可能だった3つのオペレーティングシステムの1つでした[11] UCSD Pascalはバイト値に基づく中間コードを使用していたため、最も初期のバイトコードコンパイラの1つでした。 Pascal-P1からPascal-P4はそうではなく、CDC 660060ビットワード長に基づいていました。

ネイティブバイナリオブジェクトファイルを作成したPascal-P5コンパイラに基づくコンパイラが、オーストラリア原子力委員会によってIBM System / 370 メインフレームコンピュータ用にリリースされました委員会の名前の略語にちなんで、AAEC Pascal8000コンパイラと名付けられました[12]

ObjectPascalとTurboPascal

Apple Computerは、1982年にLisaWorkshop用に独自のLisaPascalを作成し、1985年にコンパイラをAppleMacintoshMPW移植しました。1985年にLarryTeslerは、Niklaus Wirthと協議して、Object Pascalを定義し、これらの拡張機能は両方のLisaに組み込まれました。 PascalおよびMacPascalコンパイラ。

1980年代には、アンダース・ヘルスバーグはのためのブルーラベルのPascalコンパイラを書いたNascomを-2。以下のため、このコンパイラの再実装IBM PCは、それが買収された前の名前コンパスPascalとPolyPascalの下で販売されたボーランドと改名さターボパスカル

Turbo Pascalは、最初のフルスクリーンIDEの1つを備えた積極的な価格戦略と、非常に高速なターンアラウンドタイム(コンパイル、リンク、実行にわずか数秒)のおかげで、非常に人気がありました。それは完全にアセンブリ言語書かれ、高度に最適化されており、競合他社の多くよりも小さく、高速になっています。

1986年、アンダースはTurbo PascalをMacintoshに移植し、AppleのObjectPascal拡張機能をTurboPascalに組み込みました。これらの拡張機能は、バージョン5.5のPCバージョンのTurboPascalに追加されました。同時に、MicrosoftはObjectPascalコンパイラも実装しました。[13] [14] Turbo Pascal 5.5は、1980年代後半に主にIBMPCに集中し始めたPascalコミュニティに大きな影響を与えました。 BASICの構造化された代替品を探している多くのPC愛好家がこの製品を使用しました。また、プロの開発者にも採用され始めました。ほぼ同時に、PascalプログラマーがCベースのアプリケーションプログラミングインターフェイス(API)を使用できるようにするために、多くの概念がCからインポートされました。MicrosoftWindowsを直接。これらの拡張機能には、nullで終了する文字列ポインタ演算関数ポインタ、address-of演算子、および安全でないタイプキャストが含まれていました

Turbo Pascalおよびユニットまたはモジュール構造を持つ他の派生物は、モジュラープログラミング言語です。ただし、ネストされたモジュールの概念や、特定のシンボルの修飾されたインポートおよびエクスポートは提供されません。

その他の変種

Super Pascalは、型の名前として非数値ラベル、returnステートメント、および式を追加したバリアントです。

TMT Pascalは、32ビットDOSプロテクトモードOS / 2、およびWin32オペレーティングシステム用の最初のBorland互換コンパイラでした。 TMT Pascal言語は、関数と演算子のオーバーロードを許可した最初の言語でした

ウィスコンシンマディソン大学、チューリッヒ大学カールスルーエ大学、およびヴッパータール大学は、数値計算のプログラミングを目的としてPascal-SC [15] [16]およびPascal-XSC [17] [18] [19]科学計算の拡張)コンパイラを開発しました。。 Pascal-SCの開発は、ISO 7185 Pascalレベル0をサポートする1​​978年に開始されましたが、レベル2のサポートは後の段階で追加されました。[20] Pascal-SCは元々Z80プロセッサを対象としていましたが、後にDOS(x86)および68000用に書き直されました。 Pascal-XSCはさまざまな時期にUnix(Linux、SunOSHP-UXAIX)およびMicrosoft / IBM(DOS with EMX、OS / 2、Windows)オペレーティングシステム。中間のCソースコードを生成し、ネイティブの実行可能ファイルにコンパイルすることで動作します。パスカル-SC言語拡張機能の一部が採用されているGNUパスカル

Pascal Solは、1983年頃にフランスのチームによってSolという名前のUnixライクなシステムを実装するために設計されました。これは標準のPascalレベル1(パラメーター化された配列境界を使用)でしたが、定義ではフランス語の代替キーワードと事前定義された識別子が許可され、言語にはシステムプログラミングを容易にするいくつかの拡張機能が含まれていました(たとえば、lseekと同等)。[21] Solチームは後に、分散オペレーティングシステムを設計するためにChorusOSプロジェクトに移りました[22]

IP Pascalは、Micropolis DOSを使用したPascalプログラミング言語の実装でした、Z80で実行されているCP / M-80に急速に移行しました。1994年に80386マシンタイプに移行され、現在はWindows / XPおよびLinuxの実装として存在しています。2008年に、システムは新しいレベルに引き上げられ、結果として得られた言語は「パスカリン」と呼ばれました(パスカルの計算機にちなんで)。これには、オブジェクト、名前空間コントロール、動的配列、およびその他の多くの拡張機能が含まれ、通常、C#と同じ機能と型保護を備えています。これは、ISO7185として標準化されている元のPascal実装とも互換性がある唯一の実装です。

言語構成

パスカルは、元の形式で、純粋に手続き型言語との伝統的なアレイ含むALGOLのような予約語と制御構造様ifthenelsewhilefor、およびcase、単一の文または上レンジングbegin-end文ブロック。 Pascalにはレコード、バリアント、ポインター列挙型セットおよびプロシージャポインターなど、元のALGOL60 タイプ含まれていないデータ構造構造もあります。このような構成は、Simula 67、ALGOL 68から部分的に継承または着想を得たものでありニクラウス・ヴィルト自身のALGOL Wによると提案CARホーア

Pascalプログラムは、パラメータとして外部ファイル記述子のリストを含むprogram キーワード始まります[23](Turbo Pascalなどでは必要ありません)。次にandキーワードで囲まれたメインブロックの後に続きますセミコロンは、分離文を、そして完全な停止(すなわち、期間)プログラム全体(または端)。Pascalソースでは大文字小文字は無視されます。 beginend

これは、非常に単純な「Hello、World!」で使用されているソースコードの例です。プログラム

プログラム HelloWorld 出力; 
begin 
    Write 'Hello、World!' 
    {いいえ ";" ブロックの最後のステートメントの後に必要です
        。1つ追加すると、プログラムに「nullステートメント」が追加されますが、コンパイラーはこれを無視します。} 
end 

データ型

Pascalや他のいくつかの一般的なプログラミング言語の型は、変数が格納できる値の範囲を定義するように変数を定義し、実行が許可される一連の操作も定義します。そのタイプの変数。事前定義されたタイプは次のとおりです。

データ・タイプ 変数が格納できる値のタイプ
整数 整数(整数)
本物 浮動小数点数
ブール値 値TrueまたはFalse
char 順序付けられた文字セットからの単一の文字
設定 ブール値のパック配列に相当します
配列 前述のデータ型のいずれかの可算グループ
ストリング 文字のシーケンスまたは「文字列」(文字列は元の言語の一部ではありませんでした。「charの配列」を作成して個々の文字に配列としてアクセスできましたが、文字列として直接参照することは、後の方言まで不可能でした。 Pascalはこの機能を追加しました。)

それぞれに許可される値の範囲(ブール値を除く)は、実装によって定義されます。一部のデータ変換には関数が用意されています。への変換realintegerは、次の関数を使用できます:(バンカーの丸めroundを使用して整数に丸めます)およびtrunc(ゼロに向かって丸めます)。

プログラマーは、Pascalの型宣言機能を使用して、事前定義された型に関して、他の一般的に使用されるデータ型(バイト、文字列など)を自由に定義できます。

タイプ
    バイト        =  0 .. 255 ; 
    signed_byte  =  - 128 .. 127 
    ストリング      = 充填 配列[ 1 .. 255 ]  CHAR 

(バイトや文字列などのよく使用されるタイプは、多くの実装ですでに定義されています。)

サブレンジタイプ

任意の順序データ型(実数を除く任意の単純型)のサブ範囲も作成できます。

var 
    x   1 .. 10 ; 
    y   'a' .. 'z' ;

タイプの設定

当時の他のプログラミング言語とは対照的に、Pascalはセットタイプをサポートしています:[24]

VAR
    セット1   セット  1 .. 10 
    SET2   セット  '' .. 'Z' ;

セットは現代の数学の基本的な概念であり、多くのアルゴリズムで使用できます。このような機能は便利であり、セットをサポートしない言語の同等の構成よりも高速である可能性があります。たとえば、多くのPascalコンパイラの場合:

もし   [ 5 .. 10 ]にいるなら  ..。

以下よりも速く実行されます:

if  i  >  4  and  i  <  11  then  .. ..

連続していない値のセットは、パフォーマンスと読みやすさの両方の観点から特に役立ちます。

もし I における [ 0 ... 3  7  9  12 ... 15 ] 次に、 ...

小さなドメインでのセットを含むこれらの例では、パフォーマンスの向上は通常、セット変数をビットベクトルとして表すコンパイラによって実現されます集合演算子は、ビット単位の機械語演算として効率的に実装できます。

共用体タイプ

Pascalでは、ユニオンを作成する方法が2つあります。1つは、バリアントレコードを介した標準的な方法です。2つ目は、変数を絶対として宣言する非標準的な手段です。つまり、別の変数と同じメモリ位置または絶対アドレスに配置されます。すべてのPascalコンパイラはバリアントレコードをサポートしていますが、絶対変数をサポートしているのは一部のみです。

この例では、すべての整数タイプを以下に示します。バイトは8ビット、ワードは16ビット、整数は32ビットです。

次の例は、非標準の絶対形式を示しています。

VAR 
    A  整数; 
    B  配列[ 1 .. 4 ]  バイト 絶対 A 
    C  整数 絶対 零度;

最初の例では、配列Bの各要素が変数Aの特定のバイトの1つにマップされます。2番目の例では、変数Cが正確なマシンアドレス0に割り当てられます。

次の例では、レコードにバリアントがあり、その一部は他のレコードと同じ場所を共有しています。

TYPE 
     TSystemTime  = レコード
       Year  Month  DayOfWeek  Day   word ;
       時間   ミリ秒 単語;
     終了;   
     TPerson  =  RECORD 
        FirstName  Lastname  String ;
        生年月日 TSystemTime ;
        ケース isPregnant  ブール  
            DateDue TSystemTime; 
           false  isPlanningPregnancy  ブール値; 
        終了;

型宣言

型は、型宣言を使用して他の型から定義できます。

タイプ
    x  = 整数; 
    y  =  x ; 
..。

さらに、複雑な型は単純な型から構築できます。

入力
    =配列[ 1 .. 10 ]整数b =レコードx 整数; y char {余分なセミコロンは厳密には必要ありません} end ; C =ファイル;    
      
          
            
    
        

ファイルタイプ

上記の例に示されているように、Pascalファイルはコンポーネントのシーケンスです。すべてのファイルには、f ^で示されるバッファ変数があります。プロシージャget(読み取り用)およびput(書き込み用)は、バッファ変数を次の要素に移動します。read(f、x)x:= f ^;と同じになるようにreadが導入されます。 get(f);write(f、x)f ^:= xと同じになるように書き込みが導入されます。 put(f);タイプtextcharのファイルとして事前定義されています。バッファ変数は、次に使用する文字を検査するために使用できますが(整数を読み取る前に数字を確認する)、これは初期の実装でインタラクティブプログラムに深刻な問題を引き起こしますが、後で「レイジーI / O」で解決されました。コンセプト。

Jensen&Wirth Pascalでは、文字列は文字のパックされた配列として表されます。したがって、それらは固定長であり、通常はスペースが埋め込まれます。

ポインタ型

Pascalはポインタの使用をサポートしています

タイプ
    pNode  =  ^ノード; 
    ノード  = レコード
        a   整数; 
        b   char ; 
        c   pNode   
    end ; 
var 
    NodePtr   pNode ; 
    IntPtr    ^整数;

ここで、変数NodePtrは、データ型Node、レコードへのポインターです。ポインタは、宣言される前に使用できます。これは前方宣言であり、使用する前に宣言する必要があるという規則の例外です。

新しいレコードを作成し、値10と文字Aレコードのフィールドab割り当て、ポインターcヌルポインター(Pascalでは「NIL」)に初期化するには、次のようにします。

新規NodePtr ; 
... 
NodePtr ^。a  :=  10 ; 
NodePtr ^。b  :=  'A' ; 
NodePtr ^。c  :=  NIL ; 
..。

これはwith、次のようにステートメントを使用して実行することもできます。

新規NodePtr ; 
...
 NodePtr ^ 行う
開始
    := 10 ; b := 'A' ; c := NIL終了; ..。  
      
      


withステートメントのスコープ内で、aとbは、レコード・ノードまたはポインター・タイプpNodeではなく、レコード・ポインターNodePtrのサブフィールドを参照します。

リンクリストスタック、およびキューは、レコードにポインタ型フィールド(c)を含めることで作成できます。

ポインターを備えた多くの言語とは異なり、Pascalは、ポインターが匿名で動的に作成された変数を参照することのみを許可し、標準の静的変数またはローカル変数を参照することを許可しません。ポインターにもタイプが関連付けられている必要があり、あるタイプへのポインターは別のタイプへのポインターと互換性がありません(たとえば、charへのポインターは整数へのポインターと互換性がありません)。これは、他のポインター実装、特にPL / IまたはCに使用されるものに固有の型セキュリティの問題を排除するのに役立ちます。また、ダングリングポインターによって引き起こされるいくつかのリスクを取り除きますがdispose関数を使用して参照スペースの割り当てを動的に解除する機能(無料と同じ効果があります)Cで見つかったライブラリ関数は、自動ガベージコレクションを提供する(ただし、メモリリークの関連する問題を完全に排除するわけではない)JavaやC#などの言語の場合のように、ポインタがぶら下がるリスクが完全に排除されていないことを意味します[25])。

これらの制限のいくつかは、新しい方言で解除できます。

制御構造

Pascalは構造化プログラミング言語です。つまり、制御フローは標準のステートメント構造化されており、通常は「goto」コマンドは使用されません

一方 、a  <>  b  do   WriteLn 'Waiting' ;

if  a  >  b  then  WriteLn '条件が満たされている'    {elseの前にセミコロンは許可されていません} 
    else  WriteLn '条件が満たされていません' ;

for  i  :=  1  to  10  do   {次のステートメントを切り離すのでここにはセミコロンはありません} 
    WriteLn '反復:'  i ;

繰り返す
    = A + 1まで= 10     
   

ケース I 
    0   書き込み「ゼロ」
    1   書き込み'one' ; 
    2   書き込み'two' ; 
    3 4 5 6 7 8 9 10  ライト'?' 
末端;

手順と機能

Pascalは、プログラムをプロシージャと関数に構造化します。一般に、プロシージャはその副作用のために使用されますが、関数はその戻り値のために使用されます。

プログラム 印刷;

var  i   整数;

プロシージャ PrintAnInteger j   整数; 
開始
    ...
終了;

関数 トリプルconst  x  整数 整数; 
トリプル開始
	:= x * 3終了;    


begin  {メインプログラム} 
    ... 
    PrintAnInteger i ; 
    PrintAnInteger triple i ))
end 

プロシージャと関数は任意の深さにネストでき、「プログラム」構造は論理的な最も外側のブロックです。

デフォルトでは、パラメーターは値で渡されます。'var'がパラメーター名の前にある場合、参照によって渡されます。

各プロシージャまたは関数は、gotoラベル、定数、型、変数、およびその他のプロシージャと関数の独自の宣言を持つことができます。これらはすべてこの順序である必要があります。この順序付け要件は、元々、効率的なシングルパスコンパイルを可能にすることを目的としていましたただし、一部の方言(Delphiなど)では、宣言セクションの厳密な順序要件が緩和されています。

文の区切り文字としてのセミコロン

Pascalは、ステートメント区切り文字としてのセミコロンの使用など、ALGOL言語の多くの言語構文機能を採用しました。これは、ステートメントターミネータとしてセミコロンを使用するPL / ICなどの他の言語とは対照的です。endレコード型宣言、ブロック、またはcaseステートメントキーワードの前にセミコロンは必要ありませんuntilリピートステートメントのキーワードのifステートメントのelseキーワードの

Pascalの初期のバージョンでは、余分なセミコロンの存在は許可されていませんでした。ただし、1973年改訂レポートALGOLのような空のステートメントを追加し、その後ISO 7185:1983の言語を変更すると、これらのほとんどの場合にオプションのセミコロンが使用できるようになります。ifステートメントのキーワードの直前にセミコロンを付けることはできません。これは、ステートメントのシーケンスではなく、単一のステートメントの後に続くためです。ネストされたifの場合、セミコロンを使用してネストされたifをセミコロンで終了すると推定されることにより、ぶら下がっているelseの問題(内側のifにはelseがないが、外側のifにはある)を回避することはできません。条項。代わりに、明示的な...elseelsebeginendブロックを使用する必要があります。[26]

リソース

コンパイラとインタプリタ

いくつかのPascalコンパイラとインタプリタが一般的に使用できます。

  • Delphiは、Embarcadero(以前のBorland / CodeGear)の主力製品であるRapid Application Development(RAD)製品です。これは、Pascalの子孫であるObject Pascal言語(Borlandでは「Delphi」と呼ばれます)を使用して、WindowsmacOSiOS、およびAndroid用のアプリケーションを作成します。 D8からD2005、D2006、およびD2007まで存在していた.NETサポートは終了し、完全な下位互換性がない新しい言語(Prism、Oxygeneのブランド名が変更されました。以下を参照)に置き換えられました。近年、Unicodeサポートとジェネリックが追加されました(D2009、D2010、DelphiXE)。
  • Free Pascalは、Object Pascalで記述されクロスプラットフォームコンパイラですセルフホスティングです)。これは、レガシーアプリケーションをコンパイルし、新しいアプリケーションを開発する手段となる、便利で強力なコンパイラを提供することを目的としています。これはGNUGeneral Public License(GNU GPL)の下で配布されますが、パッケージとランタイムライブラリは変更されたGNU Lesser General Public License(GNU LGPL)の下にあります。Turbo Pascal、Delphi、およびMac Pascalの互換性モードに加えて演算子のオーバーロードなどの拡張機能をサポートする独自の手続き型およびオブジェクト指向の構文モードがあります。多くのプラットフォームとオペレーティングシステムをサポートしています。現在のバージョンはISOモードも備えています。
  • Turbo51は、Intel 8051ファミリのマイクロコントローラ用の無料のPascalコンパイラであり、Turbo Pascal7 構文を備えています。
  • Oxygene(以前の名前はChrome)は、.NETおよびMonoプラットフォーム用のObjectPascalコンパイラです。これは、RemObjects Softwareによって作成および販売され、PrismのバックエンドコンパイラとしてEmbarcaderoによってしばらくの間販売されました
  • KylixDelphiの子孫でありLinuxオペレーティングシステムと改良されたオブジェクトライブラリをサポートしていましたサポートされなくなりました。コンパイラとIDEは、非営利目的で使用できるようになりました。
  • GNU Pascalコンパイラ(GPC)は、GNUコンパイラコレクション(GCC)のPascalコンパイラです。コンパイラはCで記述されており、ランタイムライブラリは主にPascalで記述されています。GNU General Public Licenseの下で配布され、多くのプラットフォームとオペレーティングシステムで実行されます。 ANSI / ISO標準言語をサポートし、TurboPascal方言を部分的にサポートしています。より厄介な省略の1つは、100%Turbo Pascal互換の(短い)文字列タイプがないことです。 BorlandDelphiおよびその他の言語バリアントのサポートはかなり制限されています。ただし、Mac-pascalはある程度サポートされています。
  • Virtual Pascalは、BorlandPascal構文と互換性のあるネイティブOS / 2コンパイラとして1995年にVitalyMiryanovによって作成されました。その後、Win32サポートを追加してfPrintによって商業的に開発され、2000年にフリーウェアになりました。現在、Win32、OS / 2、およびLinux用にコンパイルでき、BorlandPascalおよびDelphiとほとんど互換性があります。2005年4月4日に開発がキャンセルされました。
  • P4コンパイラ、その後の多くのPascalで実装されたPascalコンパイラの基礎。これは、完全なPascalのサブセットを実装します。
  • P5コンパイラは、P4をISO 7185(フルパスカル)に適合させたものです。
  • Smart Mobile Studioは、PascalからHTML5 / Javascriptへのコンパイラです。
  • Turbo Pascalは、1980年代から1990年代初頭にかけて、PC用の主要なPascalコンパイラであり、その強力な拡張機能と非常に短いコンパイル時間の両方で人気がありました。 Turbo Pascalはコンパクトに記述されており、ディスクにアクセスしなくても、メモリからすべてをコンパイル、実行、およびデバッグできました。当時のプログラマーは低速フロッピーディスクドライブが一般的であり、TurboPascalの速度の利点をさらに拡大しました。現在、Turbo Pascalの古いバージョン(最大5.5)は、Borlandのサイトから無料でダウンロードできます。
  • IP Pascalは、ISO 7185に準拠した元のPascalと互換性のある高度に拡張されたPascalである言語「Pascaline」(Pascalの計算機にちなんで名付けられました)を実装します。実行時に割り当てられるディメンション、オーバーロード、オーバーライド、およびその他の多くの拡張。 IP Pascalには、Pascal言語に合わせてカスタマイズされた移植性ライブラリが組み込まれています。たとえば、1970年代の元のPascalの標準テキスト出力アプリケーションを再コンパイルしてウィンドウで動作させたり、グラフィック構造を追加したりすることもできます。
  • Pascal-XTはメインフレームオペレーティングシステムBS2000およびSINIX用にSiemensによって作成されました
  • PocketStudioは、Palm OSおよびMC68xxxプロセッサ用のPascalサブセットコンパイラおよびRADツールであり、Palm OSAPIとのインターフェイスを支援する独自の拡張機能がいくつかあります。これは、ビジュアルフォームデザイナ、オブジェクトインスペクタ、およびソースコードエディタを備えたDelphiおよびLazarusに似ています
  • MIDletPascal –モバイル用のソフトウェアを作成するために特別に設計された小さくて高速なJavaバイトコードを生成するPascalコンパイラおよびIDE。
  • Vector Pascalは、MMXやAMD 3d NowなどのSIMD命令セット用の言語であり、すべてのIntelおよびAMDプロセッサ、およびソニーのPlayStation 2 EmotionEngineをサポートしています。
  • Morfik Pascalを使用すると、完全にObject Pascal(サーバー側とブラウザー側の両方)で記述されたWebアプリケーションを開発できます。
  • WDSibyl –Win32およびOS / 2用のビジュアル開発環境およびPascalコンパイラ。
  • PPコンパイラ、ハンドヘルドコンピュータで直接実行されるPalmOS用のコンパイラ。
  • CDC 6000 Pascalコンパイラは、最初の(CDC 6000)Pascalコンパイラのソースコードです。
  • パスカル-S [27]
  • AmigaPascalは、Amigaコンピューター用の無料のPascalコンパイラーです。
  • VSI Pascal(元々はVAX Pascal)は、OpenVMSオペレーティングシステム用のISO標準Pascal準拠のコンパイラです
  • Stony Brook Pascal +は、DOSおよびOS / 2用の16ビット(後の32ビット)最適化コンパイラであり、Turbo Pascalの直接の代替品として販売されましたが、少なくとも2倍の速度で実行されるコードを生成しました。

IDE

ライブラリ

  • FreePascalコンパイラを使用してGUIアプリケーションを作成するためのWOLライブラリ。

標準

ISO / IEC 7185:1990パスカル

1983年に、この言語は国際標準IEC / ISO 7185 [28]と、米国ANSI /IEEE770X3.97-1983およびISO7185:1983を含むいくつかの地域固有の標準で標準化されました。これらの2つの標準は、ISO標準に適合配列(配列の境界が実行時までわからない配列)の「レベル1」拡張が含まれているという点でのみ異なり、ANSIはこの拡張を元の(Wirthバージョン)言語。 1989年に、ISO 7185が改訂され(ISO 7185:1990)、元のドキュメントで見つかったさまざまなエラーやあいまいさが修正されました。

ISO 7185は、ユーザーマニュアルとレポート[Jensen and Wirth]で詳しく説明されているように、Wirthの1974言語を明確にしたものであると述べられていますが、標準にレベル1として「ConformantArrayParameters」を追加したことでも注目に値します。レベル0はPascalです。適合配列なし。この追加は、CAR Hoareの要求により、NiklausWirthの承認を得て行われました。沈殿した原因は、Hoareが元々FORTRANで記述され(NAG)Numerical Algorithms LibraryのPascalバージョンを作成したいと考えていたため、さまざまなサイズの配列パラメーターを許可する拡張機能がないと作成できないことがわかりました。 。同様の考慮事項により、ISO 7185に施設を含めて、手続き型および機能型パラメーターのパラメータータイプを指定するようになりました。

Niklaus Wirth自身は、たとえば、CDC 6000コンパイラのマシン固有の機能と区別するために、1974言語を「標準」と呼んでいましたこの言語はで文書化されたパスカルレポート[29]「マニュアルとレポートパスカルユーザー」の第二部。

Pascalが開発した大型マシン(メインフレームとミニコンピューター)では、一般的に標準に準拠していました。上のIBM PC、彼らはありませんでした。IBM PCでは、Borland標準のTurboPascalとDelphiのユーザー数が最も多くなっています。したがって、通常、特定の実装が元のPascal言語に対応するのか、それともボーランド方言に対応するのかを理解することが重要です。

言語のIBMPCバージョンは、UCSD Pascalの出現により異なり始めました。これは、言語のいくつかの拡張機能と、いくつかの省略および変更を特徴とする解釈された実装です。ボーランドの方言を含め、多くのUCSD言語機能が今日も存続しています。

ISO / IEC 10206:1990拡張パスカル

1990年に、拡張Pascal標準がISO / IEC 10206 [30]として作成されましたこれは、技術コンテンツ[31]がIEEE / ANSI 770X3.160-1989 [32]と 同じです。2019年現在、FreePascalコンパイラでの拡張Pascalのサポートが計画されています。[33]

バリエーション

Niklaus WirthのチューリッヒバージョンのPascalは、CDC6000コンパイラソースとPascal-Pシステムと呼ばれる移植キットの2つの基本的な形式ETHの外部で発行されました。 Pascal-Pコンパイラーは、コンパイラーのブートストラップに必要のない完全な言語のいくつかの機能を省略しました。たとえば、パラメータとして使用されるプロシージャと関数、識別されないバリアントレコード、パッキング、破棄、プロシージャ間のgoto、および完全なコンパイラの他の機能は省略されました。

ケネスボウルズ教授の下でのUCSDPascalは、Pascal-P2キットに基づいていたため、Pascal-Pの言語制限のいくつかを共有していました。 UCSDPascalは後にApplePascalとして採用され、そこでいくつかのバージョンを継続しました。 UCSD Pascalは、実際にはPascal-PキットのサブセットPascalを拡張して、標準のPascal構造を追加し直しましたが、それでもPascalの完全な標準インストールではありませんでした。

1990年代初頭、AlanBurnsとGeoffDaviesは、Pl / 0の拡張であるPascal-FCを開発しました(Niklausの著書Algorithms + Data Structures = Programsから)。並行プログラミングの教育ツールとしてPascal-FCを使用するために、いくつかの構成が追加されました(セマフォ、モニター、チャネル、リモート呼び出し、リソースなど)。並行性を実証できるようにするために、コンパイラ出力(一種のPコード)を仮想マシンで実行できます。この仮想マシンは、通常の–公正な–環境をシミュレートするだけでなく、極端な条件(不公正モード)もシミュレートできます。

BorlandのようなPascalコンパイラ

ボーランドターボパスカルで書かれた、アンダース・ヘルスバーグは、UCSDとチューリッヒコンパイラのアセンブリ言語に依存しないで書かれていました。ただし、UCSDコンパイラと同じサブセットと拡張機能の多くを採用しました。これはおそらく、UCSDシステムが当時利用可能なリソースが限られたマイクロプロセッサシステムでアプリケーションを開発するのに適した最も一般的なPascalシステムであったためです。

シュリンクラップBorlandのを含むターボパスカルバージョン3以降の化身、Object Pascalのデルファイほぼ互換と非ボーランドは、シェアウェアの作者を含めプログラマーで人気となった、とそうパスカルコードのSWAGライブラリは、と書かれたコードを大量に備えてDelphiを念頭に置いたバージョン。

このカテゴリのソフトウェア製品(コンパイラ、およびIDE / Rapid Application Development(RAD)):

  • Turbo Pascal –バージョン7までの「TURBO.EXE」、Windows用のTurbo Pascal(「TPW」)、Macintosh用のTurboPascal
  • Borland Pascal 7 –DOSとWindowsの両方を対象としたTurboPascalラインのプロフェッショナルバージョン。
  • Object Pascalの-で開発されたパスカル言語の拡張アップルコンピュータが率いるチームによってラリー・テスラーと協議しニクラウス・ヴィルト、パスカルの発明者。その機能は、Macintosh用のBorlandのTurbo Pascalに追加され、DOS用のTurbo Pascal5.5では1989年に追加されました
  • Delphi – ObjectPascalは本質的にその基礎となる言語です。
  • Free Pascalコンパイラ(FPC)– Free Pascalは、Pascalプログラマー、Borland Pascal、そして後にDelphiの事実上の標準ダイアレクトを採用しました。Freepascalは、両方のISO標準もサポートしています。
  • PascalABC.NET –コンパイラとIDEを含む新世代のPascalプログラミング言語。
  • Borland Kylixは、以前はBorlandによって販売されていたコンパイラーおよびIDEですが、後に廃止されました。これは、BorlandDelphiソフトウェア開発環境とC ++ BuilderのLinuxバージョンです
  • Lazarus –機能的にはKylixと同様に、Free Pascalコンパイラを使用したRAD用の無料のクロスプラットフォームビジュアルIDEであり、さまざまな程度でObjectPascalの方言をサポートします。
  • Virtual Pascal – VP2 / 1は、OS / 2およびWindows32用の完全にBorlandPascalおよびBorlandDelphi互換の32ビットPascalコンパイラです(Linuxバージョンは「開発中」です)。[34]
  • Sybilは、オープンソースのDelphiに似たIDEおよびコンパイラです。実装には次のものが含まれます。
    • WDSibyl [35] for Microsoft Windows and OS / 2、Speedsoftという会社によってリリースされた商用のBorland Pascal互換環境で、後にSybilという名前のDelphiのようなRapid Application Development(RAD)環境に開発され、GPLの下でオープンソース化されました。その会社は閉鎖されました。
    • 進行中のプロジェクトであるOpenSybilは、元々SpeedsoftのWDsybl Sibyl Portable Component Classes(SPCC)およびSibyl Visual Development Tool(SVDE)ソースに基づいていたOS / 2およびeCS用のオープンソースツールですが、現在そのコアはIBMSystemです。オブジェクトモデル(SOM)、WPSおよびOpenDoc[36]

関連規格のリスト

  • ISO 8651-2:1988情報処理システム–コンピュータグラフィックス–グラフィカルカーネルシステム(GKS)言語バインディング–パート2:パスカル

レセプション

Pascalは、コンピューティングコミュニティで、重要なものと補完的なものの両方で、さまざまな応答を生成しました。

初期の批判

1980年代と1990年代初頭に非常に人気がありましたが、Wirthの言語の最初の定義に厳密に従ったパスカルの実装は、教育以外での使用には不適切であると広く批判されました。C言語を普及させたBrianKernighanは彼の記事「なぜPascalが私のお気に入りのプログラミング言語ではないのか」で、早くも1981年にPascalに対する彼の最も顕著な批判を概説しました。[37]Kernighanが説明した最も深刻な問題は、配列のサイズと文字列の長さが型の一部であるため、可変長の配列や文字列をパラメーターとして受け入れる関数を作成できないことでした。これにより、たとえばソートライブラリを作成することが不可能になりました。 Kernighanはまた、ブール式の評価の予測不可能な順序、不十分なライブラリサポート、静的変数の欠如を批判し、いくつかの小さな問題を提起しました。また、彼は、言語が制限と制限を「逃れる」(故意にそして強制的に無視する)ための単純な構造を提供しなかったと述べました。他の情報源からのより一般的な苦情[25] [38]宣言の範囲が元の言語定義で明確に定義されていないことに注意してください。これは、前方宣言を使用してポインタータイプを定義する場合、レコード宣言が相互再帰つながる場合、または識別子が使用されている場合と使用されていない場合に深刻な結果をもたらすことがありました。列挙リスト内。もう1つの問題は、ALGOL 60と同様に、パラメーターとして渡されるプロシージャーまたは関数が、パラメーターの予想されるタイプを事前定義することを言語が許可していないことでした。

最初の批判にもかかわらず、Pascalは進化を続け、Kernighanのポイントのほとんどは、BorlandのTurboPascalなどの商用製品開発に適した言語のバージョンには適用されませんKernighanが彼の記事で予測したように、これらの問題を修正するための拡張機能のほとんどは、コンパイラー間で互換性がありませんでした。ただし、1990年代初頭以降、ほとんどの品種はISOとボーランドのような2つのカテゴリに凝縮されているようです。Extended Pascalは、これらの初期の批判の多くに対処します。可変長文字列、変数初期化、個別のコンパイル、短絡ブール演算子、およびotherwisecaseステートメントのdefault()句をサポートします[39]

も参照してください

参考文献

  1. ^ 代表「Microsoftの概要『。 2012年6月27日にオリジナルからアーカイブされましDelphi Object Pascal注意深く調べ、Javaプログラミング言語とそのAPIとの相互作用を理解するために、バインドされたメソッド参照の実用的なプロトタイプを作成しました...私たちの結論は、バインドされたメソッド参照は不要であり、言語に有害であるということでした。この決定は、Delphiでバウンドメソッド参照して、以前の経験だったボーランド・インターナショナル、との協議で行われたObject Pascalのを
  2. ^ TechMetrix Research(1999)。「Javaの歴史」(PDF)Javaアプリケーションサーバーレポート2010年12月29日にオリジナル(PDF)からアーカイブされましプロジェクトは「グリーン」という名前で進められ、言語はUCSD Pascalの古いモデルに基づいていたため、解釈コードを生成できます。
  3. ^ 「ジェームズゴスリングとの会話-ACMキュー」2015年7月16日にオリジナルからアーカイブされました取得した11年8月2015
  4. ^ マルコカントゥによるウェイバックマシンで2017年4月18日にアーカイブされたエッセンシャルパスカル
  5. ^ ハーツフェルド、アンディ。"ハンガリーのfolklore.orgは 2015年11月18日にウェイバックマシンアーカイブされました:Macintoshストーリー。2012年3月6日取得。
  6. ^ https://www.computerhistory.org/atchm/adobe-photoshop-source-code/ アーカイブ2014年5月7日にウェイバックマシン、Adobe Photoshopのソースコード
  7. ^ 「RADStudioアプリケーションショーケース」2021-10-29。
  8. ^ tiobe.com アーカイブ2012年3月15日にウェイバックマシン、2011年1月のためのコミュニティインデックスをプログラミング。
  9. ^ 「アンティークソフトウェア:TurboPascalv5.5」
  10. ^ コンピュータとコンピューティング。個人的な視点。 アーカイブで2017年5月10日のウェイバックマシンニクラウス・ヴィルトによって
  11. ^ cbi.umn.edu、「ジョン・ブラケットとダグ・ロスへのインタビュー」 [永久的なデッドリンク]、p15、チャールズ・バベッジ研究所、2004年
  12. ^ オーストラリア原子力委員会研究機関、ルーカスハイツ、原子力科学技術支部報告書、部門別研究(PDF)国際原子力機関(IEAE)(レポート)。1977年。p。22。
  13. ^ Jon Udell、オブジェクト指向パスカルのクラッシュ、BYTE、1989年7月。
  14. ^ M. I. Trofimov、The End of Pascal?、BYTE、1990年3月、p。36。
  15. ^ Rall、LB(1987)。「科学計算言語Pascal-SCの紹介」コンピューター14:53–69。土井10.1016 / 0898-1221(87)90181-7
  16. ^ PI(1986-08-29)。"Cadmus jetzt mit Kulisch-Arithmetik-Uni KarlsruhegibtPascal-CompilernachMünchen" [CadmusにはKulisch算術が付属しています-UniversityKarlsruheはPascalコンパイラをミュンヘンに提供しています]。Computerwoche(ドイツ語)。ミュンヘン–ドイツ、カールスルーエ:IDG Business MediaGmbHアーカイブされたオリジナルの2016年5月30日に取得した2016年5月30日を
  17. ^ 「Pascal-XSC:拡張科学計算のためのPascal」2014-01-05にオリジナルからアーカイブされまし
  18. ^ 「XSCソフトウェア」2015年11月1日にオリジナルからアーカイブされまし取得した11年8月2015
  19. ^ 「UniversitaetWuppertal:Wissenschaftliches Rechnen / Softwaretechnologie」2015年11月6日にオリジナルからアーカイブされまし取得した11年8月2015
  20. ^ バンバーガー、ローター; ダベンポート、ジェームズH。; フィッシャー、ハンス-クリストフ; コック、ヤン; シューマッハ、ギュンター; ウルリッヒ、クリスチャン; ウォリス、ピーターJL; 冬、Dik T。; Wolff von Gudenberg、Jürgen(1990)。ウォリス、ピーターJL(編)。浮動小数点プログラミングの改善(第1版)。イギリス、バース:John Wiley&Sons Ltd. ISBN  0-471-92437-7
  21. ^ Michel Gien、「The SOL Operating System」、Usenix Summer '83 Conference、トロント、ON、(1983年7月)、75〜78ページ
  22. ^ cs.berkeley.edu ウェイバックマシン2015年2月7日にアーカイブ
  23. ^ パスカルISO 7185:1990 アーカイブ2012年6月17日にウェイバックマシン6.10
  24. ^ マンデル、スティーブンL.(1987)。今日のPascalプログラミングウェストパブリッシングカンパニー。ISBN 978-0-314-33935-5
  25. ^ a b J. Welsh、WJ Sneeringer、およびCAR Hoare、「Pascalのあいまいさと不安定さ」、ソフトウェアの実践と経験7、685〜696ページ(1977)
  26. ^ Pascal、 Nell Dale、Chip Weems、「Dangling Else」、 p。160-161 アーカイブで2017年3月18日ウェイバックマシン
  27. ^ 「Pascal-S:サブセットとその実装」、N。Wirthin Pascal –言語とその実装、DW Barron、Wiley1979。
  28. ^ ISO / IEC 7185:1990パスカル(PDF)2016年1月27日にオリジナル(PDF)からアーカイブされまし取得した16年9月2014
  29. ^ ワース、ニクラウス(1973年7月)。プログラミング言語Pascal(改訂レポート)ETHチューリッヒ。土井10.3929 / ethz-a-000814158
  30. ^ 拡張パスカル:ISO / IEC 10206:19902016-03-27にオリジナルからアーカイブされまし取得した16年9月2014
  31. ^ 「言語標準:Pascal、Extended Pascal、Fortan」2014-07-14にオリジナルからアーカイブされまし取得した16年9月2014
  32. ^ 770X3.160-1989-プログラミング言語拡張パスカルのIEEE / ANSI標準1990. doi10.1109 /IEEESTD.1990.101061ISBN 978-0-7381-4247-0
  33. ^ 「拡張Pascal-無料のPascalwiki」
  34. ^ 「OS / 2用の仮想Pascal」2011年8月30日にオリジナルからアーカイブされまし取り出さ年4月3 2016
  35. ^ Wolfgang(2020年10月15日)。「WDSibyl:ビジュアル開発環境」WDSibyl.org2020-02-12にオリジナルからアーカイブされました2020420日取得
  36. ^ "netlabs.org-プロジェクト:OpenSibyl"2016年3月4日にオリジナルからアーカイブされまし取り出さ年4月3 2016
  37. ^ ブライアンW.カーニハン(1981)。「なぜPascalは私のお気に入りのプログラミング言語ではないのか」ウェイバックマシン2009年4月28日にアーカイブ
  38. ^ O. Lecarme、P。Desjardins、「プログラミング言語Pascalに関するその他のコメント」、 Acta Informatica 4、pp。231–243(1975)。
  39. ^ 「拡張パスカル」2015-10-18にオリジナルからアーカイブされまし

さらに読む

  • Niklaus Wirth:プログラミング言語Pascal35–63、Acta Informatica、第1巻、1971年。
  • CAR Hoare:「データ構造に関する注記」。O.-J. Dahl、EWDijkstraおよびCARHoare 、編集者、構造化プログラミング、83〜174ページ。アカデミックプレス、1972年。
  • CAR Hoare、Niklaus Wirth:プログラミング言語Pascalの公理的定義335–355、Acta Informatica、第2巻、1973年。
  • キャスリーン・ジェンセンとニクラウス・ヴィルト:パスカル–ユーザーマニュアルとレポートシュプリンガー・フェアラーク、1974、1985、1991、ISBN 0-387-97649-3およびISBN 3-540-97649-3  
  • Niklaus Wirth:アルゴリズム+データ構造=プログラムプレンティス・ホール、1975年、ISBN 0-13-022418-9 
  • Niklaus Wirth:プログラミング言語Pascalの評価23–30 ACM SIGPLAN Notices Volume 10、Issue 6、1975年6月。
  • N. Wirth、およびAI Wasserman編:プログラミング言語設計IEEE Computer Society Press、1980年
  • DWバロン(編):パスカル–言語とその実装John Wiley 1981、ISBN 0-471-27835-1 
  • Peter Grogono:Programming in Pascal、改訂版、Addison-Wesley、1980年
  • リチャードS.フォーサイス:仕事と遊びのパスカル、チャップマンアンドホール、1982年
  • N.ヴィルト、M. Broy、ED、およびE. Denert編:パスカルとその後継ソフトウェアのパイオニア:ソフトウェア工学への貢献。Springer-Verlag、2002、ISBN 3-540-43081-4 
  • N.ワース:パスカルの発展についての回想ACM SIGPLAN Notices、第28巻、第3号、1993年3月。