検索に移動この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。パスカル)は、コンピュータのプログラミング言語のひとつ。Pascalで使用される言語仕様を指す。Pascalは1980年代に登場したPascalのオブジェクト指向拡張に端を発する。Pascal(英語版)と呼ばれる処理系の実装が存在した。Pascalと呼ばれる開発環境が使われていた。Pascalにオブジェクト指向のための拡張を導入し、これをClascal(英語版)と名付けた。Pascalにつながっていくことになる。Pascalは、現在ではクラスライブラリと呼ばれる拡張可能なMacintoshアプリケーションフレームワークであるMacApp(英語版)をサポートするために必要だった。開発は1985年に始まり、1986年に製品となった。PascalはアップルやMacintoshの主要な開発言語の1つになった。Pascalのサポートは1995年11月まで続いた。Pascalと命名された[1]。Pascalにも実装された。Vision等のCUIライブラリが製品に付属するようになった。Pascalが認知されることとなった。Basicと異なり、Delphiでは当初から高速な機械語コードを実行可能なネイティブバイナリを出力する方式であったこと、またC++と比べてコンパイルが高速であったことも人気に影響した。と各プラットフォーム向けのクロスコンパイラが付属する。その後、ボーランドの開発ツール部門CodeGearは2008年にエンバカデロ・テクノロジーズに合併され、DelphiおよびDelphi言語はエンバカデロに移管された。Pascalと呼ばれるようになっているが、ドキュメント類にはDelphi言語という表記も依然として残っている。Frameworkと呼ばれるアプリケーション開発・実行環境を開発した。Pascal、VCL、およびRADとしてのDelphiに強く影響を受けている。C#の開発者アンダース・ヘルスバーグは、もともとボーランドに在籍しており、Delphiの開発者でもあった[3]。2007まで存在していた。2009からXE3まで付属した。Oxygeneの開発は現在も継続されており、言語名もOxygene言語となっている。Pascalの言語仕様をベースにして作られた。現在ではApple互換モードやDelphi互換モードも実装され、さらにはクロスプラットフォームのための独自の仕様追加や、C言語のようなマクロ等の拡張も行われている。開発もオープンソースの元で進められている。メインに実装されているが、Delphiの機能も部分的に実装している。PascalにもDev-Pascalと呼ばれる統合開発環境が存在する。Pascalは(C++系統の)オブジェクト指向言語の三大要素である、カプセル化、継承、および多態性(ポリモーフィズム)をサポートしている。Pascalにおける、従来のPascalからの主な拡張点は次のような点が挙げられる。クラス[編集]クラスの定義構文は、従来のPascalにおけるrecord(C言語の構造体に相当)の定義構文を拡張したものである。クラス型の要素として変数以外にも手続きや関数を書けるようになっている。クラスに属する変数はフィールド(C++のメンバ変数に相当)、また手続きおよび関数はメソッド(C++のメンバ関数に相当)と呼ばれ、通常の変数、手続きおよび関数と区別される。クラスの属性であるフィールドにアクセスする際に、冗長なメソッドを用いるのではなく、より簡潔に記述するための仕組みとして、プロパティと呼ばれる構文が用意されている。プロパティを用いることで、オブジェクト指向のカプセル化を維持しつつ、あたかもフィールドに直接アクセスしているかのような直感的な記述でクラスの属性を操作することが可能となる。メソッドの実装は(クラス名).(メソッド名)という形で記述する。読み書き両方が可能なプロパティ。派生クラスでオーバーライドされたメソッドが実行される(ポリモーフィズム)。始められることが多い。構文は、Systemユニットで定義されている基底クラスTObjectから暗黙的に派生することを意味する。構文において、クラスTAはTObjectそのものであるか、あるいはTObjectから派生している必要がある[4]。構文を使用することで、TObjectから派生せず、組み込みのコンストラクタやデストラクタなどのメソッドをサポートしないオブジェクト型の宣言を行なうことができるが、DelphiやAppmethodにおいては下位互換性を保つ目的でのみ残されており、オブジェクト型の使用は推奨されていない[5][6][7]。PascalはC++と異なり、実装の多重継承をサポートしない。その代わりに、インターフェイスを実装することによる型の多重継承をサポートする。始められることが多い。Pascalにおける継承の機能やメカニズムはJavaとよく似ており、のちにC#にも受け継がれることになった。Pascalが優れている点として、クラス参照型のサポートが挙げられる。クラス参照型の変数には、実体ではないクラス自体を変数に代入することができる。これは、設計図をもとに作られた製品ではなく、設計図自体を格納する変数を定義できると考えれば分かりやすい。クラス参照型は、その実際の型がコンパイル時にわからないクラスまたはオブジェクトでクラスメソッドまたは仮想コンストラクタを呼び出したい場合(例えば逆シリアライズなど)に便利である。Pascalは、エラーハンドリング機構として例外をサポートしている。例外オブジェクトは、エラーやその他のイベントによりプログラムの通常の実行が中断された場合に生成される。例外を用いることで、整数値エラーコードを用いるよりも多くの情報を呼び出し側に伝播させることができる。Pascalはそのコンパクトで明快な言語仕様ゆえに、オブジェクト指向言語の学習に適していると言われる(C++の演算子オーバーロード、テンプレートや多重継承のような便利だが比較的難解で複雑な機能を持たない)。反面、近年多くのプログラミング言語が導入しているジェネリクスやラムダ式をサポートしていなかったため、ジェネリックプログラミングや関数型プログラミングには不向きだった。Rioで型推論可能なインライン変数宣言が実装された[8]ため、柔軟な記述が可能になっている。2005以降ではインライン関数がサポートされ、実行速度面での強化も図られている。2010ではRTTIが強化され、リフレクションをサポートするようになった。DelphiのVCLやFMXは単なるクラスライブラリにとどまらず、コンポーネントと呼ばれるソフトウェア部品の集合で構成され、このコンポーネントを組み合わせて視覚的にアプリケーションを開発する方式となっている。Delphiではユーザープログラマがコンポーネントを自由に作成して開発環境自体に組み込むことができるため、「コンポーネント指向言語」と呼ばれることもある。Basic以外のRADは十分にサポートされていなかった。Pascalにおける「オブジェクト型」という用語は意味が異なるので注意されたい。2019年1月11日閲覧。