C# 语言设计
欢迎使用 C# 语言设计的官方仓库。这里是开发、采纳和规范 C# 新语言特性的地方。
C# 由 C# 语言设计团队(LDT)与实现该语言的 Roslyn 项目密切协作进行设计。
您可以找到:
- 位于 proposals 文件夹 中的活跃 C# 语言特性提案
- 位于 meetings 文件夹 中的 C# 语言设计会议笔记
- 语言版本历史的摘要在此。
如果您发现上述内容中存在错误或不足,请提交 issue 以提出这些问题,或者更好的是:提交 pull request 来修复它们。
然而,对于新特性提案,请将其提交至 讨论,并且仅在语言设计团队(“champion”)成员邀请时,才以 issue 或 pull request 的形式提交提案。
完整的设计流程描述在此处。以下是较短的概述。
讨论
与语言特性相关的辩论以本仓库中的 Discussions 形式进行。
如果您想建议一个特性、讨论当前的设计笔记或提案等,请开启一个新的 Discussion 主题。
简短且紧扣主题的讨论更有可能被阅读。如果您留下第五十条评论,很可能只有少数人会阅读它。为了使讨论更易于导航并从中受益,请遵守以下几条经验法则:
- 讨论应与 C# 语言设计相关。如果不符合,将被直接关闭。
- 选择一个描述性的主题,以清晰传达讨论范围。
- 紧扣讨论主题。如果某条评论偏离主题,或深入探讨子主题,请开启新的讨论并链接回来。
- 你的评论是否对他人阅读有用,还是可以通过对现有评论的 emoji 反应充分表达?
旨在阻止特定语法出现的语言提案可以通过 Roslyn 分析器 实现。仅使现有语法可选非法的提案将被语言设计委员会拒绝,以防止语言复杂性增加。
提案
当 C# LDM 成员发现某项提案值得更广泛的团队考虑时,他们可以 Champion 该提案,这意味着他们将在 C# 语言设计会议上提出该提案。提案始终在关联的讨论中讨论,而不是在 champion 问题中。我们并非一直遵循此策略,因此许多 champion 问题会有讨论;我们现在锁定问题,以防止在其上发生新的讨论。每个 champion 问题都会有一个讨论链接。
设计流程
提案 会随着 语言设计会议 中的决策而演变,这些决策基于 讨论、实验和离线设计工作。
在许多情况下,为了确定正确的设计并最终决定是否采用该功能,需要实现并共享该功能的原型。原型有助于发现功能的实现和可用性问题。原型应在 Roslyn 仓库 的分支中实现,并满足以下标准:
- 解析(如适用)应对实验具有弹性:输入不应导致崩溃。
- 包含最小化的测试,以端到端地展示该功能的工作情况。
- 包含最小化的 IDE 支持(关键字着色、格式化、补全)。
一旦获批,该功能应在 Roslyn 中完全实现,并在 语言规范 中完全指定,随后提案将被移至已完成功能的相应文件夹,例如 C# 7.1 提案。
免责声明:一个活跃的提案正在积极考虑纳入 C# 编程语言的未来版本,但绝不保证最终会包含在下一个或任何版本的语言中。基于设计团队、社区、代码审查员或测试的反馈,提案可能在上述流程的任何阶段被推迟或拒绝。
里程碑
我们在仓库中为问题设置了几个不同的里程碑:
-
Working Set 是当前正在积极处理的一组受支持的提案。该里程碑中的所有内容不一定都会进入 C# 的下一个版本,但会在即将到来的版本中获得设计时间。
-
Backlog 是一组已经过分类但尚未积极处理的受支持提案。虽然欢迎社区在这些提案上进行讨论和提出想法,但在我们准备好之前,这些功能的设计工作和实现审查成本太高,我们无法考虑社区实现。
-
Any Time 是一组已经过分类但尚未积极处理且对社区实现持开放态度的受支持提案。此里程碑中的问题可能处于两种状态之一:需要批准的规范,以及需要实现。那些需要规范的问题仍需在 LDM 期间提交以批准规范,但我们愿意在方便时尽早花费时间这样做。
-
Likely Never 是一组被 LDM 从语言中拒绝的提案。如果没有强烈的需求或社区反馈,这些提案在未来将不会被考虑。
-
编号里程碑是为该特定语言版本实现的功能集合。对于已关闭的里程碑,这些是随该版本发布的内容。对于未关闭的里程碑,如果我们在临近发布时发现兼容性或其他问题,功能可能会被后续移除。
语言设计会议
语言设计会议(LDMs)由 LDT 和偶尔受邀的嘉宾举行,并记录在 meetings 文件夹中的设计会议笔记中,按年份组织在文件夹中。设计会议笔记的生命周期在 meetings/README.md 中描述。LDMs 是决定未来 C# 版本的地方,包括要处理哪些提案、如何演进提案,以及是否以及何时采纳它们。
语言规范
当前的 ECMA-334 规范可以在 C# Language Standard 仓库中以 markdown 形式找到。
实现
C# 语言的参考实现可以在 Roslyn repository 中找到。该仓库还跟踪 语言特性的实现状态。直到最近,语言设计工件也是在那里跟踪的。请给我们一点时间,以便我们迁移活跃的提案。
