Джеймс Гослинг объяснил, почему байт Java подписан - PullRequest
48 голосов
/ 24 июня 2010

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

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

Ответы [ 4 ]

26 голосов
/ 24 июня 2010

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

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

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

13 голосов
/ 24 июня 2010

В соответствии с 'Oak Language Specification 0.2' или языком Java:

"Байт-тип Oak - это то, к чему программисты C привыкли думать как тип char. Но в языке Oak символы имеют ширину 16 бит. Наличие отдельного байтового типа устраняет путаницу в C между интерпретацией символа как 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 нет - и на самом деле много эти языки заканчиваются многими угловыми случаями, вещами, которые никто действительно понимает. Викторина любого разработчика C о unsigned и довольно скоро вы обнаружите, что почти никто из разработчиков C на самом деле не понимает, что продолжается без знака, что такое беззнаковая арифметика. Такие вещи сделал С комплекс. Языковая часть Java, я думаю, довольно просто. Библиотеки, которые вы должны искать.

С другой стороны .... Согласно http://www.artima.com/weblogs/viewpost.jsp?thread=7555

Однажды Дуб ... Хайнц Кабуц 15 июля 2003 г.

... Пытаясь заполнить пробелы в истории Java, я начал копаться в Веб-сайт Sun, и в конце концов наткнулся на Oak Language Спецификация для дуба версии 0.2. Дуб был оригинальным названием того, что в настоящее время широко известен как Java, и это руководство является самым старым руководством доступный для Дуба (то есть Ява). ... Целочисленные значения без знака (раздел 3.1)

Спецификация гласит: «Четыре целых типа ширины 8, 16, 32 и 64 бита, и они подписаны, если не имеют префикса без знака.

На боковой панели написано: «unsigned еще не реализован; возможно, никогда не будь ". Как правильно вы были. «*

6 голосов
/ 24 июня 2010

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

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

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

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

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

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

2 голосов
/ 24 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...