最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

Cristian Vlasceanu 和.NET 上的 D 语言编译器

  • 2009-03-19
  • 本文字数:2004 字

    阅读完需:约 7 分钟

Cristian Vlasceanu 正在将 D 语言的编译器移植到.NET 平台。

向那些还没听说过 D 语言的读者介绍一下 D 语言把:

D 语言支持多种编程范式:面向对象、函数式、模版元数据编程,甚至还包含了像 goto 语句和内联汇编这样较难驾驭的特性。

我听说 Walter Bright(D 语言之父)将 D 语言描述为编译器实现者发明的语言(而不是语言设计者)。这或许是真的,实事上有些最成功的软件就来源于作者的直接需要。当然,Walter 的描述有点贬低了 D 语言,因为实际上他在设计的时候充分考虑了使用者,而不仅仅是考虑哪些语法更容易实现。

D 语言用很多种方式鼓励“正确”的行为。例如,在 C 和 C++ 中,如果你写“int i;”则变量是没有被初始化的。想要做“正确的事”,你需要再多敲几下键盘写成“int i=0;”。但是 D 语言不是这样:“int i;”会将变量设为默认值(这里是 0)。如果你不想让变量被初始化,则需要写成“int i=void;”,这样表示你是有意不初始化这个变量,而不是因为懒惰。

你为何决定开始编写一个 D 语言的编译器?

这个项目只是编写编译器的后端,前端是基于 Walter 的开源编译器,我尽量避免修改前端。

在我的职业生涯中,我有过编写解释器前端的经验,但是缺乏代码生成的经验。而且我的大部分工作都是用 C++ 来完成的,直到最近才开始接触.NET(和 C#)。一个.NET 代码生成器的项目正好是一个既学习代码生成又学习.NET 的好机会,这是原因之一。

另一个原因是,一个.NET 平台的编译器实现(即使只是一个原型)也可以给 D 语言社区带来成熟的框架,使得 D 语言与.NET 平台的其他语言的交互变得更容易。

我有一些证据显示,D 社区的一些人在性能有要求时比较喜欢本地代码;但是如果没有这样一个编译器实现的话,本地代码的这些所谓的好处是没有办法被证明,或者被推翻的。

你把这个项目当成是研究项目,还是准备将他用于生产环境?

这是一个研究项目。我不知道 D 社区对此有什么期望(我计划在几周内发布代码,来看看他们有哪些期望),我也不知道我还能有多少工作以外的时间来参与这个项目。我希望它能够继续发展,一直达到生产环境要求的质量标准。但是现在它还处在初始阶段。

在你的博客 Programming and Debugging 中,你提到在编写编译器的过程中,你碰到了很多兼容性的问题。你觉得在这些兼容性问题中,哪一个是最有趣或者最困难的?

目前为止是 array slices。D 语言有一个特性,如果你有一个(例如)整形数组“x”,你写“int[] y=x[2…5];”,那么“y”就是“x”的一个“视图”,它从 x 的第二个元素开始,到(但是不包含)第五个元素结束。这里“y”是一个轻量级的对象,而不是“x”数组中元素的拷贝。在.NET 中有一个类似的概念叫 ArraySegment,ArraySegment(值类型)是一个与数组完全不同的类型。

D 语言实际上不区分 array 和 slices。如果有一个方法例如“foo(int [])”,那么 array 和 slices 都可以作为参数传给这个方法。这会使程序员感到迷惑,而且在编译器的代码生成器中很难实现。我现在的解决办法效率很低,因为我使用了很多 array 和 ArraySegments 之间的隐式转换。我希望 Walter 能在 D 语言的 2.0 版本中做出改变,使 array 和 slices 有不同的类型。数组和它的视图在概念上是不同的,因此在建模时也应不同。

除此之外,一切都比较顺利,因为 D 语言和.NET(以及 C#)之间有很多相似的地方。

哪些 D 语言的特性是你希望在 CLR 和 / 或 C#中也能看到的?

D 语言有一个特性叫“class invariants”:你可以写一个方法并加上关键字“invariant”,编译器会生成一些代码,使这个方法在构造器执行后,所有公共方法执行前和后,以及析构器质执行之前被调用。这个方法中通常包含了一些断言,但是你也可以放任何检查性代码在里面。这个特性对调试非常有用。我不会介意 C#中有类似的东西,但是话说回来,我更精通 C++。

这看起来和 Code Contracts 的 Object Invariants 特性很像。

是的,是同样的原理,当然有一点点不同(如果我没读错文档的话)。D 语言不需要反射或额外的工具(例如 ccrewrite),契约式编程在 D 语言中是天生支持的。或许我还没有发现 Code Contracts 的其他用途,但是看上去实在很复杂。我觉得 D 语言的实现方式更简练也更易于理解。

你已经在这个项目上工作一段时间了,你是否仍然喜欢将 CLR 作为编译器的开发平台?

随着我对 CLR 的了解越来越多,我也越来越喜欢它了。我觉得我能够将注意力集中在语言特性本身,而不是 vtable 布局或者栈展开之类的可怕细节,这让我感觉很好。

你对 DLR 感兴趣么?不管是 DLR 本身或是对 D 语言来说?

这是个好问题。与 Python 或 Ruby 不同,D 是一个静态类型的语言。我的第一直觉告诉我,在这个项目中,我不需要 DLR。但是我可能会研究一下,希望能够帮助我解决前面提到的 array slice 的难题。

查看英文原文: Cristian Vlasceanu and D for the .NET platform


译者介绍:王瑜珩,ThoughtWorks 咨询师,从事多年.NET 开发,热衷于敏捷开发方法与相关实践。

2009-03-19 03:361364
用户头像

发布了 63 篇内容, 共 23.4 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

快手、知乎等平台严厉打击“病媛”炒作行为:自媒体行业不能被流量裹挟

石头IT视角

如何做一场有趣又高效的迭代回顾会议?

万事ONES

Scrum 敏捷 回顾会

【新品尝鲜】OCR磅单识别上线邀测,为货运物流提速增效

百度大脑

人工智能 OCR

金九银十不要怕!有了腾讯这本2021年最新Java面试手册,offer手到擒来!

Java 程序员 架构 面试 后端

华为大牛总结的超全Linux学习笔记,看这一篇就够了!

Java 架构 面试 程序人生 编程语言

手把手教你使用Studio Lite + Digtal car!助力智能汽车场景、轻应用开发更轻松!

SOA开发者

002云原生之架构定义

穿过生命散发芬芳

云原生 9月日更

强烈推荐!88页《Redis学习文档》完整版,PDF开放下载

Java 架构 面试 程序人生 编程语言

北鲲云超算平台如何将云计算与高性能计算结合

北鲲云

linux线上CPU100%排查

入门小站

Linux

用Python绘制专业的K线图【含源代码】

恒生LIGHT云社区

AlibabaP9力荐!最新出品1297页JDK源码+并发核心原理解析小册

Java 架构 面试 程序人生 编程语言

智能网联汽车行业信息安全现状与威胁

SOA开发者

音视频终端引擎优化实践

百度开发者中心

最佳实践 音视频 实践案例 智能视频 行业深度

互斥锁、自旋锁、读写锁...理清它们的区别和应用

行云创新

云计算 编程 开发 应用

一文了解「模块化」 区块链的当前形势:执行、安全性及数据可用性

CECBC

重磅来袭,虚拟化技术分类

hanaper

FunTester框架Redis性能测试之map & INCR

FunTester

redis 性能测试 测试框架 测试开发 FunTester

CTF压轴题解题思路和过程

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

如何让文件共享 SDK 支持使用 Uri 上传文件

ZEGO即构

文件存储 分区存储 文件共享

5G三年成厦,泛在千兆为应用造榫卯

脑极体

打造“大国重器”高性能计算,联想与英特尔如何携手点亮数字经济加速度?

脑极体

通俗易懂!306页图解计算机网络,涵盖所有基础知识

Java 架构 面试 程序人生 编程语言

史上最全Java高频面试合集,命中率高达95%

Java 程序员 架构 面试 后端

拥抱开源,共建生态 - 开源生态与效能提升专场 | CIF 精彩看点

CODING DevOps

DevOps 研发效能 腾讯云 CIF 峰会 开源生态

提高工作效率的三种方法

石云升

团队管理 管理 引航计划 内容合集 9月日更

超十年渗透专家总结出636页渗透测试全笔记,100课时一次讲清

Java 架构 面试 程序人生 编程语言

行云创新:云原生技术助力企业数字化转型

行云创新

技术 云原生 转型 数字化 平台

JVM g1 gc 学习笔记二

风翱

GC 9月日更

从工具、工具箱到数字化软件工厂——DevOps 设计理念与工程实践专场 | CIF 精彩看点

CODING DevOps

DevOps 数字化 研发工具 腾讯云 CIF 峰会

浪潮云洲荣获两项工业自动化及数字化行业年度大奖 inspur浪潮云 昨天

浪潮云

云计算

Cristian Vlasceanu 和.NET上的D语言编译器_.NET_Jonathan Allen_InfoQ精选文章