原文:
http://www.infoq.com/cn/news/2009/03/D-NET
作者 Jonathan Allen 译者 王瑜珩 发布于 2009年3月19日 上午3时36分
社区
.NET
主题
语言设计
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
分享到:
相关推荐
☆ 资源说明:☆ [Apress] ASP.NET 3.5 电子商务网站开发入门...[作者信息] Karli Watson, Cristian Darie [出版机构] Apress [出版日期] 2009年03月26日 [图书页数] 736页 [图书语言] 英语 [图书格式] PDF 格式
Beginning Asp Net 2.0 E-Commerce In C# 2005 From Novice To Professional - Cristian Darie and Karli Watson.pdf
这是一本用ASP.NET 2.0开发电子商务网站的入门好书,由Cristian Darie和Karli Watson两位大师倾力编著,希望能给想从事电子商务网站开发的朋友一点帮助!
这是一本用ASP.NET 2.0开发电子商务网站的入门好书,由Cristian Darie和Karli Watson两位大师倾力编著,希望能给想从事电子商务网站开发的朋友一点帮助!
###Project 描述基于 ASP.NET MVC 和 KockoutJS 的简单 SPA 模板 这是 ASP.NET MVC 模板的自定义版本,经过修改以将其转换为单页应用程序类型的项目。 它类似于基于 Angular 的结构,但在客户端使用 Knckout.js 来...
克里斯蒂安算法 分布式系统的Cristian算法命题 该项目旨在帮助理解Cristian算法。 只需覆盖Server类,然后覆盖Client类。 小心更改将在其中创建文本文件的路径。 实验是根据的代码创建的
该项目使用 Cristian 的概率时间同步算法来协调来自 PlanetLab 节点的对我们家用计算机的周期性、低速率分布式拒绝服务 (dDOS) 攻击 提交的文件列表: Report.pdf : 总结报告 SampleOutput :包含输出日志的目录 ...
IsaYCristian:Ablicacion de Gestion de la asociacion DB 2020-Isabel Cobo和Cristian Romero
待办事项 待办事项清单Cristian Lopez
iaisc-2020-ssatr-31211-bahnarel-cristian
TW_Manea_Loredana_Pelcear_Cristian 要求: 设计一个具有虚拟讲师角色的模块化Web应用程序,以提供旨在学习/加深技能的活动和培训资源集,例如钢丝舞,死语(例如拉丁语,阿拉姆语),自卫风格,唱歌,乐器(大键琴...
用于和存储的多个后端。 直观的表达 。 数据库不可知。 。 。 Laravel易于访问,功能强大,并提供大型,强大应用程序所需的工具。学习Laravel Laravel拥有所有现代Web应用程序框架中最广泛,最全面的和视频教程库,...
maya插件_max光滑组转软硬边。python语言,对于max的小伙伴特别实用
2.支持的语言当前可用于: 英语法语韩语(感谢和 ) 葡萄牙语(由于 ) 西班牙语(感谢Cristian) Català(感谢Cristian) 德语(由于 ) 俄语(由于 ) 荷兰语(感谢 ) 泰语(感谢 ) 日语(感谢@cmonos ) 繁体...
项目:我的网站 这是给你一个名为“网站YAX”的项目,从在“yaxt-演示”网站模板生成GitHub的仓库 。 从这里,部署您的网站以免费托管。 只需单击一个按钮即可... 该模板包括网站编辑器,因此您可以编辑网站上的内容。
Teniendo提出了自己的想法,并在框架,功能和语言方面充分利用了TypeScript。 实施歌剧社团的人是指演艺界和演艺界可扩展的对等应用学科。 您可以通过以下方式轻松地解决网络中存在的问题,即可以真
这是一个用引导的项目。入门首先,运行开发服务器: npm run dev# oryarn dev 用浏览器打开以查看结果...在Vercel上部署部署Next.js应用程序的最简单方法是使用Next.js创建者提供的。 请查看我们的以获取更多详细信息。