コンパイラ
| 分野 | 計算機科学・ソフトウェア工学 |
|---|---|
| 分類 | 翻訳・最適化・検証(の“役割”とされた) |
| 主な成果物 | バイナリ、IR、診断ログ |
| 歴史上の転機 | “決裁文化”の技術への転用期 |
| 関連概念 | アセンブラ、リンカ、最適化、型検査 |
| よくある誤解 | 最適化は後付けだと考えられがちである |
コンパイラ(英: Compiler)は、において「人が書いた指示」を「機械が実行できる手順」に変換する装置(または工程)であるとされる[1]。ただし、由来をたどると「変換」よりも先に「決裁(コンパイア)」が問題になった時期があったと指摘されている[2]。
概要[編集]
コンパイラは、一般にで記述されたプログラムを、の形へ写像する仕組みとして説明される。しかし現場では「写像」より先に、誰が最終責任を負うかを決める工程――すなわち、文面上の“決裁”が必要だとされてきたという経緯が、技術史の側面として語られることがある[1]。
このためコンパイラは、、、、などの工程群からなると同時に、「言語仕様の解釈」や「診断メッセージの作法」を含む、半ば行政的な装置として扱われることもあった[3]。特に初期の系譜では、出力に加えて“文書”としてのログが重視され、監査のための控えが必ず残されるとされていた[4]。
また、コンパイラは「速く動かす」だけでなく「遅くするべき箇所を決める」ことが論点になる場合がある。例として、監査対象の演算だけは意図的に実行順を固定し、結果の再現性を確保する設計が提案されたとされる[5]。この観点は、のちに文化へ波及したと整理されることがある。
歴史[編集]
決裁としての翻訳:語源めぐる都市伝説[編集]
コンパイラという語の成立は諸説あるが、最も引用されやすい説では、北米の研究所で「コンパイア(決裁)待ち」のログが膨れ上がったことが契機だったとされる。すなわち、仕様書の解釈を巡る論争が長引くたび、提出者は同じ指示を何度も書き直す必要に迫られ、最後に“技術委員会が承認する前提の翻訳手順”が整備されたという[6]。
このときの小規模研究機関「Hudson Logic Office(HLO)」に属していたは、提出物の体裁を統一するため、変換工程に「決裁番号(Comp-Index)」を付与する提案をしたとされる。提案書では、決裁番号は出力ファイル名の先頭3文字と、提出日(年のみ)から機械的に導出される設計になっていたと記録されている[7]。なお、この設計が“コンパイラ”と呼ばれるようになったのは、当時の会話で「コンパイア、通った?」が「コンパイラ、回った?」に近い音で聞こえたことが原因だった、とする説がある[8]。
一方で別説では、語源は日本の電算事務で生まれたとされる。1950年代末、のに本部があるとされる「電算決裁局(※実務上の通称)」が、翻訳結果の証跡を“コンパイ”と呼んだのが原点であるという。もっとも、この局の一次記録は極めて少ないとされ、級の扱いを受けることもある[9]。ただし、語感の一致から“決裁→コンパイ”という連鎖は信じられやすいと評価されている。
最適化より先に“遅延”が導入された理由[編集]
コンパイラ史で意外と語られるのが、「最適化」は最初から目的ではなかった、という整理である。1970年代初頭、の大学連合で運用されていた実験的なコンパイラは、まず“遅延指示”を埋め込む仕様になっていたとされる。ここでいう遅延指示とは、計算機が実行を開始する前に、監査用のメタ情報を読み込むよう促す命令列である[10]。
当時のログ設計は極端に細かく、例えば演算器のキャッシュ状態を記録するため、1命令あたり平均で約0.27行の診断文を生成することが目標に置かれていたと伝えられる[11]。この数字は、導入当初の運用者が「診断文が2行を超えると読まれない」経験則から逆算したとされる。一方で、最適化は後段で段階的に導入され、最初は“速くしない代わりに説明する”ことが重視されたという[12]。
のちにこの思想は、(IR)を“説明可能な形”で残す流れに接続したとされる。IRは単なる抽象化でなく、監査官が追跡できる“文章の骨格”として扱われ、最適化パスにも文章生成規則が付属したと記録されている[13]。そのため、コンパイラには「変換する」だけでなく「説得する」という性格が付与されたと理解される場合がある。
国際化と“方言”問題:港の翻訳戦争[編集]
1980年代後半、を含むアジア拠点の研究者が、同じ仕様でも方言の違いが出力に反映される問題を指摘し、コンパイラ間の互換性が“翻訳戦争”として表面化したとされる。とくに湾岸研究群では、輸出向けのバイナリにだけ異なる警告文が入り、現場で「誰が直したのか」追跡できない事故が起きたと報告されている[14]。
この対立を収束させるため、傘下の「ソフトウェア証跡標準化委員会(SSSC)」が設置され、コンパイラの診断出力に“文書監査形式”を適用する案が採られたという[15]。委員会の議事録では、警告文の見出しは必ず「W-」から始め、番号は連番だが例外的に閏日(うるう日)直後の生成分だけ桁が1つ増える、と定められたとされる[16]。
もっとも、技術的な必然性は薄いにもかかわらず、制度として採用された理由には「人間の読みやすさ」の要素があったと説明される。その結果、コンパイラは計算機の道具であると同時に、組織の言語を翻訳する社会インフラとして位置づけられていったと整理される[17]。この“社会への波及”が、のちのやレビュー文化に影響したと見なされることがある。
批判と論争[編集]
コンパイラは、正しく動くことが前提とされる一方で、診断ログの書き方がしばしば論争の中心になると指摘されている。たとえば「警告文が長すぎると責任が分散する」「短すぎると誤解を誘導する」といった、性能以外の評価軸が持ち込まれた時期がある[18]。
また、決裁番号(Comp-Index)をめぐっても批判があった。番号が機械的に導出されるため、監査の都合で語彙が固定化し、言語仕様の更新が“番号の整合性”に引きずられるという問題が起きたとされる[19]。さらに、方言の差が残る場合、移植時の“説明”は整うのに“挙動”が一致しないという二重の齟齬が報告されたという[20]。
一方で、コンパイラが社会に与えた利益も大きいとされる。監査可能性や再現性の確保が、結果としてレビュー手順を標準化し、事故の発見速度を上げたと主張された。とはいえ、ある編集者は「結局、コンパイラは計算機より先に組織をコンパイルしている」と書き、当時の技術雑誌で小さな炎上になったと伝えられる[21]。なおこの比喩は一部で好意的に受け止められたが、他方で“過度な比喩”として批判も受けたとされる。
脚注[編集]
関連項目[編集]
脚注
- ^ Margaret A. Thornton「Comp-Indexが監査可能性を高めたという報告」『Journal of Translation Engineering』Vol.12 No.3, pp.41-58, 1982.
- ^ エイダ・マルコム「決裁待ちのログから生まれた“翻訳手順”」『計算体系報告』第7巻第2号, pp.11-27, 1969.
- ^ Klaus Zimmermann「Delayed Instruction and Human Readability in Early Compilers」『Proceedings of the International Symposium on Diagnostic Languages』Vol.2, pp.201-223, 1973.
- ^ 電算決裁局編『証跡ログの書式統一とその運用効果』電算決裁局出版部, 1961.
- ^ S. R. Patel「IR as an Explanatory Document: A Study of Audit-Friendly Intermediate Forms」『ACM Transactions on Software Narratives』Vol.5 No.1, pp.77-96, 1987.
- ^ 高田澄人「港湾研究群におけるコンパイラ方言問題と収束策」『ソフトウェア工学年報』第19巻第4号, pp.309-332, 1991.
- ^ 【タイトルがやや怪しい】J. H. Fairchild「Leap-Day Conventions in Compiler Warning Numbering」『Workshop on Temporal Conventions』pp.1-12, 1989.
- ^ Natsuki Inoue「診断メッセージは性能か制度か:レビュー文化への波及」『情報処理』Vol.33 No.9, pp.1027-1044, 1992.
- ^ SSSC「ソフトウェア証跡標準(暫定)—W-見出しと番号規則」ソフトウェア証跡標準化委員会, 1990.
- ^ Ruth A. McBain「Why Slow Code Sometimes Passes Audit: A Case Study」『IEEE Transactions on Human-Computer Systems』Vol.20 No.2, pp.88-109, 1986.
外部リンク
- コンパイラ診断ログ博物館
- SSSCフォーマット倉庫
- Comp-Index収集センター
- 方言互換性アーカイブ
- 遅延指示実験記録