Почему 0xCAFEBABE: история магического числа class-файлов Java
Первые четыре байта любого файла .class в Java — это так называемое магическое число 0xCAFEBABE. Оно позволяет инструментам быстро отличать class-файлы от всего остального. В мае 1996 года, работая над статьёй о жизненном цикле class-файлов, Билл Веннерс задумался, есть ли за этим значением какой-то глубокий смысл, и задал вопрос в конференции comp.lang.java.
Версии и догадки
Отклик оказался богатым на гипотезы. Кто-то резонно заметил, что число всё равно нужно было выбрать, а из шестнадцатеричных цифр A–F слов на кофейную тему складывается не так уж много. Один из участников подсчитал, что комбинация «CAFE BABE» звучит привлекательнее вариантов «A FAB CAFE» или «CAFE FACE», и уж точно приятнее, чем «A BAD CAFE». Другой предложил читать нули как буквы O и получить 0x00C0FFEE — «OO COFFEE», то есть объектно-ориентированный кофе.
Вспомнили и предшественников. Машина Burroughs B6700 когда-то заполняла «неинициализированную» память словами 0xBADBADBADBAD. Классическое значение-заглушка 0xDEADBEEF до сих пор в ходу; ошибку с чтением неинициализированной памяти в некоторых кругах так и называют — «dead beef». Прозвучала и версия, что 0xCAFEBABE Sun позаимствовала у NeXTSTEP, где этим числом помечались «толстые» бинарники под разные процессоры.
Ответ из первых рук
Настоящий ответ дал Патрик Нотон, один из участников команды, создавшей Java. По его словам, магическое число для class-файлов выбрали задолго до того, как язык получил имя Java. Разработчики искали что-то весёлое, запоминающееся и уникальное. 0xCAFEBABE обошло ближайшего конкурента — 0xDEADBABE. То, что число оказалось косвенной отсылкой к симпатичным баристам в кофейне Peet's Coffee и словно предвосхитило будущее название языка, — чистое совпадение.
Иронии добавила и судьба отвергнутого варианта: 0xDEADBABE, как выяснилось, использовалось в начале файлов arena в IRIX — так что команде повезло, что она его не взяла. А отладочное ядро Solaris, к слову, помечало освобождённые блоки памяти значением 0xCAFEFEED.
История показывает, что за одним из самых узнаваемых артефактов Java стоит не хитрый замысел, а желание инженеров выбрать нечто забавное и легко запоминающееся.
Источник: Lobsters
Комментарии
Войдите, чтобы комментировать.