gpt4 book ai didi

.net - 堆栈是一个实现细节,还是不是?

转载 作者:行者123 更新时间:2023-12-04 17:05:36 24 4
gpt4 key购买 nike

根据 http://msdn.microsoft.com/en-us/library/ms229017.aspx ,值类型“在堆栈上分配或与其他结构内联*”。然而在 the stack is an implementation detail 中,Eric Lippert 指出这是一个实现细节。
据我了解,实现细节是 "a behavior produced by code which may be relied on by consuming code, though that behavior is not specified by the spec the code is written to." 。我知道文档不是规范,但据推测,如果文档中列出了我们可以依赖的内容,并且不再是实现细节。那么,堆栈是一个实现细节还是不是?
*:我理解这意味着结构也可以在其他结构内部而不是直接在堆上分配,尽管我可能是错的。

最佳答案

MSDN 文档告诉您 Microsoft C# 编译器用于 struct 的特定实现。这些特定细节不在 ECMA 334 C# 规范中;它们不是 struct 语义的一部分。因此,文档中的那些细节是实现细节。

我似乎记得在某处读过 Eric Lippert 说他希望(或者更喜欢,我不记得他提供了什么级别的偏好)文档没有提到与 struct 相关的堆栈。我看看能不能挖出来

这是,来自您链接到的博客文章:

I regret that the documentation does not focus on what is most relevant; by focusing on a largely irrelevant implementation detail, we enlarge the importance of that implementation detail and obscure the importance of what makes a value type semantically useful. I dearly wish that all those articles explaining what “the stack” is would instead spend time explaining what exactly “copied by value” means and how misunderstanding or misusing “copy by value” can cause bugs.



ECMA 334 C# 规范的相关部分是 §11。请注意,本节中从未使用过“堆栈”一词。该部分仅说明了语法,即 struct 遵循值语义,它们被隐式密封并从 System.ValueType 继承,对 struct 类型的变量赋值创建一个副本,将 struct 作为参数按值传递创建一个副本, struct 如何设置为默认值( struct 中的所有值类型字段都设置为其默认值,所有引用类型字段都设置为 null ), struct 的装箱和拆箱规则, thisstruct 的含义,以及字段初始化、构造函数、析构函数和静态构造函数如何为 struct 工作。同样,没有提到堆栈。曾经。

堆栈是一个实现细节,不是 struct 语义的一部分。

关于.net - 堆栈是一个实现细节,还是不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1972359/

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