Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

標準 Pascal の規格票と解説書を読んでみる

はじめに

Pascal 規格と、それを (主に日本語で) 読める書籍の紹介です。
規格票そのものな書籍もありますし、規格票の代わりとして読める書籍 (解説書) 標準 Pascalもあります。

規格

標準 Pascal (Standard Pascal) の規格を知るためのざっくりとした年表です。

規格 備考 カテゴリ
1970 The programming language Pascal 最初期の Pascal のドキュメント A
1973 The programming language Pascal
(Revised Report)
The programming language Pascal の改訂版 A'
1983 ISO 7185:1983 最初の標準 Pascal B
1983 ANSI/IEEE 770X3.97-1983 ISO 7185:1983 の 水準 0 とほぼ同じ C
1990 ISO/IEC 7185:1990 ISO/IEC 7185 改訂版 D

カテゴリが同じものは同一規格として扱えます。

規格 備考
1989 ANSI/IEEE 770X3.160-1989 拡張 Pascal
1991 ISO/IEC 10206:1991 拡張 Pascal

拡張 Pascal (Extended Pascal) という規格もあるのですが、ここでは扱いません。

【A】Original Pascal

原初の Pascal です。Original Pascal と呼ばれます。CDC 6000 シリーズで実際に稼働した Pascal 6000 が元になっています。

最初に CDC 6000 シリーズで稼働した Pascal (いわゆる Pascal 6000) を Original Pascal と呼んだり、改訂版を含む CDC 6000 シリーズで稼働する Pascal を Original Pascal と呼んでいたりするので、明確な定義はないように思います。

この記事では 1970 年版のレポートで定義された言語仕様としての Pascal またはそれを元に実装されたソフトウェアとしての Pascal を Original Pascal と呼ぶ事にします。

言語 タイトル ISBN-10
(Amazon)
出版年
The programming language Pascal (レポート) 1970

【A'】Revised Report (Revised Pascal / Classic Pascal)

Pascal 6000 を他の計算機に移植しようとする際に問題になった箇所を修正した『Revised Report (改訂報告書)』が 1973 年に出ています。標準手続き/関数が拡充され、仕様的に曖昧な部分も少なくなっています。ニクラウス・ヴィルトの手による最新版 Paacal はこの『Revised Report (改訂報告書)』です。

ヴィルトの Pascal に関する書籍は『Systematisches Programmieren: Eine Einführung』の初版を除いたすべてが『Revised Report』をベースに書かれており、他の人間が書いた Pascal 関連書籍も殆どが『Revised Report』よりも後に出版されているため、1970 年のドキュメントを参照する事は滅多にないと思われます。

このため、多くの文脈で Original Pascal と同一視されており、両者を区別せずに Original Pascal または Classic Pascal と呼ぶ事があります。こちらも明確な定義はないように思います。

なお、ヴィルトは『Pascal User Manual and Report』刊行時、Revised Report 準拠の Pascal (CDC 6000 以外でも動作するように改訂された Pascal) の事を Standard Pascal と呼んでいます。

この記事では『Revised Report (改訂報告書)』以前...つまり標準化団体による標準化前の Pascal を、Original Pascal も含めて Classic Pascal と呼ぶ事にします。『Revised Report (改訂報告書)』時点の Pascal は Revised Pascal と呼ばれる事もあるようです。

言語 タイトル ISBN-10
(Amazon)
出版年
The programming language Pascal
(Revised Report)
(レポート) 1973
Pascal User Manual and Report 038706950X
354006950X
1974
A Practical Introduction to Pascal 0333235827 1978
A Practical Introduction to Pascal 0387911367 1978
Pascal User Manual and Report
Second Edition
0387901442
3540901442
1978
I/O Books Pascal入門 B000J86N5E 1980
PASCAL
※原書第 2 版
456300782X
B000J7YORE
1981

『Pascal User Manual and Report (J&W)』は第 I 部の 解説書 (User Manual) と第 II 部の 報告書 (Report) に分かれているのですが、第 II 部は『Revised Report (改訂報告書)』そのものとなっています。完全に同じではありませんが、同一とみなしていいと思います。また、第 2 版までの『Pascal User Manual and Report (J&W)』には、Pascal 6000 が行っている拡張の解説も載っています。

Wirth による Pascal への自己評価は『An Assessment of the programming Language Pascal (1975)』に書かれています。

See also:

【B】ISO 7185:1983 (Standard Pascal)

いわゆる 標準 Pascal (Standard Pascal) です。整合配列パラメータをサポートしている 水準 1 と、サポートしていない 水準 0 があります。DP 7185 (Draft Proposal 7185) と DIS 7185 (Draft International Standard 7185) は ISO 7185:1983 の草案 (ドラフト) です。

この規格が制定される前は『Revised Report (改訂報告書)』を標準 Pascal (Standard Pascal) と呼ぶ事があったので、幅広い年代を扱う文章中で正確を期すには ISO PascalISO 7185 を使った方がいいのかもしれません。

また、GNU Pascal (GPC) では --classic-pascal というコンパイラオプションがありますが、これをオンにすると ISO 7185 の文法以外は拒否されます (エイリアス --standard-pascal もありますが)。もう何と呼べばいいのやら...。

水準 1 の "整合配列パラメータ (Conformant array parameters)" についてですが、個人的には気持ち悪い記述だと思っていて「規格では型の互換性について "名前等価" を採用しているのに、整合配列パラメータは "構造等価" じゃないか!」という批判があるのもごもっともだと思います。「ちょっと何言ってるか解らない!」って方は、以下のトピックを参照してみてください。

『Revised Report』からの変更点は大きく二つあり、一つは 整合配列パラメータの追加、もう一つは 手続きパラメータ/関数パラメータの構文の厳格化 です。

言語 タイトル ISBN-10
(Amazon)
出版年
ISO 7185:1983
Programming languages - PASCAL
(規格票) 1983
Standard Pascal: User Reference Manual 0393301214 1983
Pascal User Manual and Report
Third Edition ISO Pascal Standard
0387960481
3540960481
1984
電子計算機のプログラミング 9
PASCAL 入門
4563013102 1985
PASCAL 原書第 3 版 4563014621 1988
明解 PASCAL
国際規格(ISO)準拠
4781905102 1988

『Pascal User Manual and Report (J&W)』の第 3 版は ISO 7185:1983 で置き換えられてはおらず、ISO 7185:1983 に準拠した形で書き換えられています。巻末には 付録 E Pascal 解説書および報告書の改訂の要約 として Classic Pascal からの変更点が要約で掲載されています。

『電子計算機のプログラミング 9 PASCAL 入門』の第 II 部は『J&W』の第 II 部みたいな感じで読めます。後述する『Pascal の標準化- ISO 規格全訳とその解説』の第 II 部を凝縮したような内容です。

『明解 PASCAL』は『J&W』の第 I 部みたいな感じで読めますが、規格を知るにはちょっと物足りないかもしれません。

See also:

・BS 6192:1982, EN 27185:1985

英 British Standards Institution (BSI) の規格。この英国国内規格 BS 6192:1982 が国際規格 ISO 7185:1983 として採択されました。つまり、BS 6192:1982 が ISO 7185:1983 の実体です。

規格制定のための委員会 DPS/13/4 は 1976 年に発足しています。

言語 タイトル ISBN-10
(Amazon)
出版年
BS 6192:1982, EN 27185:1985 (規格票) 1982
A Practical Introduction to Pascal
- with BS 6192 Second Edition
0333333403 1982
A Practical Introduction to Pascal
Second Edition Including the Pascal Standard
1475717660 1982
Pascal の標準化
- ISO 規格全訳とその解説 -
B000J70I06 1984
I/O Books【改訂版】Pascal入門 4875930593 1985

『A Practical Introduction to Pascal』の巻末 (pp.163-236) には BS 6192:1982 がそのまま掲載されていますが、邦訳版である『I/O Books【改訂版】Pascal入門』には含まれていません。

See also:

・NF Z65-300

仏 Association française de normalisation (AFNOR) の規格。NF Z65-300 は BS 6192:1982 (英) と同じ内容のフランス国内規格です...つまり、こちらも ISO 7185:1983 の実体です。

言語 タイトル ISBN-10
(Amazon)
出版年
NF Z65-300 (規格票) 1984

See also:

・JIS X 3008:1990

ISO 7185:1983 互換の JIS 規格です。元規格の ISO 7185:1983 と 7 年もの差があります。

Pascal では手続きや関数に渡すものをパラメータと呼び、ISO 7185 の 6.6.3 にも Parameters とあるのですが、JIS X 3008 では他の言語の用例を参考にして 引数 としています。

他言語 ISO JIS
関数に渡すもの Argument
(引数)
Parameter 引数
関数が返すもの Return
(戻り値)
Result 結果

...であれば、Result は 結果 ではなく 戻り値 にすべきでしょう。カタカナ用語を使いたくないがために 引数 に変更したような感じがします。こういう余計な変更はしないでもらいたいものです。

Delphi 等の一部の Pascal には Result 変数 というものがありますが、JIS X 3008 だけを読んでいると「何故 Result という名前になっているのか?」が意味不明だと思います。

言語 タイトル ISBN-10
(Amazon)
出版年
JIS ハンドブック 59 情報処理
プログラム言語編 1994
454212763X 1994
電子計算機のプログラミング 9
PASCAL 入門 改訂版
4563013765 1994

『電子計算機のプログラミング 9 PASCAL 入門 改訂版』の第 II 部は『J&W』の第 II 部みたいな感じで読めます。JIS X 3008:1990 を凝縮したような内容になっています。

See also:

【C】ANSI/IEEE 770X3.97-1983 (ANSI Pascal)

いわゆる ANSI Pascal です。ISO DP 7185の第 2 版から派生した規格で、第 3 版の変更点も含まれています。

ISO 7185:1983 の 水準 0 とほぼ同等の規格で、差異 1 については序文に記載があります。

  1. ANSI Pascal には整合配列機能が含まれていない。
  2. ANSI Pascal では,拡張機能は実装依存の機能やエラーの状態を変更してもよいと規定されている。ISO Pascal では、拡張機能はこれらの状態を変更することを禁止している。
  3. ANSI Pascal では、行末と CHAR 型の値との関係がある場合は、実装依存でなければならないと規定している。ISO Pascal では、EOL (End Of Line) が CHAR 型の値でないことを要求している。
  4. ANSI Pascal では、Read(), Readln(), Write(), Writeln() のパラメータの評価・アクセス・結合の順序を規定する。ISO Pascal では、この部分については規定しておらず、実装定義も実装依存もしていない。

軽く説明すると、

  1. 「整合配列機能がない = ISO 7185:1983 の 水準 0 に相当する」という意味です。
  2. 例えば Delphi で言う AssignFile() みたいな外部ファイルを割り当てる機能を追加した際に、ISO Pascal の既存の機能の挙動を変更してもいいか?という話です。
  3. Write(Chr(10))Writeln() と同等になる処理系があるが、前者の書き方を許すかという話です。
  4. Read(f, v1, v2)Read(f, v1); Read(f, v2) のように展開する事になっていますが、変数 f が arr[1] のような添字付き変数だった場合に 2 度アクセスする事になるので、これを参照にして ff := f; Read(ff, v1); Read(ff, v2) ってやればいいんじゃないの?という話です。
    arr[n] が許されるという事は、arr[i] や arr[func()] が許されるという事であり、最初のアクセスと 2 度目のアクセスで参照する配列要素が異なる可能性があります。

"1." を除けば実装依存の話と思ってよく、思惑としては「とりあえず基本部分をキッチリ仕様にしようぜ!(ISO:英)」と「さっさと機能拡張しようぜ!(ANSI:米)」って感じでしょうか 2。ANSI の差異は拡張するのに邪魔だからだと思うと納得できます。

また、ISO Pascal や ANSI Pascal では ^ の代替表現ではなく、同一文字として扱われている 3 のですが、この事に言及している説明の言い回しが若干異なります。ISO Pascal では次のような記述になっていますが、

The character ↑ that appears in some national variants of ISO 646 is regarded as identical to the character ^ . In this International Standard, the character ↑ has been used because of its greater visibility.

ANSI Pascal だと次のような記述になっています。

The character ^ that appears in some national variants of ISO 646 is regarded as identical to the character ↑. In this standard, the character ↑ has been used because of its greater visibility.

IEEE の Pascal 標準委員会 P770 と ANSI の小委員会 X3J9 は 1978 年に発足しています。最終的に ANSI Pascal は ISO/IEC 7185 に統合されています。

言語 タイトル ISBN-10
(Amazon)
出版年
An American National Standard:
IEEE Standard Pascal Computer Programming Language
(規格票) 1983
An American National Standard:
IEEE Standard Pascal Computer Programming Language
047188944X
0428149367
1983
American Pascal Standard: With Annotations 0387912487 1984

「『American Pascal Standard: With Annotations』は "With Annotations" の部分がよくない」という批判をどこかで見かけたのですが...思い出せません。

See also:

・FIPS PUB 109

ANSI/IEEE 770X3.97-1983 互換の 米 NIST の Federal Information Processing Standards Publication 規格です。

言語 タイトル ISBN-10
(Amazon)
出版年
FIPS PUB 109 (規格票) 1985

See also:

【D】ISO/IEC 7185:1990 (Standard Pascal)

ISO/IEC 7185 の改訂版です。序文の Project history に標準化の経緯が記してあります。

前版 (ISO 7185:1983) との主な違いは次の通りです。

  1. ANSI/IEEE 770X3.97-1983 との差異を解消
  2. 実数の構文を変更
  3. テキストファイルでの "行末成分 (end-of-line)" の扱いを変更
  4. 実行時エラーの扱いを変更

"2." の実数の構文についてですが、なんちゃって EBNF で書くと ISO 7185:1983 ではこうだったものが、

ISO_7185_1983
符号なし整数 = 数字列.
符号なし実数 = 符号なし整数 "." 数字列 ["e" 指数部] | 符号なし整数 "e" 指数部.
指数部 = [符号] 符号なし整数.
符号 = "+" | "-".
数字列 = 数字 {数字}.

ISO/IEC 7185:1990 ではこうなっています。

ISO_7185_1990
符号なし実数 = 数字列 "." 数字列 ["e" 指数部] | 数字列 "e" 指数部.
指数部 = [符号] 数字列.
符号 = "+" | "-".
数字列 = 数字 {数字}.

"3." の行末について 6.4.3.5 に複雑な記述があるのですが、例えば Read() で行末を読んだ場合の結果が ISO 7185:1983 では空白だったのに対し、ISO/IEC 7185:1990 では処理系依存となるように読めます。

"4." の実行時エラーについてですが、5.1 (f) の 3 番目の選択肢の事だと思います。5.1 (f) ではエラー報告の方法を規定しており、いずれかを選べるようになっています。ISO 7185:1983 では

  1. エラーを報告しないと文章に明記してある。(つまり処理系は何もしない)
  2. エラーの可能性がある事をプログラムの準備中に報告する。
  3. (実行すると) エラーが発生するという事をプログラムの準備中に報告する。
  4. プログラムの実行中、エラーが発生した事を報告し、プログラムの実行を終了する。

となっていましたが、ISO/IEC 7185:1990 では

  1. エラーを報告しないと文章に明記してある。(つまり処理系は何もしない)
  2. エラーの可能性がある、あるいは (実行すると) エラーが発生する事をプログラムの準備中に報告する。報告後、ユーザーの判断で処理を続行できるが、プログラムの実行は拒否できる。
  3. プログラムの実行中、エラーが発生した事を報告する。

に加え、

  • プログラムの実行時にエラーが報告されたら実行を終了する。文の途中でエラーが発生した場合、その文の実行は完了しない。

となっています。準備時のエラー (つまりコンパイルエラー) を無視して実行できるようにするためでしょうか?よくわかりません。

言語 タイトル ISBN-10
(Amazon)
出版年
ISO/IEC 7185:1990
Information technology
Programming languages - PASCAL
(規格票)
PDF
HTML
1991
Pascal User Manual and Report
Fourth Edition ISO Pascal Standard
0387976493
3540976493
1991
PASCAL 原書第 4 版 4563014664 1993

ISO/IEC 7185:1990 のリンク先にある PDF と HTML のドキュメントはオフィシャルなものではありません。表紙にジョークがあり、BSI/ISO の委員会メンバーだけでなく ANSI/IEEE の委員会メンバーも列挙された謝辞 (Acknowledgements) が追加されており、何故か序文 (Foreword) が削除されています。序文については ISO のプレビュー版で確認する事ができます。

『Pascal User Manual and Report (J&W)』の第 4 版は ISO/IEC 7185:1990 で置き換えられてはおらず、ISO/IEC 7185:1990 に準拠した形で書き換えられています。巻末の 付録 E は第 3 版と全く同じです。

この規格以降に出版された 日本語で書かれた Pascal 関連書籍 は極めて少ないです。

See also:

・BS EN 27185:1992

ISO/IEC 7185:1990 互換の 英 The British Standards Institution (BSI) の規格。

言語 タイトル ISBN-10
(Amazon)
出版年
BS EN 27185:1992 (規格票) 1992

・JIS X 3008:1994

JIS X 3008:1990 の改訂版です。ISO Pascal との対応は次のようになっています。

ISO JIS
ISO 7185:1983 JIS X 3008:1990
ISO/IEC 7185:1990 JIS X 3008:1994

改訂前の JIS 規格と改定後の ISO 規格の年度が同じなため、私が標準 Pascal について書いた記事にはよく typo がありました (まだあるかもしれません)。

言語 タイトル ISBN-10
(Amazon)
出版年
JIS X 3008:1994 プログラム言語 Pascal (規格票)
HTML
1994
JIS ハンドブック 59 情報処理
プログラム言語編 1997
454212889X 1997

JIS X 3008:1994 規格票のプレビューを JSA のサイトで本文閲覧を JISC のサイトで行う事ができます ('X3008' で規格番号検索してみてください)。

See also:

規格間の相違点

それぞれの規格の違いを知る方法についてまとめておきます。

Original Pascal と Revised Report の違い

  • 『Revised Report』第 14 章 A standard for implementation and program interchangeにあります。
  • 『J&W (初版・第 2 版)』の第 II 部の 第 14 章 処理系とプログラムの互換性の標準 にあります。

Revised Report と ISO 7185:1983 との違い

  • 『BS 6192:1982』の前書き中にあります。
  • 『ISO/IEC 7185:1990』の序文中の Language history にあります。
  • 『JIS X 3008:1994』の解説の 5.1 Pascal の小史 にあります。
  • 『J&W (第 3 版)』の第 II 部の 第 14 章 規格の準拠 にあります。
  • 『J&W (第 3 版・第 4 版)』の 付録 E Pascal 解説書および報告書の改訂の要約 にあります。
  • 『Pascal の標準化 -ISO 規格全訳とその解説-』の第 I 部の 第 4 章 今までの Pascal との違い にあります。

ISO 7185:1983 と ANSI Pascal (ANSI/IEEE 770X3.97-1983) との違い

  • 『ANSI/IEEE 770X3.97-1983』の序文中の Differences of Technical Substance Between this Standard and the International Standard, as Represented by ISO/DIS 7185. にあります。
  • 『Pascal の標準化 -ISO 規格全訳とその解説-』の第 I 部の 第 5 章 ANSI Pascal との違い にあります。

ISO 7185:1983 と ISO 7185:1990 との違い

  • 『ISO/IEC 7185:1990』の序文中の Project history にあります。
  • 『JIS X 3008:1994』の解説の 5.2 規格化の経緯 にあります。
  • 『J&W (第 3 版)』と『J&W (第 4 版)』の第 II 部にある 第 14 章 規格の準拠 を比較します。

いくつか読んでみた。

規格票に軽く目を通した上で、幾つかの関連書籍を読んでみました。書籍は出版年順に並んでいます。

・Pascal User Manual and Report

image.png

言語 タイトル ISBN-10
(Amazon)
出版年
Pascal User Manual and Report 038706950X
354006950X
1974

※本書に限らず、Springer-Verlag 社の書籍に 2 つの ISBN がある事が多いのは、多くの場合アメリカとドイツの両方で刷られているため。ISBN-10 先頭の 01 がアメリカで 3 がドイツ。

書評

『J&W』の初版。これだけは邦訳版が存在しない。内容については邦訳版の書評を参照の事。
image.png
邦訳版をすべて持っているので読み進めるのは難しくないのだけれど、後の版...特に第 2 版と何が違うか?と問われてもよくわからない。

pp.133-134 の Preface to the Revised Report と p.135 の Contents が第 2 版 (原書/邦訳) に存在しない事は確認した。他にも巻末の索引が微妙に昇順になっていない等の細かい差異はあるようだが、間違い探しのレベルだと思う。初版の実質的な最終ページが p.170 で、第 2 版 (原書) が p.167 なので、大きな違いは本当にこれだけなのかもしれない。なお、p.133 については Springer Link のプレビューで読む事ができる。

当該 3 ページは『Revised Report (改訂報告書)』にある Preface to the Revised Report とほぼ同じなのだが、後半の記述が異なっている (「Implementation efforts~」以降が大きく異なっている)。
image.png
それでも、この 3P を読むためだけに『原書初版』を買う必要はないと思われる。

今となっては「初版に何が書かれていたのか?」を調べるための資料的な価値しかないと思う。英語で書かれた書籍でもあるので、評価は付けない事にする。

個人的な評価: (評価なし)

・An American National Standard: IEEE Standard Pascal Computer Programming Language

image.png

言語 タイトル ISBN-10
(Amazon)
出版年
An American National Standard:
IEEE Standard Pascal Computer Programming Language
047188944X
0428149367
1983

書評

ANSI Pascal (ANSI/IEEE 770X3.97-1983) と ISO Pascal (ISO 7185:1983) の違いを知るために必要だった本。ANSI/IEEE 770X3.97-1983 の規格票を書籍化したもの。

「表紙とタイトルが違うじゃないか!」と怒られそうだが、表紙と扉でタイトルが違うので仕方がない。規格票もこうなっている。
image.png
やはりと言うか ISO 7185:1983 と殆ど同じだった 4。大きな違いは 6.6.3.7 Conformant array parameters (整合配列パラメータ) が存在しない事、逆に 6.6.4.1 General (一般規則) が存在する事くらいだ (6.6.4.1 は BS 6192 にも存在する)。規格の差異については序文 (pp.7-8) に書かれている。

ANSI Pascal は 1990 年に ISO Pascal と統合されているため、今となっては資料的な価値しかないと思う。

  • ISO 7185:1983 と ANSI/IEEE 770X3.97-1983 の違いを調べるため
  • ISO 7185:1983 に何が書かれていたのかを調べるため

英語で書かれた書籍でもあるので、評価は付けない事にする。

個人的な評価: (評価なし)

・Pascal の標準化 - ISO 規格全訳とその解説 -

image.png

言語 タイトル ISBN-10
(Amazon)
出版年
Pascal の標準化
- ISO 規格全訳とその解説 -
B000J70I06 1984

書評

本書の構成は次のようになっている。

  • 第 I 部: Pascal 概説
  • 第 II 部: 規格全訳
  • 第 III 部: 解説
  • 付録

第 I 部は Classic PascalISO 7185:1983 を繋ぐ話が豊富で面白い。書籍のタイトルからはこの内容を推測できなかったので、この内容を読んだ時は小躍りしそうになった。Pascal を扱った書籍に書かれていた断片化された情報がかなり繋がった。第 I 部の構成は次の通り:

  1. Pascal とは
  2. プログラム例 - 相互参照表の作成
  3. 規格制定の経過
  4. 今までの Pascal との違い
  5. ANSI Pascal との違い
  6. IEEE 拡張規格概案
  7. Pascal 論争 5

第 II 部は ISO 7185:1983 の翻訳...と思いきや、それが参照している BS 6192:1982 の翻訳となっている。後年の JIS X 3008 の委員会に名を連ねる方々が著者であるためか、用語と言い回しが堅い。これについては『PASCAL 入門 改訂版』の書評でも苦言を呈している 6。「良くも悪くも JIS X 3008:1990 のプロトタイプという感じがするな...」と思って JIS X 3008: 1994 の解説を確認したら、次のような記述があった。やっぱりか。

日本では,これを翻訳しその内容を解説した書籍(石畑,筧,安村:Pascal の標準化 ーISO 規格全訳とその解説ー,bit 別冊,共立出版,296 pp.,1984)の出版があったものの,... (中略) ... 前記の書籍での訳出を参考にして Pascal の日本工業規格原案の作成が開始された。

ISO 7185 にも JIS X 3008 にも改訂版があるため、今となっては ISO 7185:1983 や JIS X 3008:1990 のような改定前の規格を調べるのが難しい。その全訳なのだからとても有難い。ISO 7185:1983 と ANSI/IEEE 770X3.97-1983 は OEM のような関係だから 3、本書は先に書評を書いた『An American National Standard: IEEE Standard Pascal Computer Programming Language』の邦訳版として扱う事もできる。

第 III 部は解説で、『J&W』『アルゴリズム + データ構造 = プログラム』 を混ぜたようなテイストとなってはいるが、決して教科書的ではなく「何故そのような仕様になっているのか?」を主眼に置いた解説となっている...書籍のタイトルに偽りはない。第 II 部と第 III 部は章立てが同じで、規格と解説の章が 1 対 1 で対応するので調べやすい。

付録には ISO Pascal の文法として正しいソースコードかどうかの〇×クイズである演習問題、構文規則の相互参照表、用語の英和対照表が掲載されている。それぞれ「好きだねぇ...演習問題」「あまり役に立つとは思えない」「(これ筧氏が書いただろ...)」という感想。

総合的な感想は「Pascal に関するネタの宝庫」といったところ。とても楽しい。

個人的な評価: ★★★★★

・I/O Books【改訂版】Pascal入門

image.png

言語 タイトル ISBN-10
(Amazon)
出版年
A Practical Introduction to Pascal
- with BS 6192 Second Edition
0333333403 1982
A Practical Introduction to Pascal
Second Edition Including the Pascal Standard
1475717660 1982
I/O Books【改訂版】Pascal入門 4875930593 1985

書評

この書籍は邦訳版で、原書のタイトルは『A Practical Introduction to Pascal』。タイトルの後に with BS 6192 Second Edition と付いたり Second Edition Including the Pascal Standard と付いたりするようだ。つまり、改訂前の書籍もある。

本書の前の版は『J&W』の初版を参照しているようだ。また、邦訳版の翻訳はとても読みやすい。しかしながら規格策定前の書籍なので、今となっては初版を積極的に読む理由はないと思う。

言語 タイトル ISBN-10
(Amazon)
出版年
A Practical Introduction to Pascal 0333235827 1978
A Practical Introduction to Pascal 0387911367 1978
I/O Books Pascal入門 B000J86N5E 1980

著者の一人である A.M.Addyman は BSI 委員会 DPS/13/4 の主査...つまり、Pascal 標準化のボスである。

本当に個人的な意見だが、伝記ものじゃない限り人の顔を書籍の表紙にするのはやめといた方がいいように思う...圧が強い。ブレーズ・パスカル氏の顔を誰もが覚えてる訳じゃないし、技術書の類が書店に平積みされる事はまずないのだからインパクトはそれほど必要ないように思う 7

内容はというと、『J&W』の第 I 部をちょっとやさしくしたような感じでとても読みやすい。ですます調で書かれているため、文章自体も柔らかい印象を受ける。教科書的なのに解答のない問題がある 8 のは個人的にはマイナスポイント。

本書の序文には BS 6192 / ISO 7185 についての部分に、注釈として次のような一文がある。

※翻訳では、この部分は省略しました。下記参考文献を参照してください
参考文献: 石畑・筧・安村訳 "Pascal の標準化", bit 別冊, 共立出版

つまり、原書の第 2 版にあった規格票 (BS 6192:1982) が省略されてしまっているのだ。ただ、今日では規格票を Springer Link で読む事ができる 9 ため、『Pascal の標準化 -ISO 規格全訳とその解説-』を所持していないと本書の内容が理解できない、なんて状況にはならない。

個人的な評価: ★★★★☆

・JIS X 3008:1994 プログラム言語 Pascal

image.png

言語 タイトル ISBN-10
(Amazon)
出版年
JIS X 3008:1994 プログラム言語 Pascal (規格票)
HTML
1994

書評

表紙等を含めても 80P しかないので、両面印刷だと A4 コピー用紙一冊 (500 枚) で 12 部も刷れる。規格票部分だけなら 72P、本文だけなら (附属書・解説を除く) たった 46P しかない。Pascal の言語仕様がとても小さい事がよくわかる。

規格票は JSA から PDF 版を購入。購入して判ったが、PDF 版には 2 つの問題点がある。

  • 全ページの上下に購入者の名前の入ったウォーターマークが入る。
  • 2002/04/01 以前の JIS 規格票は画像ベースなので検索できない。

前者は単純に目障りである 10。後者は PDF なのに画像であるため検索ができず引用のためのコピーもできず使い勝手が悪い。これでは JISC で閲覧するのと何ら変わらない。JSA の FAQ にもすごく面倒臭いことが書いてあるため、JIS X 3008:1994 を購入するのであれば冊子にする事をオススメする。

JISC で本文を閲覧できるのに、何故これを購入したかと言うと、巻末の "解説" を読む方法がないからである。何故 JISC で解説を閲覧できないのかについては JISC の FAQ に書いてある

A.解説については、(一財)日本規格協会で発行している規格票に附属しているものであって規格の一部ではないので、閲覧することができません。

...いやいやいや、JIS X 3008:1994 に限って言えば、ISO/IEC 7185:1990 に存在する 前書き序文 を "解説" に移動してしまっているのだが。
image.png
目次だけなら JSA のプレビュー版 PDF でも確認できる。そして、実際に必要だったのは pp.62-65 のたったの 4P である。

  1. 日本工業規格 Pascal 制定のいきさつ (p.62)
    JIS X 3008:1990 制定のいきさつについて。
  2. 改正のいきさつ (pp.62-63)
    JIS X 3008:1994 改正のいきさつについて。
  3. 改正作業の方針 (p.64)
    "パラメータ" が "引数" になっている事についてなど。
  4. 原国際規格のまえがき (p.64)
    ISO/IEC 7185:1990 の前書き (Foreword) の邦訳。
  5. 原国際規格の序文 (pp.64-65)
    ISO/IEC 7185:1990 の序文 (Introduction) の邦訳。
  6. 用語和英対照表 (pp.65-72)
    用語の和英対応表。

用語和英対照表は、ページ数がなく章番号のみなので普通の書籍の目次のように使うこともできない。『Pascal の標準化 -ISO 規格全訳とその解説-』の pp.115-122 にもほぼ同じものがある。
image.png
配布メディアや閲覧等の諸事情を除いた書評 (?) は規格票としては妥当かもしれないが実用的ではないといった所。「妥当」だと思う点は次の通り:

  • 『J&W』はとても読みやすいが規格票ではないため、規格とニュアンスの異なる文言が含まれる。
  • ISO/IEC 7185:1990 は英語かつ高価 (178スイスフラン。2万円ほど)。
  • JIS X 3008:1994 は日本語かつ安価 (税込 3,300円。元々は税抜 2,400円だったらしい)
  • ISO/IEC 7185 で 6.5.4 の一部が抜け落ちていて解りにくくなっている文章を、ドラフトから復元してある。

「実用的でない」と思う点は次の通り:

  • 用語に一般的でないものがある。
  • 殆どの用語が 1984 年の『Pascal の標準化 -ISO 規格全訳とその解説-』からアップデートされていない。
  • 用語和英対照表が必要となっている。

繰り返しになるが、用語が独特なので 6、慣れないうちは和英対照表がないと読みづらい。にもかかわらず、和英対照表は "解説" 扱いなので JISC では読めない。まぁ、和英対照表があったとしても、現在読み進めている箇所と巻末を行ったり来たりしなくてはならず、鬱陶しい事この上ないのだが。

用語のチョイスにしても、

用語は,原則として JIS X 3008-1990 のものを踏襲したが,"パラメタ" は,他のプログラム言語での用例を参考にして "引数" と改めた。この規格を利用する場合の便宜を考えて,用語の和英対照表を巻末に掲載しておいた。

解説 3.改正作業の方針 に書かれているが、『Pascal の標準化 -ISO 規格全訳とその解説-』では "引数" だったので元に戻しただけである。他のプログラム言語での用例を参考にすると言うのなら、もっと多くの一般的な用語を採用すべきだったのではないだろうか?

せめて、結果 (Result) のように、初出の用語に括弧書きで英語表記が添えられていれば、和英対照表への依存度を下げられたと思う。『J&W』や『電子計算機のプログラミング 9 PASCAL 入門 改訂版』など、多くの書籍で採用されている手法が使われていない。

こうした事情があり、『JIS X 3008』(または『Pascal の標準化 -ISO 規格全訳とその解説-』) を参照している書籍は文章が堅くなり、多くの場合で用語対照表が付属しないので読みにくくなる。正直、この規格票は 1994 年当時でも読みにくかっただろう。一般的な用途では、Pascal の用語は JIS からではなく「ISO を訳した!」という体で、『J&W』邦訳版や Delphi (Turbo Pascal) から持ってきた方がいいように思う。

比較対象として C 言語の規格票を読んでみるといい。文章自体はこちらの方が読みやすいハズだ。

この規格票が、実質『Pascal の標準化 -ISO 規格全訳とその解説-』の第 II 部を改訂したものであるにもかかわらず評価が対照的に低いのは、与える影響の大きさが違うからである。JIS による規格化が遅かった事で、多くの Pascal を扱った書籍は『Pascal の標準化 -ISO 規格全訳とその解説-』の用語を参照していて読みづらい。しかしながら、これは引かれた『Pascal の標準化 -ISO 規格全訳とその解説-』が悪い訳ではない。国際規格のオフィシャルな日本語訳ではないのだから。

だが、規格となると話は変わってくる。規格票そのものを使って教育する事はないと思われるが、国際規格のオフィシャルな日本語訳 (国内規格) があるとなれば、教科書や参考書の用語は規格に準拠せざるを得ないからである。

本文の内容については JISC でも読めるし ISO/IEC 7185:1990 そのものでもあるので割愛。

個人的な評価: ★★★☆☆

おわりに

長々と書きましたが、規格の関係をざっくりまとめるとこんな感じですかね。
image.png
身も蓋もない言い方をすれば、ヨーロッパ (英国) 主導で作られたのが ISO Pascal で、米国主導で作られたのが ANSI Pascal です。このため、米国の商用 Pascal のドキュメントでは、ISO Pascal ではなく ANSI Pascal との比較表が掲載されていたりします 11

Pascal で使われている用語の邦訳についてですが、個人的に Qiita 等に書く記事の用語は『J&W 邦訳』のものを採用しています。あまり一般的でない邦訳の場合には Delphi の言語リファレンスを参考にしたり、カタカナ用語が一般的に認められているものはカタカナ用語を使うようにしています。

See also:

呼称について

"なんたら Pascal" という呼称についての正解は...ないと思います。その文章が書かれた時期によって呼称がまちまちだからです。

  • Original Pascal:
    『The programming language Pascal (1970)』の Pascal だけを指していたり、Wirth が手掛けた『The programming language Pascal -Revised Report- (1973)』までを含んでいる事があります。一番最初に発表された という意味での Original なのか、Wirth が手掛けた という意味での Original なのか。
  • Revised Pascal:
    『The programming language Pascal -Revised Report- (1973)』だけを指していたり、『The programming language Pascal (1970)』から『The programming language Pascal -Revised Report- (1973)』の間に改修されたものを指していたりします。
  • Standard Pascal:
    Wirth 自身は『Pascal User Manual and Report (1974)』の中でこの言葉を使っていますが、この書籍の第 II 部は、『The programming language Pascal -Revised Report- (1973)』そのものなので、『Revised Report』も Standard Pascal という事になってしまいます。そして、ISO で規格化された Pascal も Standard Pascal です。

ものすごく曖昧なので、自分で呼称を定義して「この Pascal の事を言っている!」とした方が誤解を生みにくいかとは思います (なのでそうしました)。

書評について

書評は 現在での評価 となっています。書籍が出版された時点での評価ではない事にご注意ください。

See also:


  1. 正確には ISO/DIS 7185 との比較。 

  2. お国柄...ですかね。 

  3. 円記号とバックスラッシュのような関係。 

  4. 章立ても全く同じ。6.4.2. 章はどちらも Simple-Types (単純型) となっている。 

  5. 「引用ばかりじゃなく、キミ (著者) たちは『プログラム言語 C (初版)』の前書きを論破しなさいよ」と思ったのはナイショだ。 

  6. それでも『翻訳系構成法序論』ほどではない。 

  7. 前の版はもっと圧がある。 

  8. 邦訳版のために解答が追加されているが、すべてではない。 

  9. Springer Link の書籍は "前付 (Front Matter)" と "後付 (Back Matter)" を無料で読める。BS 6192 は資料なので後付に含まれている。『Pascal User Manual and Report (第 4 版)』の後付もかなりの情報量なのでオススメ。 

  10. PDF は画像なのだから、PDF から画像を抽出するアプリを使って...ゲフンゲフン。 

  11. Turbo Pascal とか MPW Pascal とか。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?