D编程语言至少有两个前缀为“@”符号的属性:
@disable
@property
“@”符号表示什么意思?我似乎在文档中找不到相关的内容。
另外,为什么__gshared
是唯一一个具有两个前导下划线的属性?
这个没有意义。
是的,这可能不是你希望听到的 -- 但这是新闻组中他们所说的。
@
并没有实际含义。所有的@x
单词都是函数属性。@
仅仅是为了节省关键词而添加的。所以一般来说,新的属性会有@
,而旧的属性则没有(尽管有一段时间存在争议,是否应该在某些属性上加上@
)。如果重新开始设计,不考虑其他语言已经做过的事情,那么可能会在所有的函数属性上都加上@
,但很明显像@public
这样的东西是不会出现的,因为这只会使得移植代码变得更难,而没有任何实际好处。最终结果是,哪些属性带有@
,哪些属性没有,是相当随意的。你只需要记住哪些属性以@
开头,哪些不是,但这与学习新关键字并没有太大区别。只是这些属性前缀带有@
,以便它们不是实际上的关键字,并且不会减少语言中合法标识符的数量。@
用于将来的自定义属性,在这种情况下,@
将表示在使用的名称不是内置语言时的自定义属性,但对于内置语言中的所有属性,它几乎只是节省了一个关键字。正如Mehrdad所示(请参见评论中的链接),“@”没有特殊含义,它们之所以是这样只是出于历史原因。
至于您的另一个问题,__gshared
不是唯一带有两个下划线的关键字,还有__thread
和__traits
。这种命名惯例通常用于表示内部数据结构,这些结构需要出于实际原因而公开,但并非在所有情况下都“安全”使用(即更像是一个hack而不是一个成熟的功能)。我不确定D语言是否遵循此约定,但从文档中的this quote可以看出,我相信情况是这样的:
在安全模式下,__gshared被禁止使用。
我正在寻找有关__thread
和__traits
的更多信息(它们确实不是属性),但到目前为止,我找到的很少。
@attribute
语法。” - user541686