Warum ist der Name des Java-Booleschen primitiven Typs nicht 'Bool'?

28

Java hat

  • int und Integer
  • boolean und Boolean

Dies scheint ein bisschen inkonsistent, warum auch nicht

  • boolvs Booleaneinen etablierten kürzeren Namen für primitiven Typ verwenden?

oder

  • integervs Integer, um Typnamen konsistent zu halten?

Ich denke, C ++ hatte sich entschieden, booleiniges früher als Java zu verwenden boolean, und vielleicht auch einige (zu der Zeit nicht standardmäßige?) C-Erweiterungen, für die es also einen historischen Vorrang gegeben hätte bool. Mir ist aufgefallen, dass ich zunächst oft instinktiv versuche, etwas zu verwenden bool(eine gute Sache, dass moderne Redakteure dies sofort ohne zusätzliche Kompilierungsrunde erkennen), daher wäre es schön, die Gründe für den aktuellen Stand der Dinge zu kennen.

Wenn sich jemand an einen Teil der Geschichte erinnert oder sogar relevante historische Diskussionen im Netz finden und verknüpfen kann, wäre das großartig.

hyde
quelle
8
booleanist definitiv expliziter als bool. Ich würde lieber fragen, warum intnicht angerufen wird integer. Meine Vermutung: intund charwo zu tief verwurzelt, um in integerund geändert zu werden character, war aber boolnoch nicht vollständig etabliert.
Joachim Sauer
"Ich denke, C ++ hatte sich schon viel früher für bool entschieden, als Java sich für boolean entschieden hatte." Warum denken Sie das?
John Bartholomew
6
Laut Evolving einer Sprache in und für die reale Welt: C ++ 1991-2006 wurde der boolTyp 1993 in C ++ eingeführt. Java war booleanin seiner ersten Veröffentlichung 1995 enthalten, aber das Java-Projekt selbst wurde 1991 gestartet. Ohne weitere Quellen für C ++ zu finden Information, es ist mir nicht klar, was zuerst kam oder welchen (wenn überhaupt) Einfluss sie aufeinander hatten.
John Bartholomew
3
Die Oak-Sprachspezifikation (Version 0.2, urheberrechtlich geschützt 1994) enthält auch den booleanTyp. (Oak wurde später in Java umbenannt). Das bringt die Daten noch näher zusammen, obwohl ich immer noch keine eindeutigen Beweise dafür sehe, dass in beiden Richtungen Vorrang oder Einfluss besteht.
John Bartholomew
Es ist nicht widersprüchlich, es gibt doubleund Doubleauch.
Vortexwolf

Antworten:

20

Ohne Kontakt zu Personen aufzunehmen, die tatsächlich an diesen Entwurfsentscheidungen beteiligt waren, ist es meiner Meinung nach unwahrscheinlich, dass wir eine endgültige Antwort finden. Basierend auf den Zeitplänen für die Entwicklung von Java und C ++ würde ich jedoch vermuten, dass Java booleanvor oder gleichzeitig mit der Einführung boolin C ++ ausgewählt wurde und sicherlich auch boolschon in großem Umfang eingesetzt wurde. Möglicherweise booleanwurde dies aufgrund der längeren Verwendungsdauer (wie in der Booleschen Algebra) oder aufgrund der Übereinstimmung mit anderen Sprachen (wie Pascal) gewählt, die bereits einen booleanTyp hatten.

Historischer Zusammenhang

Laut Evolving einer Sprache in und für die reale Welt: C ++ 1991-2006 wurde der boolTyp 1993 in C ++ eingeführt.

Java ist booleanin seiner ersten Version im Jahr 1995 enthalten ( Java Language Specification 1.0 ). Die früheste Sprachspezifikation, die ich finden kann, ist die Oak 0.2-Spezifikation ( Oak wurde später in Java umbenannt ). Diese Oak-Spezifikation ist mit "Copyright 1994" gekennzeichnet, aber das Projekt selbst wurde 1991 gestartet und hatte anscheinend bis zum Sommer 1992 eine funktionierende Demo .

John Bartholomew
quelle
12

Tatsächlich ist Java hier historischer. Die Theorie der wahren und falschen Werte wurde von George Boole erfunden und wird ihm zu Ehren gemeinhin als Boolesche Algebra bezeichnet .

boolist eigentlich nur eine Abkürzung, um einen längeren Namen zu vermeiden. Angesichts der Unterstützung moderner IDEs für die automatische Vervollständigung ist dies jedoch kein gültiger Grund mehr (und war noch nicht einmal in den Tagen, in denen sich Java für entschieden hat boolean).

Ich war nicht Teil des Entscheidungsprozesses für Java, aber wenn sich jemand für die Geschichte interessiert, dann ist "Boolesche Algebra" der relevante historische Vorrang, und man könnte genauso gut die C / C ++ - Entscheidung in Frage stellen, warum sie Booles Namen durch Abschneiden verstümmelt haben die e.

Frank
quelle
5
Aus demselben Grund wird der POSIX-Aufruf zum Erstellen einer Datei aufgerufen creat().
Blrfl
5
Also sagst du, intsollte es sein integer?
4
Wenn Sie historisch korrekt sein wollen, dann denke ich , Booleanist ein bisschen schlecht, wenn man bedenkt es 3 Werte haben kann ( Boolean.FALSE, Boolean.TRUE, null) ... Punkt ist, Programmiersprache Symbole und reservierte Worte sind immer ein Kompromiss aus verschiedenen Faktoren ab , und die historische Genauigkeit ist wahrscheinlich ziemlich niedrig auf dieser Liste.
Hyde
2
Ich habe nicht die Absicht, historisch korrekt zu sein, aber vergessen Sie nicht, dass nicht alle Sprachen diesen Milliarden-Dollar-Fehler zulassen null.
Frank
2
@Frank Hey, ich bin Umwandlung nur eine bestimmte Nullpointer Situation schöneres Fehlerberichterstattung und Handhabung, und zu versuchen , aktiv vergessen lalalaa nicht hören , was Sie sagen lalalaa ;-)
hyde
-2

Ich kann das Konsistenzproblem nicht ansprechen, aber es gibt hier eine lange Geschichte.

Soweit ich mich erinnere, hat Algol 60 als erste Sprache seine logischen Typen als "Boolean" bezeichnet. Algol 60 hatte auch Typen wie 'Ganzzahl', 'Prozedur' usw.

Algol 68 folgte, und Abkürzungen schienen in Mode zu sein: 'bool', 'int', 'proc' usw.

So können Sprachdesigner wählen, welchen Stil sie mögen, und es gibt einen Präzedenzfall dafür.

Dave
quelle