D/Phobos风格指南

6
我刚开始查看phobos源代码,发现有许多不同的风格和被注释掉的代码。
网站上的样式指南非常小,我只找到了2006年的失效链接和另一个2004年的链接...
是否有更新、更全面的指南可用?
PS:最初在D.learn新闻组中提出了这个问题,但由于没有得到任何答案,我想尝试一下这里,即使这可能是一次无望的尝试。
2个回答

5
无论存在什么指南都已经过时并且不应该再存在。我不相信有任何被认为有效的D风格指南,而且我认为Walter Bright、Andrei Alexandrescu等人也不希望有这样的指南存在。此外,据我回忆,在C++ Coding Standards: 101 Rules, Guidelines, and Best Practices中,Herb Sutter和Andrei说过风格指南是一个坏主意(或者至少非常具体的那些是),但我必须拿出书来确切地知道他们说了什么。因此,我相当怀疑由Andrei负责的Phobos会有任何形式的风格指南;我肯定没有意识到任何一个。可能有一些关于格式化代码的指南进入Phobos(例如使您的代码看起来类似于模块的其余部分),但像Andrei或其他Phobos开发人员之类的人必须回答这个问题。当然,如果没有强制执行的风格指南,由大约15个不同的开发人员在Phobos上工作,您将在代码中获得几种不同的样式。
因此,我不相信D或Phobos有任何推荐的编码风格。据我所知,D背后的主要人物并不特别支持样式指南,他们肯定没有推动过这个。因此,现在确实没有一个正确的样式,我也不希望未来会有一个。

编辑:好的,我去查了一下Herb Sutter和Anderi Alexandrescu在C++ Coding Standards: 101 Rules, Guidelines, and Best Practices中具体说了什么。他们不是反对编码标准,而是反对特别严格的标准,这些标准强制执行个人口味或过时的做法。我不会在这里引用整个内容(这是一本好书,你应该去看看),但以下是一些关键点。

  • 不要指定缩进量,但要缩进以显示结构。
  • 不要强制规定特定行长度,但要保持可读性。
  • 不要过度规定命名,但要使用一致的命名约定。
  • 除非工具将某些样式提取到文档中,否则不要预定义注释样式,但要编写有用的注释。

他们给出的一些例子是:

  • 大括号放置位置无关紧要,但应保持一致和易读。
  • 在空格和制表符之间,他们似乎并不在意编码标准是否有任何规定。
  • 他们反对在C++中使用匈牙利命名法,但认为在类型不太安全的语言中可能很有价值。
  • 他们完全反对强制函数中只有一个返回语句。
无论如何,他们认为源文件中的格式应该是一致的。显然,Phobos目前并不一定遵循这一点,但是Andrei在新闻组中提到了一些通常持有的惯例,并且考虑可能强制执行其中一些(实际帖子存档 在此处)。
然而,尽管Phobos是开放源代码的,任何人都可以提交补丁,但请记住,API是面向公众消费的。只有Phobos开发人员需要查看代码(至少如果文档适当完整),当然,他们是唯一会直接使用它的人,因此即使他们使用此代码标准,也没有必要公开列出编码标准。看起来他们可以使用更多的一致性,并且他们可能正在处理这个问题,但是所有这些对于第三方来说都只会使其更易读。没有其他人真正需要知道标准实际上是什么(尽管如果您查看足够数量遵循标准的代码,则可以至少大致了解标准所说的内容)。
关于D语言,有一些惯例被视为良好的实践,例如通常使用auto而不是指定类型(除非你确实需要指定类型),但与C++一样,你可以使用任何编码风格进行编码,D开发人员并不会试图强制整个D社区采用某种风格。

1
太糟糕了。我发现当代码保持一致时,阅读起来更容易。D在这里完全与Go相反 :| - simendsjo
1
我同意。Phobos非常需要一份风格指南。每当你查看库的不同部分时,风格都会改变 - 甚至包括命名约定。这使得Phobos非常难以使用。 - Peter Alexander
@Peter:我猜这最终会因为迫切需要而发生。对于由几个人编写的模块来说,情况甚至更糟 - 他们甚至不尝试遵循之前使用的风格。 - simendsjo
我不会对此抱有太大期望。只需看看PHP的库,它们在命名和其他约定方面也极其不一致,但却没有采取任何措施加以改进。一旦一种语言被广泛使用,名称必须保持不变以实现向后兼容性。D2仍然年轻,可以进行更改,所以必须立即采取行动。 - Peter Alexander
这就是为什么我们需要 dfmt,它是 gofmt 的 D 语言版本。在文档中,它应该有 //@NOFORMAT 宏来防止格式化代码段,如果用户出于任何原因想要覆盖格式化的话。 - timotheecour
@timotheecour 我认为 dfmt 已经存在了相当长的时间了 ;-) - greenify

3
事情已经发生了足够的变化,我认为我应该重新回答这个问题。您可以在这里看到当前的D样式指南,并且它已经更新到最新版本。它有一些关于格式的规则(例如,不使用制表符,每个缩进级别是4个空格),但几乎所有的规则都是关于命名约定的(例如,类型名称应该使用PascalCase,而变量和函数应该使用camelCase)。因此,重点是API应该看起来像什么,而不是代码应该如何格式化。正如我在之前的回答中详细说明的那样,Phobos开发人员永远不会试图强制执行D的官方格式化风格。事实上,甚至有很多D程序员没有遵循官方样式指南中的命名约定。
未来可能会在Phobos本身实施更严格的格式化指南(已经讨论过但从未实施),以便使提交者清楚地知道他们应该遵循的样式并避免关于代码格式的争论(自从我们转移到github并且提交者数量大大增加以来,这已成为更大的问题),但目前,主要是确保模块内的代码格式一致。但是,即使为Phobos强制执行更严格的格式化规则,那也只是针对Phobos而不是整个D社区。对于代码应该如何格式化,有太多不同的意见,以至于一个社区范围的格式化标准永远无法奏效。

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