gpt4 book ai didi

language-design - 不可为空的引用类型

转载 作者:行者123 更新时间:2023-12-04 00:02:56 25 4
gpt4 key购买 nike

我正在设计一种语言,我想知道默认情况下使引用类型不可为空并使用“?”是否合理。对于可空值和引用类型。这有什么问题吗?你会怎么做:

class Foo {
Bar? b;
Bar b2;
Foo() {
b.DoSomething(); //valid, but will cause exception
b2.DoSomething(); //?
}
}

最佳答案

我目前的语言设计理念是,可空性应该是程序员被迫要求的,而不是默认情况下在引用类型上给出的(在这一点上,我同意 Tony Hoare - Google 对他最近的 QCon 演讲)。

在这个具体的例子中,对于不可空的 b2,它甚至不会通过静态检查:保守分析不能保证 b2 不为 NULL,因此程序在语义上没有意义。

我的精神很简单。引用是对某些资源的间接句柄,我们可以遍历它以获取对该资源的访问。可空引用要么是资源的间接句柄,要么是资源不可用的通知,而且人们永远无法预先确定正在使用哪种语义。这要么预先进行大量检查(它是空的吗?不?是的!),或者不可避免的 NPE(或等价物)。如今,大多数编程资源都没有大量资源受限或绑定(bind)到某些有限的底层模型 - 简单地说,空引用是......

  • 懒惰:“我只会在这里打一个空”。坦率地说,我对
  • 没有太多的同情。
  • 困惑:“我还不知道在这里放什么”。通常也是旧语言的遗留问题,您必须在知道资源是什么之前声明资源名称。
  • 错误:“出错了,这里是 NULL”。因此,更好的错误报告机制在语言中是必不可少的
  • 一个洞:“我知道我很快就会有东西,给我一个占位符”。这有更多的优点,我们可以想办法解决这个问题。

  • 当然,用更好的语言选择来解决 NULL 当前满足的每一种情况并非易事,而且可能会增加更多的困惑,这会有所帮助。我们总是可以使用不可变的资源,所以 NULL 只是有用的状态(错误和漏洞)并没有太大的实际用途。尽管如此,势在必行的技术仍然存在,坦率地说,我很高兴 - 这使得在这个领域寻找更好的解决方案是值得的。

    关于language-design - 不可为空的引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/693325/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com