コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
Wikippe
検索
検索
表示
ログイン
個人用ツール
ログイン
Pascalのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
Pascal
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
要求した操作を行うことは許可されていません。
このページのソースの閲覧やコピーができます。
{{Otheruses|プログラミング言語|その他の用法|パスカル (曖昧さ回避)}} {{プログラミング言語}} {{lang|fr|'''Pascal'''}}(パスカル)は、[[構造化プログラミング|構造化]]された初期の代表的な[[プログラミング言語]]。 {{lang|fr|Pascal}} は、[[1970年]]に[[スイス]]の[[チューリッヒ工科大学]]の[[ニクラウス・ヴィルト]]が教育用プログラミング言語として開発し、{{lang|en|[[ALGOL]]}} の影響を受けた簡素で厳密な構造化言語仕様を持つ。教育目的で広まり、実用的にも初期の {{lang|el-Latn|[[TeX]]}} や {{lang|en|[[Macintosh]]}} の [[オペレーティングシステム]]、[[アプリケーションソフトウェア|アプリケーション]]の記述も {{lang|fr|Pascal}} である。 ヴィルトは {{lang|el-Latn|TeX}} で、文書とプログラムを生成する方法を例示している。現在でも[[パーソナルコンピュータ]]上の[[処理系]]が多数あり、多くの他のプログラミング言語、および[[ハードウェア記述言語]]の源泉になっている。名前は、世界で最初の[[歯車式計算機|機械式計算機]]を発明した[[ブレーズ・パスカル]]の名前に因んだものである。 == 言語仕様 == 教育を主目的としつつ、コンパイラが記述できる程度に強力な言語を目指し、当初、ヴィルト自身が {{lang|fr|Pascal}} [[コンパイラ]]を {{lang|fr|Pascal}} 自身で書いてみせ、その能力を示した(後の {{lang|en|Modula-2}} では、オペレーティングシステムを {{lang|en|Modula-2}} で書いてみせた)。当時 {{lang|en|[[FORTRAN]]}} 以外のコンパイラは生成される[[機械語]]が冗長で[[最適化 (情報工学)|最適化]]が難しいと言われていたが、「言語仕様と最適化は独立した問題である」ことを証明するという目的もあったらしい。 {{lang|fr|Pascal}} の単純さは[[LL法|LL(1) 文法]]で解析できるという言語的な特徴によく現れている。全ての名札、定数、型名、変数、[[サブルーチン]]<ref>{{lang|fr|Pascal}}においては[[手続き]](<code>procedure<code>)または[[関数 (プログラミング)|関数]](<code>function</code>)と呼び、値を返し[[式 (プログラミング)|式]]の中で用いうるものを特に関数と読んで区別する。</ref>は使用に先立って定義しておく必要がある。[[ポインタ (プログラミング)|ポインタ]]型を用いたリストを構築するための例外、交互にサブルーチンが呼び合うための例外的書法を導入した。ポインタ型に限っては、基になる型の定義の前に、その型の変数を参照するポインタ型を定義することができた。また、サブルーチンの定義部分だけを先に記述する方法で解決した。 その結果一文字先読再帰下降型パーザを用いたワンパスコンパイル、すなわち<!--中間形式を生成せずに一度のコンパイルのみ-->ソーステキストを一回走査するだけで実行ファイルを生成することが可能だった。なお、他言語のコンパイラでは、2回以上走査を行い、最初の走査で識別子等の情報を中心に情報収集を行い、後続の走査で、それらの情報を参照しつつ実行ファイルを生成するマルチパス形式のものが多かった。また、<!--最初のコンパイルで中間形式を生成してからもう一度コンパイルするのが一般的である。-->[[C言語]] などの文法は LL(1) 文法では説明できず、マルチパスを行う必要があった。後述の {{lang|en|Turbo}} {{lang|fr|Pascal}} の高速性は[[アセンブラ]]で記述されていたことも一因であるが、ワンパスによるコンパイルが可能な {{lang|fr|Pascal}} 言語の仕様を活かし、かつ、作業領域を全てメモリ上に確保して、ファイルアクセスを最小限に留める特徴がある。 {{lang|en|ALGOL}} 由来の構造化構文、サブルーチンの中に、そのサブルーチン内からのみ見えるローカルな変数、そのサブルーチン内からのみ呼び出せるサブルーチン等を定義できるといった、スコープの概念と[[再帰的]]な構文構造([[ブロック (プログラミング)|ブロック構造]]と呼ぶ)、[[静的スコープ]]による参照の局所化機能を持つ。さらに、豊富な[[データ型]]と、{{lang|en|[[COBOL]]}} に見られた[[構造体]]を含む新しいデータ型を定義できるという特徴も持っている。レコード型とポインタを用いて[[線形リスト|リスト]]、[[木 (数学)|木]]といったデータ構造を自由に構築することができる([[二分木#データの二分木への格納法]]の例参照)。それまで[[データ構造]]といえば[[配列]]くらいしか知らないアマチュア[[プログラマ]]にとっては、かなり衝撃的な言語だったろうことは想像に難くない。 コンパイル時にできるだけ多くの不注意な誤りを発見するため強力に型付けた言語であり、またハードウェアを隠蔽する思想が徹底している。たとえば[[集合 (プログラミング)|集合]]型、ポインタ型はそれぞれ[[ビットマップ]]と[[メモリアドレス|アドレス]]を抽象化したものと考えられる。また {{lang|fr|Pascal}} は教育用ということもあり、最初の仕様では[[分割コンパイル]]や外部[[ライブラリ]]の利用が考慮されていなかった。これは大規模なプログラムを記述したり、ハードウェアを直接操作するプログラムを記述するには不便な仕様であり、入出力の扱いなど処理系に依存しなければならない部分を言語の中に抱える結果に繋がった。たとえばファイル型変数に特定のファイルを関連付ける標準的な方法はない。ヴィルト自身は {{lang|en|Modula-2}} の設計でこれらの要請に応える一方で、{{lang|fr|Pascal}} 処理系のベンダがそれぞれ独自の拡張を施して、分割コンパイルやハードウェアの直接操作を可能としたが、この部分の互換性は乏しい。 ==初期の {{lang|fr|Pascal}}== 初期の {{lang|fr|Pascal}}、またその派生 {{lang|fr|Pascal}} は、{{lang|fr|Pascal}} から[[Pコードマシン|P コード]]へのコンパイラと、Pコードインタプリタからなる、中間言語コンパイラだった。このことにより、後の {{lang|en|Java}} が異なるアーキテクチャの計算機への移植が進んだのと同様、多くの計算機への移植が進んだ。中間言語コンパイラを移植するためには、仮想スタックマシンであるPコードマシンのエミュレータを移植元の機械で開発し、コンパイラを移植先の機械でコンパイルするだけで良い。1970~80年代の低速な計算機では、このような中間言語方式では性能が不十分だった。 なお、[[Pコードマシン]]は負値の表現に「[[補数|1の補数]]」を用いており、これは {{lang|en|Object}} {{lang|fr|Pascal}} などにも引き継がれている。 ==パソコン用の {{lang|fr|Pascal}}== 初期のパソコン上のシステムでは、{{lang|en|[[Apple II]]}} や [[Z80]] システムで動作する [[UCSD Pascal|{{lang|en|UCSD}} {{lang|fr|Pascal}}]](後に対応言語を増やして {{lang|en|[[UCSD p-System]]}} に発展)も存在したが、普及に最も貢献したのは[[ボーランド]]の [[Turbo Pascal|{{lang|en|Turbo}} {{lang|fr|Pascal}}]] である。 {{lang|en|Turbo}} {{lang|fr|Pascal}} が登場するまでには [[デジタルリサーチ]]社 の {{lang|fr|Pascal}}/{{lang|en|MT+}} やJRTシステムズ社の JRT {{lang|fr|pascal}}(日本では[[ライフボート]]が α{{lang|fr|Pascal}} として販売した)などが販売されていた。 ==={{lang|en|Turbo}} {{lang|fr|Pascal}} とその後継 === Z80 ベースの [[CP/M]] で動作する大変高速な1パスコンパイラ兼開発環境で([[Intel 8080|i8080]]/[[Intel 8085|8085]] ベースマシン、[[NEC Vシリーズ#V30|V30]]の8080エミュレーションモードでは動作しなかった)、従来の「コンパイラはコンパイル時間が長い」という常識を打ち破るに十分だった。さらに当時としては高機能な[[フルスクリーンエディタ]]({{lang|en|Turbo}} {{lang|fr|Pascal}} で記述していた)を備えていながら低価格であったため、{{要出典範囲|日本では「フルスクリーンエディタを買うと、おまけに高速な {{lang|fr|Pascal}} コンパイラが付いてくる」とまで言われたほどである。|date=2013年7月}}8ビットの CP/M 版以外に16ビット版として[[CP/M-86]] 版と {{lang|en|[[MS-DOS]]}} 版も開発された。 版を重ねるにつれて[[ユニット (プログラミング)|ユニット]](モジュール化)や[[オブジェクト指向]]の概念を取り入れていった。したがって、厳密に言えば {{lang|en|Turbo}} {{lang|fr|Pascal}} と {{lang|fr|Pascal}} とは別の言語である。 ボーランドにいた技術者が {{lang|en|TopSpeed}} {{lang|en|Modula-2}} という言語を作成したが、トップ・スピード社は買収により {{lang|en|Modula-2}} の開発を停止している。 ボーランドはその後 {{lang|en|Object}} {{lang|fr|Pascal}} という、オブジェクト指向を取り入れた {{lang|fr|Pascal}} を開発し、自社製品の {{lang|el-Latn|[[Delphi]]}}(デルファイ)に採用した。さらに {{lang|el-Latn|Delphi}} のバージョン7 より、言語名も {{lang|en|Object}} {{lang|fr|Pascal}} から {{lang|el-Latn|Delphi}} と変更している。 また、マイクロソフトは {{要出典範囲|{{lang|en|Object}} {{lang|fr|Pascal}} のブロック表記などをC言語風に置き換えた {{lang|en|[[C Sharp|C#]]}} を開発|date=2012年9月}}し、同社の主力開発言語として、その普及を推進している。 {{lang|en|Turbo}} {{lang|fr|Pascal}} と {{lang|el-Latn|Delphi}} の成功によって、互換性を謳った言語処理系が {{lang|en|[[OS/2]]}} や {{lang|en|[[UNIX]]}} 上でも開発されている。商用のものとしては {{lang|en|Speed}} {{lang|fr|Pascal}}、{{lang|en|Virtual}} {{lang|fr|Pascal}} があり、フリーソフトとしては [[Free Pascal|{{lang|en|Free}} {{lang|fr|Pascal}}]](元 FPK {{lang|fr|Pascal}})が広い範囲のプラットフォームで動作する。ISO 標準 {{lang|fr|Pascal}} を意識したものでは、[[GNU Pascal|{{lang|en|GNU}} {{lang|fr|Pascal}}]] がある。また、{{lang|en|Linux}} 向けのものに {{lang|en|[[Kylix]]}} がある。 ==={{lang|en|Macintosh}} と {{lang|fr|Pascal}}=== 当初、{{lang|en|Macintosh}} にはセルフ開発環境はなく、システムの開発およびアプリケーションのクロス開発用プラットフォームとして、もっぱら [[Lisa (コンピュータ)|{{lang|en|Lisa}}]] を使用した。{{lang|en|Lisa}} の公式開発言語は {{lang|fr|Pascal}} だったため {{lang|en|Macintosh Toolbox}} と呼ぶ API においても、その[[呼出規約#Pascal|呼び出し手法]]が {{lang|fr|Pascal}} に準拠していたのはこうした理由による。 なお、この {{lang|en|Macintosh}} の開発言語は原初の {{lang|fr|Pascal}} ではなく、ヴィルト自身が拡張した [[Object Pascal|{{lang|en|Object}} {{lang|fr|Pascal}}]] である。<code>record</code> を <code>class</code> に拡張し、GUI 環境構築の記述に実用性を持たせたものである。 =={{lang|fr|Pascal}} の後継言語 == ニクラス・ヴィルト自身が {{lang|fr|Pascal}} を拡張した言語として {{lang|en|Modula}} 系の言語があり、{{lang|fr|Pascal}} 系の言語に含まれている。{{lang|fr|Pascal}} の上位互換になっていないため、ヴィルトは新しい言語の名前に {{lang|fr|Pascal}} を含めなかった。 *{{lang|en|[[Modula]]}} - モジュール概念を取り入れ {{lang|fr|Pascal}} の後継を目指したが、途中でヴィルトが {{lang|en|Modula-2}} の方へ移ったため実質未完成。途上版のコンパイラだけがリリースされたらしい。 *{{lang|en|[[Modula-2]]}} - モジュールの概念を追加し分割コンパイルなどを可能にした。ヴィルトは、{{lang|en|Modula-2}} だけでオペレーティングシステムを含むシステムを作って見せた。 *{{lang|en|[[Modula-3]]}} - [[オブジェクト指向言語]]へ拡張。 *{{lang|en|[[Oberon]]}} - {{lang|en|Modula-2}} の後継。 *[[Concurrent Pascal|{{lang|en|Concurrent}} {{lang|fr|Pascal}}]] *[[Component Pascal|{{lang|en|Component}} {{lang|fr|Pascal}}]] *{{lang|en|[[Ada]]}} - [[アメリカ国防総省]]で開発された汎用言語 *[[VHDL]] - {{lang|en|Ada}}風の[[ハードウェア記述言語]] *{{lang|en|[[Verilog-HDL]]}} - C言語風の前処理可能な {{lang|fr|Pascal}} 風の記述のハードウェア記述言語 *{{lang|en|[[System Verilog]]}} - {{lang|en|Verilog-HDL}} の拡張仕様 *{{lang|el-Latn|[[Delphi]]}} - {{lang|fr|Pascal}} を拡張して作られた[[オブジェクト指向言語]] *{{lang|fr|[[Eiffel]]}} - 構文が {{lang|fr|Pascal}} に似ている[[オブジェクト指向言語]] =={{lang|fr|Pascal}} に対する批判 と反批判 == {{lang|fr|Pascal}} は本来教育用を意図されていたこともあり簡素な文法が特徴だが、反面プロフェッショナルの用途には耐えないという批判がある。代表的なものは、C言語の開発者の一人[[ブライアン・カーニハン|カーニハン]]による1981年の論文 「[http://www.lysator.liu.se/c/bwk-on-pascal.html {{lang|en|Why}} {{lang|fr|Pascal}} {{lang|en|is Not My Favorite Programming Language}}]」である。 実際にC言語の普及に伴い {{lang|fr|Pascal}} の用途は減少し、のちに {{lang|el-Latn|Delphi}} による再ブームが起こるまで少数派の存在になっていた。カーニハンの批判そのものとこの減少に直接的な因果関係があるわけではないが、C言語の移植性が高く、多くの CPU 製造者が最初に作成するコンパイラとしてC言語を選択するようになった。しかし、{{lang|en|Safer-C}}、 {{lang|en|MISRA-C}} のようにC言語そのものの部分集合を既定していくと {{lang|fr|Pascal}} の仕様に近付いているという反批判もでてきている。 ==脚注== <references /> ==関連項目== *[[本物のプログラマはPascalを使わない|本物のプログラマは{{lang|fr|Pascal}}を使わない]] ==文献== *『{{lang|fr|PASCAL}} 原書第4版』ISBN 4-563-01466-4 ==外部リンク== *[http://www.freepascal.org/ {{lang|en|Free}}{{lang|fr|Pascal}}] - {{lang|fr|Pascal}} と {{lang|en|Object}} {{lang|fr|Pascal}} のフリーなコンパイラ *[http://www.gnu-pascal.de/gpc/h-index.html {{lang|en|GNU}} {{lang|fr|Pascal}}] - [[GNUコンパイラコレクション|GCC]]のコンパイラ [[Category:Pascal|*]] [[Category:プログラミング言語|PASCAL]] [[Category:JIS|X3008]] [[Category:ブレーズ・パスカル]]
このページで使用されているテンプレート:
テンプレート:Lang
(
ソースを閲覧
)
テンプレート:Otheruses
(
ソースを閲覧
)
テンプレート:プログラミング言語
(
ソースを閲覧
)
テンプレート:要出典範囲
(
ソースを閲覧
)
Pascal
に戻る。
検索
検索
Pascalのソースを表示
話題を追加