Pascal 単語

29件

パスカル

4.3千文字の記事
  • twitter
  • facebook
  • はてな
  • LINE

Pascalとは、プログラミング言語のひとつである。

17世紀の数学者、ブレーズ・パスカルにちなんで命名された。

概要

クラウス・ヴィルドによって設計され1970年開された、いわゆる手続き型言語である。

ALGOL 60の定作業から生して生まれた経緯があり、同じくALGOL下にあるC言語とは機的にやや似通っていて、70年代頃はよく較されたらしい。

教育用言として、またALGOL 68の肥大化傾向に反対して作られた面もあり、意図的に言シンプルに絞って設計されている。
そのために元の1970年の設計では本格的なプログラミングには不十分と見なされる部分もあり、ブライアンカーハン批判されたり「本物のプログラマはPascalを使わない」というエッセイがハッカーの間で流布されたりもした。

しかしながら仕様の小ささゆえに較的移植が容易かつ性能面で制限された環境でも動かせるため、80年代には8bit機を含めて多数のホームコンピューター移植され、AppleOSでは一時期公式のような扱いだったり、Adaの基礎になったりもしている。

90年代以降はC言語系の圧倒的な普及によってマイナーな存在となってしまったが、プログラミング言語歴史る際には今でも折りに触れて持ち出される存在である。

特徴

的にはデータ整数実数配列レコード)、制御構造(if文・for文・repeat文)、手続き・関数など、一般的な手続き型言語に見られるものは一通っている。
言い換えれば、C言語にある機はだいたい存在するとも言える。

ただしC言語べるとに関する制限が厳しく、異なる同士の変換には専用の関数が必要で(実数から整数への代入には必ず関数 trunc か round を使うなど)列挙もそれぞれ異なるとして扱われるため相互に代入はできない。
ポインタに関しても一時変数への参照やポインタ演算の機はなく、出来るのはNewとDisposeによる割当てと開放・同じポインタからの代入のみと、ほぼ連結リスト専用の機となっている。 [1]

しい機としては範囲集合がある。範囲整数文字、または列挙の部分範囲をとして定義できる。

type
Day = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
Workdays = Mon..Fri;
Index = 0..63;
Letter = 'A'..'Z';
IndexArray = array[Index] of integer;

Pascalが登場した時代には1バイトビット数さえもコンピューターの機種ごとにまちまちであり、ユーザー側で範囲を定してコンパイラ最適化を任せるのは移植性の上で有用だったことが、この機が存在する理由のひとつであると思われる。
当然ながら、部分範囲変数に範囲外の値が代入されると実行時エラーとなる。

集合ビットフラグを抽的に扱うためのものだが、文法的には独特なものとなっている。

type
Primary = (Red, Yellow, Blue);

Color = set of Primary; { ColorPrimaryを基底とする集合 }

var
Hue1, Hue2: Color;
Vowels, Consonants, Letters: set of Char;

ch: char;

begin
Hue1 := [Red];
Hue2 := []; { [] は集合 すべてのビットが0の状態 }

Letters := ['A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
Vowels := ['A','E','I','O','U'];
Consonants := Letters - Vowels; { Consonantsに代入される結果はLettersからVowelsの要素を除いたもの }

for ch := 'A' to 'Z' do
if ch in Consonants then Writeln(ch);

end.

集合の各要素はメモリ上の1ビットとして扱われるため[2]基底の要素数ワード長などに制限されることが多いが、標準はこの点について意図的に曖昧なためコンパイラによって実装に差があり、移植性の面ではやや問題ありと言える。

ところで上記の例でも分かるように、Pascalでは代入を『:=』で行い『=』は定数定義較演算子として使用する。
これは元となったALGOLでも同様であり、教育として数学での表記と混同することを避けたものと考えられる。
実用面では代入記号が2文字キーが少し面倒な一方、C言語系で稀によくある『==』を間違えて『=』にしてしまうミスを回避できるという利点もある。[3]

プログラミング言語としての標準Pascalは時代を感じさせるものではあるが、チェックなどの安全性が高く文法的には同時期のFORTRANC言語よりも「高級言らしい」ものとなっている。

後継と派生

Pascalは70年代から80年代にかけて一勢を築いたため、様々な商用コンパイラとそれに伴う方言が生み出された。その他にも設計者ニクラウス・ヴィルド自身による後継言や標準化委員会によって策定された拡標準などがある。

以下にいくつか代表的なものを上げる。

UCSD Pascal

カリフォルニア大学サンディエゴ校にて1978年開発され、後に商用販売された。

初期のPascalの大きな欠点だった文字列の扱いづらさをStringの導入で解消し、後にこのUCSD Pascal方式の手法はPascal文字列と呼ばれるようになった。

また、コンパイラはp-codeと呼ばれる中間コードを出し、それをp-machineと呼ばれる仮想マシンで動作させる設計であり、p-machine移植だけで多数の機種に対応できる柔軟性から多くのマイクロコンピューターに移植された。
Apple IIのUCSD Pascalは古典的なCRPGであるWizardry初版開発に使われたことでも知られる。

Ada

米国防総省肝入り、な用途は軍事向けという少々物々しい言である。総称や例外処理を始め、当時の野心的な機を次々と盛り込んだためにかなり嵩った言となり、80年代には扱いづらさから敬遠されたりもしていたらしい。

最新の2012年版ではかつての使いづらさも大分緩和されているようである。

Modula-2

1977年から1985年にかけて開発された、ニクラウス・ヴィルド自身による後継言Modula-1のことは誰も知らない
Pascalにモジュラープログラミングとコルーチンを導入し、いくつかの問題点を修正したといった体裁の言
モジュール化の手法は同じくPascal系列の言であるMesaからのを受けている。

予約がすべて大文字という決まりがあり、それ自体は細なことではあるが(Pascalと同様)冗長な予約が多いので入が少し面倒くさい。
ヴィルドの言設計はこの後再び大幅な簡素化にを切り、Modula-2の後継であるOberonシリーズは極端に小さい言仕様が特徴である。

Extended Pascal

ISO標準Pascalの拡版。発行は1991年とかなり後発で、世に出るタイミングとしては遅きに失した感もある。

内容的には妥当な拡といえるもので、Modula-2と同様のモジュール化、変数の初期化機の導入や文字列処理の強化が行われている。
少し変わった機としては、可変長配列を実現するために導入されたスキーがある。Adaのパラメータ化レコードを発展させたような構文で、配列や範囲界を可変にして宣言できる。

前述の通り開が遅すぎたこともあって扱える処理系が少なく、数少なく対応していたGNU Pascalも10年以上更新が止まったままである。

Object Pascal

Pascalのオブジェクト指向Macintosh開発に際してヴィルドと協して設計された。
初期のMacintosh開発であり、1994年PowerPCアーキテクチャに移行するまでサポートされ続けた。
AppleOSプログラミング言語という点で、後のObjective-CSwiftに近い立ち位置の言と言えるかもしれない。

オブジェクト指向に対応した仕様は下記のTurbo Pascalにも取り入れられた。

Turbo Pascal / Delphi

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も積極的に更新されている。

関連動画

関連リンク

関連項目

脚注

  1. *余談だが、最初期のPascalには開放用の手続きDisposeが存在しない。ヴィルドによるマニュアルでは削除した要素をリストに移動する方法が紹介されているが、ALGOL Wに倣ってガベージコレクション実装を考慮に入れていた可性もある。
  2. *ただし、Pascal標準の定義では集合ビット演算での実装は任意とされ強制はされていない
  3. *ちなみに環境によっては『:=』は『←』と表記されることもあった。『←』は初期のASCII文字コードにも含まれていたが、後にアンダースコア『_』に置き換えられた経緯がある。このあたりので、ISO標準のPascalは識別子にアンダースコアを使うことが出来ないという妙な制約がある。
この記事を編集する

掲示板

おすすめトレンド

ニコニ広告で宣伝された記事

記事と一緒に動画もおすすめ!
もっと見る

急上昇ワード改

最終更新:2024/04/19(金) 19:00

ほめられた記事

最終更新:2024/04/19(金) 19:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP