Pascalとは、プログラミング言語のひとつである。
ニクラウス・ヴィルドによって設計され1970年に公開された、いわゆる手続き型言語である。
ALGOL 60の改定作業から派生して生まれた経緯があり、同じくALGOLの影響下にあるC言語とは機能的にやや似通っていて、70年代頃はよく比較されたらしい。
教育用言語として、またALGOL 68の肥大化傾向に反対して作られた面もあり、意図的に言語機能をシンプルに絞って設計されている。
そのために元の1970年の設計では本格的なプログラミングには不十分と見なされる部分もあり、ブライアン・カーニハンに批判されたり「本物のプログラマはPascalを使わない」というエッセイがハッカーの間で流布されたりもした。
しかしながら言語仕様の小ささゆえに比較的移植が容易かつ性能面で制限された環境でも動かせるため、80年代には8bit機を含めて多数のホームコンピューターに移植され、Apple系OSでは一時期公式言語のような扱いだったり、Adaの基礎になったりもしている。
90年代以降はC言語系の圧倒的な普及によってマイナーな存在となってしまったが、プログラミング言語の歴史を語る際には今でも折りに触れて持ち出される存在である。
機能的にはデータ型(整数型・実数型・配列・レコード)、制御構造(if文・for文・repeat文)、手続き・関数など、一般的な手続き型言語に見られるものは一通り揃っている。
言い換えれば、C言語にある機能はだいたい存在するとも言える。
ただしC言語と比べると型に関する制限が厳しく、異なる型同士の変換には専用の関数が必要で(実数型から整数型への代入には必ず関数 trunc か round を使うなど)列挙型もそれぞれ異なる型として扱われるため相互に代入はできない。
ポインタに関しても一時変数への参照やポインタ演算の機能はなく、出来るのはNewとDisposeによる割当てと開放・同じ型のポインタからの代入のみと、ほぼ連結リスト専用の機能となっている。 [1]
珍しい機能としては範囲型と集合型がある。範囲型は整数型、文字型、または列挙型の部分範囲を型として定義できる。
Pascalが登場した時代には1バイトのビット数さえもコンピューターの機種ごとにまちまちであり、ユーザー側で範囲を指定してコンパイラに最適化を任せるのは移植性の上で有用だったことが、この機能が存在する理由のひとつであると思われる。
当然ながら、部分範囲型の変数に範囲外の値が代入されると実行時エラーとなる。
集合型はビットフラグを抽象的に扱うためのものだが、文法的には独特なものとなっている。
集合型の各要素はメモリ上の1ビットとして扱われるため[2]基底型の要素数はワード長などに制限されることが多いが、標準はこの点について意図的に曖昧なためコンパイラによって実装に差があり、移植性の面ではやや問題ありと言える。
ところで上記の例でも分かるように、Pascalでは代入を『:=』で行い『=』は定数や型の定義、比較演算子として使用する。
これは元となったALGOLでも同様であり、教育言語として数学での表記と混同することを避けたものと考えられる。
実用面では代入記号が2文字でキー入力が少し面倒な一方、C言語系で稀によくある『==』を間違えて『=』にしてしまうミスを回避できるという利点もある。[3]
プログラミング言語としての標準Pascalは時代を感じさせるものではあるが、型チェックなどの安全性が高く文法的には同時期のFORTRANやC言語よりも「高級言語らしい」ものとなっている。
Pascalは70年代から80年代にかけて一勢力を築いたため、様々な商用コンパイラとそれに伴う方言が生み出された。その他にも設計者ニクラウス・ヴィルド自身による後継言語や標準化委員会によって策定された拡張標準などがある。
以下にいくつか代表的なものを上げる。
カリフォルニア大学サンディエゴ校にて1978年に開発され、後に商用販売された。
初期のPascalの大きな欠点だった文字列の扱いづらさをString型の導入で解消し、後にこのUCSD Pascal方式の手法はPascal文字列と呼ばれるようになった。
また、コンパイラはp-codeと呼ばれる中間コードを出力し、それをp-machineと呼ばれる仮想マシンで動作させる設計であり、p-machineの移植だけで多数の機種に対応できる柔軟性から多くのマイクロコンピューターに移植された。
Apple IIのUCSD Pascalは古典的なCRPGであるWizardryの初版の開発に使われたことでも知られる。
米国国防総省肝入り、主な用途は軍事向けという少々物々しい言語である。総称型や例外処理を始め、当時の野心的な機能を次々と盛り込んだためにかなり嵩張った言語となり、80年代には扱いづらさから敬遠されたりもしていたらしい。
最新の2012年版ではかつての使いづらさも大分緩和されているようである。
1977年から1985年にかけて開発された、ニクラウス・ヴィルド自身による後継言語。Modula-1のことは誰も知らない。
Pascalにモジュラープログラミングとコルーチンを導入し、いくつかの問題点を修正したといった体裁の言語。
モジュール化の手法は同じくPascal系列の言語であるMesaからの影響を受けている。
予約語がすべて大文字という決まりがあり、それ自体は些細なことではあるが(Pascalと同様)冗長な予約語が多いので入力が少し面倒くさい。
ヴィルドの言語設計はこの後再び大幅な簡素化に舵を切り、Modula-2の後継であるOberonシリーズは極端に小さい言語仕様が特徴である。
ISO標準Pascalの拡張版。発行は1991年とかなり後発で、世に出るタイミングとしては遅きに失した感もある。
内容的には妥当な拡張といえるもので、Modula-2と同様のモジュール化、変数の初期化機能の導入や文字列処理の強化が行われている。
少し変わった機能としては、可変長配列を実現するために導入されたスキーマ型がある。Adaのパラメータ化レコードを発展させたような構文で、配列や範囲型の境界を可変にして宣言できる。
前述の通り公開が遅すぎたこともあって扱える処理系が少なく、数少なく対応していたGNU Pascalも10年以上更新が止まったままである。
Pascalのオブジェクト指向拡張。Macintoshの開発に際してヴィルドと協力して設計された。
初期のMacintoshの主要開発言語であり、1994年にPowerPCアーキテクチャに移行するまでサポートされ続けた。
AppleのOS用プログラミング言語という点で、後のObjective-CやSwiftに近い立ち位置の言語と言えるかもしれない。
オブジェクト指向に対応した仕様は下記のTurbo Pascalにも取り入れられた。
Tubo Pascalはかつてボーランド社がMS-DOS/Windows向けに販売していた商用コンパイラである。1983年にCP/MおよびDOS向けに販売を開始。当時の競合するPascalコンパイラよりも早く安く軽量な点が特徴で、さらにバージョンアップを重ねる度無節操に積極的に機能を拡張し、Pascalの適応範囲を大幅に広げた。
時代がWindows 95に移ると、ブランドをTurbo PascalからBorland Delphiに変え、比較的容易にGUIアプリケーションを作成できるRADツールとしての側面を強調するようになった。
その後2008年代にボーランド社がエンバカデロ社に買収されるなどしたが、現在も更新が続けられているほぼ唯一の商用Pascalコンパイラである。
Delphiの関連コンパイラとして、フリーソフトウェアとして同様の機能を実装するFree Pascal/Lazarusも積極的に更新されている。
掲示板
急上昇ワード改
最終更新:2024/12/28(土) 19:00
最終更新:2024/12/28(土) 19:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。