微软开始谈论他们的下一代编程语言,用于系统编程的 C#

阅读时间图标 3分钟读


读者帮助支持 MSpoweruser。如果您通过我们的链接购买,我们可能会获得佣金。 工具提示图标

阅读我们的披露页面,了解如何帮助 MSPoweruser 维持编辑团队 查看更多

微软研究操作系统的架构师和开发人员乔·达菲(Joe Duffy)在博客中介绍了他们在过去几年中一直在研究的下一代编程语言。 微软现在将这种即将推出的语言描述为 C# 的“系统编程”扩展。 微软正试图将这种语言定位为以安全和生产力为中心的 C#、Java 等和以性能为中心的 C++ 之间的交叉。

以下是该语言的 6 个重要特征,

) 终生了解。 C++ 具有 RAII、确定性销毁和高效的对象分配。 C# 和 Java 都诱使开发人员过度依赖 GC 堆,并且通过 IDisposable 仅提供对确定性销毁的“松散”支持。 我的团队所做的部分工作就是定期将 C# 程序转换为这种新语言,我们遇到 30-50% 的时间花在 GC 上的情况并不少见。 对于服务器,这会扼杀吞吐量; 对于客户来说,它通过在交互中注入延迟来降低体验。 我们从 C++ 中窃取了一个页面——在右值引用、移动语义、破坏、引用/借用等领域——但保留了必要的安全元素,并将它们与函数式语言的思想融合在一起。 这使我们能够积极地堆栈分配对象、确定性销毁等等。

2)副作用的理解。 这是我们在 OOPSLA 2012 中发布的内容的演变,为您提供 C++ const 元素(但同样具有安全性),以及一流的不变性和隔离性。

3) 大规模异步编程。 社区在这个问题上一直在讨论,即是使用持续传递还是轻量级阻塞协程。 这包括 C#,但也包括地球上几乎所有其他语言。 这里的关键创新是一个可组合的类型系统,它与执行模型无关,并且可以有效地映射到任何一个。 声称我们有一个正确的方法来揭露这些东西是傲慢的,但我有许多其他方法的经验,我喜欢我们着陆的地方。

4) 类型安全系统编程。 人们普遍认为,类型安全会带来固有的性能损失。 确实,边界检查是不可协商的,默认情况下我们更喜欢溢出检查。 与 JIT 编译相比,一个好的优化编译器在这里可以做的事情令人惊讶。 (您只需随便查看一些最近的安全公告,即可了解这些功能为何具有优点。)其他领域包括允许您在不分配的情况下做更多事情。 就像拥有可以零分配调用的基于 lambda 的 API(而不是通常的两种:一种用于委托,一种用于显示)。 并且能够在不分配的情况下轻松地划分出子数组和子字符串。

5)现代错误模型。 这是社区不同意的另一个问题。 我们选择了我认为的最佳点:随处可见的契约(前置条件、后置条件、不变量、断言等)、快速失败作为默认策略、罕见动态失败的例外(解析、I/O 等),并且仅在您绝对需要丰富的异常时才键入异常。 所有这些都以一流的方式集成到类型系统中,以便您获得使其安全可靠所需的所有适当的子类型化行为。

6)现代框架。 这是一个包罗万象的存储桶,涵盖诸如异步 LINQ、改进的枚举器支持,在性能上与 C++ 迭代器竞争,并且不需要双接口调度来提取元素等。老实说,这是我们拥有的领域最大的“设计但尚未实现的特性”列表,包括 void-as-a-a-1st-class-type、非空类型、特征、第一类效果类型等。 我希望我们在 1 年中期的检查站中拥有其中的一些,但不是全部。

从链接中阅读更多信息 此处.

有关主题的更多信息: c#, 开发, 微软