Объяснение James Gosling того, почему байт Java подписывается

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

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

49
задан polygenelubricants 23 June 2010 в 21:27
поделиться

4 ответа

Похоже, простота была главной причиной. Из этого интервью :

Гослинг: Для меня как разработчика языков, чего я не считаю в наши дни, то, что «простое» на самом деле означало, я мог ожидать J. Random Developer держать спекуляцию в голове. Это определение говорит, что, например, Java не является - и на самом деле многие из этих языков заканчиваются множеством угловых случаев, вещей, которые на самом деле никто не понимает. Задайте вопрос любому разработчику C о неподписанном языке, и довольно скоро вы обнаружите, что почти ни один разработчик C на самом деле не понимает, что происходит с unsigned, что такое беззнаковая арифметика. Подобные вещи делали C. Я думаю, что языковая часть Java довольно проста. Библиотеки, которые вам нужно найти.

Мое первоначальное предположение заключалось в том, что это потому, что в Java вообще нет беззнаковых числовых типов.Почему байт должен быть исключением? char - особый случай, потому что он должен представлять кодовые единицы UTF-16 (спасибо Джону Скиту за цитату)

27
ответ дан 7 November 2019 в 11:55
поделиться

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

2
ответ дан 7 November 2019 в 11:55
поделиться

Мне не известны какие-либо прямые цитаты из Джеймса Гослинга, но есть официальный RFE для беззнакового байта :

Идентификатор ошибки: 4186775: запросить целочисленные типы без знака , особенно беззнаковый байт

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

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

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

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

6
ответ дан 7 November 2019 в 11:55
поделиться

Согласно '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".

В боковой колонке говорится: "Беззнаковый тип еще не реализован; возможно. никогда не будет". Как вы были правы. "*

14
ответ дан 7 November 2019 в 11:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: