一些D属性前面的"@"前缀有什么意义?

3

D编程语言至少有两个前缀为“@”符号的属性:

  • @disable
  • @property

“@”符号表示什么意思?我似乎在文档中找不到相关的内容。

另外,为什么__gshared是唯一一个具有两个前导下划线的属性?

3个回答

3

这个没有意义。

是的,这可能不是你希望听到的 -- 但这是新闻组中他们所说的。


你能提供一个相关信息的新闻组链接作为参考吗?我给出了一种有点推测性的答案(可能完全错误),但在确认新信息后将删除它。 - mgibsonbr
@mgibsonbr:有点难搜索,但我会找的...这个问题已经在新闻组上被问了很多次,这是给出的答案。(当然,这肯定不是预期的方式,但现在就是这样。) - user541686
@mgibsonbr:啊,这里有一个更好的解释:“如果你在DMD源代码中深入挖掘一下,你会发现一旦通过解析阶段,这些属性和其他关键字的处理方式没有任何区别,它们只是成为数据结构上的标志,就像常规关键字一样。[...] 对我来说,区分这两者的解释非常简单:一个历史事件使得在某个日期之后添加的所有新关键字都使用@attribute语法。” - user541686
1
绝对不是我想听到的,但感谢提供支持链接!这样的语法不一致让我疯狂。 - David Brown
@mgibsonbr,在那个时候,有很多讨论要添加注释。当时D语言需要添加几个关键字,同时也在讨论属性。突然之间添加了@property和@safe...。这让我和其他人认为属性已经被批准了,但也许并没有这样的意图。http://www.prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP6 - he_the_great
显示剩余2条评论

2
此时的@并没有实际含义。所有的@x单词都是函数属性。@仅仅是为了节省关键词而添加的。所以一般来说,新的属性会有@,而旧的属性则没有(尽管有一段时间存在争议,是否应该在某些属性上加上@)。如果重新开始设计,不考虑其他语言已经做过的事情,那么可能会在所有的函数属性上都加上@,但很明显像@public这样的东西是不会出现的,因为这只会使得移植代码变得更难,而没有任何实际好处。最终结果是,哪些属性带有@,哪些属性没有,是相当随意的。你只需要记住哪些属性以@开头,哪些不是,但这与学习新关键字并没有太大区别。只是这些属性前缀带有@,以便它们不是实际上的关键字,并且不会减少语言中合法标识符的数量。
现在,在D社区中,许多人都希望将@用于将来的自定义属性,在这种情况下,@将表示在使用的名称不是内置语言时的自定义属性,但对于内置语言中的所有属性,它几乎只是节省了一个关键字。

0

正如Mehrdad所示(请参见评论中的链接),“@”没有特殊含义,它们之所以是这样只是出于历史原因。

至于您的另一个问题,__gshared不是唯一带有两个下划线的关键字,还有__thread__traits。这种命名惯例通常用于表示内部数据结构,这些结构需要出于实际原因而公开,但并非在所有情况下都“安全”使用(即更像是一个hack而不是一个成熟的功能)。我不确定D语言是否遵循此约定,但从文档中的this quote可以看出,我相信情况是这样的:

在安全模式下,__gshared被禁止使用。

我正在寻找有关__thread__traits的更多信息(它们确实不是属性),但到目前为止,我找到的很少。


你确定在 D 语言中 __thread 是有效的吗?__thread 是 C/C++ 的存储类 (http://publib.boulder.ibm.com/infocenter/comphelp/v101v121/topic/com.ibm.xlcpp101.aix.doc/language_ref/thread.html),用于标记数据为线程本地。但是,在 D 语言中,默认情况下使用线程本地存储,因此 __thread 并不是必需的。 - jpf
@jpf 我只知道它是一个保留标识符。也许它被保留了但从未使用过,这就是为什么我没有找到任何具体的文档... - mgibsonbr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接