用語集 (標準 Pascal 範囲内での Delphi 入門)

# 用語集

記事中の用語はコンピュータ用語として一般的に使われているものを優先しています。

## ■ Pascal
以下は Pascal に関連する用語とその説明です。混乱しないように (ほぼ) 時系列に並んでいます。

**・Pascal** [[PDF]](https://www.research-collection.ethz.ch/handle/20.500.11850/68712)
[ニクラウス・ヴィルト (Niklaus Wirth)](https://ja.wikipedia.org/wiki/%E3%83%8B%E3%82%AF%E3%83%A9%E3%82%A6%E3%82%B9%E3%83%BB%E3%83%B4%E3%82%A3%E3%83%AB%E3%83%88)によって 1970 年に書かれたプログラミング言語の事 [^1]。1973 年に改訂報告書 (Revised Report) が出ている。

**・クラシック Pascal (Classic Pascal)**
規格化される前の初期の Pascal の事。日本語で読める書籍だと [PASCAL (原書第 2 版) (ISBN: 456300782X)](http://book.tsuhankensaku.com/hon/isbn/9784563007829/) が詳しい。標準 Pascal が規格化されるまでは、1973 年の改訂報告書が "Pascal の標準" と呼ばれる事もあった。 

**・オリジナル Pascal (Original Pascal)**
クラシック Pascal と同義。狭義の意味では 1970 年の CDC 6000 で動作した Pascal。

**・Pascal 6000**
[CDC 6000 シリーズ](https://en.wikipedia.org/wiki/CDC_6000_series)で実際に動作していた Pascal 処理系。クラシック Pascal (オリジナル Pascal) に若干の拡張が施されている。

**・Pascal-P** [[PDF]](https://www.research-collection.ethz.ch/handle/20.500.11850/68666)
Pascal 言語のサブセット ([P-CODE](https://ja.wikipedia.org/wiki/P%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9E%E3%82%B7%E3%83%B3) コンパイラ)。最初の PASCAL-P は 1973 年頃に[チューリッヒ工科大学](https://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%83%E3%83%92%E5%B7%A5%E7%A7%91%E5%A4%A7%E5%AD%A6)で作られた。P1, P2, P3, P4 がある。

**・J&W** [[書籍検索]](http://book.tsuhankensaku.com/hon/isbn/9784563014667/)
キャスリン・イェンゼン (Kathleen Jensen) とニクラウス・ヴィルトによって書かれた PASCAL 言語についての書籍 「Pascal User Manual and Report」 の事。4 つの版があり、初版は翻訳されていない。初版 (1974) と 2 版 (1978) はクラシック Pascal 準拠となっており、3 版 (1984) と 4 版 (1991) は標準 Pascal 準拠となっている。日本語訳は「PASCAL (情報処理シリーズ 2)」。

**・Concurrent Pascal** [[PDF]](http://brinch-hansen.net/papers/1975a.pdf)
1974 年に アルフレッド・C・ハートマン (Alfred C. Hartmann) によって[並行処理](https://ja.wikipedia.org/wiki/%E4%B8%A6%E8%A1%8C%E8%A8%88%E7%AE%97)を行えるように拡張された Pascal。マルチスレッドプログラミングにおける[モニター](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%8B%E3%82%BF_(%E5%90%8C%E6%9C%9F))の概念を最初に実装したのはこの Concurrent Pascal。

**・Sequential Pascal** 
Concurrent Pascal の対義語。並行処理ができない従来の Pascal を指す。

**・Pascal-S** [[PDF]](https://www.research-collection.ethz.ch/handle/20.500.11850/68667)
1975 年に[ニクラウス・ヴィルト](https://ja.wikipedia.org/wiki/%E3%83%8B%E3%82%AF%E3%83%A9%E3%82%A6%E3%82%B9%E3%83%BB%E3%83%B4%E3%82%A3%E3%83%AB%E3%83%88)によって書かれた Pascal 言語のサブセット (インタプリタ)。 

**・Berkeley Pascal** [[概要]](https://www.oreilly.co.jp/BOOK/osp/OpenSource_Web_Version/chapter03/chapter03.html)
1977 年頃にカリフォルニア大学バークレー校で開発された Pascal。Pascal-P 同様に中間コードを使う pi (コンパイラ) / px (インタプリタ) と、ネイティブコンパイラである pc 等がある。バークレー校が Pascal 等のソフトウェアを配布するためにまとめたのが [BSD](https://ja.wikipedia.org/wiki/BSD) の始まり。Sun Pascal は Berkeley Pascal からの派生。

**・UCSD Pascal** [[PDF]](http://pascal.hansotten.com/uploads/ucsd/docs/ucsdpascalvii.pdf)
1978 年にカリフォルニア大学サンディエゴ校で開発された、Pascal-P2 から派生した Pascal ([P-CODE](https://ja.wikipedia.org/wiki/P%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9E%E3%82%B7%E3%83%B3) コンパイラ)。Ver III は [Western Digital](https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%BB%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB) 社のためのカスタムバージョンで、同社の [Pascal MicroEngine](https://en.wikipedia.org/wiki/Pascal_MicroEngine) は直接 P-CODE を解釈できるプロセッサだった。unit の概念や String 型は UCSD Pascal から。

**・UCSD p-System / UCSD Pascal System**
[UCSD p-System](https://ja.wikipedia.org/wiki/UCSD_p-System) は OS で、P-CODE を解釈する。

**・Modula-2** [[PDF]](https://www.research-collection.ethz.ch/handle/20.500.11850/68683)
Pascal の後継言語 (1979 年)。ソースコードのモジュール化が可能。モジュールは UCSD Pascal の unit とは異なり、ソース分割や分割コンパイルだけを目的としたものではない。モジュール化を行う事でオブジェクト指向言語のカプセル化に類似した機能を実現できる。1998 年の ISO 規格 (ISO 10514-3:1998) でオブジェクト指向拡張が施されている。

**・Pascal/MT+**
1980 年に MT MicroSYSTEMS 社によって開発された。MT MicroSYSTEMS 社は、翌 1981 年に Digital Research 社に買収されているため、一般的には DR 社の Pascal として認識されている。こちらも String 型やモジュール化をサポートしている。

**・標準 Pascal (Standard Pascal)** [[PDF]](http://pascal-central.com/docs/iso7185.pdf)
ISO/IEC 7185 準拠の Pascal の事。要は規格化された Pascal の事。整合配列パラメータをサポートする 水準 1 (Level 1) と、サポートしない 水準 0 (Level 0) がある。日本語で読める書籍だと [PASCAL 原書第 4 版 (ISBN: 4563014664)](http://book.tsuhankensaku.com/hon/isbn/9784563014667/) が詳しい。JIS の同等規格は [JIS X 3008](https://www.google.com/search?q=%22JIS+X+3008%22&oq=%22JIS+X+3008%22)。英 The British Standards Institution (BSI) は BS 6192-1982、仏 Association francaise de normalisation (AFNOR) は NF Z65-300 が同等の規格。

**・ISO Pascal**
標準 Pascal の事。

**・ANSI Pascal**
米 American National Standards Institute (ANSI) の ANSI/IEEE 770X3.97-1983 準拠の Pascal の事。標準 Pascal 水準 0 (Standard Pascal Level 0) とほぼ同じ。Turbo Pascal や MPW Pascal のマニュアルには、この ANSI Pascal との比較表が載っている。米 NIST の Federal Information Processing Standards Publication 109 (FIPS PUB 109) も同じ規格。

**・Apple \]\['s Pascal**
UCSD Pascal / p-system のライセンスを取得し、Apple が作った Pascal ([P-CODE](https://ja.wikipedia.org/wiki/P%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9E%E3%82%B7%E3%83%B3) コンパイラ)。UCSD Pascal ver II ベース。識別子を 8 文字までしか認識しないという制限がある。

**・Apple ///'s Pascal**
Apple が作った Pascal ([P-CODE](https://ja.wikipedia.org/wiki/P%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9E%E3%82%B7%E3%83%B3) コンパイラ)。

**・Apple Pascal Operating System**
OS。Apple による p-System。

**・Apple Lisa's Pascal**
Silicon Valley Software 社の 68000 用コンパイラをライセンス取得したもの。ネイティブコードコンパイラで、ベースは Pascal-P4 コンパイラ。ここに Apple が Apple II / III Pascal の拡張を導入している。LongInt や @ 演算子は Apple Lisa Pascal 由来。[Pascal MicroEngine](https://en.wikipedia.org/wiki/Pascal_MicroEngine) のような P-CODE を解釈するカスタムプロセッサの開発が計画されたが見送られた。

**・Turbo Pascal** [[Wikipedia]](https://ja.wikipedia.org/wiki/Turbo_Pascal)
1983 年に Ver 1.0 が発売された [Borland](https://ja.wikipedia.org/wiki/Borland) 社のネイティブコード Pascal コンパイラ。1987 年の ver 4.0 で、uses 句が導入された。1989 年の ver 5.5 以降はオブジェクト指向言語。上位バージョンに Borland Pascal がある。長続きはしなかったが Turbo Pascal for Macintosh も 1985 年に発売されている。前身は Poly Data 社の BLS Pascal (1981), Compas Pascal (1982), Poly Pascal (1984)。

**・Apple Lisa's Clascal**
Lisa Pascal に Simula と Smalltalk のオブジェクト指向を参考にクラスの導入を行った Pascal。言語としては Object Pascal ではないが、オブジェクト指向言語ではある。

**・Apple Machitosh's Pascal**
Machitosh 向けのソフトウェアは、当初 Lisa でクロスコンパイルされていた。[Lisa Workshop](https://ja.wikipedia.org/wiki/Lisa_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)#Lisa_Workshop) はLisa 用の統合開発環境で、Machitosh 向けのコンパイラは Lisa 向けの Pascal の移植版だった。Lisa の Pascal は Lisa Pascal -> Lisa Clascal -> Lisa Workshop Object Pascal と遷移している。

**・Apple Machitosh Object Pascal** [[Wikipedia]](https://ja.wikipedia.org/wiki/Object_Pascal)
Machitosh のセルフ開発環境である [Macintosh Programmer's Workshop（MPW）](https://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop) は 1986 年にリリースされ (Copyright では 1985 となっている)、これに含まれる Pascal は MPW (Object) Pascal / Macintosh Workshop Pascal と呼ばれた。言語としては Clascal 由来の Object Pascal である (Lisa Workshop の Object Pascal のリリースは 1986 年 3 月、MPW  の Object Pascal のリリースは 1986 年 10 月)。識別子を 63 文字まで認識するようになった。後に Object Pascal は言語名にもなる。[^2]

**・Macintosh Pascal** [[資料]](http://basalgangster.macgui.com/RetroMacComputing/The_Long_View/Entries/2010/3/20_MacPascal_and_Think_Technologies.html)
1984 年に Apple が販売した Machitosh 向けの Pascal インタプリタ。開発は Think Technologies (後に [Symantec](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%9E%E3%83%B3%E3%83%86%E3%83%83%E3%82%AF) に買収される)。開発版の名称は MacPascal。コンパイラ版は MPW の Object Pascal 拡張を取り入れた Lightspeed Pascal (1986) で、後の Think Pascal (1987)。

**・Mac Pascal**
言語としての Object Pascal と、製品としての Apple Object Pascal (MPW Pascal) を混同しないよう、(後で) Apple Object Pascal に付けられた名前が Mac Pascal だが、Macintosh は Mac と略されることが多いので、MPW Pascal の事を言っているのか、Macintosh Pascal を略して言っているのか判断できない事がある。このワードを見かけたら文脈に注意しなければならない [^3]。

**・Oberon** [[PDF]](https://inf.ethz.ch/personal/wirth/Oberon/Oberon.Report.pdf)
Modula-2 の後継言語 (1988 年, 1990 年改訂)。Oberon を 2007 年に再定義した Oberon-07 / Revised Oberon (2007 年, 2016 年改訂 [[PDF]](http://people.inf.ethz.ch/wirth/Oberon/Oberon07.Report.pdf)) もある。言語仕様がかなり小さい。

**・拡張 Pascal (Extended Pascal)** [[PDF]](http://pascal-central.com/docs/iso10206.pdf)
ISO/IEC 10206:1991 準拠の Pascal の事。モジュール化拡張が施されている。HP Pascal (Compaq Pascal または VAX / VMS Pascal) や Prospero Software の Extended Pascal は標準 Pascal と拡張 Pascal に準拠していた。

**・Oberon-2** [[PDF]](http://www.ssw.uni-linz.ac.at/Research/Papers/Oberon2.pdf)
Oberon の後継言語 (1991 年) でありスーパーセットだが、Oberon-07 があるため Oberon の方言の一つとも言える。オブジェクト指向拡張を取り入れているが、それでも言語仕様が小さい。前身は Oberon にオブジェクト指向拡張を施した Object Oberon (1989)。

**・Pascal へのオブジェクト指向拡張 (Object-Oriented Extensions to Pascal)** [[HTML]](http://pascal-central.com/OOE-stds.html)
1993 年の Pascal へのオブジェクト指向拡張。ドラフトであり、規格化されていない。

**・Delphi** [[サイト]](https://www.embarcadero.com/jp/products/delphi)
1995 年に Ver 1.0 が発売された [Borland](https://ja.wikipedia.org/wiki/Borland) 社の Object Pascal。最新版は [Embarcadero](https://www.embarcadero.com/jp/) 社が発売している。

**・16bit 版 Delphi**
16bit Windows 用バイナリを吐く Delphi。具体的には Delphi 1.0。

**・ANSI 版 Delphi**
Char 型が 8 ビット (AnsiChar) な Delphi。具体的には Delphi 2007 以前の Delphi。ANSI (American National Standards Institute) が制定した Delphi という意味ではない。

**・Unicode 版 Delphi**
Char 型が 16 ビット (WideChar) な Delphi。具体的には Delphi 2009 以降の Delphi。

**・GNU Pascal (GPC)** [[サイト]](http://www.gnu-pascal.de/gpc/h-index.html)
様々な Pascal の機能を実装している Pascal。標準規格寄りで、拡張 Pascal の殆どの機能が使える。IDE として [Dev-Pascal](https://en.wikipedia.org/wiki/Dev-Pascal) がある。[Ideone.com](https://ideone.com/) でテストする事ができる。

**・Free Pascal (FPC)**  [[サイト]](https://www.freepascal.org/)
様々な Pascal の機能を実装している Pascal。出自が Turbo Pascal のクローンなので、商用 Pascal 寄り。IDE として [Lazarus](https://www.lazarus-ide.org/) がある。[Ideone.com](https://ideone.com/) でテストする事ができる。

**・PASCAL-P5** [[サイト]](http://www.standardpascal.org/p5.html)
ISO/IEC 7185 水準 0 準拠の Pascal-P ([P-CODE](https://ja.wikipedia.org/wiki/P%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9E%E3%82%B7%E3%83%B3) コンパイラ)。標準 Pascal のフルセットを厳格に実装している。

**See also:**

 - [『PASCAL』 - Wirth 先生の邦訳本を読んでみる (Qiita)](https://qiita.com/ht_deko/items/3086b7cff08928eca7a9#pascal-pascal)
 - [Pascal についてのポエム (パンセではない) (Qiita)](https://qiita.com/ht_deko/items/aba9e0b6a6e8d003d34e)
 - [Delphi のご先祖を辿る (Qiita)](https://qiita.com/ht_deko/items/b41b0cd45181aec522d4)
 - [割と簡単に ’標準 Pascal' を試してみたい (Qiita)](https://qiita.com/ht_deko/items/41e95154e8da2f901698)
 - [Delphi で Pascal-S をコンパイルする (Qiita)](https://qiita.com/ht_deko/items/77052d1f3c3c1a927034)
 - ["常に新しい、不変のDelphi - Delphi 2009以降の新機能" のソースコードが何だったのかを検証してみる (Qiita)](https://qiita.com/ht_deko/items/ff958b9866cf5252cd13)
 - [UCSD Pascal を触るためだけの UCSD p-System 操作ガイド (Qiita)](https://qiita.com/ht_deko/items/50c0cb0fd3cbafc1f8e1)


## ■ あ行

**・値パラメータ**
値渡しされる手続きパラメータまたは関数パラメータ。つまり、パラメータの値はルーチンが使うローカルメモリにコピーされるので、そのパラメータの変更はローカルになります。

**・アプリケーション**
実行可能ファイルと (プログラムが機能するために必要な共通の目的を持った) 関連するすべてのファイル。プロジェクトの設計やソースコードとは区別されます。アプリケーションはプログラムと同じ意味で使われることがよくあります。

**・インクルードファイル (.INC)**
`{$I filename}` コンパイラ指令を使ってコンパイルにインクルードされるソースコードのファイル。
インクルードファイルは Delphi プロジェクトで滅多に見かけませんが、利用可能です。

**・インスタンス**
オブジェクト型の変数。もっと一般的には任意の型の変数です。実メモリが割り当てられます。

**・インターフェース部 (interface 部)**
利用できる定数、型、変数、手続き、関数を記述する、ユニットの最初のパブリック部。

**・オブジェクト型**
クラス。

**・オブジェクトファイル (.OBJ)**
アセンブラで通常生成される中間の機械語ファイル。`{$L filename}` コンパイラ指令を使ってプロジェクトまたはユニットとリンクします。
.OBJ ファイルにある関数は Pascal 宣言の EXTERNAL で宣言されます。オブジェクトファイル (.OBJ) は Delphi プロジェクトでは滅多に見かけません


## ■ か行

**・型**
データの格納とアクセスの方法の記述。データの実際の格納域である「変数」を参照してください。

**・型キャスト**
型 X の式を型 Y の式としてコンパイラが扱うようにすること。
**as** を使ってオブジェクトインスタンスを型キャストすると、コードの生成が実行時に型キャストの互換性を検証するようになります。通常の型キャストはコンパイル時に検証され実行時には検証されません。

**・型付き定数**
アプリケーションの起動時にデフォルト値が与えられる変数。すべてのグローバル変数がメモリの一定の空間を占めます。

**・型定義**
定義済みでない型の指定。変数が保持できる値のまとまりと、それに対して実行できる処理を定義します。

**・型なしファイル**
その内部形式とは関係なくディスクファイルに直接アクセスできる低レベルの入出力チャネル。

**・型なしポインタ**
特定の型をポイントしないポインタ。型なしポインタを参照するには、型キャストしなくてはなりません。

**・仮パラメータ**
呼び出し時にサブプログラムへ渡される引数を表す手続きまたは関数のヘッダー見出しにある識別子。

**・関数**
値を計算して返すサブルーチン。→ [11.2. 関数](https://qiita.com/ht_deko/items/b93ac03bfee002f17137#112-%E9%96%A2%E6%95%B0-functions)

**・関数ヘッダー**
ルーチン名の後に、仮パラメータのリスト、関数の戻りの型が続くテキスト。ユニットではルーチンのインターフェース部にヘッダーを入力でき、さらに実現部にも入力できます。2 番目に現れるヘッダーはインターフェース部のヘッダーと厳密に重複しているか、ルーチン名だけでなければなりません。

**・完全評価**
式全体を評価する前にその式の結果がわかった場合でも、**and** 演算子と **or** 演算子で構成される論理式の各オペランドを評価します。これはプログラムの意味を変更する可能性のあるルーチンがオペランドに使われている場合に役立ちます。反対はショートサーキット評価です。

**・機能**
レコードのフィールド、ユニットの型、定数、変数、ルーチン、さらにクラスのフィールド、プロパティ、メソッドを指す一般用語。

**・グローバルヒープ**
すべてのアプリケーションが利用できるメモリ。

**・グローバル変数**
ルーチン (またはプログラムの本体) で使う変数で、そのルーチン (または本体の var 部) で宣言されていないものがそのコードのグローバル変数と考えられます。プログラムの一部にグローバルな変数は同じプログラムの別の部分からアクセスできない場合があり、したがってそのコンテキストではローカルと考えられます。

**・限定子**
後にピリオド (.) が続く識別子。メソッド識別子または他の識別子の前にあって特定のシンボル参照を指定します。

**・限定識別子**
ピリオドを含む、つまり限定子を含む識別子。限定識別子は (オブジェクト、レコード、ユニットの) 特定の機能が、現在のスコープ内部でやはり可視の同じ名前の他の機能に関係なく使われるようにします。

**・基本型**
ポインタ宣言、配列宣言の中で参照される型、または集合宣言で使われる列挙型。型宣言は他の基本型をいくつか参照するかまたは組み合わせて新しい型を構築しますが、それによって型が複雑になる可能性があります。

**・コンパイラ指令**
プログラム内に埋め込まれるコンパイラへの命令。たとえば `{$R+}` は範囲チェックをオンにします。→ [(1.7.2.) コンパイラ指令](https://qiita.com/ht_deko/items/ce1f56017fb4fcf0302a#172-%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E6%8C%87%E4%BB%A4-compiler-directives)

**・コンパイル**
ソースコードのブロックを機械語の命令に変換する処理。(ソースコードを 1 行ずつ機械語に翻訳するインタープリタとは対照的です。)

**・コンパイル時**
コンパイラがソースコードをコンパイルしている期間。

**・コンパイルエラー**
コンパイル時にコンパイラによって検出されるエラー。「構文エラー」や「未知の識別子」などがあります。

**・コールバックルーチン**
ユーザーアプリケーションではなく OS 等から呼び出される、アプリケーション内のルーチン。たとえば EnumFonts は、システムにインストールしてあるフォントごとに指定のコールバック関数を呼び出す Windows ルーチンです。


## ■ さ行

**・再帰**
サブルーチン自身を呼び出すプログラミング手法。この手法を使う場合、最終的には再帰を終了するように注意してください。そうしないと、無限の再帰によってスタック障害が引き起こされます。→ [再帰関数](https://qiita.com/ht_deko/items/b93ac03bfee002f17137#%E5%86%8D%E5%B8%B0%E9%96%A2%E6%95%B0-recursive-functions)

**・式**
値を表すか値の計算に使える文の一部。

**・識別子**
特定の項目 (定数、型、変数、手続き、関数、ユニット、プログラム、フィールド) に対してプログラマが定義した名前。

**・実現部 (implementation 部)**
ユニットのインターフェース部 (**public** 部) の要素がどのように動くかを定義する、ユニットの 2 番目の部分 (**private** 部)。

**・実行時**
設計したアプリケーションを実行している期間。

**・実行時エラー**
アプリケーションの実行中に発生するエラー。コンパイルエラーとは対照的です。

**・実行時のみ**
設計時ではなくアプリケーションの実行中のみ見えるか変更や呼び出しができるルーチン、プロパティ、イベント、コンポーネントのいずれか。

**・実数型**
浮動小数点数または指数表記で表す数。

| 型 | 有効桁数 | バイト数 |
|:---:|:---:|:---:|
| **Single** | 7-8 | 4 |
| **Real48** | 11-12 | 6 |
| **Double** | 15-16 | 8 |
| **Real** | 15-16 | 8 |
| **Comp** | 10-20 | 8 |
| **Currency** | 10-20 | 8 |

この他に **Extended** 型がありますが、プラットフォーム依存です。

**・実パラメータ**
手続き呼び出しまたは関数呼び出しの仮パラメータに取って代わる変数、式、定数のいずれか。

**・実変数**
実行時にプログラムが使える変数。プログラム内でのその変数の定義とは区別されます。格納の目的で使われるメモリロケーションのことで、識別子とは区別されます。

**・集合型**
一定の順序型または部分範囲基本型の要素の 0 個以上の集まりを表す Pascal の型。→ [8.集合型](https://qiita.com/ht_deko/items/50bac0de384d66208944)

**・順序型**
順序付き要素の閉じた集合で構成される Object Pascal の型。

**・条件シンボル**
条件コンパイラ指令と組み合わせて使い、真または偽になる条件を指定します。`$DEFINE` と `$UNDEF` の指令を使って条件シンボルの定義 (真に設定される) と定義解除 (偽に設定される) を指定します。

**・ショートサーキット評価**
厳密に左から右に論理式を評価して、式全体の結果が明らかになった時点ですぐに評価を打ち切る評価方法。このモデルでは、コードの実行時間が最小になり、通常はコードサイズも最小になります。

**・シンボル**
識別子。シンボルは予約語を含みます。

**・スイッチ指令**
スイッチの状態 (+ または -) に応じてコンパイラの機能をオンまたはオフにするコンパイラ指令。たとえば、`{F+}` は force far 呼び出し指令をオンにし `{F-}` はオフにします。

**・スコープ**
プログラムまたはユニット内のコードに対する識別子の可視性。

**・スタック**
ローカル変数の格納用に予約してあるメモリ領域。プログラムの実行とサブルーチンの呼び出しの追跡管理もします。

**・整数型**
整数型は汎整数の部分集合を表します。

| サイズ | 符号あり | 符号なし |
|:---:|:---:|:---:|
| 8bit | **ShortInt**<br>(-128..127) | **Byte**<br>(0..255) |
| 16bit | **SmallInt**<br>(-32768..32767) | **Word**<br>(0..65535) |
| 32bit | **Integer**<br>(-2147483648..2147483647) | **Cardinal**<br>(0..4294967295) |
| 64bit | **Int64**<br>(-2<sup>63</sup> .. 2<sup>63</sup>-1) | **UInt64**<br>(0 .. 2<sup>64</sup>-1) |

**・静的**
コンパイル時に解決されることです。手続きやメソッドの呼び出しについて (静的メソッドというように) 使います。

**・設計時**
Delphi でフォーム、オブジェクトインスペクタ、コンポーネントパレット、コードエディタなどを使ってアプリケーションの設計ができる期間。設計したアプリケーションを実際に実行する実行時とは対照的です。

**・セパレータ**
空白またはコメント。Object Pascal ではコメントを空白として扱います。

**・添字**
要素リスト内部での位置。インデックス。

**・添字型**
配列の要素の型を指定します。有効な添字の型は 2GB (MaxInt) の範囲を超えない順序型です。
 
**・ソースコード**
コンピュータプログラムの開発者が適切な編集ツールを使い特定のプログラミング言語の構文規則に従って作成した 1 行 1 行の文の集まり。

## ■ た行

**・定数**
固定値を持ったプログラム内の識別子。コンパイル時にソースコード中の定数のすべてのインスタンスがその固定値に置き換わります。

**・定数パラメータ (const)**
参照渡しされるが手続きによって変更できないパラメータ。性能とメモリ使用率の面で値パラメータより優れています。

**・手続き**
より大きいプログラムの各部から呼び出せるサブプログラム。関数とは異なり、手続きは値を返しません。→ [11.1. 手続き](https://qiita.com/ht_deko/items/b93ac03bfee002f17137#111-%E6%89%8B%E7%B6%9A%E3%81%8D-procedures)

**・手続き宣言**
手続き宣言は、ユニットまたはプロジェクトに現れる手続きヘッダーの最初にあります。

**・手続きヘッダー**
ルーチン名の後に仮パラメータのリストが続くテキスト。ユニットではルーチンのインターフェース部でヘッダーを宣言でき、さらに実現部でも宣言できます。2 番目に現れるヘッダーはインターフェース部のヘッダーと厳密に重複しているか、ルーチン名だけでなければなりません。

**・データ**

 1. データベースに格納してある情報。データはフィールド内の 1 つの項目であったり、一連の項目で構成されるレコードであったり、あるいはレコードの集合であったりします。Delphi アプリケーションはデータベース内のデータの取り出し、追加、変更、削除ができます。
 2. 一般にはアクセス方法に依存しない固有値を持つ情報。

**・動的**
単純な仮想よりも領域を効率よく使う (ただし速度の効率は低下する)仮想メソッドの形態。

## ■ な行

## ■ は行

**・配列**
型が同じデータ要素のグループ。各データ要素は 1 つのデータ構造に配列されており、インデックスによりランダムにアクセスできます。→ [6.1.配列型](https://qiita.com/ht_deko/items/eedda6d38b6d0887d4ac#61-%E9%85%8D%E5%88%97%E5%9E%8B-arrays)

**・パラメータ**
関数または手続きに渡される変数または値。

**・ヒープ**
変数の動的割り当てのために予約してあるメモリ領域。

**・ファイルの種類**
ファイルが保持する特定のデータの種類を指します。

**・ファイルバッファ**
ファイルとのデータ転送を高速化するためのメモリ領域。

**・フィールド**
構造化データ型 (つまり、レコードまたはオブジェクト) の可能な 1 つの要素で、特定のデータ型のインスタンスです。

**・部分範囲型**
順序型の指定の連続した部分を表す Pascal の型。→ [5.2.部分範囲型](https://qiita.com/ht_deko/items/335e59857cc78aea951a#52-%E9%83%A8%E5%88%86%E7%AF%84%E5%9B%B2%E5%9E%8B-subrange-types)

**・プログラム**
実行可能ファイル。略式の意味では、プログラムとその実行に必要なすべてのファイルを指します。

**・プロジェクト**
アプリケーションまたは DLL の構築に使うファイルとリソースの完全なカタログ。もっと具体的には、プログラムのメインソースコードファイルで、アプリケーションまたは DLL が依存しているユニットの一覧を示します。

**・プロジェクトディレクトリ**
プロジェクトファイルが入っているディレクトリ。

**・プロジェクトファイル**
Delphi プロジェクトのソースコードを含むファイル。拡張子は .DPR で、プロジェクトが使うすべてのユニットファイルの一覧を示し、アプリケーションの起動のためのコードを含みます。

**・ブロック**
プログラムまたはサブプログラムの関連付けられた宣言部と文部。たとえば、ルーチンの **var** ブロックで整数変数を宣言します。**if..then** 文の **then** の後に **begin** を置いて、条件が満たされた場合にだけ実行されるコードブロックを開始します。

**・プロテクトブロック**
**try..except** 文または **try..finally** 文の **try** ブロック。

**・文**
プログラム内の最も単純な単位。文の区切りはセミコロンで示します。

**・べき集合**
空集合を含み、基本型の値のすべての可能な部分集合の集まり。

**・ヘッダー**
ルーチン名の後に、仮パラメータのリスト、さらに関数の場合その関数の戻りの型が続くテキスト。ユニットではルーチンのインターフェース部にヘッダーを入力でき、さらに実現部にも入力できます。2 番目に現れるヘッダーはインターフェース部のヘッダーと厳密に重複しているか、ルーチン名だけでなればなりません。

**・変数**
メモリ内のアドレスを表す識別子。その内容は実行時に変更できます。

**・変数パラメータ (var)**
参照渡しされるサブルーチンパラメータ。変数パラメータの変更はサブルーチンが終了したあとでも有効です。

**・ポインタ**
特定のメモリロケーションのアドレスを含む変数。→ [10.ポインタ型](https://qiita.com/ht_deko/items/745ad4a792d277d33831)

## ■ ま行

**・文字列型**
データの 1 単位として扱える文字の並びの列を表す Pascal の型。→ [6.2. 文字配列 (標準 Pascal の文字列型)](https://qiita.com/ht_deko/items/eedda6d38b6d0887d4ac#62-%E6%96%87%E5%AD%97%E9%85%8D%E5%88%97-%E6%A8%99%E6%BA%96-pascal-%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E5%9E%8B)

| 言語 | String 型の実体 | 構成要素の型 |
|:---|:---:|:---:|
| 標準 Pascal | **packed array** [1..n] **of** Char  | Char | 
| Turbo Pascal /<br>16bit Delphi | **ShortString**  | Char (AnsiChar) | 
| ANSI Delphi | **AnsiString**  | Char (AnsiChar) | 
| Unicode Delphi | **UnicodeString**  | Char (WideChar) | 

**・モジュール**
自己充足的なルーチンまたはルーチングループ。ユニットがモジュールの例として挙げられます。

## ■ や行

**・ユニット**
**public** 部 (インターフェース部) と **private** 部 (実現部) で構成される独立したコンパイル可能コードモジュール。
Delphi の各フォームにはユニットが関連付けられています。
ユニットのソースコードは .PAS ファイルに格納されます。ユニットは拡張子が .DCU のバイナリシンボルファイルにコンパイルされます。リンク時に各 .DCU ファイルが 1 つの .EXE ファイルまたは .DLL ファイルに結合されます。→ [(0.1.1.) unit と uses](https://qiita.com/ht_deko/items/afb3c008a83a20792169#011-unit-%E3%81%A8-uses)

**・ユーザー定義 (プログラマ定義)**
プログラマが定義する型で、Pascal 言語本来の部分でないものについていいます。これには、コーディング可能な型定義、Embarcadero が提供する定義、その他のソースが含まれます。JIS X 3008 では `書き下し型` とされています。

## ■ ら行

**・ラッパー**
プログラマ用、通常はある程度はっきりした利益を得るために機能の一部をカプセル化する目的で設計したオブジェクト、ルーチン、オブジェクトグループ、ルーチングループ。 VCL は Windows API のオブジェクト指向ラッパーです。

**・ラベル**
**goto** 文のターゲットをマークする識別子。→ [1.6.ラベル](https://qiita.com/ht_deko/items/ce1f56017fb4fcf0302a#16-%E3%83%A9%E3%83%99%E3%83%AB-labels)

**・ランタイムライブラリ**
すべての Object Pascal プログラムが利用できる標準の手続きと関数。

**・リテラル値**
実際のソースコードに現れる値 (計算された値や宣言された値とは対照的です)。文字列の `'Hello, World'` や数字の `1` などがあります。

**・リンク**
コンパイルしたソースコードを実行可能ファイルに変えるプロセス。リンク段階でリソースが実行可能ファイルにバインドされます。

**・ルーチン**
手続きまたは関数。

**・ループ**
特定の条件が満たされるまで繰り返される文または文グループ。→ [4.4. 繰り返し文](https://qiita.com/ht_deko/items/05af01a81f7c3bb5eeb4#44-%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E6%96%87)

**・例外**
発生時に、通常の実行の流れを中断するイベントまたは条件。例外は発生したエラーの種類と発生場所についての情報を含むオブジェクトでもあります。

**・例外処理**
例外に対して特定の応答をすること。この処理でエラー条件がクリアされ例外オブジェクトが破壊されます。

**・例外ハンドラ**
例外を生成した実行時環境の状況を解決するため、また以後安定状態に環境を回復するために設計されたコード。

**・レコード**

 1. レコード型のインスタンス。
 2. データベースの用語では、テーブルの水平方向の行でデータの関連項目のグループを含みます。

**・レコード型**
フィールドで構成される構造化データ型。→ [7.レコード型](https://qiita.com/ht_deko/items/1d2c85768febc95009bf)

**・列挙型**
識別子の順序付きリストで構成されるユーザー定義の順序型。→ [5.1.列挙型](https://qiita.com/ht_deko/items/335e59857cc78aea951a#51-%E5%88%97%E6%8C%99%E5%9E%8B-enumerated-types)

**・論理エラー**
論理エラーが発生するのは、プログラム文は正しくても、そのアクションがユーザーの意図したものと異なる場合です。たとえば、間違った値が変数に含まれている、グラフィックイメージが正しく表示されない、プログラムの出力が正しくないなどの場合です。

**・ローカルヒープ**
アプリケーションまたはライブラリだけが利用できるメモリ。アプリケーションまたはライブラリのデータセグメントの上位部分に存在します。ローカルヒープのサイズは `$M` コンパイラ指令を使って変更できます。

**・ローカル変数**
手続きまたは関数の内部で宣言されている変数。
 

## ■ わ行

## ■ 英数

**・ASCII**
American Standard Code for Information Interchange の略で情報交換用米国標準コード。それぞれの文字に特定のコードを割り当てています。たとえば、`A` の ASCII コードは 65、`空白`の ASCII コードは 32 です。
Pascal では ASCII コードの前に `#` を付けて文字を参照できます。たとえば、空白を文字 C に割り当てるには、`c := #32;` のようにコーディングします。

**・Boolean 型**
True または False の値をとることができるデータ型。データサイズはバイト単位です。

**・Byte 型**
0 から 255 までの値を保持できるデータ型。8 ビットからなるシーケンスです。UInt8。

**・Cardinal 型**
0 から 4,294,967,295 までの範囲の整数を格納できる 4 バイトの整数型。UInt32。

**・case 可変部**
レコード型定義では、case 可変タグによってそのレコードのインスタンスが同一のメモリ領域を別フィールドとして扱えます。他言語で言う所の "共用体 (Union)" です。

**・Char 型**
1 文字を表す Pascal の型。ANSI Delphi で 1 バイト (AnsiChar)、Unicode Delphi で 2 バイト (WideChar) の型。

**・Integer 型**
Delphi 1 で -32,768 から +32,767 までの範囲の整数の数値変数型 (Int16)。Delphi 2 以降で -2,147,483,648 から +2,147,483,647 までの範囲の整数を格納できる 4 バイトの整数型。Int32。

**・Longint 型**
プラットフォーム依存なので `符号あり 32bit 整数` を想定しているのであれば、Integer 型を使うべきです。64 ビット POSIX プラットフォームにおける Longint 型は 64bit です。

**・nil**
空を参照しているポインタ値。ポインタにはメモリアドレスを割り当てて、安全で意味のある使い方をしなくてはなりません。
メモ: **nil** 値を持つポインタを参照すると、一般保護障害が発生します。

**・Shortint 型**
-128 から +127 までの範囲の整数を保持できる 1 バイトの型。Int8。

**・SmallInt 型**
-32,768 から +32,767 までの範囲の整数の数値変数型。Int16。

**・Word 型**
Delphi では、連続する 2 バイトを占めるメモリロケーション。整数型またはワード型の変数に必要な格納域です。0 から 65535 までの範囲の定義済みの型でもあります。UInt16。

# 索引
[ [← 付録](https://qiita.com/ht_deko/items/15b27e00fac9d723d9f0) ] [ [↑ 目次へ](https://qiita.com/ht_deko/items/e2796788c65c2cda1de5) ]  [ [→ :sushi:](https://qiita.com/ht_deko/items/46fcdbb11cdc58872160) ]

[^1]: 最近 Pascal で検索すると "NVIDIA Pascal アーキテクチャ" がよくヒットして困る。
[^2]: 余談ではあるが 1986 年後半には LW 及び MPW 向けの Objective-C がリリースされている。
[^3]: 加えて Macintosh Pascal と Mac Pascal はググラビリティが非常に低い。Machintosh Pascal、LightSpeed Pascal、THINK Pascal、CodeWarrior Pascal、Turbo Pascal Mac 版、Lisa Workshop の Macintosh 向け Pascal クロスコンパイラ、MPW Pascal...検索サマリーだけではどれの事を言っているのか判断できないため、無駄に時間を消費する事も多い。