Почему имя логического примитивного типа Java не «bool»?

28

Ява имеет

  • int а также Integer
  • boolean а также Boolean

Это кажется немного противоречивым, почему бы и нет

  • boolпротив Booleanиспользования установленного более короткого имени для примитивного типа?

или

  • integerпротив того, Integerчтобы сохранить имена типов согласованными?

Я думаю, что C ++ решил использовать boolнемного раньше, чем Java решил использовать boolean, и, возможно, также некоторые (нестандартные в то время?) Расширения C, так что был бы исторический приоритет для bool. Я заметил, что boolсначала я часто инстинктивно пытаюсь использовать это (хорошо, что современные редакторы сразу замечают это без дополнительного раунда компиляции), поэтому было бы хорошо узнать обоснование текущего положения вещей.

Если кто-то запомнит (частично) эту историю или даже сможет найти и связать ее с соответствующей исторической дискуссией в сети, это было бы здорово.

Хайд
источник
8
booleanопределенно более явный, чем bool. Я бы лучше спросил почему intне называется integer. Мое предположение: intи charгде слишком укоренилось, чтобы быть измененным integerи character, но boolеще не было полностью установлено.
Йоахим Зауэр
«Я думаю, что C ++ решил использовать bool немного раньше, чем Java решил использовать boolean» Почему вы так думаете?
Джон Варфоломей
6
Согласно « Развитие языка в реальном мире и для него»: C ++ 1991-2006 , этот boolтип был представлен в C ++ в 1993 году. Java была включена booleanв его первый выпуск в 1995 году, но сам проект Java был запущен в 1991 году. Без поиска дополнительных источников информация, мне не ясно, что было первым, или какое влияние они оказали друг на друга.
Джон Варфоломей
3
Спецификация языка Oak (версия 0.2, авторское право 1994 г.) также включает booleanтип. (Дуб был позже переименован в Java). Это подталкивает даты еще ближе, хотя я все еще не вижу определенных доказательств, чтобы показать приоритет или влияние, в любом направлении.
Джон Варфоломей
Это не противоречиво, есть doubleи Doubleтакже.
vortexwolf

Ответы:

20

Не связываясь с людьми, которые действительно были вовлечены в эти дизайнерские решения, я думаю, что мы вряд ли найдем окончательный ответ. Однако, исходя из сроков разработки как Java, так и C ++, я бы предположил, что Java booleanбыла выбрана до или одновременно с введением boolв C ++ и, конечно же, раньше boolшироко использовалась. Возможно, это booleanбыло выбрано из-за более длинной истории использования (как в булевой алгебре) или из-за соответствия другим языкам (таким как Паскаль), которые уже имели booleanтип.

Исторический контекст

Согласно « Развитие языка в реальном мире»: C ++ 1991-2006 , этот boolтип был введен в C ++ в 1993 году.

Java включена booleanв свой первый выпуск в 1995 году ( Java Language Specification 1.0 ). Самая ранняя языковая спецификация, которую я могу найти, - это спецификация Oak 0.2 ( впоследствии она была переименована в Java ). Эта спецификация Дуба помечена как «Copyright 1994», но сам проект был начат в 1991 году и, по-видимому, имел рабочую демонстрацию к лету 1992 года .

Джон Варфоломей
источник
12

На самом деле, Java более точна в истории. Теория истинных и ложных ценностей была изобретена Джорджем Булем и обычно упоминается как булева алгебра в его честь.

boolна самом деле это просто ярлык, позволяющий избежать более длинного имени, однако, учитывая поддержку автозавершения современных IDE, это уже не является веской причиной (и даже не было в те времена, когда Java решила пойти на это boolean).

Я не участвовал в процессе принятия решений по Java, но если кто-то заботится об истории, то «булева алгебра» является релевантным историческим приоритетом, и с тем же успехом можно поставить под сомнение решение C / C ++ о том, почему они искалечили имя Буля, обрезав его. e.

Фрэнк
источник
5
По той же причине вызывается вызов POSIX для создания файла creat().
Blrfl
5
Так ты говоришь intдолжно быть integer?
4
Если вы хотите быть исторически точным, то я думаю , что Booleanэто своего рода плохо, учитывая это может иметь 3 значения ( Boolean.FALSE, Boolean.TRUE, null) ... Суть в том, программирование символов языка и зарезервированные слова всегда компромисс нескольких факторов, и исторической точности вероятно, довольно низко в этом списке.
Hyde
2
Я не собираюсь быть исторически точным, но не забывайте, что не все языки допускают эту ошибку в миллиард долларов null.
Фрэнк
2
@Frank Эй, я просто преобразовываю конкретную ситуацию NullPointerException в более приятные сообщения об ошибках и обрабатываю их, и пытаюсь активно забыть LALALAA, не услышав, что вы говорите LALALAA ;-)
hyde
-2

Я не могу решить проблему согласованности, но здесь есть длинная история.

Насколько я помню, Algol 60 был первым языком, который обозначил свои логические типы как «Boolean». Алгол 60 также имел такие типы, как «целое число», «процедура» и т. Д.

Вскоре появился Алгол 68, и в моде появились сокращения: «bool», «int», «proc» и т. Д.

Таким образом, языковые дизайнеры могут выбрать любой стиль, который им нравится, и для этого есть прецедент.

Дейв
источник