某些D属性上的“@”前缀是什么意思?

时间:2012-05-24 04:21:44

标签: syntax d

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

  • @disable
  • @property

“@”应该传达什么样的含义?我似乎无法在文档中找到任何相关内容。

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

3 个答案:

答案 0 :(得分:3)

没有任何意义。

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

答案 1 :(得分:2)

@在这一点上并没有任何意义。所有@x个单词都是函数属性。 @仅用于保存关键字。所以,一般来说,较新的属性对它们有@而较旧的属性则没有(尽管在一段时间内有一些混乱,在某些争论中是否有一些属性应该有{{1} } 或不)。如果他们从头开始重做而不关心其他语言做了什么,那么你可能已经获得@所有的函数属性,但是@之类的东西无法发生,因为它只会使移植代码更难以获得真正的好处。最终的结果是得到@public和没有得到的是相当随意的。您只需要记住哪些属性以@开头,哪些属性没有,但与必须学习新关键字的差别不大。只是这些都以@为前缀,因此它们实际上不是关键字,也不会减少该语言中合法标识符的数量。

现在,D社区中的许多人肯定希望将来使用@作为自定义属性,在这种情况下,@会在使用名称的情况下指示自定义属性不是语言中内置的语言,但对于语言中内置的所有内容,它几乎等同于保存关键字。

答案 2 :(得分:0)

正如Mehrdad所示(参见评论中的链接),“@”没有特别的意义,它们只是出于历史原因。

至于您的其他问题,__gshared不是唯一包含两个下划线的关键字,还有__thread__traits。这种命名约定通常用于表示内部数据结构,这些内部数据结构由于实际原因需要公开,但在所有情况下都不能“安全”使用(即,更多的是黑客而不是完善的功能)。我不确定D语言是否遵循这个约定,但是从文档中看到this quote我认为是这样的:

  

__ gshared在安全模式下不被允许。

我正在搜索有关__thread__traits(确实不是属性)的更多信息,但到目前为止可能找不到。