Я был первоначально удивлен, что Java решает указать это byte
подписывается, с диапазоном от -128..127
(включительно). У меня создается впечатление, что большинство 8-разрядных представлений числа не подписано с диапазоном 0..255
вместо этого (например, IPv4 в точечной десятичной записи).
Также - James Gosling, когда-либо, попросил объяснять, почему он решил это byte
подписывается? Были известные обсуждения/дебаты об этой проблеме в прошлом между авторитетными разработчиками языка программирования и/или критиками?
Похоже, простота была главной причиной. Из этого интервью :
Гослинг: Для меня как разработчика языков, чего я не считаю в наши дни, то, что «простое» на самом деле означало, я мог ожидать J. Random Developer держать спекуляцию в голове. Это определение говорит, что, например, Java не является - и на самом деле многие из этих языков заканчиваются множеством угловых случаев, вещей, которые на самом деле никто не понимает. Задайте вопрос любому разработчику C о неподписанном языке, и довольно скоро вы обнаружите, что почти ни один разработчик C на самом деле не понимает, что происходит с unsigned, что такое беззнаковая арифметика. Подобные вещи делали C. Я думаю, что языковая часть Java довольно проста. Библиотеки, которые вам нужно найти.
Мое первоначальное предположение заключалось в том, что это потому, что в Java вообще нет беззнаковых числовых типов.Почему байт
должен быть исключением? char
- особый случай, потому что он должен представлять кодовые единицы UTF-16 (спасибо Джону Скиту за цитату)
Нет причин для byte
быть беззнаковым. когда у вас есть тип char
для представления символов, byte
обычно не выполняет эту работу char
.
Мне не известны какие-либо прямые цитаты из Джеймса Гослинга, но есть официальный RFE для беззнакового байта
:
Идентификатор ошибки: 4186775: запросить целочисленные типы без знака , особенно беззнаковый
байт
Состояние : 11-закрыто, не будет исправлено , запрос на улучшение
Пожалуйста, расширьте дизайн Java, чтобы разрешить беззнаковые типы, в частности беззнаковый
байт
.Мне было интересно, почему в Java нет целочисленных типов без знака. Это мне кажется, что для значений длины
байта
крайне неудобно не иметь them [...]Я понимаю, что это дизайнерское решение было принято разработчиками Java. Чего я не понимаю, так это почему . Считали ли они беззнаковые целые типы злом? или вредно, и предпочел защитить меня от самого себя?
Согласно 'Oak Language Specification 0.2' aka Java language:
"Тип байтов в языке Oak - это то, что программисты на языке C привыкли считать типом char. Но в языке Oak символы имеют ширину 16 бит. Наличие отдельного типа байта устраняет путаницу в Си между интерпретацией char как 8-битного целого числа и как символа."
Вы можете взять постскриптовую копию отсюда:
http://cretesoft.com/archive/files/OakSpec0.2.ps (частичная копия на scribd)
Также на этом сайте есть часть интервью: (Где он защищает отсутствие беззнакового байта в java)
http://www.darksleep.com/player/JavaAndUnsignedTypes.html
Добавляю интервью, взятое с вышеупомянутой страницы...
*" http://www.gotw.ca/publications/c_family_interview.htm
Вопрос: Программисты часто говорят о преимуществах и недостатках программирования на "простом языке". Что эта фраза означает для Вы, и является ли [C/C++/Java] простым языком с Вашей точки зрения?
Ричи: [удалено для краткости]
Страуструп: [удалено для краткости]
Гослинг: Для меня, как для разработчика языка, к коим я себя не очень-то причисляю себя таковым в наши дни, "простота" в конечном итоге означала следующее: могу ли я ожидать, что Дж. Я ожидаю, что J. Random Developer будет держать спецификацию в голове. Это определение говорит, что, например, Java не является - и на самом деле многие из этих языков в конечном итоге имеют много угловых случаев, вещей, которые никто никто не понимает. Спросите любого разработчика языка Си о том, что такое unsigned, и очень скоро вы узнаете, что почти никто из разработчиков языка Си не понимает. вскоре вы обнаружите, что почти никто из разработчиков языка Си на самом деле не понимает, что происходит с беззнаковыми числами, что такое беззнаковая арифметика. Подобные вещи сделали Си сложным. Языковая часть Java, как мне кажется, довольно простая. Библиотеки вам придется поискать.
С другой стороны.... По материалам http://www.artima.com/weblogs/viewpost.jsp?thread=7555
Once Upon an Oak ... by Heinz Kabutz 15 июля 2003
... Пытаясь заполнить свои пробелы в истории Java, я начал копаться на сайте Sun, и в конце концов наткнулся на спецификацию языка Oak Language Спецификация языка Oak версии 0.2. Oak - это первоначальное название того, что которое сейчас известно как Java, и это руководство является самым старым руководством доступным для Oak (то есть Java). ... Беззнаковые целые значения (Раздел 3.1)
В спецификации сказано: "Четыре типа целых чисел имеют ширину 8, 16, 32 и 64 бита, и являются знаковыми, если перед ними не стоит модификатор unsigned".
В боковой колонке говорится: "Беззнаковый тип еще не реализован; возможно. никогда не будет". Как вы были правы. "*