代码之家  ›  专栏  ›  技术社区  ›  polygenelubricants

杰姆斯·高斯林解释Java字节为何被签署

  •  47
  • polygenelubricants  · 技术社区  · 15 年前

    我最初感到惊讶的是,Java决定指定 byte 有符号,范围为 -128..127 (包括)。我认为大多数8位数字表示都是无符号的,范围为 0..255 取而代之(例如) IPv4 in dot-decimal notation )

    詹姆斯·戈斯林也曾被要求解释为什么他决定 字节 签署了吗?在过去,权威编程语言设计师和/或批评者之间是否就这个问题进行过引人注目的讨论/辩论?

    4 回复  |  直到 14 年前
        1
  •  26
  •   Joey Gumbo    14 年前

    似乎简单是主要原因。从 this interview :

    戈斯林:对我来说,作为一个语言设计师,我现在并不认为自己是一个真正的设计师,“简单”的最终含义是,我能指望J.Random开发人员在他的头脑中掌握这个规范吗?这个定义说,例如,Java不是——事实上,很多这样的语言最终有很多角落的案例,没有人真正理解的东西。测试任何一个C开发人员关于无符号的问题,很快你就会发现几乎没有C开发人员真正理解无符号的算法是什么。这样的事情使C变得复杂。我认为Java的语言部分很简单。你必须去查图书馆。

    我最初的假设是因为Java根本没有无符号的数字类型。为什么要 byte 是例外吗? char 是一种特殊情况,因为它必须表示UTF-16代码单位(感谢Jon Skeet的报价)

        2
  •  13
  •   Joachim Sauer    14 年前

    按照“橡树语言规范0.2”,又名Java语言:

    “OAK字节类型是C程序员通常认为的char类型。但在Oak语言中,字符宽16位。使用单独的字节类型可以消除C中将char解释为8位整数和字符之间的混淆。”

    您可以从此处获取PostScript副本:

    http://cretesoft.com/archive/files/OakSpec0.2.ps ( partial copy on scribd )

    在这个网站上也有一部分采访:(他在捍卫Java中无符号字节的缺失)

    http://www.darksleep.com/player/JavaAndUnsignedTypes.html

    正在添加从上述页面中选取的面试…

    * http://www.gotw.ca/publications/c_family_interview.htm

    问:程序员经常谈论 用“简单语言”编程。这个短语是什么意思? 你,和[c/c++/java]在你看来是一种简单的语言吗?

    里奇:【为了简洁删除】

    stroustrup:[为简洁而删除]

    戈斯林:对我来说,作为一个语言设计师,我不算什么 像现在这样,“简单”的真正含义是 我希望J.Random开发人员在他的头脑中持有规范。那 定义说,例如,Java不是,事实上很多。 这些语言最终会出现很多角落案例,这些案例都是无人知晓的。 真的理解。询问任何C开发人员关于未签名和漂亮的 很快你就会发现几乎没有C开发人员真正理解 继续进行无符号运算,什么是无符号算术。像那样的事情 使C复杂。我认为Java的语言部分很漂亮。 简单。你必须去查图书馆。

    另一方面。。。。根据 http://www.artima.com/weblogs/viewpost.jsp?thread=7555

    曾经在一棵橡树上… Heinz Kabutz 2003年7月15日

    … 为了填补我在Java历史上的空白,我开始四处挖掘。 孙的网站,最终偶然发现了橡树语 橡木0.2版规范。橡树是什么的原名 现在通常被称为Java,这个手册是最古老的手册。 可用于橡木(即Java)。 … 无符号整数值(第3.1节)

    规范说:“宽度为8、16、32的四种整数类型 和64位,并且除非以无符号修饰符作为前缀,否则是有符号的。

    在侧边栏中,它说:“未签名尚未实现;它可能 “永远不会。”你是多么的正确。 *

        3
  •  6
  •   polygenelubricants    15 年前

    我不知道詹姆斯·戈斯林的任何直接引述,但有一份正式的未签名的RFE。 byte :

    Bug ID: 4186775: request unsigned integer types, esp. unsigned byte

    状态 11关闭, 不会修复 ,请求增强

    请扩展Java设计以允许无符号类型,特别是 未签名的 字节 .

    我一直想知道为什么Java中没有无符号整数类型。它 在我看来 字节 -没有长度值是非常尴尬的 他们[…]

    我认识到这是Java开发人员做出的一个设计决定。 我不明白的是为什么 . 他们是否认为无符号整数类型邪恶? 还是有害的,选择保护自己?

        4
  •  2
  •   this. __curious_geek    15 年前

    没有理由 byte 待签署。当你拥有 char 键入以表示字符, 字节 通常不会做那种工作 烧焦 .