# Wirth 先生の邦訳本を読んでみる --- tags: Pascal Oberon Modula-2 Lola created_at: 2020-01-28 updated_at: 2024-04-30 --- # はじめに Wirth 先生の書籍の一覧は以下にあります。 - [Niklaus Wirth - Books (ethz.ch)](https://inf.ethz.ch/personal/wirth/Books.pdf) - PDF 原書の幾つかは pascal.hansotten.com で読めます。 - [BOOKS BY NIKLAUS WIRTH (pascal.hansotten.com)](http://pascal.hansotten.com/niklaus-wirth/books-by-niklaus-wirth/) この記事は今更ながら Wirth 先生の邦訳本を読んでみようという趣旨です [^1]。 # Wirth 先生の邦訳本 Wirth 先生の邦訳本は次の通りです。版はオリジナルに対しての版数です。 | 言語 | タイトル |版| 言語 |ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 日 | 系統的プログラミング入門 | 2 | Pascal | [B000JA2WF2](https://www.amazon.co.jp/dp/B000JA2WF2?tag=deko0f-22) | 1975 | | 日 | 系統的プログラミング入門 [第2版] | 2 | Pascal | [4764900424](https://www.amazon.co.jp/dp/4764900424?tag=deko0f-22) | 1978 | | 日 | [系統的プログラミング入門 [第2版 補訂]](https://www.kindaikagaku.co.jp/information/kd0111.htm) | 2 | Pascal | [4764901110](https://www.amazon.co.jp/dp/4764901110?tag=deko0f-22) | 1986 | | 日 | PASCAL | 2 | Pascal | [456300782X](https://www.amazon.co.jp/dp/456300782X?tag=deko0f-22) | 1981 | | 日 | PASCAL 原書第 3 版 | 3 | Pascal | [4563014621](https://www.amazon.co.jp/dp/4563014621?tag=deko0f-22) | 1988 | | 日 | PASCAL 原書第 4 版 | 4 | Pascal | [4563014664](https://www.amazon.co.jp/dp/4563014664?tag=deko0f-22) | 1993 | | 日 | アルゴリズム + データ構造 = プログラム | 1 | Pascal | [B08538QY83](https://www.amazon.co.jp/dp/B08538QY83/?tag=deko0f-22) | 1981 | | 日 | 翻訳系構成法序論 | 3 | Modula-2 | [4764901129](https://www.amazon.co.jp/dp/4764901129?tag=deko0f-22) | 1986 | | 日 | Modula-2 プログラミング | 3 | Modula-2 | | 1986 | | 日 | アルゴリズムとデータ構造 | 4 | Modula-2 | [4764901625](https://www.amazon.co.jp/dp/4764901625?tag=deko0f-22) | 1990 | | 日 | ヴィルトのコンパイラ構成法 | 1 | Oberon | [4795297061](https://www.amazon.co.jp/dp/4795297061?tag=deko0f-22) | 1997 | - Amazon のリンクは実際には存在しないリンクかもしれません (ISBN-10 から推測したリンクです)。 - ISBN-10 のない書籍は ISBN で管理されていないか、ISBN が不明な書籍です。ASIN があるものはそちらを表示しています。 ## ・系統的プログラミング入門 (Pascal) 原題は **『Systematic Programming: An Introduction』** です。初版は函 (はこ) 入りの書籍で、画像は函のものです。中身はクリーム色の本でパラフィン紙のカバーが掛けられており、表紙にタイトルはありません (背表紙にはあります) [^2]。 ![image.png](./images/d0f88cee-d6ac-d65f-47b8-29610c2a4017.png) [第2版] は表紙のデザインが異なります。 ![image.png](./images/252530c7-ed16-b4a1-dc24-554cd1d57388.png) [第2版 補訂] も表紙のデザインが異なります。 ![image.png](./images/c4a96549-b690-13d5-bdf4-f41b7ac8f72a.png) | 言語 | タイトル |版| 言語 | ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 独 | Systematisches Programmieren: Eine Einführung | 1 | Pascal | [351902327X](https://www.amazon.co.jp/dp/351902327X?tag=deko0f-22) | 1972 | | 英 | Systematic Programming: An Introduction
※『Revised Report』対応版| 2 | Pascal | [0138803692](https://www.amazon.co.jp/dp/0138803692?tag=deko0f-22) | 1973 | | 独 | Systematisches Programmieren: Eine Einführung
※『Revised Report』対応版| 2 | Pascal | [3519123274](https://www.amazon.co.jp/dp/3519123274?tag=deko0f-22) | 1975 | | 独 | Systematisches Programmieren: Eine Einführung
※ 第 2 版の印刷ミス訂正復刻版| 3 | Pascal | [3519223279](https://www.amazon.co.jp/dp/3519223279?tag=deko0f-22) | 1978 | | 独 | Systematisches Programmieren: Eine Einführung
※ 第 3 版の印刷ミス訂正復刻版| 4 | Pascal | [3519323273](https://www.amazon.co.jp/dp/3519323273?tag=deko0f-22) | 1983 | | 独 | Systematisches Programmieren: Eine Einführung
※ 第 4 版の印刷ミス訂正復刻版| 5 | Pascal | [3519423278](https://www.amazon.co.jp/dp/3519423278?tag=deko0f-22) | 1985 | | 独 | [Systematisches Programmieren: Eine Einführung](https://link.springer.com/book/10.1007/978-3-322-89538-7)
※ 第 5 版の完全復刻版| 6 | Pascal | [351902375X](https://www.amazon.co.jp/dp/351902375X?tag=deko0f-22) | 1993 | | 日 | 系統的プログラミング入門 | 2 | Pascal | [B000JA2WF2](https://www.amazon.co.jp/dp/B000JA2WF2?tag=deko0f-22) | 1975 | | 日 | 系統的プログラミング入門 [第2版] | 2 | Pascal | [4764900424](https://www.amazon.co.jp/dp/4764900424?tag=deko0f-22) | 1978 | | 日 | [系統的プログラミング入門 [第2版 補訂]](https://www.kindaikagaku.co.jp/information/kd0111.htm) | 2 | Pascal | [4764901110](https://www.amazon.co.jp/dp/4764901110?tag=deko0f-22) | 1986 | ### 書評 Wirth が最初に書いた本。原書には実質 2 つの販がある。初版は**オリジナル Pascal** のもので、第 2 版以降は『Revised Report (1973)』対応版となっている。 邦訳の『第2版』は『J&W 第2版』に合わせての改版で、『第2版 補訂』はさらに ISO 標準 (1983) に対応したもの。本書は英語版の『Systematic Programming: An Introduction (1973)』をベースに書かれているようだ。基本的には『第2版 補訂』だけあればいいと思う。 この書籍は後から見れば『アルゴリズム + データ構造 = プログラム』の**プロトタイプ**なのかもしれない。そういった意味では、後述の『PASCAL - User Manual and Report (J&W)』と『アルゴリズム + データ構造 = プログラム』(または『アルゴリズムとデータ構造』)を所持しているのであれば、この書籍を読む必要性はあまりないように思う。 『J&W』の例題にもアルゴリズム的なものはあったが、言語の説明とアルゴリズムの比率は 8:2 程度だった。本書は逆で、2:8 程度の比率でアルゴリズムと方法論が大半を占める。 数学の知識が必要なのはともかくとして、用語と言い回しが独特で回りくどいというか難解で読んでいて疲れる。また、解答が存在しない練習問題も所々に挟み込まれている。本書は大学での講義ノートをまとめたものらしいが、やはり洗練されていない印象を受ける。 それと、本文中に **Pascal** という単語は基本的に登場しないが、アルゴリズムを解くための疑似言語として使われている。どう見ても Pascal だし、巻末には簡易的ではあるが **Pascal** の説明が載っている。 巻末掲載の Pascal と言えば、原書である『Systematisches Programmieren: Eine Einführung』の第 6 版 (1993) の巻末にはサブセット版の **PASCAL-S** の説明が載っている。第 6 版は第 5 版の完全復刻版で、第 3~5 版も第 2 版の復刻版。そうなると第 2 版の巻末にはサブセット版の **PASCAL-S**が載っている事になるが、英語第 2 版を邦訳した『系統的プログラミング入門』はすべての版でフルセットの **Pascal (Revised)** の説明が載っている。ひょっとすると、1973 年の英語第 2 版には **Pascal (Revised)** が載っていて、1975 年の独語第 2 版以降では **PASCAL-S** になっているのかもしれない。そうなると、独語第 2 版以降は **PASCAL-S** の範囲で収まるような調整がなされているかもしれない...ちょっとした謎である。 個人的な評価: ★★★☆☆ **See also:** - [Pascal (Wikipedia)](https://ja.wikipedia.org/wiki/Pascal) - [整数をローマ数字 (文字列) に変換するコードを書いてみる (Qiita)](./5a993d399866c45a57b9.md) - [Delphi で Pascal-S をコンパイルする (16bit 版 Delphi) (Qiita)](./7b8db26fb7ce91542dd9.md) - [Delphi で Pascal-S をコンパイルする (ANSI 版 Delphi) (Qiita)](./f4391f6f8b4b87a1fcf0.md) - [Delphi で Pascal-S をコンパイルする (Qiita)](./77052d1f3c3c1a927034.md) ## ・PASCAL (Pascal) 原題は **『PASCAL - User Manual and Report』** です。著者のイニシャルを取って **J&W** と略される事があります。 ![image.png](./images/edb459ee-39a0-6313-69b1-7ec707394b11.png) | 言語 | タイトル |版|言語|ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 英 | [PASCAL - User Manual and Report](https://link.springer.com/book/10.1007/978-3-662-21554-8) | 1 | Pascal | [038706950X](https://www.amazon.co.jp/dp/038706950X/?tag=deko0f-22)
[354006950X](https://www.amazon.co.jp/dp/354006950X/?tag=deko0f-22) | 1974 | | 英 | PASCAL - User Manual and Report | 2 | Pascal | [0387901442](https://www.amazon.co.jp/dp/0387901442/?tag=deko0f-22)
[3540901442](https://www.amazon.co.jp/dp/3540901442/?tag=deko0f-22) | 1978 | | 英 | PASCAL - User Manual and Report
ISO Pascal Standard | 3 | Pascal | [0387960481](https://www.amazon.co.jp/dp/0387960481/?tag=deko0f-22)
[3540960481](https://www.amazon.co.jp/dp/3540960481/?tag=deko0f-22) | 1984 | | 英 | [PASCAL - User Manual and Report
ISO Pascal Standard](https://link.springer.com/book/10.1007/978-1-4612-4450-9) | 4 | Pascal | [0387976493](https://www.amazon.co.jp/dp/0387976493/?tag=deko0f-22)
[3540976493](https://www.amazon.co.jp/dp/3540976493/?tag=deko0f-22) | 1991 | | 独 | [Pascal-Benutzerhandbuch](https://link.springer.com/book/10.1007/978-3-642-97219-5) | 3 | Pascal | [354052052X](https://www.amazon.co.jp/dp/354052052X?tag=deko0f-22) | 1991 | | 独 | Pascal-Benutzerhandbuch | 4? | Pascal | [3540577998](https://www.amazon.co.jp/dp/3540577998?tag=deko0f-22) | 1995 | | 日 | PASCAL | 2 | Pascal | [456300782X](https://www.amazon.co.jp/dp/456300782X?tag=deko0f-22) | 1981 | | 日 | PASCAL 原書第 3 版 | 3 | Pascal | [4563014621](https://www.amazon.co.jp/dp/4563014621?tag=deko0f-22) | 1988 | | 日 | PASCAL 原書第 4 版 | 4 | Pascal | [4563014664](https://www.amazon.co.jp/dp/4563014664?tag=deko0f-22) | 1993 | ※ pascal.hansotten.com で公開された PDF が存在します。 - [[PDF] PASCAL - User Manual and Report (pascal.hansotten.com)](http://pascal.hansotten.com/uploads/books/Pascal_User_Manual_and_Report_Second_Edition.pdf) - 第 2 版 - [[PDF] PASCAL - User Manual and Report (pascal.hansotten.com)](http://pascal.hansotten.com/uploads/books/Pascal_User_Manual_and_Report_Fourth_Edition.pdf) - 第 4 版 ### 書評 本書は Pascal における **K&R** のような存在で、オリジナルのタイトルは **『Pascal User Manual and Report』**。通称 **『J&W』** と呼ばれている (または『レポート』とも)。 版数によって内容が大幅に異なる。原書第 2 版以前には **Pascal 6000** のコンパイラ指令等についての解説が載っている。原書第 3 版は ISO 7185:1983 を反映したものになっており、原書第 4 版は ISO/IEC 7185:1990 を反映したものになっている。原書初版の邦訳は存在しないため [^3]、基本的には原書第 4 版ベースの 1993 年版を持っていればいいと思う。Pascal の原点 (原典) の一つでありながら出版年が比較的新しいために読みやすい。 原書第 2 版以前では、順序型を (広義の) **スカラ型**と説明し、列挙型を (狭義の) **スカラ型**と説明している。Pascal の関連書籍で**スカラ型**という単語を見たら ISO 標準制定よりも前に書かれたものか、Turbo Pascal 3.0 以前について書かれたものである事が多い。 第 I 部 の **"解説書 (User Manual) - Pascal 入門"** だけ読んでも Pascal を理解できる。第 II 部 の **"報告書 (Report)- Pascal 文法"** を読めばさらに**正確に** Pascal を理解できるようになっている。 原書第 2 版以前の報告書 (Report) は 1973 年の **Revised Report (改訂報告書)** とほぼ同じ内容。原書第 3 版以降では ISO 標準に合致するように書き換えられている。 商用 Pascal の言語マニュアルを読んでいると「何故ここの説明が少ないんだ?」と思う事があるが、それは **"標準 Pascal を知っている事が前提"** だからだろう。商用 Pascal の言語仕様について深く理解したいのであれば、本書を読む事を強くオススメする。新品での入手は難しいかもしれないが、大学の図書館などの除籍本が比較的安価に出回っているので是非入手してほしい。 個人的な評価: ★★★★★ **See also:** - [The programming language Pascal (Revised Report) (ethz.ch)](https://www.research-collection.ethz.ch/handle/20.500.11850/68910) - [Pascal の勉強に使えそうな Pascal 処理系 (Qiita)](./6376997a6d74e77c89e3.md) - [Pascal についてのポエム (パンセではない) (Qiita)](./aba9e0b6a6e8d003d34e.md) ## ・アルゴリズム + データ構造 = プログラム (Pascal) 原題は **『Algorithms + Data Structures = Programs』** です。**A+D=P** と略される事があります。 ![image.png](./images/8b65b7d8-001f-744c-fdc4-9212e3e9f094.png) | 言語 | タイトル |版|言語| ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 英 | Algorithms + Data Structures = Programs | 1 | Pascal | [0130224189](https://www.amazon.co.jp/dp/0130224189?tag=deko0f-22) | 1976 | | 日 | アルゴリズム + データ構造 = プログラム | 1 | Pascal | [B08538QY83](https://www.amazon.co.jp/dp/B08538QY83/?tag=deko0f-22) | 1981 | ※ pascal.hansotten.com で公開された英語版の PDF が存在します。 - [[PDF] Algorithms+ Data Structures = Programs (pascal.hansotten.com)](http://pascal.hansotten.com/uploads/books/Algorithms%20Data%20Structures%20%20Programs%201976.pdf) - [[PDF] Algorithms+ Data Structures = Programs Chapter 5: PL/0 Compiler (pascal.hansotten.com)](http://pascal.hansotten.com/uploads/books/Algorithms%20chapter%205%20pl0%20description.pdf) - 第 5 章の 「Language Structures and Compilers」のみ ### 書評 オリジナルの『A+D=P』は確かに名著だと思うが、**標準 Pascal** に対応しておらず、ソースコードの演算子も CDC 6000 の 64 文字集合にある記号で書かれていて読みにくい (文字コードが ASCII ではない)。 | 記号 | 演算子/記号 | |:---:|:---:| | ¬ | **not** | | ∧ | **and** | | ∨ | **or** | | ≠ | <> | | ≤ | <= | | ≥ | >= | | ↑ | ^ | ついでに言えば、数学の教科書で使われるようなフォントが使われているので、別の意味でも読みにくいかもしれない。予約語のフォントは普通なので、このフォントで統一してくれたらよかったのだが...。 ![image.png](./images/9baec7e0-490c-0722-2145-5e99abc4a2b1.png) 内容についてだが、第4章まではアルゴリズムに関連する話、第5章は **PL/0** [^4] という **Pascal** のサブセットを実際に作るコンパイラ作成法の話になっている。**Pascal 6000**の文字コードをベースに書かれているので、**PL/0** を動かすには一工夫必要となる[^5]。 | 一般的な演算子 | PL/0 での演算子 | |:---:|:---:| | = | = | | <> | ≠ | | < | < | | <= | ≤ | | > | > | | >= | ≥ | 『A+D=P』に掲載されているアルゴリズムは `プログラム索引` から探せる (普通の索引の後ろに付いている)。 ![image.png](./images/78fd3ab5-fef8-7c97-d0f9-b3e52df26844.png) **標準 Pascal** 対応の『A+D=P』というものは存在しない。**標準 Pascal** 対応版があれば今でもそこそこ読まれると思うのだが...。 本書は入手難だが、[ヤフオク](https://auctions.yahoo.co.jp/search/search?p=%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0+%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0&auccat=21600&va=%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0+%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0&exflg=1&b=1&n=20&rewrite_category=0)や[メルカリ](https://www.mercari.com/jp/search/?keyword=%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0+%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0)、[古本検索](https://www.kosho.or.jp/products/list.php?transactionid=e59734aeb83a1b2910510ed5d0823941b8e349e3&mode=search&search_only_has_stock=1&search_word=%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%2B%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0%3D%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0)をウォッチングしていればポツポツ見つかる。 個人的な評価: ★★★★☆ :::note [『アルゴリズム + データ構造 = プログラム』](https://dl.ndl.go.jp/pid/12630482)は国立国会図書館デジタルコレクションで読む事ができます。書籍の閲覧には国立国会図書館の利用者登録 ([本登録](https://www.ndl.go.jp/jp/registration/individuals_official.html)) が必要です。 ::: **See also:** - [Algorithms + Data Structures = Programs (Wikipedia:en)](https://en.wikipedia.org/wiki/Algorithms_%2B_Data_Structures_%3D_Programs) - [PL/0 (Wikipedia)](https://ja.wikipedia.org/wiki/PL/0) - [アルゴリズム+データ構造=プログラム (復刊ドットコム)](https://www.fukkan.com/fk/VoteDetail?no=8797) - [Delphi で PL/0 をコンパイルする (Qiita)](./a3080ec5a95e320eade1.md) ## ・翻訳系構成法序論 (Modula-2) 原題は **『Compilerbau: Eine Einführung』** です。 ![image.png](./images/9e98e8cf-49f2-697d-6857-b05590c17f00.png) | 言語 | タイトル |版|言語| ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 独 | Compilerbau: Eine Einführung | 1 | Pascal | [3519023385](https://www.amazon.co.jp/dp/3519023385?tag=deko0f-22) | 1977 | | 独 | Compilerbau: Eine Einführung | 2 | Pascal | [351912338X](https://www.amazon.co.jp/dp/351912338X?tag=deko0f-22) | 1981 | | 独 | Compilerbau: Eine Einführung | 3 | Modula-2 | [3519223384](https://www.amazon.co.jp/dp/3519223384?tag=deko0f-22)| 1984 | | 独 | [Compilerbau: Eine Einführung](https://link.springer.com/book/10.1007/978-3-322-89543-1)
※ 第 3 版の誤字&バグ修正版 | 4 | Modula-2 | [3519323389](https://www.amazon.co.jp/dp/3519323389?tag=deko0f-22) | 1986 | | 日 | 翻訳系構成法序論 | 3 | Modula-2 | [4764901129](https://www.amazon.co.jp/dp/4764901129?tag=deko0f-22) | 1986 | ※ pascal.hansotten.com で公開された PDF が存在します。 - [[PDF] Compilerbau (pascal.hansotten.com)](http://pascal.hansotten.com/uploads/books/Compiler%20Bau%20Nwirth%201986.pdf) - ドイツ語 - [[PDF] Compiler Bouw (pascal.hansotten.com)](http://pascal.hansotten.com/uploads/books/Compiler%20Bouw%201986.pdf) - オランダ語 ### 書評 まずは、好き嫌いの話をしなくてはならない。 本書はタイトルでお分かりのように、カタカナ用語を極力排してあるが、問題はそこではなく**訳者オリジナルの用語を定義している**点である。 > (前略) > なんとかして,このカタカナばかりではない文章が書けるようにしたい.それには,日本語としての用語を作り出さなければならない.ちょうど手頃な題材を扱った本書の訳出にあたって,これをやってみよう,というのが訳者のもう一つの目論見であった. > (中略) > 本書が提示する用語が受け入れられるかどうかはわからないが,敢えて試みた所以である. > > "訳者まえがき" より 忌憚のない意見を言わせてもらうならば **「そういうのは自著でやれや!」** って話である。貴重な邦訳本なのに台無しである [^8]。 ![image.png](./images/c7218c9e-1ba1-e590-447d-ff24ce8ef503.png) 正直、直訳の方がまだ意味が通じると思う。実は『系統的プログラミング入門』の第8章~第12章も本書訳者が担当しているが、あちらは用語が読みにくいという印象はなかった。 内容については、『Algorithms + Data Structures = Programs (アルゴリズム + データ構造 = プログラム)』の `第5章 言語構造とコンパイラ` 部分の実質の改訂版となっている。ソースコードは第 2 版までは **Pascal** で書かれているが、第 3 版からは **Modula-2** で書かれている。演習で作るコンパイラは **PL/0** である。 『アルゴリズム + データ構造 = プログラム』と用語の整合性が全くない事に目をつぶれば良書だと思う。邦訳版は **Modula-2** で書かれているが、**Pascal** で読み替える事も難しくない (モジュール化の概念のない標準 Pascal で書き直すのは面倒かもしれない)。本書で作るのは結局 **PL/0** なのだけれど、文字コードが ASCII 前提に書き改められているため [^6]、ソースコードは読みやすく、**PL/0** も ASCII を解釈するようになっている。 | | A+D=P| 本書 | |:---:|:---:|:---:| | 入力 | | ? 文| | 出力 | | ! 文| | 異なる | ≠ | # | | より小さい | ≤ | <= | | より大きい | ≥ | >= | **PL/0** は **Pascal** のサブセットなのだから、`異なる` の比較演算子はちゃんと `<>` で実装してもらいたかったのだが、コードの変更はそれほど難しくはないだろう。予約語が大文字になっているためか、本書で紹介されている **PL/0** は **Pascal** のサブセットというより、**Modula-2** のサブセットという感じがする。 やはり個人的にはソースコードが **Pascal** で記述されている第 2 版の邦訳版が欲しかった...もちろん**まともな用語で**。 個人的な評価: ★★★☆☆ :::note [『翻訳系構成法序論』](https://dl.ndl.go.jp/pid/12630818)は国立国会図書館デジタルコレクションで読む事ができます。書籍の閲覧には国立国会図書館の利用者登録 ([本登録](https://www.ndl.go.jp/jp/registration/individuals_official.html)) が必要です。 ::: **See also:** - [Modula-2 (Wikipedia)](https://ja.wikipedia.org/wiki/Modula-2) ## ・Modula-2 プログラミング (Modula-2) 原題は **『Programming in Modula-2』** です。**PIM** と略される事があります。 ![image.png](./images/b6cd9851-c6fc-c2c8-a55d-2c3ffc8093e4.png) | 言語 | タイトル |版|言語| ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 英 | [Programming in Modula-2](https://link.springer.com/book/10.1007/978-3-642-96717-7) | 1 | Modula-2 | [0387116745](https://www.amazon.co.jp/dp/0387116745?tag=deko0f-22)
[3540116745](https://www.amazon.co.jp/dp/3540116745?tag=deko0f-22) | 1982 | | 英 | [Programming in Modula-2](https://link.springer.com/book/10.1007/978-3-642-96757-3) | 2 | Modula-2 | [0387122060](https://www.amazon.co.jp/dp/0387122060?tag=deko0f-22)
[3540122060](https://www.amazon.co.jp/dp/3540122060?tag=deko0f-22) | 1983 | | 英 | [Programming in Modula-2](https://link.springer.com/book/10.1007/978-3-642-96878-5) | 3 | Modula-2 | [0387150781](https://www.amazon.co.jp/dp/0387150781?tag=deko0f-22)
[3642968805](https://www.amazon.co.jp/dp/3642968805?tag=deko0f-22) | 1985 | | 英 | [Programming in Modula-2](https://link.springer.com/book/10.1007/978-3-642-83565-0) | 4 | Modula-2 | [0387501509](https://www.amazon.co.jp/dp/0387501509?tag=deko0f-22)
[3642835678](https://www.amazon.co.jp/dp/3642835678?tag=deko0f-22) | 1988 | | 独 | [Programmieren in Modula-2](https://link.springer.com/book/10.1007/978-3-662-00710-5) | 3 | Modula-2 | [3540133011](https://www.amazon.co.jp/dp/3540133011?tag=deko0f-22) | 1985 | | 独 | [Programmieren in Modula-2](https://link.springer.com/book/10.1007/978-3-662-00116-5) | 4 | Modula-2 | [3540516891](https://www.amazon.co.jp/dp/3540516891?tag=deko0f-22) | 1991 | | 日 | Modula-2 プログラミング [改訂第3版]| 3 | Modula-2 | | 1986 | ### 書評 本書はとにかくレアで、所持するまでは Google 検索しても表紙すら拝めなかった。訳者は斎藤信男で、出版社はマイクロソフトウェア、発売元は日本コンピュータ協会。 Modula-2 のリファレンスである本書は『J&W』と同じくらいに読みやすい。同じ版の原書が 202P であるのに対し、訳書は 280P (ともに索引含む) となっているのもその一因かもしれない。 Modula-2 の構文や関数を眺めていると、**Delphi (や Turbo Pascal)** に取り込まれた機能があるのが解る。この取り込まれた機能については「[標準 Pascal 範囲内での Delphi 入門〔裏〕](./46fcdbb11cdc58872160.md)」で触れられているので、興味のある方はご一読を。 **Modula-2** の言語仕様は『Programming in Modula-2』の版数によって細部に違いがあるため **PIM**, **PIM2**, **PIM3**, **PIM4** と呼ばれ、区別されている。これとは別に ISO 標準 (ISO/IEC 10514-1:1996) が存在するため、メジャーなものでも 5 つの方言がある事になる。邦訳本は **PIM3**。 原書の出版元である Springer の書籍は Springer Link で **"前付 (Front Matter)" と "後付 (Back Matter)" を無料で読める**。PIM3 と PIM4 では『J&W』の第 II 部に相当する『Report on the Programming Language Modula-2』が資料扱いになっていて[後付に含まれている](https://link.springer.com/content/pdf/bbm%3A978-3-642-83565-0%2F1.pdf) (独語版は PIM4 のみ)。 なお、『Modula-2 プログラミング』という書籍はもう一冊ある。出版年まで同じなのがややこしい。出版社はマグロウヒルブック。 | 言語 | タイトル |著者/訳者| ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:| | 英 | Modula-2 Programming | John W.L Ogilvie | [0070477701](https://www.amazon.co.jp/dp/0070477701?tag=deko0f-22) | 1985 | | 日 | Modula-2 プログラミング | 中村和郎 | [B07B5YBLN3](https://www.amazon.co.jp/dp/B07B5YBLN3?tag=deko0f-22) | 1986 | 個人的な評価: ★★★★☆ :::note [『Modula-2 プログラミング』](https://dl.ndl.go.jp/pid/12630449)は国立国会図書館デジタルコレクションで読む事ができます。書籍の閲覧には国立国会図書館の利用者登録 ([本登録](https://www.ndl.go.jp/jp/registration/individuals_official.html)) が必要です。 ::: **See also:** - [Modula-2 (Wikipedia:en)](https://en.wikipedia.org/wiki/Modula-2) - [Lilith (Wikipedia:en)](https://en.wikipedia.org/wiki/Lilith_(computer)) ## ・アルゴリズムとデータ構造 (Modula-2) 原題は **『Algorithms & Data Structures』** です。**AD** と略される事があります。 ![image.png](./images/0d7782be-3bc4-312e-f0d7-0e5ab986eb67.png) | 言語 | タイトル |版|言語| ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 独 | [Algorithmen und Datenstrukturen](https://link.springer.com/book/10.1007/978-3-322-94704-8) | 1 | Pascal | [351902330X](https://www.amazon.co.jp/dp/351902330X?tag=deko0f-22) | 1975 | | 独 | Algorithmen und Datenstrukturen | 2 | Pascal | [3519123304](https://www.amazon.co.jp/dp/3519123304?tag=deko0f-22) | 1979 | | 独 | Algorithmen und Datenstrukturen | 3 | Pascal | [3519022508](https://www.amazon.co.jp/dp/3519022508?tag=deko0f-22) | 1983 | | 独 | [Algorithmen und Datenstrukturen](https://link.springer.com/book/10.1007/978-3-322-96756-5)
※ 第 3 版の誤字修正版| 4 | Pascal | [3519122502](https://www.amazon.co.jp/dp/3519122502?tag=deko0f-22) | 1995 | | 独 | [Algorithmen und Datenstrukturen](https://link.springer.com/book/10.1007/978-3-322-80154-8)
※ 第 4 版の復刻版| 5 | Pascal | [3519222507](https://www.amazon.co.jp/dp/3519222507?tag=deko0f-22) | 2000 | | 独 | [Algorithmen und Datenstrukturen mit Modula-2](https://link.springer.com/book/10.1007/978-3-322-96663-6) | 4 | Modula-2 | [3519022605](https://www.amazon.co.jp/dp/3519022605?tag=deko0f-22) | 1986 | | 英 | Algorithms & Data Structures | 4 | Modula-2 | [0130220051](https://www.amazon.co.jp/dp/0130220051?tag=deko0f-22) | 1986 | | 日 | アルゴリズムとデータ構造 | 4 | Modula-2 | [4764901625](https://www.amazon.co.jp/dp/4764901625?tag=deko0f-22) | 1990 | | 英 | Algorithms and Data Structures | 4 | Oberon | [PDF](https://inf.ethz.ch/personal/wirth/AD.pdf) | 2004 | ※ 無償公開された英語版の PDF が存在します。 - [[PDF] Algorithms and Data Structures (ethz.ch)](https://inf.ethz.ch/personal/wirth/AD.pdf) ### 書評 1985年版の **『mit Modula-2』** は『アルゴリズム + データ構造 = プログラム』の実質の改訂版。『アルゴリズム + データ構造 = プログラム』にあった `第5章 言語構造とコンパイラ` 部分は存在しない。ソースコードは **Modula-2** で書かれている。 Aho らの **『データ構造とアルゴリズム』** と共に名著なので、同名のタイトルの書籍も多く『〇〇〇によるアルゴリズムとデータ構造』とか『〇〇〇によるデータ構造とアルゴリズム』といった類似のタイトル書籍も多い。 - [「アルゴリズムとデータ構造」問題 (Qiita: @hon_no_mushi)](https://qiita.com/hon_no_mushi/items/cd45bb9fd9c127d0701a) ドイツ語版の **『mit Modula-2』** の付かないものは何かと言うと『アルゴリズム + データ構造 = プログラム』の第 5 章以外の部分。ソースコードは **Pascal** で書かれている。ドイツ語版の第 4 版と第 5 版の中身は第 3 版。 つまり『Algorithmen und Datenstrukturen (独:1975)』にコンパイラ構成法を足したものが『Algorithms + Data Structures = Programs (英:1976)』で、『A+D=P』からコンパイラ構成法を抜き出したのが『Compilerbau: Eine Einführung (独:1977)』なのだろうと思われる。ドイツ語版の『Algorithms + Data Structures = Programs』がない理由と英語版の『Compilerbau』が存在しない理由がこれで説明が付く。 なので、英語版の『Algorithms & Data Structures』や日本語版の『アルゴリズムとデータ構造』はドイツ語版の『Algorithmen und Datenstrukturen mit Modula-2』に相当する事になる...出版社の都合だろうが、とてもややこしい。 2004 年の『Algorithms and Data Structures (PDF)』は『Algorithmen und Datenstrukturen mit Modula-2 (1985)』を **Oberon** で書き直したもの。PDF で公開されている。 前置きが長くなったが、本書の書評を。本書は『アルゴリズム + データ構造 = プログラム』よりも読みやすい。ソースコードこそ **Modula-2** で記述してあるが、**Pascal** が読めれば難なく読めると思う。 ソースコードはベタテキストだが、**Modula-2 は予約語を大文字で強制する**ため、ボールドなどの文字装飾がないにもかかわらず視認性が高い。『AD』にあるエイトクイーンのソースコードはこんな感じだ。『A+D=P』のものと見比べてみてほしい。 ![image.png](./images/183388ec-d738-4cf6-4809-f84ba7bfd37b.png) 掲載されているアルゴリズムも『A+D=P』同様 `プログラム一覧` から探せる (普通の索引の後ろに付いている)。 ![image.png](./images/6a20ab39-d4dd-8451-9d15-a39f562b50f5.png) さらに重要なポイントとしては **Modula-2** の 構文 (EBNF) と訳者による **Modula-2** の解説が巻末に付録として収録されている事が挙げられる。入手困難な『Modula-2 プログラミング』の代わりとまではいかないが、それなりに **Modula-2** について知れるのは有難い。 個人的にはソースコードが **Pascal** で記述されている **Pascal-Version** (ドイツ語) の邦訳版 **"も"** 欲しかった。 個人的な評価: ★★★★★ **See also:** - [Modula-2 (Wikipedia)](https://ja.wikipedia.org/wiki/Modula-2) - [『データ構造とアルゴリズム』 - 培風館の Pascal 関連書籍を読んでみる (Qiita)](./65e84a12e0203da77337.md#%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0%E3%81%A8%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0) - [Sierpiński curve (Wikipedia:en)](https://en.wikipedia.org/wiki/Sierpi%C5%84ski_curve) ## ・ヴィルトのコンパイラ構成法 (Oberon) 原題は **『Compiler Construction (Theory and Techniques of Compiler Construction)』** です。 ![image.png](./images/29e4ea25-2e9d-a759-cf4a-9b4e972ae270.png) | 言語 | タイトル |版|言語| ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 独 | Grundlagen und Techniken des Compilerbaus | 1 | Oberon | [3893199314](https://www.amazon.co.jp/dp/3893199314?tag=deko0f-22) | 1996| | 独 | Grundlagen und Techniken des Compilerbaus | 2 | Oberon | [3486585819](https://www.amazon.co.jp/dp/3486585819?tag=deko0f-22) | 2008| | 独 | [Grundlagen und Techniken des Compilerbaus](https://www.degruyter.com/view/title/306834) | 3 | Oberon | [3486709518](https://www.amazon.co.jp/dp/3486709518?tag=deko0f-22) | 2011| | 英 | Compiler Construction
\(Theory and Techniques of Compiler Construction\) | 1 | Oberon | [PDF](http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf)
[PDF #1](https://inf.ethz.ch/personal/wirth/CompilerConstruction/CompilerConstruction1.pdf)
[PDF #2](https://inf.ethz.ch/personal/wirth/CompilerConstruction/CompilerConstruction2.pdf)
[0201403536](https://www.amazon.co.jp/dp/0201403536?tag=deko0f-22) | 1996 | | 日 | ヴィルトのコンパイラ構成法 | 1 | Oberon | [4795297061](https://www.amazon.co.jp/dp/4795297061?tag=deko0f-22) | 1997 | ※ 無償公開された英語版の PDF が存在します。 ※ pascal.hansotten.com で公開された PDF が存在します。 - [Compiler Construction (ethz.ch)](https://inf.ethz.ch/personal/wirth/CompilerConstruction/index.html) - [[PDF] Compiler Construction (pascal.hansotten.com)](http://pascal.hansotten.com/uploads/books/Compiler%20construction%201996.pdf) ### 書評 出版社はアジソンウェスレイパブリッシャーズジャパン。 『Compilerbau (翻訳系構成法序論)』の実質の改訂版だが、単純に『翻訳系構成法序論』とページ数を比較してみても 1.7 倍になっているし、『A+D=P 第 5 章』と『翻訳系構成法序論』程似てもいない。 ソースコードは **Oberon** で書かれており、演習で作るコンパイラは **Oberon** のサブセット **Oberon-0** に変更され、全体的な難易度は上がっている。文章自体は『翻訳系構成法序論』に比べると流石に読みやすい。 「**Oberon-0** を **Oberon** で書く」と言われても、**Oberon** の言語仕様を知らないと流石にピンとこない。本書の巻末にさらっとでも **Oberon** に関する資料が付録として収録されていればよかったのだが。後述の『Programming in Oberon』の邦訳本がないのがこれまた痛い。 幸いな事に、**『The Programming Language Oberon』** という Wirth が書いた英語のレポートが PDF で公開されている。これは **Oberon** の仕様を 16P に短くまとめたもの。印刷したものを傍らに置いて本書を読むといいかもしれない。 それでも、**「内容をちゃんと理解できるのか?」** という問題だけは最後まで残った。こればかりは私のオツムの問題なので仕方がない。 個人的な評価: ★★★★☆ **See also:** - [Oberon (Wikipedia)](https://ja.wikipedia.org/wiki/Oberon) - [The Programming Language Oberon (ethz.ch)](https://inf.ethz.ch/personal/wirth/Oberon/Oberon.Report.pdf) - [Ceres (Wikipedia:en)](https://en.wikipedia.org/wiki/Ceres_(workstation)) # 邦訳のない Wirth 先生の本 残念ながら、Wirth 先生の本には邦訳のないものがあります。 ## ・Project Oberon (Oberon) 主にシステム (OS) としての Oberon に関する書籍です。 ![image.png](./images/73e1560f-49dd-a3a3-40dc-ba76caaa4222.png) | 言語 | タイトル |版|言語| ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 英 | Project Oberon | 1 | Oberon | [PDF](https://inf.ethz.ch/personal/wirth/ProjectOberon1992.pdf)
[0201544288](https://www.amazon.co.jp/dp/0201544288?tag=deko0f-22) | 1992 | ※ 無償公開された英語版の PDF が存在します。 - [[PDF] Project Oberon (New Edition 2013) (ethz.ch)](https://inf.ethz.ch/personal/wirth/ProjectOberon/index.html) ## ・Programming in Oberon (Oberon) 言語としての Oberon に関する書籍です。 ![image.png](./images/8f932a9c-7577-73f1-a2f3-9ee68543ff7a.png) | 言語 | タイトル |版|言語| ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 英 | Programming in Oberon: Steps beyond Pascal and Modula | 1 | Oberon | [PDF](https://inf.ethz.ch/personal/wirth/ProgInOberonWR.pdf)
[0201565439](https://www.amazon.co.jp/dp/0201565439?tag=deko0f-22) | 1992 | | 独 | Programmieren in Oberon: Das neue Pascal | 1 | Oberon | [3893196579](https://www.amazon.co.jp/dp/3893196579?tag=deko0f-22) | 1994 | ※ 無償公開された英語版の PDF が存在します。 - [[PDF] Programming in Oberon Tutorial 2004 (ethz.ch)](https://inf.ethz.ch/personal/wirth/ProgInOberon2004.pdf) ## ・Digital Circuit Design (Lola) タイトルの通り、デジタル回路設計に関する書籍です。ハードウェア記述言語 **Lola** の話もあります。 ![image.png](./images/fcf8ee45-a6ca-02ec-0745-2276112041da.png) | 言語 | タイトル |版|言語| ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 英 | [Digital Circuit Design](https://link.springer.com/book/10.1007/978-3-642-57780-2) | 1 | Lola | [354058577X](https://www.amazon.co.jp/dp/354058577X?tag=deko0f-22) | 1995 | **See also:** - [Lola (Wikipedia)](https://ja.wikipedia.org/wiki/Lola) - [The Hardware Description Language Lola (ethz.ch)](http://www.cs.inf.ethz.ch/projects/lola/lola_lang/) - [Lola-2: A Logic Description Language (ethz.ch)](https://inf.ethz.ch/personal/wirth/Lola/index.html) # 学習のための環境 Wirth 先生の書籍で学ぶためのプログラミング言語 (Pascal / Modula-2 / Oberon-2) ですが、Windows であれば割と簡単に用意することができます。 | 言語 | 環境 | |:---:|:---:| | **Pascal** | [Pascal-P5](https://sourceforge.net/projects/pascalp5/) | | **Modula-2** | [XDS-x86](https://github.com/excelsior-oss/xds) | | **Oberon** | [XDS-x86](https://github.com/excelsior-oss/xds) | - [割と簡単に ’標準 Pascal' を試してみたい (Qiita)](./41e95154e8da2f901698.md) - [割と簡単に '標準 Modula-2 / Oberon-2' を試してみたい (Qiita)](./8e8be01f749915167a91.md) 実用的なコードにしたいのであれば、**Delphi** (Object Pascal) への移植を試みるのもいいかと思います。Modula-2 や Oberon (or Oberon-2) を Pascal や Object Pascal へ読み替えるのはそう難しくはありません。 **See also:** - [Delphi (Embarcadero)](https://www.embarcadero.com/jp/products/delphi) - [Delphi (Wikipedia)](https://ja.wikipedia.org/wiki/Delphi) - [Delphi Community Edition (Embarcadero)](https://www.embarcadero.com/jp/products/delphi/starter) - 無償版 - [標準 Pascal 範囲内での Delphi 入門 (Qiita)](./e2796788c65c2cda1de5.md) # おわりに Wirth 先生のオリジナルの書籍は改版が多いです。内容が大幅に変更になっているものもあり、入手の際には版数に注意が必要です。 - [Wirth 先生の書籍 (原書) (AbeBooks)](https://www.abebooks.com/servlet/SearchResults?an=niklaus%20wirth&bsi=0&sortby=7) 邦訳版は『Pascal』を除けば改版には対応しておらず、最終的な仕様を求めるのであれば、オリジナルの書籍の最新版を入手しなければならないのが悩ましいトコロです。 今なら最新版を電子書籍でアップデート...なんて事もできるのでしょうけど、Wirth 先生の書籍の殆どはインターネット普及前に出版されていますからね...。 "アルゴリズムとデータ構造" と "コンパイラ構成法"、"コンパイラ構成法" で扱うプログラミング言語と作成するコンパイラの関係は英語版だと次の表のようになります。 ![image.png](./images/5608e6b0-3686-6407-5fea-80b75a75b4b6.png) ドイツ語版だとこうなります。 ![image.png](./images/11863064-bcbd-a40e-3bed-b13f8e0f4426.png) 邦訳版だとこうなります。 ![image.png](./images/fcd8c075-02a6-609d-cb80-7f3369016c8d.png) Modula-2 のトコの演習用コンパイラだけ非対称に見えるかもしれませんが、実際には `Modula-0 とも言える Modula-2 っぽい PL/0` なのでご安心を (?)。 Wirth 先生の邦訳本はどれもこれも絶版で入手困難です。**Pascal** (**Delphi**) 使いとしては『アルゴリズム + データ構造 = プログラム』が復刊されるか、ドイツ語版の『Algorithmen und Datenstrukturen (Pascal Version)』+『Compilerbau: Eine Einführung (第 2 版)』の邦訳があれば有難いのですが...。 ## 余談 アルゴリズム系書籍の Delphi 版として次のようなものがあります。 | 言語 | タイトル |版|言語| ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 英 | [Ready-to-Run Delphi 3.0 Algorithms](http://vb-helper.com/da.htm) | 1 | Delphi | [0471254002](https://www.amazon.co.jp/dp/0471254002?tag=deko0f-22) | 1998 | | 日 | [Delphi アルゴリズム](https://www.sbcr.jp/product/4797308451/) | 1 | Delphi | [4797308451](https://www.amazon.co.jp/dp/4797308451?tag=deko0f-22) | 1999 | 『[Ready-to-Run Delphi 3.0 Algorithms](http://vb-helper.com/da.htm)』には元になった『[Ready-to-Run Visual Basic Algorithms](http://vb-helper.com/vba.htm)』があるようですが、こちらの邦訳版『Visual Basic アルゴリズム』は発売されなかったようです [^7]。 | 言語 | タイトル |版|言語| ISBN-10
(Amazon) |出版年| |:---:|:---|:---:|:---:|:---:|:---:| | 英 | [Visual Basic Algorithms:
A Developer's Sourcebook of Ready-to-Run Code](https://www.wiley.com/en-us/Visual+Basic+Algorithms%3A+A+Developer%27s+Sourcebook+of+Ready+to+Run+Code-p-9780471134183) | 1 | Visual Basic | [047113418X](https://www.amazon.co.jp/dp/047113418X?tag=deko0f-22) | 1996 | | 英 | [Ready-to-Run Visual Basic Algorithms
2nd Edition](http://vb-helper.com/vba.htm) | 2 | Visual Basic | [0471242683](https://www.amazon.co.jp/dp/0471242683?tag=deko0f-22) | 1998 | 元ネタのいくつかは『アルゴリズム + データ構造 = プログラム』や『アルゴリズムとデータ構造』だと思われるのに、Visual Basic 向けに書かれた後に Delphi 版が書かれたというのが面白いです。 ## 書評について 書評は **現在での評価** となっています。書籍が出版された時点での評価ではない事にご注意ください。 **See also:** - [Pascal / Delphi 関連の書籍を読んでみる (まとめ) (Qiita)](./34bbcdea27ce224079e0.md) [^1]: **『The School of Niklaus Wirth: The Art of Simplicity』** は Wirth 先生が書いたものではないので対象外とします。 [^2]: Twitter に投稿した実物の画像 \([https://twitter.com/ht_deko/status/1222859016218394625](https://twitter.com/ht_deko/status/1222859016218394625)\) [^3]: 1981 年出版の『情報処理シリーズ 2 PASCAL』は原書第 2 版の邦訳。 [^4]: **PL/0** というプログラミング言語には 2 種類あり、本書で扱っていない方の **PL/0** は **PL/I (ピーエル・ワン)** のサブセットである。 [^5]: 第 3 版しか所持していないので、この問題が後の版で修正されているかどうかは知らない。[Pascal for small machines](http://pascal.hansotten.com/niklaus-wirth/pl0/) にある **PL/0** は `≠` を `#`、`≤` を `[`、`≥` を `]` でそれぞれ置き換えている。 [^6]: それでも `↑` と `^` がソースコード中に混在しているけれど。 [^7]: 『[Delphi アルゴリズム](https://www.sbcr.jp/product/4797308451/)』には近刊として載っています。 [^8]: この訳者の仕事ではないが、ドナルド・クヌース先生の **『The Art of Computer Programming (サイエンス社版)』** でも、同様の問題が発生したらしい。