この記事には複数の問題があります。改善
やノートページでの議論にご協力ください。この項目では、プログラミング言語について説明しています。その他の用法については「パスカル (曖昧さ回避)」をご覧ください。
Pascalパラダイム命令型プログラミング、構造化プログラミング
登場時期1970年 (54年前) (1970)
開発者ニクラウス・ヴィルト
型付け強い静的型付け
主な処理系CDC 6000、Delphi、ICL 1900、Pascal-P、PDP-11、PDP-10、IBM System/370、HP Pascal、Free Pascal、GNU Pascal
方言Delphi、Turbo Pascal、UCSD Pascal
影響を受けた言語ALGOL、ALGOL 60、ALGOL W、Simula
影響を与えた言語Ada、Component Pascal、Go、Java[1]、Modula / -2 / -3、Oberon / -2、Object Pascal、Oxygene、Seed7
拡張子pp、p、pas
テンプレートを表示
プログラミング言語>>他のプログラミング言語
Pascal(パスカル)は、1970年に発表されたプログラミング言語。ニクラウス・ヴィルトにより構造化プログラミングとして設計・デザインされた。名称は、ブレーズ・パスカルにちなむ。
ALGOL、ALGOL Wをベースとし、簡素だがよく整った言語仕様(構文と意味)を持つ。プログラミング教育を意識しており、「判読性」を重視している反面、「最適化」を犠牲にしていると批判もされた。言語的には、自身のコンパイラを自身で書けるといった、言語処理系のブートストラップを備え、多くの#実用プログラム例を持っている。 教育を主目的としつつ、コンパイラが記述できる程度に強力な言語を目指し、当初、ヴィルト自身がPascalコンパイラをPascal自身で書いてみせ、その能力を示した(後のModula-2では、オペレーティングシステムをModula-2で書いてみせた)。@media screen{.mw-parser-output .fix-domain{border-bottom:dashed 1px}}当時 FORTRAN 以外のコンパイラは生成される機械語が冗長で最適化が難しいと言われていたが、「言語仕様と最適化は独立した問題である」ことを証明するという目的もあったらしい。[要出典] Pascalの単純さは、例えば構文がLL(1)であることなどによく現れている[注釈 1]。全ての名札、定数、型名、変数、サブルーチン[注釈 2]は使用に先立って定義しておく必要がある。ポインタを用いたリストのような型の定義や、交互にサブルーチンが呼び合うためには、例外的な構文を使わねばならない。ポインタに限っては、参照される型の定義の前に、その型を参照するような定義ができた。また、サブルーチンの定義部分だけを先に記述する方法で解決した。 その結果、パーサはLL(1)パーサであり、バックエンドはいわゆるワンパスコンパイラであった[注釈 3]。なお、他言語のコンパイラでは、2回以上走査を行うマルチパス形式のものが多かった。マルチパス形式では、最初の走査で識別子等の情報を中心に情報収集を行い、後続の走査でそれらの情報を参照しつつ実行ファイルを生成するため、コンパイル速度面では不利だが、最適化の点で有利となる。絶望的に遅いフロッピーディスクを作業ディスクとするユーザが多かった初期のパーソナルコンピュータでは、ワンパスコンパイラであることは大いに利点となった。なお、Turbo Pascalの高速性は、アセンブラで記述されていたことも一因であるが、Pascalの簡潔な仕様を活かしメモリを使える限り使ってファイルアクセスを最小限に留めることで実現された。 ALGOL由来の制御構造、サブルーチンの中に、そのサブルーチン内からのみ見えるローカルな変数、そのサブルーチン内からのみ呼び出せるサブルーチン等を定義できるといった、スコープの概念と再帰的な構文構造(ブロック構造と呼ぶ)、静的スコープによる参照の局所化機能を持つ。さらに、豊富なデータ型と、COBOL に見られた構造体を含む新しいデータ型を定義できるという特徴も持っている。レコード型とポインタを用いてリスト、木といったデータ構造を自由に構築することができる(二分木#データの二分木への格納法の例参照)。なお由来は不明だが、最後にピリオドを付けるという、微妙にALGOLの構文と違う点がある。 Pascalの注目すべきは、変数の宣言を「変数名、型名」の順序とした記法であろう。ALGOLを源流とするC言語などでは、変数などの定義でint xといったような「型名 変数名」という順序で記述される。一方、Pascalでは「var x : int」というような、「変数名 型名」の順序で記述する。この記法は数学などと類似の記法であるため、ヴィルトの完全なオリジナルだとは言いにくいが、最初に述べたALGOL WではALGOLと同様であるので、プログラミング言語への導入としてはオリジナリティが高いものと考えられる。この点について、JavaなどはC言語の構文の小改良にとどまっているが、LimboやGo言語などC言語を使い尽した設計者らによる新言語が、Pascalに似た記法としていることは特筆事項であろう。なお、ALGOL系ではAdaも変数などの型の記述を、これに類似した構文としている。ScalaやKotlinといったJava VM環境で動作する後発言語も、型を後置する記法を採用している。この表記法は型推論の普及に伴って良い方向に働いた。型名を前置する言語では、「=」の左辺において、型名があれば変数の宣言と初期化、変数名だけなら代入として区別できるが、型推論では型名が省略されてしまうため区別できなくなる。その結果、C++やDでは「auto」などの接頭辞が必要で、初学者にとってはautoのような型があるかのようにみえてしまう。型名を後置する言語ではそのような問題はない。 コンパイル時にできるだけ多くの不注意による誤りを発見できる、強く型付けされた(strongly typed)言語であり、またハードウェアを隠蔽する思想が徹底している。たとえば集合型、ポインタ型はそれぞれビットマップとアドレスを抽象化したものと考えられる。また Pascal は教育用ということもあり、最初の仕様では分割コンパイル
言語仕様
配列についても問題点が発覚した。Pascalでは静的配列のみをサポートする。これはコンパイル時にサイズが決定され、実行中はサイズを変更できない。しかし実際のプログラムは実行するまでサイズが決められないことが多く、後発の言語は実行中にサイズを変更できる動的配列をサポートしている。 著名なものに、TeX[注釈 4]、初期のMacintoshのオペレーティングシステムおよびアプリケーションなどがある。
実用プログラム例