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

プログラミング言語
パスカル
パラダイム
家族ヴィルト・パスカル
デザイン:ニクラウス・ヴィルト
初登場1970年; 56年前 (1970年
タイピングの規律
範囲語彙
ファイル名拡張子.pas
主要な実装
方言
影響を受けた
影響を受けた
  • ウィキブックスの Pascal プログラミング

Pascalは、ニクラウス・ヴィルトによって設計された、命令型かつ手続き型の プログラミング言語です。構造化プログラミングデータ構造化を用いた優れたプログラミング手法を促進することを目的とした、小型で効率的な言語です。パスカルは、フランスの数学者、哲学者、物理学者であるブレーズ・パスカルにちなんで名付けられました[a]

PascalはALGOL 60言語のパターンに基づいて開発されました。ヴィルトはALGOL X開発の一環として言語の改良に携わり、 ALGOL Wというバージョンを提案しました。しかし、これは受け入れられず、ALGOL X開発は停滞しました。1968年、ヴィルトはALGOL X開発を断念し、ALGOL Wをさらに改良し、1970年にPascalとしてリリースすることを決定しました。

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

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

オブジェクト指向プログラミング向けに設計されたObject Pascalという派生言語は、1985年に開発されました。これは1980年代後半にApple Computer ( LisaおよびMacintoshマシン用)とBorlandで使用され、後にMicrosoft Windowsプラットフォーム上のDelphiへと発展しました。Pascalの概念を拡張した言語は、 Wirthによって開発されたModula-2Oberonです。

歴史

以前の取り組み

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

1962年、ヴィルトはヘルムート・ウェーバーと共に、オイラー言語に関する博士論文の執筆に着手しました。オイラー言語はALGOLの構文と多くの概念に基づいていましたが、派生的なものではありません。主な目的は、動的なリストと型を追加し、 Lispと同様の用途で使用できるようにすることでした。この言語は1965年に公開されました。

この時までに、ALGOLには多くの問題が指摘されており、特に標準化された文字列システムの欠如が顕著でした。言語の保守を担当するグループは、改善点を特定するためのALGOL Xプロセスを開始し、提案を募りました。WirthとTony Hoareは、文字列の追加と構文の一部の整理といった保守的な変更案を提出しました。これらの変更は、新しい標準ALGOLとして使用するには軽微すぎると判断されたため、WirthはALGOL Wというコンパイラを開発しました

ALGOL Xの取り組みは、より複雑な言語であるALGOL 68へと発展しました。この言語の複雑さは、高性能コンパイラの開発を著しく困難にし、業界で広く普及しませんでした。これにより、より新しい言語が登場する余地が生まれました。

パスカル

PascalはALGOL Wの取り組みの影響を受けており、構造化されたプログラミング教育とシステムソフトウェア開発という明確な目標を掲げていました。[5] Pascalは、ある世代の学生が学部課程の入門言語として利用していました。その他の目標としては、大規模プログラムを作成するための信頼性と効率性に優れたツールを提供すること、[6]当時広く普及していたFortranやCOBOLに代表される科学技術プログラミングと商用プログラミングの間の溝を、汎用言語によって埋めることなどが挙げられました。[7]

この言語の初期の成功の一つは、カリフォルニア大学サンディエゴ校(UCSD)のUCSD Pascalの導入であった。これは、異なるプラットフォームに移植可能なカスタムオペレーティングシステム上で動作するバージョンであった。重要なプラットフォームの一つはApple IIであり、そこではApple Pascalとして広く使用された。これにより、PascalはApple Lisa、そして後にMacintoshの開発に使用される主要な高級言語となった。オリジナルのMacintoshオペレーティングシステムの一部は、PascalのソースコードからMotorola 68000アセンブリ言語に手作業で翻訳された[8]

ドナルド・クヌースによる組版システムTeXはデジタル・イクイップメント・コーポレーション(DEC)のPDP-10 Pascalをベースにした、最初の文芸プログラミングシステムであるWEBで書かれました。Adobe Photoshop [9]のような成功した商用アプリケーションはMacintosh Programmer's Workshop Pascalで書かれ、 Total CommanderSkype [10]Macromedia CaptivateのようなアプリケーションはDelphi(Object Pascal)で書かれました。アポロ・コンピュータは1980年代から、自社のオペレーティングシステムのシステムプログラミング言語としてPascalを採用していました。

Pascalの派生言語は、研究プロジェクトからPCゲーム、組み込みシステムまで、あらゆる用途に利用されてきました。新しいPascalコンパイラも広く利用されています。[11]

方言

ヴィルトが言語普及を目的としたサンプルコンパイラであるPascal-Pシステムは、言語の最小サブセットとして設計された、自己コンパイル可能な言語のサブセットを使用していました。この考え方は、コンパイラのブートストラップを可能にし、それを完全なPascal言語の地位にまで拡張するというものでした。これはいくつかのコンパイラで実現されましたが、注目すべき例外の一つがPascal-P2をベースとしたUCSD Pascalでした。UCSD Pascalは、メモリが限られた新しい(当時の)マイクロプロセッサでより適切に動作するという考えに基づき、言語のサブセットとしての地位を維持しました。UCSDはまた、Pascal-P2インタプリタを「バイトマシン」に変換しました。これもまた、バイト指向のマイクロプロセッサにより適していたためです。

UCSD Pascalは、Apple Pascalを含む多くのシステムの基盤となりました。Borland PascalはUCSDのコードベースに基づいていませんでしたが、UCSDが普及していた時期に登場し、多くの機能を備えていました。これがDelphi Pascalと互換性のあるオープンソースコンパイラFPC/ Lazarusに至る一連の流れの始まりとなりました。

PascalのISO規格であるISO 7185は1983年に発行され、16ビットから32ビットまでのメインフレーム、ミニコンピュータ、IBM-PCおよびその互換機で広く実装・使用されました。20世紀末から今日に至るまで、PascalにはISO 7185標準版とDelphi/Turbo Pascal版(Borland版はほぼ互換性があります)の2つの方言があります。

Pascal の初期の歴史に関する多くの情報源は、次の Pascal ユーザー グループのニュースレターにあります。

Pascal ユーザー グループのニュースレター。

オブジェクトパスカル

Lisaの開発中、ラリー・テスラーはヴィルトとやり取りを始め、オブジェクト指向拡張機能を追加してPascalをマルチパラダイムプログラミング言語にするアイデアについて議論を始めました。これがきっかけとなり、1983年にClascalが導入されました。Lisaプログラムが衰退し、Macintoshに取って代わられると、 Object Pascalという新たなバージョンが作成されました。これは1985年にMacApp アプリケーションフレームワークの一部としてMacに導入され、1990年代初頭までAppleの主要開発言語となりました。

Object Pascal拡張機能は、1989年にリリースされたバージョン5.5のTurbo Pascalに追加されました。[12]長年にわたり、Object PascalはMicrosoft Windows向けのDelphiシステムの基盤となり、現在でもWindowsアプリケーションの開発に使用されており、他のシステムへのクロスコンパイルが可能です。Free Pascalはオープンソースでクロスプラットフォームな代替手段であり、独自のグラフィカル統合開発環境(IDE)であるLazarusを備えています。

実装

初期のコンパイラ

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

CDC Pascalコンパイラの他のメインフレームへの最初の移植は、 1972年にクイーンズ大学ベルファスト(QUB)のウェルシュとクインによって完了しました。ターゲットはインターナショナル・コンピューターズ・リミテッド(ICL)1900シリーズでした。このコンパイラは、インフォメーション・コンピューター・システムズ(ICS)のMultumミニコンピュータ用のPascalコンパイラの元となりました。Multumへの移植は、Pascalをシステムプログラミング言語として使用することを目的として、グラスゴー大学計算科学科のフィンドレー、カップルズ、カヴォラス、デイビスによって開発されました。1973年夏に完成したMultum Pascalは、最初の16ビット実装だったと考えられています。

1977年、QUBのウェルシュらによって全く新しいコンパイラが完成しました。このコンパイラは、グラスゴー大学のフィンドレーとワットによって実装されたソース言語診断機能(プロファイリング、トレース、型を考慮したフォーマットの事後ダンプを含む)を提供しました。この実装は1980年に、サウサンプトン大学とグラスゴー大学のチームによってICL 2900シリーズに移植されました。標準Pascalモデル実装もこのコンパイラをベースにしており、 1984年にはマンチェスター大学のウェルシュとヘイによって、BSI 6192/ISO 7185規格への適合性を厳密にチェックし、移植可能な抽象マシン用のコードを生成するように改良されました。

北米で最初に書かれたPascalコンパイラは、イリノイ大学のドナルド・B・ギリーズ教授の指揮下でPDP-11向けに開発され、ネイティブマシンコードを生成しました。MicrosoftはIBM PC用のPascalコンパイラを保有していました。Microsoft Pascal を参照してください。

パスカルPシステム

言語を急速に普及させるために、仮想スタックマシン用のいわゆるp コード (つまり、適度に効率的な解釈に適したコード) を生成するコンパイラと、そのコードのインタープリタである Pascal-P システムを含むコンパイラ移植キットがチューリッヒで作成されました。Pシステムコンパイラは、Pascal-P1、Pascal-P2、Pascal-P3、および Pascal-P4 と命名されました。Pascal-P1 はチューリッヒからリリースされた最初のバージョンで、Pascal-P4 は最後のバージョンでした。Pascal-P1 と名付けられたバージョンは、存在していた Pascal-P のさまざまなソースに対して、事後に付けられた造語です。コンパイラは移植性を高めるために再設計され、Pascal-P2 としてリリースされました。このコードは後に拡張されて Pascal-P3 になり、中間コードはPascal-P2 および下位互換性のない Pascal-P4 と下位互換性がありました。

Pascal-P4コンパイラ/インタプリタは、オリジナルのPascalと互換性のあるシステム(Pascal-P2も同様)で実行およびコンパイルできます。ただし、Pascal言語のサブセットのみを受け入れます。

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

Pascal-P6 は Pascal-P5 の後継であり、他の機能とともに、AMD64 を含む特定の CPU 用のコンパイラとなることを目指しています。

UCSD PascalはPascal-P2から派生したもので、ケネス・ボウルズがこれを用いてインタープリタ型のUCSD p-Systemを開発しました。これは、IBMパーソナルコンピュータの発売時に利用可能だった3つのオペレーティングシステムの1つでした。[14] UCSD Pascalはバイト値に基づく中間コードを使用していたため、最も初期のバイトコードコンパイラの1つでした。Apple Pascalは1979年にApple IIおよびApple IIIコンピュータシステム向けにリリースされました。これはUCSD Pascalの実装、あるいはUCSD Pascalをベースにしたものでした。Pascal-P1からPascal-P4はUCSD Pascalではなく、CDC 6600の60ビットワード長をベースにしていました。

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

Object Pascal と Turbo Pascal

Apple Computer は 1982 年に Lisa Workshop 用に独自の Lisa Pascal を作成し、1985 年にそのコンパイラを Apple Macintosh とMPWに移植しました。1985 年にLarry Tesler はNiklaus Wirth と相談して Object Pascal を定義し、これらの拡張機能は Lisa Pascal と Mac Pascal の両方のコンパイラに組み込まれました。

1980年代、アンダース・ヘルスバーグはNascom -2向けにBlue Label Pascalコンパイラを開発しました。IBM PC向けに再実装されたこのコンパイラは、 Compas PascalおよびPolyPascalという名前で販売されましたが、後にBorlandに買収されTurbo Pascalに改名されました。

Turbo Pascalは、積極的な価格戦略、初期のフルスクリーンIDEの一つ、そして非常に速いターンアラウンドタイム(コンパイル、リンク、実行にわずか数秒)のおかげで、絶大な人気を博しました。完全にアセンブリ言語で記述され、高度に最適化されているため、競合製品の多くよりもサイズが小さく、高速です。

1986年、アンダースはTurbo PascalをMacintoshに移植し、AppleのObject Pascal拡張機能をTurbo Pascalに組み込みました。これらの拡張機能は、バージョン5.5のTurbo PascalのPCバージョンに再び追加されました。同時に、マイクロソフトもObject Pascalコンパイラを実装しました。[16] [17] Turbo Pascal 5.5は、1980年代後半に主にIBM PCに集中し始めたPascalコミュニティに大きな影響を与えました。BASICの構造化された代替品を求める多くのPC愛好家がこの製品を使用しました。また、プロの開発者にも採用され始めました。同じ頃、 PascalプログラマがMicrosoft WindowsのCベースのアプリケーションプログラミングインターフェイス(API)を直接使用できるように、 Cからいくつかの概念が輸入されました。これらの拡張機能には、ヌル終端文字列ポインタ演算関数ポインタ、アドレス演算子、および安全でない型キャストが含まれていました。

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

その他のバリエーション

Super Pascal は、数値以外のラベル、return ステートメント、および式を型の名前として追加します。

TMT Pascalは、 32ビットMS-DOS互換プロテクトモードOS/2Win32に対応した最初のBorland互換コンパイラでした。関数と演算子のオーバーロードによって言語を拡張しています

ウィスコンシン大学マディソン校チューリッヒ大学カールスルーエ大学ヴッパータール大学は、数値計算プログラミングを目的としたPascal-SC [18] [19]およびPascal-XSC [20] [21] [22] (科学計算用拡張機能) コンパイラを開発した。Pascal-SC の開発は 1978 年に ISO 7185 Pascal レベル 0 をサポートすることから始まったが、レベル 2 のサポートは後の段階で追加された。[23] Pascal-SC は当初Z80プロセッサを対象としていたが、後に DOS ( x86 ) および68000用に書き直された。Pascal-XSC はさまざまな時期に Unix (Linux、SunOSHP-UXAIX ) および Microsoft/IBM ( EMX付き DOS 、OS/2、Windows ) オペレーティングシステムに移植されている。 Pascal-SC 言語拡張機能の一部はGNU Pascalに採用されています。

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

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

言語構成

Pascal, in its original form, is a purely procedural language and includes the traditional array of ALGOL-like control structures with reserved words such as if, then, else, while, for, and case, ranging on a single statement or a begin-end statements block. Pascal also has data structuring constructs not included in the original ALGOL 60 types, like records, variants, pointers, enumerations, and sets and procedure pointers. Such constructs were in part inherited or inspired from Simula 67, ALGOL 68, Niklaus Wirth's own ALGOL W and suggestions by C. A. R. Hoare.

Pascal programs start with the program keyword with a list of external file descriptors as parameters[26] (not required in Turbo Pascal etc.); then follows the main block bracketed by the begin and end keywords. Semicolons separate statements, and the full stop (i.e., a period) ends the whole program (or unit). Letter case is ignored in Pascal source.

Here is an example of the source code in use for a very simple "Hello, World!" program:

program HelloWorld(output);
begin
    WriteLn('Hello, World!')
    {No ";" is required after the last statement of a block -
        adding one adds a "null statement" to the program, which is ignored by the compiler.}
end.

Data types

A Type Declaration in Pascal is used to define a range of values which a variable of that type is capable of storing. It also defines a set of operations that are permissible to be performed on variables of that type. The predefined types are:

Data type Type of values which the variable is capable of storing
integer integer (whole) numbers
real floating-point numbers
Boolean the values True or False
char a single character from an ordered character set
set equivalent to an array of Boolean values
array a countable group of any of the preceding data types, of records, or of other arrays
record A collection of any of the preceding data types or of other records
string a sequence or "string" of characters is declared as a "packed array of char" with a starting index of 1. These can be assigned string constants and individual characters can be accessed as elements of the array.

The range of values allowed for the basic types (except Boolean) is implementation defined. Functions are provided for some data conversions. For conversion of real to integer, the following functions are available: round (using rounding half away from zero) and trunc (rounds towards zero).

The programmer has the freedom to define other commonly used data types (e.g. byte, string, etc.) in terms of the predefined types using Pascal's type declaration facility, for example

type
    byte        = 0..255;
    signed_byte = -128..127;
    string      = packed array[1..255] of char;

Often-used types like byte and string are already defined in many implementations.

Normally the system will use a word to store the data. For instance, the byte type may be stored in a machine integer - 32 bits perhaps - rather than an 8-bit value. Pascal does not contain language elements that allow the basic storage types to be defined more granularly. This capability was included in a number of Pascal extensions and follow-on languages, while others, like Modula-2, expanded the built-in set to cover most machine data types like 16-bit integers.

The packed keyword tells the compiler to use the most efficient method of storage for the structured data types: sets, arrays and records, rather than using one word for each element. Packing may slow access on machines that do not offer easy access to parts of a word.

Subrange types

Subranges of any ordinal data type (any simple type except real) can also be made:

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

Set types

In contrast with other programming languages from its time, Pascal supports a set type:[27]

var
    Set1 : set of 1..10;
    Set2 : set of 'a'..'z';

A set is a fundamental concept for modern mathematics, and they may be used in many algorithms. Such a feature is useful and may be faster than an equivalent construct in a language that does not support sets. For example, for many Pascal compilers:

if i in [5..10] then ...

executes faster than:

( i > 4 )かつ( i < 11 )場合...         

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

i が[ 0 .. 3 , 7 , 9 , 12 .. 15 ]の範囲内であれ...        

小さな領域上の集合を扱うこれらの例では、コンパイラが集合変数をビットベクトルとして表現することで、通常、パフォーマンスが向上します。これにより、集合演算子はビット単位のマシンコード演算として効率的に実装できます。

レコードの種類

Pascal レコード型の例:

type 
car =レコード:整数;:整数終了;       
          
          
     

バリアントレコードタイプの例:

type 
Shape = ( Circle , Square , Triangle ) ; Dimensions = record case Figure : Shape of Circle : ( Diameter : real ) ; Square : ( Width : real ) ; Triangle : ( Side : real ; Angle1 , Angle2 : 0 .. 360 ) end ;         
       
            
             
             
                
        

バリアント レコードでは、レコードの複数のフィールドを重ね合わせてスペースを節約できます。

型宣言

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

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

さらに、単純な型から複雑な型を構築することもできます。

type 
a =整数配列[ 1 .. 10 ] ; b =レコードx :整数; y : char {余分なセミコロンは厳密には不要} end ; c = aファイル;        
      
          
            
    
        

さらに、複合型は他の複合型から再帰的に構築できます。

const
ジャック= 11 ;クイーン= 12 ;キング= 13 ;エース= 14 ;     
    
     
      

type valueType = 2 ..エース; suitType =クラブダイヤモンドハートスペード;		   
                 
        

  cardType = record suit : suitType ; value : valueType ; end ;   
                    
                  
              

  deckType = cardType配列[ 1 .. 52 ] ;     

  person =レコード: charパック配列[ 1 .. 20 ] ;年齢:整数;終了;  
                   
			  
		   

  table = record hands : deckType配列[ 1 .. 3 ] ; players : person配列[ 1 .. 4 ] ; end ;   
                
			    
          

ファイルタイプ

タイプ
a =整数ファイルb =レコードx :整数y :文字終了c = bファイル        
      
          
          
    
        

上記の例に示すように、Pascalファイルはコンポーネントのシーケンスです。すべてのファイルには、 f^で表されるバッファ変数があります。get (読み取り)とput 書き込み)の手続きは、バッファ変数を次の要素に移動します。readが導入され、 read(f, x)はx := f^; get(f);と同じになります。writeが導入され、write(f, x)はf^ := x; put(f);と同じになります。型はfile of charとして事前定義されています。バッファ変数は、次に使用する文字を検査するために使用できました(整数を読み取る前に数字をチェックする)。これは初期の実装では対話型プログラムで深刻な問題を引き起こしましたが、後に「遅延I/O」コンセプトによって解決されました。このコンセプトでは、ファイルバッファ変数が実際にアクセスされるまでファイル操作を実行しません。 text

ポインタ型

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

type 
pNode = ^ Node ; Node = record a : integer ; b : char ; c : pNode end ; var NodePtr : pNode ; IntPtr : ^ integer ;      
       
          
          
            
    

      
       

ここで、変数NodePtrはレコード型Nodeへのポインタです。まだ定義されていない型へのポインタも宣言できます(上記の例では、 pNode は Node へのポインタですが、ポインタ型が定義された時点では Node はまだ定義されていません)。これは前方宣言であり、使用する前に宣言する必要があるという規則の例外です。

新しいレコードを作成し、レコード内のフィールドabに値10と文字Aを割り当て、ポインターcをヌル ポインター(Pascal では "NIL")に初期化するには、次のステートメントを使用します。

new ( NodePtr ) ; 
... 
NodePtr ^. a := 10 ; NodePtr ^. b := 'A' ; NodePtr ^. c := nil ; ...  
  
  

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

new ( NodePtr ) ; 
... 
NodePtr ^ do begin a := 10 ; b := ' A' ; c := nil end ; ...  

      
      
      


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

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

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

新しい方言では、これらの制限の一部は解除される可能性があります。

制御構造

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

a <> bの間、WriteLn ( 'Waiting' )を実行します      

if a > b then WriteLn ( '条件が満たされました' ) {else の前にはセミコロンは使用できません} else WriteLn ( '条件が満たされませんでした' ) ;        
     

for i := 1 to 10 do {次のステートメントを切り離すため、ここではセミコロンは使用しません} WriteLn ( 'Iteration: ' , i ) ;        
     


a = 10になるまでa := a + 1を繰り返します        
   

0場合i : Write ( 'ゼロ' ) ; 1 : Write ( '一' ) ; 2 : Write ( '二' ) ; 3 4 5 6 7 8 9 10 : Write ( '?' ) end ;  
      
      
      
     

手順と関数

Pascalはプログラムを手続きと関数に構造化します。一般的に、手続きは副作用のために使用され、関数は戻り値のために使用されます。

プログラム印刷出力; 

変数i :整数;   

手順PrintAnInteger ( j : integer ) ;開始...終了;   

    


関数triple ( x : integer ) : integer ;開始triple := x * 3終了;   

	    


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

プロシージャと関数は任意の深さまでネストすることができ、 'program' 構造は論理的に最も外側のブロックになります。

デフォルトでは、パラメータは値渡しされます。パラメータ名の前に「var」が付いている場合は、参照渡しされます。

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

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

Pascalは、セミコロンを文の区切りとして使用するなど、ALGOL言語の多くの言語構文機能を採用しています。これは、セミコロンを文の終止符として使用するPL/ICendなどの他の言語とは対照的です。レコード型宣言、ブロック、またはcase文のキーワードの前、untilrepeat文のキーワードの前、およびifelseのキーワードの前には、セミコロンは必要ありません。

Pascalの初期のバージョンでは、余分なセミコロンは許可されていませんでした。しかし、 1973年の改訂報告書でALGOLのような空文が追加され、その後ISO 7185:1983で言語が変更されたことで、これらの場合のほとんどでセミコロンを任意で使用できるようになりました。if文のキーワードの直前にはセミコロンは依然として許可されていません。これは、if文が文のシーケンスではなく単一の文に続くためですネストされたif文の場合、セミコロンを使用してネストされたif文をセミコロンで終了させることでぶら下がりelse問題(内側のif文にはelseがないが、外側のif文にはelseがある場合)を回避することはできません。これは、両方のif文を終了させることになります。代わりに、明示的な...ブロックを使用する必要があります。[29]elseelsebeginend

リソース

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

一般的な用途には、いくつかの Pascal コンパイラとインタープリタが利用可能です。

  • Delphiは、Embarcadero(旧Borland/CodeGear)の主力製品である高速アプリケーション開発(RAD)製品です。Pascalから派生したObject Pascal言語(Borlandでは「Delphi」と呼んでいます)を使用して、WindowsmacOSiOSAndroid向けのアプリケーションを開発できます。D8からD2005、D2006、D2007まで提供されていた.NETサポートは終了し、完全な下位互換性を持たない新しい言語(Prism、Oxygeneにブランド名変更、後述)に置き換えられました。近年では、Unicodeサポートとジェネリックが追加されました(D2009、D2010、Delphi XE)。
  • Free Pascalは、 Object Pascalで書かれたクロスプラットフォームコンパイラです(セルフホスティング型です)。既存アプリケーションのコンパイルと新規アプリケーション開発の両方に対応できる、便利で強力なコンパイラを目指しています。Free Pascal はGNU General Public License (GNU GPL) の下で配布されていますが、パッケージとランタイムライブラリは修正版GNU Lesser General Public License (GNU LGPL) の下で提供されています。Turbo Pascal 、Delphi、Mac Pascalとの互換モードに加え、演算子オーバーロードなどの拡張機能をサポートする独自の手続き型およびオブジェクト指向構文モードを備えています。多くのプラットフォームとオペレーティングシステムをサポートしています。現在のバージョンでは ISO モードもサポートされています。
  • Turbo51 は、 Turbo Pascal 7 構文を備えた、Intel 8051ファミリのマイクロコントローラ用の無料の Pascal コンパイラです 。
  • Oxygene(旧称Chrome )は、 .NETおよびMonoプラットフォーム向けのObject Pascalコンパイラです。RemObjects Softwareによって開発・販売されており、一時期はEmbarcaderoによってPrismのバックエンドコンパイラとして販売されていました。
  • KylixはDelphiの後継であり、 Linuxオペレーティングシステムをサポートし、オブジェクトライブラリが改良されていました。現在はサポートされていません。コンパイラとIDEは現在、非商用目的でご利用いただけます。
  • GNU Pascalコンパイラ (GPC) は、 GNU コンパイラコレクション(GCC)の Pascal コンパイラです。コンパイラは C 言語で記述され、ランタイムライブラリは主に Pascal で記述されています。GNU一般公衆利用許諾書 (GNU General Public License)に基づいて配布されており、多くのプラットフォームおよびオペレーティングシステムで動作します。ANSI/ISO 標準言語をサポートし、Turbo Pascal 方言も部分的にサポートしています。注目すべき欠点の一つは、Turbo Pascal と完全に互換な (短い) 文字列型が存在しないことです。Borland Delphi やその他の言語バリアントのサポートは非​​常に限られています。ただし、Mac-Pascal は一部サポートされています。
  • Virtual Pascalは、1995年にVitaly MiryanovによってBorland Pascal構文と互換性のあるネイティブOS/2コンパイラとして開発されました。その後、fPrintによってWin32サポートが追加され商用開発され、2000年にフリーウェアとなりました。現在ではWin32、OS/2、Linux向けにコンパイル可能で、Borland PascalおよびDelphiとほぼ互換性があります。開発は2005年4月4日に中止されました。
  • Pascal-P4コンパイラは、その後の多くのPascalをPascalで実装したコンパイラの基盤となりました。完全なPascalのサブセットを実装しています。
  • Pascal-P5コンパイラは、Pascal-P4 の ISO 7185 (完全 Pascal) 版です。
  • Pascal-P6 コンパイラは、Pascaline 言語仕様に従って Pascal-P5 を Pascal に適応させた拡張バージョンです。
  • Smart Mobile Studioは、PascalからHTML5 / JavaScriptへのコンパイラです。
  • Turbo Pascalは、1980年代から1990年代初頭にかけて、PC向けPascalコンパイラの主流でした。強力な拡張機能と非常に短いコンパイル時間の両方で人気を博しました。Turbo Pascalはコンパクトな記述で、コンパイル、実行、デバッグをすべてメモリ上で実行でき、ディスクにアクセスする必要はありませんでした。当時のプログラマーは低速なフロッピーディスクドライブを一般的に使用していたため、Turbo Pascalの速度面での優位性はさらに高まりました。現在、Turbo Pascalの旧バージョン(5.5まで)は、Borlandのサイトから無料でダウンロードできます。
  • IP Pascalは、 Pascalの計算機にちなんで名付けられた「Pascaline」言語を実装しています。これは、ISO 7185に準拠したオリジナルのPascalと互換性のある高度に拡張されたPascalです。名前空間制御を備えたモジュールを備えており、セマフォ、オブジェクト、実行時に割り当てられる任意の次元の動的配列、オーバーロード、オーバーライド、その他多くの拡張機能を備えた並列タスクモジュールが含まれます。IP Pascalには、Pascal言語に合わせてカスタマイズされた移植性ライブラリが組み込まれています。例えば、1970年代のオリジナルPascalの標準的なテキスト出力アプリケーションを再コンパイルしてウィンドウ内で動作させ、グラフィカルな構成要素を追加することもできます。
  • Pascal-XT は、Siemensがメインフレームオペレーティング システムBS2000およびSINIX用に作成しました
  • PocketStudioは、 Palm OSおよびMC68xxxプロセッサ用のPascalサブセットコンパイラおよびRAD(ラピッドアプリケーション開発)ツールです。Palm OS APIとのインターフェースを支援する独自の拡張機能を備えています。DelphiやLazarusに類似しており、ビジュアルフォームデザイナー、オブジェクトインスペクタ、ソースコードエディタを備えています。
  • MIDletPascal – モバイル用ソフトウェアの作成に特化して設計された、小型で高速な Java バイトコードを生成する Pascal コンパイラおよび IDE。
  • Vector Pascal は、 MMXAMD 3d NowなどのSIMD命令セット用の言語であり、すべてのIntelおよび AMD プロセッサ、およびSonyPlayStation 2 Emotion Engine をサポートしています。
  • Morfik Pascal を使用すると、完全に Object Pascal で記述されたWeb アプリケーション(サーバー側とブラウザー側の両方)の開発が可能になります。
  • WDSibyl – Win32 および OS/2 用のビジュアル開発環境および Pascal コンパイラ。
  • PP コンパイラは、ハンドヘルド コンピュータ上で直接実行される Palm OS 用のコンパイラです。
  • CDC 6000 Pascal コンパイラは、最初の (CDC 6000) Pascal コンパイラのソース コードです。
  • パスカルS [30]
  • AmigaPascal は、 Amigaシステム用の無料の Pascal コンパイラです。
  • VSI Pascal for OpenVMS(旧称HP Pascal for OpenVMS、Compaq Pascal、DEC Pascal、VAX Pascal、当初はVAX-11 Pascal [31] )は、 OpenVMSシステムで動作するPascalコンパイラです。 [32] Tru64でもサポートされていました[33] [34] VSI Pascal for OpenVMSは、ISO/IEC 7185:1990 PascalおよびISO/IEC 10206:1990 Extended Pascalの一部と互換性があり、独自の拡張機能も備えています。[32]コンパイラのフロントエンドはBLISSで実装されています[35]
  • Stony Brook Pascal+ は、DOS および OS/2 用の 16 ビット (後に 32 ビット) 最適化コンパイラであり、Turbo Pascal の直接の代替として販売されましたが、少なくとも 2 倍高速に実行されるコードを生成しました。

IDE

図書館

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

標準

ISO/IEC 7185:1990 パスカル

1983年、この言語は国際標準規格IEC/ISO 7185 [36]と、米国規格ANSI/IEEE770X3.97-1983、ISO 7185:1983を含むいくつかの各国固有の標準規格で標準化されました。これら2つの標準規格の違いは、ISO標準規格には適合配列(実行時まで配列の境界が分からない配列)に対する「レベル1」拡張が含まれていた点のみです。ANSIでは、元の言語(Wirth版)ではこの拡張は認められていませんでした。1989年、ISO 7185は改訂版(ISO 7185:1990)となり、元の文書に見られた様々な誤りや曖昧さが修正されました。

ISO 7185は、ユーザーマニュアルとレポート[JensenとWirth]で詳述されているように、Wirthの1974年の言語を明確化したものであるとされていましたが、レベル1として「適合配列パラメータ」を標準に追加したことでも注目に値します。レベル0は適合配列のないPascalです。この追加は、 CAR Hoareの要請とNiklaus Wirthの承認により行われました。きっかけは、Hoareが、もともとFORTRANで書かれていた(NAG)数値アルゴリズムライブラリのPascal版を作りたかったのですが、可変サイズの配列パラメータを許可する拡張機能なしではそれが不可能であることがわかったことでした。同様の考慮から、手続き型パラメータと関数型パラメータのパラメータ型を指定する機能がISO 7185に盛り込まれました。

例えば、ニクラウス・ヴィルト自身は、1974年の言語を「標準」と呼んでいました。これは、CDC 6000コンパイラの機種固有の機能と区別するためでした。この言語は、「Pascalユーザーズマニュアルとレポート」の第2部 であるPascalレポート[37]に文書化されています。

Pascal が誕生した大型マシン(メインフレームやミニコンピュータ)では、一般的に標準に準拠していました。IBM PCではそうではありませんでした。IBM PC では、Borland 標準の Turbo Pascal と Delphi が最も多くのユーザーを抱えています。したがって、特定の実装がオリジナルの Pascal 言語に対応しているのか、それとも Borland 方言に対応しているのかを理解することが一般的に重要です。

IBM PC版の言語は、UCSD Pascalの登場により、言語にいくつかの拡張が加えられたインタープリタ実装によって変化し始めました。UCSD Pascalは、言語にいくつかの省略や変更を加えたものです。UCSD言語の多くの機能は、Borland方言を含め、今日でも生き残っています。

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

1990年には、拡張Pascal規格がISO/IEC 10206として作成されました。[38]これは、技術的内容がIEEE/ANSI 770X3.160-1989 [40]と同一です。[39] 2019年現在、FreePascalコンパイラで拡張Pascalのサポートが計画されています。[41]

Extended Pascal の重要な特徴は、モジュール性と分割コンパイルです。Extended Pascal アプリケーションのソースコードファイルは、1 つの「プログラムファイル」と複数の「モジュールファイル」に分割できます。各モジュールファイルには、独自の型、定数、変数、およびプロシージャ/関数の定義があり、プログラマはこれらの「エンティティ定義」領域の順序を変更できます。また、モジュール固有の定義領域として、 ステートメントで囲まれた「初期化」領域to begin do ...と ステートメントで囲まれた「終了処理」領域がありto end do ...、モジュール内のエンティティの初期状態とメモリ割り当てを管理できます。import ...モジュール/プログラムの宣言領域と定義領域の間に ステートメントを挿入することで、モジュールは独自のエンティティを他のモジュール(およびプログラム)と共有できます。

その他の主な機能には、変数バインディング、類似型のコレクション (スキーマ)、包括的な文字列機能、複素数型のサポート、ステートメントotherwise内のデフォルトの分岐フローのキーワードcase、短絡ブール評価などがあります。


バリエーション

ニクラウス・ヴィルトによるチューリッヒ版Pascalは、ETH外に2つの基本的な形式で配布されました。CDC 6000コンパイラソースと、Pascal-Pシステムと呼ばれる移植キットです。Pascal-Pコンパイラは、コンパイラのブートストラップに必要のない、完全な言語機能のいくつかを省略していました。例えば、パラメータとして使用される手続きや関数、無差別バリアントレコード、パッキング、破棄、手続き間gotoなど、完全なコンパイラのその他の機能が省略されていました。

ケネス・ボウルズ教授率いるUCSD Pascalは、Pascal-P2キットをベースとしており、その結果、Pascal-P言語の制約のいくつかを共有していました。UCSD Pascalは後にApple Pascalとして採用され、そこでいくつかのバージョンが継続されました。UCSD Pascalは、標準的なPascal構造を追加することでPascal-PキットのサブセットPascalを拡張しましたが、それでもPascalの完全な標準インストールではありませんでした。

1990年代初頭、アラン・バーンズとジェフ・デイヴィスは、Pl/0(ニクラウスの著書『アルゴリズム + データ構造 = プログラム』より)の拡張であるPascal-FCを開発しました。Pascal-FCを並行プログラミングの教材として使用するためのいくつかの構成要素(セマフォ、モニター、チャネル、リモート呼び出し、リソースなど)が追加されました。並行性を実証するために、コンパイラの出力(一種のPコード)を仮想マシン上で実行できるようになりました。この仮想マシンは、通常の(公平な)環境をシミュレートするだけでなく、極端な条件(不公平モード)もシミュレートできました。

Borland風のPascalコンパイラ

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

Borland のObject PascalDelphi 、および Borland 以外の近似互換バージョンを含む、シュリンクラップされたTurbo Pascal バージョン 3 以降のバージョンは、シェアウェアの作者を含むプログラマーの間で人気を博したため、Pascal コードの SWAG ライブラリには、Delphi などのバージョンを念頭に置いて記述された大量のコードが含まれています。

このカテゴリの ソフトウェア製品 (コンパイラ、IDE/高速アプリケーション開発(RAD)) は次のとおりです。

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

受付

Pascal はコンピューティング コミュニティで、批判的なものも賞賛的なものも含め、さまざまな反応を引き起こしました。

初期の批判

ヴィルトによるこの言語の初期定義は広く批判された。特にニコ・ハーバーマンは、著書『プログラミング言語Pascalに関する批判的考察』(1973年)の中で、Pascalの構成要素の多くが、特にデータ型範囲構造体、そしてgotoについて、定義が不十分であると指摘した。[45]その後、C言語を普及させたブライアン・カーニハンは、1981年に論文「なぜPascalは私のお気に入りのプログラミング言語ではないのか」の中で、Pascalに対する批判を概説した。[46]カーニハンが指摘した最も深刻な問題は、配列のサイズと文字列の長さが型の一部であるため、可変長配列や文字列をパラメータとして受け入れる関数を記述できないことだった。そのため、例えばソートライブラリを作成することは不可能だった。カーニハンはまた、ブール式の評価順序が予測不可能であること、ライブラリのサポートが不十分であること、静的変数が不足していることなどを批判し、いくつかの小さな問題点も指摘した。また、彼は、この言語には制約や制限を「回避」(故意に、そして強制的に無視)するための単純な構造が何も提供されていないと述べた。他の情報源からのより一般的な苦情[28] [47]では、宣言のスコープが元の言語定義で明確に定義されておらず、ポインタ型を定義するために前方宣言を使用した場合、レコード宣言が相互再帰につながった場合、または識別子が列挙リストで使用されているかどうかわからない場合に深刻な結果をもたらすことがあると指摘されている。もう1つの難点は、 ALGOL 60と同様に、この言語では、パラメータとして渡される手続きや関数で、そのパラメータの期待される型を事前に定義できないことだった。

1970年代と1980年代に人気が高まった

1975年以降の20年間で、UCSD PascalとTurbo Pascalの登場により、Pascalはますます注目を集め、重要なプラットフォーム(Apple II、Apple III、Apple Lisa、Commodoreシステム、Z-80ベースのマシン、IBM PCなど)の主要なプログラミング言語となりました。[48]

当初の批判にもかかわらず、Pascalは進化を続け、カーニハンの指摘のほとんどは、ボーランドのTurbo Pascalのような商用製品開発に適した拡張版には当てはまらない。カーニハンが記事で予測したように、これらの問題を修正するための拡張のほとんどは、コンパイラ間で互換性がなかった。しかし、1990年代初頭以降、その種類のほとんどはISOとボーランド風の2つのカテゴリーに集約されているようだ。拡張Pascalは、これらの初期の批判の多くに対処している。可変長文字列、変数の初期化、分割コンパイル、短絡ブール演算子、およびotherwisecase文のdefault()節をサポートしている。[49]

Pascalの実装の違いから生じた問題のいくつかは、モード指示を持ついくつかの方言をサポートするFree Pascalの出現によって部分的に解決されました。[50]

注記

  1. ^ 1978年の Electronics誌で、ヴィルトはなぜこの言語にパスカルの名を冠したのかを次のように説明している。「実のところ、私はパスカルの哲学を完全に理解することも、彼の宗教的崇高さを評価することもできません。しかし、パスカルは、現在私たちがデジタルコンピュータと分類している装置を発明し、構築した最初の人物(おそらくその一人)でした。」[4]

参照

参考文献

  1. ^ 「Microsoftの「デリゲート」について」。2012年6月27日時点のオリジナルからアーカイブ。私たちはDelphi Object Pascalを綿密に調査し、Javaプログラミング言語およびそのAPIとの相互作用を理解するために、バインドメソッド参照の実用的なプロトタイプを構築しました。…結論として、バインドメソッド参照は不要であり、言語にとって有害で​​あるという結論に達しました。この決定は、Delphi Object Pascalにおけるバインドメソッド参照の経験を持つBorland Internationalと協議の上、行われました。
  2. ^ TechMetrix Research (1999). 「Javaの歴史」(PDF) . Javaアプリケーションサーバーレポート. オリジナル(PDF)から2010年12月29日にアーカイブ. 2009年10月16日閲覧.このプロジェクトは「green」という名前で進められ、言語はUCSD Pascalの古いモデルに基づいており、インタプリタ型コードの生成が可能であった。
  3. ^ “A Conversation with James Gosling – ACM Queue”. 2015年7月16日時点のオリジナルよりアーカイブ。 2015年8月11日閲覧
  4. ^ Wirth, Niklaus (1978-12-21). Anderson, Kemp (ed.). "Obeisance to Pascal, Invention" (PDF) . 読者のコメント. Electronics . Dan McMillan. p. 6. ISSN 0013-5070. 2024年5月20日時点のオリジナルより アーカイブ(PDF) . 2024年8月13日閲覧
  5. ^ Wirth, Niklaus (2000). 「手続き型プログラミング言語の発展:個人的な貢献と展望」.モジュラープログラミング言語. コンピュータサイエンス講義ノート. 第1897巻. pp.  1– 10. doi :10.1007/10722581_1. ISBN 978-3-540-67958-5
  6. ^ Wirth, N. (1971). 「プログラミング言語 Pascal」. Acta Informatica . 1 (1): 35– 63. doi :10.1007/BF00264291. hdl : 20.500.11850/68712 .
  7. ^ Wirth, N. (1996年1月). 「Pascal開発の回想」.プログラミング言語の歴史—II . pp.  97– 120. doi :10.1145/234286.1057812. ISBN 0-201-89502-1
  8. ^ Hertzfeld, Andy. 「Hungarian folklore.org Archived 2015-11-18 at the Wayback Machine : Macintosh Stories」。2012年3月6日閲覧。
  9. ^ https://www.computerhistory.org/atchm/adobe-photoshop-source-code/ Wayback Machineに 2014-05-07 にアーカイブ、Adobe Photoshop ソースコード
  10. ^ 「RAD Studio アプリケーションショーケース」。2021年10月29日。
  11. ^ tiobe.com Archived 2012-03-15 at the Wayback Machine、2011年1月のプログラミングコミュニティインデックス。
  12. ^ “Antique Software: Turbo Pascal v5.5”. 2010年11月24日時点のオリジナルよりアーカイブ2018年5月17日閲覧。
  13. ^ コンピュータとコンピューティング。個人的な視点。2017年5月10日、Wayback MachineにNiklaus Wirthによってアーカイブ。
  14. ^ cbi.umn.edu、「ジョン・ブラケットとダグ・ロスへのインタビュー」[永久リンク切れ]、p15、チャールズ・バベッジ研究所、2004年
  15. ^ オーストラリア原子力委員会研究所、ルーカスハイツ、原子力科学技術部門報告書、部門研究(PDF)国際原子力機関 (IEAE) (報告書)。1977年、22ページ。
  16. ^ Jon Udell、「オブジェクト指向 Pascal のクラッシュ」、BYTE、1989 年 7 月。
  17. ^ M. I. Trofimov、「パスカルの終焉?」、BYTE、1990年3月、36ページ。
  18. ^ Rall, LB (1987). 「科学計算言語Pascal-SC入門」. Computers . 14 : 53–69 . doi :10.1016/0898-1221(87)90181-7.
  19. ^ PI (1986-08-29)。 「Cadmus Jetzt mit Kulisch-Arithmetik - Uni Karlsruhe gibt Pascal-Compiler nach München」 [Cadmus に Kulisch 算術が付属 - カールスルーエ大学が Pascal コンパイラをミュンヘンに提供]。コンピューターウォッチェ(ドイツ語)。ミュンヘン – カールスルーエ、ドイツ: IDG Business Media GmbH。 2016-05-30 のオリジナルからアーカイブ2016 年 5 月 30 日に取得
  20. ^ 「Pascal-XSC: 拡張科学計算のためのPascal」。2014年1月5日時点のオリジナルよりアーカイブ。
  21. ^ “XSC Software”. 2015年11月1日時点のオリジナルよりアーカイブ2015年8月11日閲覧。
  22. ^ “ヴッパータール大学: Wissenschaftliches Rechnen / ソフトウェア技術”. 2015 年 11 月 6 日のオリジナルからアーカイブ2015 年8 月 11 日に取得
  23. ^ バンベルガー、ローター;ダベンポート、ジェームス・H.フィッシャー、ハンス・クリストフ。コック、ジャン。シューマッハ、ギュンター。ウルリッヒ、クリスチャン。ウォリス、ピーター JL。ウィンター、ディク・T。ヴォルフ・フォン・グーデンベルク、ユルゲン (1990)。ウォリス、ピーター JL (編著)。浮動小数点プログラミングの改善(第 1 版)。バース、イギリス: John Wiley & Sons Ltd. ISBN  0-471-92437-7
  24. ^ Michel Gien、「SOLオペレーティングシステム」、Usenix Summer '83カンファレンス、トロント、オンタリオ州(1983年7月)、75~78ページ
  25. ^ 「CHORUS分散オペレーティングシステムの概要」(PDF) . Chorus systems . 1991年. 2015年2月7日時点のオリジナル(PDF)からのアーカイブ– cs.berkeley.edu経由。
  26. ^ Pascal ISO 7185:1990 2012年6月17日アーカイブ、Wayback Machine 6.10
  27. ^ Mandell, Steven L. (1987). Pascal Programming Today . West Publishing Company. ISBN 978-0-314-33935-5
  28. ^ ab J. Welsh、WJ Sneeringer、CAR Hoare、「Pascalの曖昧さと不安定さ」、ソフトウェア:実践と経験7、pp. 685–696 (1977)
  29. ^ パスカル、ネル・デール、チップ・ウィームズ、「Dangling Else」、p. 160–161 2017年3月18日アーカイブ、Wayback Machine
  30. ^ 「Pascal-S: サブセットとその実装」、N. Wirth、『Pascal – 言語とその実装』、DW Barron 著、Wiley 1979 年。
  31. ^ 「VAX-11 Pascal V1.0 ユーザーズ ガイド」(PDF) .
  32. ^ ab 「VSI Pascal for OpenVMS ソフトウェア製品説明」(PDF) . VSI. 2017. 2021年4月18日時点のオリジナル(PDF)からアーカイブ。 2022年2月7日閲覧
  33. ^ “Pascalアーキテクトへのインタビュー - Compaq Pascal”. 2021年10月19日時点のオリジナルよりアーカイブ2022年5月28日閲覧。
  34. ^ 「Compaq Pascal バージョン 5.8 for Tru64 UNIX ソフトウェア製品説明」。2020年7月25日時点のオリジナルよりアーカイブ2022年5月28日閲覧。
  35. ^ 「VSIのジョン・レーガン氏インタビュー:X86/64向けGEMとLLVMの比較」eCube Systems . 2019年3月12日. 2020年8月12日時点のオリジナルよりアーカイブ。 2022年2月7日閲覧
  36. ^ ISO/IEC 7185:1990 Pascal (PDF) . 2016年1月27日時点のオリジナル(PDF)からアーカイブ2014年9月16日閲覧。
  37. ^ Wirth, Niklaus (1973年7月).プログラミング言語Pascal(改訂版) . ETH Zürich. doi :10.3929/ethz-a-000814158.
  38. ^ Extended Pascal: ISO/IEC 10206:1990. 2016年3月27日時点のオリジナルよりアーカイブ2014年9月16日閲覧。
  39. ^ “言語標準: Pascal、Extended Pascal、Fortan”. 2014年7月14日時点のオリジナルよりアーカイブ2014年9月16日閲覧。
  40. ^ IEEE/ANSI プログラミング言語拡張 Pascal 標準. 1990. doi :10.1109/IEEESTD.1990.101061. ISBN 978-0-7381-4247-0
  41. ^ 「Extended Pascal - Free Pascal wiki」. wiki.freepascal.org .
  42. ^ “Virtual Pascal for OS/2”. 2011年8月30日時点のオリジナルよりアーカイブ2016年4月3日閲覧。
  43. ^ Wolfgang (2020年10月15日). 「WDSibyl: ビジュアル開発環境」. WDSibyl.org . 2020年2月12日時点のオリジナルよりアーカイブ。 2020年4月20日閲覧
  44. ^ “netlabs.org – Project: Open Sibyl”. 2016年3月4日時点のオリジナルよりアーカイブ。 2016年4月3日閲覧
  45. ^ Habermann, AN (1973). 「プログラミング言語Pascalに関する批判的コメント」. Acta Informatica . 3 (1): 47– 57. doi :10.1007/bf00288652. ISSN  0001-5903.(技術報告書全文)
  46. ^ Brian W. Kernighan (1981). 「なぜPascalは私のお気に入りのプログラミング言語ではないのか」. 2009年4月28日アーカイブ at the Wayback Machine
  47. ^ Lecarme, O.; Desjardins, P. (1975). 「プログラミング言語Pascalに関するさらなるコメント」. Acta Informatica . 4 (3): 231– 243. doi :10.1007/BF00288728.
  48. ^ クレスポ、ディエゴ. 「パスカル:世界をほぼ制覇した言語 パート1」. www.deusinmachina.net . 2025年1月4日閲覧
  49. ^ “Extended Pascal”. 2015年10月18日時点のオリジナルよりアーカイブ2015年10月17日閲覧。
  50. ^ クレスポ、ディエゴ. 「パスカル:世界をほぼ制覇した言語 パート2」. www.deusinmachina.net . 2025年1月4日閲覧

さらに読む

  • ニクラウス・ヴィルト:プログラミング言語パスカル。35–63、Acta Informatica、第1巻、1971年。
  • CAR Hoare:「データ構造化に関するノート」O.-J. Dahl、EW Dijkstra、CAR Hoare編『構造化プログラミング』、83~174ページ。Academic Press、1972年。
  • CAR Hoare、Niklaus Wirth:「プログラミング言語 Pascal の公理的定義」、335–355 ページ、Acta Informatica、第 2 巻、1973 年。
  • Kathleen Jensen と Niklaus Wirth: Pascal – ユーザー マニュアルとレポート。 Springer-Verlag、1974、1985、1990、1991、ISBN 0-387-97649-3およびISBN 3-540-97649-3
  • ニクラウス・ヴィルト著『アルゴリズム+データ構造=プログラム』Prentice-Hall、1975年、ISBN 0-13-022418-9
  • Niklaus Wirth:プログラミング言語 Pascal の評価。23–30 ACM SIGPLAN Notices Volume 10、Issue 6、1975 年 6 月。
  • N. Wirth、A.I. Wasserman編:プログラミング言語設計、IEEE Computer Society Press、1980年
  • DW Barron編:Pascal - 言語とその実装. John Wiley 1981, ISBN 0-471-27835-1
  • Peter Grogono: 『Pascal によるプログラミング』改訂版、Addison-Wesley、1980年
  • リチャード・S・フォーサイス:『仕事と遊びにおけるパスカル』チャップマン・アンド・ホール、1982年
  • N. Wirth、M. Broy編、E. Denert編:Pascalとその後継ソフトウェア:ソフトウェア工学への貢献、 Springer-Verlag、2002年、ISBN 3-540-43081-4
  • N. Wirth: Pascal の開発についての回想。ACM SIGPLAN 通知、第 28 巻、第 3 号、1993 年 3 月。
「https://en.wikipedia.org/w/index.php?title=Pascal_(プログラミング言語)&oldid=1332473457」より取得