James Gosling解释了为什么Java的字节被签名
我最初感到惊讶,Java决定指定该byte
是有符号的,范围从-128..127
(含)。 我的印象是,大多数8位数字的表示是无符号的,取而代之的是0..255
的范围(例如, 以点分十进制forms的IPv4 )。
那么James Gosling有没有被要求解释他为什么决定byte
被签名? 在权威的编程语言devise者和/或批评者之间,过去有关于这个问题的着名讨论/辩论?
看起来简单是主要原因。 从这次采访来看:
Gosling:对于我这样一个语言devise师来说,我真的不把自己算在这些日子里,真正意义上的“简单”意味着什么,我可以指望J.Random Developer在他的脑海中保持这个规范。 这个定义说,例如,Java并不是 – 实际上很多这些语言最终都会遇到大量的angular落案例,这些都是没有人真正理解的。 测验任何C开发者关于未签名的,很快你会发现几乎没有C开发者真正理解什么是无符号的,什么是无符号的算术。 像这样的事情使C复杂。 Java的语言部分我觉得很简单。 你必须查找库。
我最初的假设是,这是因为Java根本没有无符号的数字types。 为什么byte
应该是一个例外? char
是一个特例,因为它必须表示UTF-16代码单元(感谢Jon Skeet的报价)
按照“橡树语言规范0.2”(又名Java语言)
“Oak字节types是C程序员习惯的字符types,但是在Oak语言中,字符宽度为16位,具有单独的字节types可以消除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]是一种简单的语言?
Ritchie:[简洁删除]
Stroustrup:[简洁删除]
Gosling:对于我这样一个语言devise师来说,我真的不把自己算在这些日子里,真正意义上的“简单”意味着什么,我可以指望J.Random Developer在他的脑海中保持这个规范。 这个定义说,例如,Java并不是 – 实际上很多这些语言最终都会遇到大量的angular落案例,这些都是没有人真正理解的。 测验任何C开发者关于未签名的,很快你会发现几乎没有C开发者真正理解什么是无符号的,什么是无符号的算术。 像这样的事情使C复杂。 Java的语言部分我觉得很简单。 你必须查找库。
另一方面….根据http://www.artima.com/weblogs/viewpost.jsp?thread=7555
曾经的橡树…由Heinz Kabutz 2003年7月15日
为了填补我在Java历史上的空白,我开始在Sun的网站上进行挖掘,最终偶然发现了Oak版本0.2的Oak语言规范。 橡树是现在俗称的Java的原始名称,本手册是橡树(即Java)最古老的手册。 …无符号整数值(第3.1节)
规范说:“8,16,32和64位的四个整数types的宽度,并且除非用无符号修饰符前缀,否则是带符号的。
在侧边栏中,它说:“未签名还没有实现,它可能永远不会。” 你是多么的正确。 “*
我不知道詹姆斯·高斯林(James Gosling)有任何直接引用,但是对于无符号byte
有一个正式的RFE:
错误ID:4186775:请求无符号整数types,尤指 无符号
byte
状态 :11-closures, 不会修复 ,请求增强
请扩展Javadevise以允许无符号types,特别是无符号
byte
。我一直在想,为什么在Java中没有无符号整数types。 在我看来,对于
byte
长度值是非常尴尬的没有他们[…]我承认这是由Java开发人员做出的一个devise决定。 我不明白的是为什么 。 他们认为无符号的整数types是邪恶的还是有害的,并且select了保护我自己?
没有理由一个byte
无符号。 当你有char
types来表示字符时, byte
通常不会做char
那个工作。