注目★★★★★Lobsters
K&R C の知られざる仕様――文法の文脈依存性から型システムの歴史まで
30秒で把握
- 1K&R C には void / long double / signed / unsigned short などが存在せず、仕様が現代と大きく異なる
- 2単一パス構文解析の制約と記憶容量の制限が、当時の C 設計上の決定を正当化していた
- 3整数昇格・定数型判定など未標準化の仕様が競合し、ANSI C 採択時に統一された経緯を学べる
要約
著者は『The C Programming Language』初版と C89 有理化文書、7 版 Unix C コンパイラのソースコードを読み、pre-ANSI C の仕様について調査した。C の文脈依存で曖昧な文法は、単一パス構文解析が必須だった当時の制約下では合理的であり、K&R C ではプロトタイプスコープが存在しないため実装上の問題が軽微だった。void / long double / signed 指定子は ANSI の発明で、K&R C には存在しなかった。unsigned 型の整数昇格は標準化前に「符号保存」と「値保存」の 2 つの実装が競合し、最終的に値保存が採用された。hex/octal 定数は型が int に限定され、unsigned にはならず、8 と 9 も 8 進リテラルで有効だった。
あなたへの影響
K&R C から現代 C への進化を追うことで、型システムや文法設計の決定がなぜなされたかが理解でき、古いコードベースやレガシーシステムの挙動を正確に解釈する際に役立つ。
推奨:ANSI C 標準化の議論や非 Unix コンパイラとの相違も、方言の多さに直面するシステムエンジニアやコンパイラ実装者にとって参考になる。