Pascal についてのポエム (パンセではない)

# はじめに

『PASCAL (情報処理シリーズ 2)』(原題：Pascal User Manual and Report) は、キャスリン・イェンゼン (Kathleen Jensen) とニクラウス・ヴィルト (Niklaus Wirth) によって書かれた PASCAL 言語についての書籍である。著者名の頭文字からしばしば **J&W** と略される。または単純に **Report** とも。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/014c1afb-5a2c-f688-6a37-15e7c9a57885.png)
原書の初版は 1974 年に出版され、PASCAL 言語が標準化されるまでの間リファレンス的な扱いを受けていた。1984 年の第 3 版では ISO での標準化を反映して内容が大幅に変更されている。

第 3 版の改訂者はアンドリュー・Ｂ・ミケル (Andrew B. Mickel) とジェームス・Ｆ・マイナー (James F. Miner)。

日本語訳は第 2 版と訳書訂正版とも原田賢一。原書初版の日本語訳はない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/edb459ee-39a0-6313-69b1-7ec707394b11.png)
出版社は[培風館](http://www.baifukan.co.jp/)。

| 原書<br>(年度) | 原書<br>ISBN | 日本語訳<br>(年度) | 日本語訳<br>ISBN | 頁数 | 
|:----:|:--------:|:---------:|:----:|:--------:|
| 初版<br>(1974) | [038706950X](https://www.amazon.co.jp/dp/038706950X/)<br>[354006950X](https://www.amazon.co.jp/dp/354006950X/) |    |           ||
| 第 2 版<br>(1978) | [0387901442](https://www.amazon.co.jp/dp/0387901442/)<br>[3540901442](https://www.amazon.co.jp/dp/3540901442/) | PASCAL<br>(1981)| [456300782X](https://www.amazon.co.jp/dp/456300782X/) <br> [456300782X](https://www.amazon.co.jp/dp/B000J7YORE/)| 187P |
| 第 3 版<br>(1984) | [0387960481](https://www.amazon.co.jp/dp/0387960481/)<br>[3540960481](https://www.amazon.co.jp/dp/3540960481/) | PASCAL 原書第 3 版<br>(1988) | [4563014621](https://www.amazon.co.jp/dp/4563014621/) | 243P |
| 第 4 版<br>(1991) | [0387976493](https://www.amazon.co.jp/dp/0387976493/)<br>[3540976493](https://www.amazon.co.jp/dp/3540976493/) | PASCAL 原書第 4 版<br>(1993) | [4563014664](https://www.amazon.co.jp/dp/4563014664/) | 251P |    

※リンク先は Amazon です。

## J&W スタイル
本書 (第 4 版) でソースコード片を示すのに使っているインデントやブレースの位置などのスタイルを指して **J&W スタイル**と呼ぶことがある (C 言語で言うところの GNU スタイル)[^1]。これに対し、Borland 系の Pascal (Turbo Pascal, Borland Pascal, Delphi) は **Borland スタイル**で書かれている (C 言語で言うところの BSD/オールマンスタイル)。


# おわかりいただけただろうか？
この記事が ["プログラミング言語 C (Wikipedia)"](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9EC) の~~パクリ~~オマージュという事を...。

## 標準 Pascal / 拡張 Pascal
規格化された Pascal は以下の 2 つです。

| Pascal| 説明 |
|:----:|:--------|
|Standard Pascal<br>(標準 Pascal)| ISO/IEC 7185 準拠の Pascal|
|Extended Pascal<br>(拡張 Pascal)| ISO/IEC 10206 準拠の Pascal|

(標準)Pascal へのオブジェクト指向拡張はドラフトのまま放置されました。

**See also:**

 - [標準 Pascal の規格票と解説書を読んでみる (Qiita)](https://qiita.com/ht_deko/items/091661d6fa3d72700a56)


### Pascal の書籍について 
標準 Pascal を対象としたすべての書籍に言えますが、少なくとも 1983 年よりも前に出版されていて改訂版が出ていないものは、標準 Pascal (ISO 7185:1983) に対応していません。

そして少なくとも 1990 年よりも前に出版されていて改訂版が出ていないものも最新の標準 Pascal 規格である ISO/IEC 7185:1990 に対応していません。そもそも日本だと 1990 年代に出版された標準 Pascal 本自体が少ないのですけれどね。

巻末の索引を調べて**「スカラ型」**という単語があれば、まず標準 Pascal に対応していません[^2]。これが一つの目安になるかと思います。

**See also:**

 - [Pascal / Delphi 関連の書籍を読んでみる (まとめ) (Qiita)](https://qiita.com/ht_deko/items/34bbcdea27ce224079e0)

##ideone.com
[ideone.com](https://ideone.com) では GNU Pascal (GPC) と Free Pascal (FPC) が使えますが、コンパイラモード指令でコンパイラの振る舞いを変更することができます。

###GNU Pascal (GPC) の場合
`{$Extended Pascal}` を明示しないと Extended Pascal (ISO/IEC 10206) モード にならないものだと思っていましたが、コンパイラ指令なしで Standard Pascal (ISO/IEC 7185) / Extended Pascal (ISO/IEC 10206) が使えるようです。

```pascal
program ideone;
const 
  Num = 2#10101010; 
begin
  Writeln(Num);
end.
```
上記コードは 170 を表示します。

 - [6.9 Compiler Directives And The Preprocessor (gnu-pascal.de)](https://www.gnu-pascal.de/gpc/Compiler-Directives.html)

### Free Pascal (FPC) の場合
{$mode ISO} で [Standard Pascal (ISO/IEC 7185) モード](http://wiki.freepascal.org/Mode_iso)。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/afa7e575-6b8b-8210-6c14-1f12dc44da46.png)
{$mode extendedPascal} で [Extended Pascal (ISO/IEC 10206) モード](http://wiki.freepascal.org/Mode_extendedpascal)。但し未実装が多く、モード自体もまだ実装されていないようです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/eee4bdc2-f6dc-3945-cc90-2ae79c708e00.png)
{$mode DELPHI} で [Delphi モード (ANSI)](http://wiki.freepascal.org/Mode_Delphi)。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/c531bc52-7e9f-1039-17ed-346c94cbcd22.png)
{$mode DelphiUnicode}} で [Delphi モード (Unicode)](http://wiki.freepascal.org/FPC_New_Features_3.0#New_delphiunicode_syntax_mode)。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/e2a51823-85a9-287c-07d4-494bb2719049.png)
詳しくは Free Pascal の**コンパイラモード**を参照してください。

 - [Compiler Mode (wiki.freepascal.org)](http://wiki.freepascal.org/Compiler_Mode)

## PASCAL-P5
純粋な標準 Pascal を試すための方法を別記事で書いてみました。
 
 - [割と簡単に ’標準 Pascal' を試してみたい (Qiita)](https://qiita.com/ht_deko/items/41e95154e8da2f901698)

# おわりに
2/14 は Delphi の誕生日で、翌 25 日は [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) 先生の誕生日なのでこんなのを書いてみました。

訳書は図書館の蔵書が放出されたのが安く出回っているようなので、Pascal 好きな方は一冊確保しておくといいかと思います。冗談めいて書きましたが、この本は本当に C 言語における K&R みたいなものなので。

原書も訳書も見た目では第何版なのか判りにくいので購入される際はご注意を。原書はともかく訳書は原書第 4 版ベースの 1993 年版だけあればいいかと思います。

[^1]: 多分、僕しかそう呼んでいない (w
[^2]: あるいは古めの Turbo Pascal を対象にしているかです。