nilとnullの歴史

に公開

はじめに

nilnull。私は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