Джеймс Гослинг объясняет, почему байт Java подписан - программирование
Подтвердить что ты не робот

Джеймс Гослинг объясняет, почему байт Java подписан

Первоначально я был удивлен тем, что Java решает указать, что byte подписан, с диапазоном от -128..127 (включительно). У меня создалось впечатление, что большинство представлений с 8-битовыми числами без знака с диапазоном 0..255 вместо этого (например, IPv4 в десятичной системе счисления).

Итак, Джеймс Гослинг попросили объяснить, почему он решил, что byte подписан? Были ли в прошлом известные дискуссии/дискуссии по этому вопросу между авторитетными разработчиками языка программирования и/или критиками?

4b9b3361

Ответ 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:

Идентификатор ошибки: 4186775: запросить целые типы без знака, особенно. unsigned byte

Состояние: 11-закрыто, не будет исправлено, запрос на улучшение

Пожалуйста, расширьте Java-дизайн, чтобы использовать типы без знака, в частности unsigned byte.

Мне было интересно, почему в Java нет целых типов без знака. Это мне кажется, что для значений byte -length крайне неудобно не иметь их [...]

Я понимаю, что это было дизайнерское решение разработчиков Java. Я не понимаю, почему. Считали ли они неподписанные целые типы злыми или вредно, и решил защитить меня от себя?

Ответ 4

Нет никаких причин для того, чтобы byte был беззнаковым. если у вас есть тип char для представления символов, byte обычно не выполняет это задание char.