⬜
nilとnullの歴史
はじめに
nilとnull。私はC言語から入ったためnullに馴染みがありますが、nilとnullの歴史はどうなっているのか、その語源はどこからなのかが気になったため、調べてみました。
サマリ
nil
nilは、1960–61年にLispで「空リスト/偽」を表す記号として登場し、その後 Pascalにてポインタのどこにも指していない値や Smalltalkで未定義オブジェクトの唯一のインスタンスなどオブジェクト/記号寄りの文脈へ広がりました。Algol 68でもnil name(どの値も参照しない名前)が規定されています。
null
nullは、参照/ポインタが何も指さないという意味での値(定数)として浸透。HoareがALGOL W(1965)にnull referenceを入れる。その後C言語のnull pointerとして決定的に普及、SQL では欠損・不明を示すマーカーNULLとして使用されました。ASCIIの NUL(コード0)は文字の制御コードで、null pointerとは別物ですが、用語の普及に影響しました。
年表
| 年 | 用語 | 出典/場面 | 使われ方(要旨) | 出典 |
|---|---|---|---|---|
| 1960–61 | NIL | Lisp 1.5/Lisp I | 空リストの終端・空リスト自身(偽と同一視) | LISP 1.5 Programmer's Manual |
| 1963 | NUL | ASCII 制御文字 | コード0の Null 文字(文字コード領域の用語) | American National Standard |
| 1965 | null reference | ALGOL W(Hoare証言) | 参照が何も指さない値として導入 | Null References: The Billion Dollar Mistake |
| 1968–73 | nil | ALGOL 68(改訂報告) | どの値も参照しない nil name の概念を定義 | Revised Report on the Algorithmic Language Algol 68 |
| 1970–73 | nil | Pascal(言語報告・標準化過程) | 全ポインタ型に属する特別値。何も指さない | Pascal News |
| 1988 | null pointer | C(K&R 第2版) | 0 から生成される特別なポインタ値 | The C Programming Language |
| 1979 | NULL | Unix マニュアル文脈 | NULL は null pointer の表記として使用 | UNIX Programming — Second Edition |
| 1983 | nil | Smalltalk-80 | UndefinedObject の唯一のインスタンス(値がないオブジェクト) | GNU Smalltalk User's Guide |
| 1985–86 | NULL | Codd(関係モデル拡張) | 欠損(適用可だが未知)を表すマーク。SQL に継承 | Missing Information (Applicable and Inapplicable) in ... |
| 1990–91 | NULL | ANSI C / FIPS | C89/C90 で null pointer constant として整理される | for information systems - programming language - C |
| 1990年代 | nil | Plan9 C | ゼロ値ポインタの名前として nil を採用(文化的逆輸入) |
How to Use the Plan 9 C Compiler* |
| 2009 | null | Hoare講演 | Billion-Dollar Mistakeとして回顧(設計背景の一次証言) | Null References: The Billion Dollar Mistake |
Discussion