Джеймс Гослинг объясняет, почему байт Java подписан
Первоначально я был удивлен тем, что Java решает указать, что byte
подписан, с диапазоном от -128..127
(включительно). У меня создалось впечатление, что большинство представлений с 8-битовыми числами без знака с диапазоном 0..255
вместо этого (например, IPv4 в десятичной системе счисления).
Итак, Джеймс Гослинг попросили объяснить, почему он решил, что byte
подписан? Были ли в прошлом известные дискуссии/дискуссии по этому вопросу между авторитетными разработчиками языка программирования и/или критиками?
Ответы
Ответ 1
Похоже, что простота была основной причиной. Из это интервью:
Гослинг: для меня, как разработчика языка, который я на самом деле не считаю себя в наши дни, то, что "простое" действительно в конечном итоге означало, я мог ожидать, что J. Random Developer проведет спецификацию в его голове. В этом определении говорится, что, например, Java не является - и на самом деле многие из этих языков имеют множество угловых случаев, которые никто не понимает. Попробуйте любой разработчик C о неподписанном, и довольно скоро вы обнаружите, что почти ни один разработчик C не понимает, что происходит с unsigned, что означает арифметика без знака. Такие вещи сделали сложным. Языковая часть Java, я думаю, довольно проста. Библиотеки, которые вам нужно найти.
Мое первоначальное предположение заключалось в том, что это потому, что Java вообще не имеет неподписанных числовых типов. Почему byte
должно быть исключением? char
- особый случай, поскольку он должен представлять кодовые единицы UTF-16 (спасибо Jon Skeet за цитату)
Ответ 2
В соответствии с "Спецификацией языка дуба 0.2", ака Java:
"Тип байтового дуба - это то, что программисты C используют для обозначения типа char. Но на языке Дуба символы имеют ширину 16 бит. Наличие отдельного байтового типа устраняет путаницу в C между интерпретацией 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
Q: Программисты часто говорят о преимуществах и недостатках программирование на "простом языке". Что означает эта фраза для вы и есть [C/С++/Java] простой язык в вашем представлении?
Ричи: [удален для краткости]
Stroustrup: [удален для краткости]
Гослинг: для меня, как для языкового дизайнера, которого я действительно не считаю как и в наши дни, то, что "простое" действительно оказалось Я ожидаю, что J. Random Developer проведет спецификацию в его голове. Что определение говорит, что, например, Java не является - и на самом деле много на этих языках заканчивается множество угловых дел, что никто действительно понимает. Опробуйте любого разработчика C о неподписанном, и довольно скоро вы обнаружите, что почти ни один разработчик C не понимает, что продолжается без знака, какая неподписанная арифметика. Такие вещи сделанный комплекс С. Языковая часть Java, я думаю, довольно просто. Библиотеки, которые вам нужно найти.
С другой стороны.... Согласно http://www.artima.com/weblogs/viewpost.jsp?thread=7555
Однажды на дубе... Хайнц Кабуц 15 июля 2003 г.
... Пытаясь заполнить пробелы в истории Java, я начал копаться Sun, и в конечном итоге наткнулся на язык дуба Спецификация для дуба версии 0.2. Дуб был оригинальным названием того, что теперь широко известна как Java, и это руководство является самым старым руководством доступный для Oak (т.е. Java).... Целочисленные значения без знака (раздел 3.1)
В спецификации указано: "Четыре целых типа ширины 8, 16, 32 и 64 бита, и подписываются без предварительного префикса беззнаковым модификатором.
На боковой панели в нем написано:" unsigned еще не реализована, она может никогда не будет ". Как вы были правы." *
Ответ 3
Я не знаю никаких прямых цитат от Джеймса Гослинга, но есть официальная RFE для unsigned byte
:
Состояние: 11-закрыто, не будет исправлено, запрос на улучшение
Пожалуйста, расширьте Java-дизайн, чтобы использовать типы без знака, в частности unsigned byte
.
Мне было интересно, почему в Java нет целых типов без знака. Это мне кажется, что для значений byte
-length крайне неудобно не иметь их [...]
Я понимаю, что это было дизайнерское решение разработчиков Java. Я не понимаю, почему. Считали ли они неподписанные целые типы злыми или вредно, и решил защитить меня от себя?
Ответ 4
Нет никаких причин для того, чтобы byte
был беззнаковым. если у вас есть тип char
для представления символов, byte
обычно не выполняет это задание char
.