`
ideage
  • 浏览: 326041 次
社区版块
存档分类
最新评论

D语言编译器DMD开源了!

阅读更多

  自从1999年12月,Walter设计开发D语言以来,D语言的编译器DMD因为不开源,成了业界的诟病。Walter曾经承诺,将开放源代码。

   伟大的Walter Bright在今天2009年3月5日下午18点40分(中国时间) 释放出了D1和D2的前端和后端的源代码!!开源协议为GPL1.0或者Artistic license。后端协议看了看,有Digital Mars和SYMANTEC的版权。后端是单一用户协议,不允许再次发布。

Walter兑现了他的承诺!

感谢Walter所做的工作!

可以使用DMC(Digital Mars C++ compiler)进行编译。

分为Win32,Mac,Linux三个版本。


http://www.digitalmars.com/d/1.0/changelog.html
http://ftp.digitalmars.com/dmd.1.041.zip


http://www.digitalmars.com/d/2.0/changelog.html
http://ftp.digitalmars.com/dmd.2.026.zip


经过试验,我已经在WindowsXP Sp2下成功编译出DMD的Release版本!D前端后端约205个文件!用C语言编写。感叹Walter的独具匠心,巧夺天工。

D将越来越好!

分享到:
评论
19 楼 check 2009-06-30  
C的优势主要在于从模块化到ISA这一步,只要计算机还存在ISA为基础的架构设计标准C就永远不会淘汰。所以操作系统绝对不可能用C以外的语言来挑大梁,scheduler/syscall/ipc等东西只可能用C或者同样抽象程度的语言来实现。甚至于很多vm的gc,虽然C# gc是C++的,但是就我听到的,"it can almost compile as c"。总之从ISA开始的第一层抽象是C的舞台。

编译器总的来说是个算法多于效率的东西,用c写个ll(k)paser都是让人很郁闷的事情,更别说后面的一大堆IR,DFA,CodeGen,都需要大量合适的算法来表达。我觉得自举编译器确实有些烧包的成分,比如对于一个主要优势不在表示算法的语言来说,现在选择这么多不一定非要自举才算完成一个语言。但是确实也不是非要用C,我觉得一门新语言的设计用脚本语言之类应该就不错。
18 楼 night_stalker 2009-06-28  
不是骚包 …… 编译器非常的复杂,全部用 C 写会很累很复杂。(Fortran 编译器是手写汇编的做出来的,弄了十几年)
譬如用 python 写了 python 编译器,然后解释执行编译自己(这步比较慢)。
编译后的编译器性能比解释执行好,用来编译其它 python 代码就很快了。
17 楼 mikeandmore 2009-06-28  
night_stalker 写道
今天看了龙书的自举(bootstrapping),觉得 D 语言编译器应该用 D 写才对(至少大部分)……

大部分成熟编译器都是自举的 —— 优化开发过程,并显示语言的优点和设计者对语言的信心。

Lisp 一开始只有一个耗费巨大工程手写汇编弄出来的阳春的编译器,后来大神发明了 eval 函数,于是出现了解释器,后来一群大神用 Lisp 写了编译器,然后用解释器运行编译器的代码,来编译 编译器的代码 —— Lisp 自举编译器就这么神奇的诞生了 ……
C 的跨平台移植,就是用 C 写编译器,然后交叉编译。
最初的 Pascal 编译器使用 Fortran 写的,后来改用 Pascal 写了。
我觉得 Ruby MRI 的 miniruby 也是一种 bootstrap 技术,Rubinius 就几乎全用 Ruby 写了 ……

个人觉得这是一种骚包的做法。。 
pypy就属于这种小骚包么
16 楼 night_stalker 2009-06-28  
今天看了龙书的自举(bootstrapping),觉得 D 语言编译器应该用 D 写才对(至少大部分)……

大部分成熟编译器都是自举的 —— 优化开发过程,并显示语言的优点和设计者对语言的信心。

Lisp 一开始只有一个耗费巨大工程手写汇编弄出来的阳春的编译器,后来大神发明了 eval 函数,于是出现了解释器,后来一群大神用 Lisp 写了编译器,然后用解释器运行编译器的代码,来编译 编译器的代码 —— Lisp 自举编译器就这么神奇的诞生了 ……
C 的跨平台移植,就是用 C 写编译器,然后交叉编译。
最初的 Pascal 编译器使用 Fortran 写的,后来改用 Pascal 写了。
我觉得 Ruby MRI 的 miniruby 也是一种 bootstrap 技术,Rubinius 就几乎全用 Ruby 写了 ……
15 楼 ideage 2009-03-25  
enderhml 写道

怎么又个 idgen not found 的错误啊 编译不果去啊


1.屏蔽path中其他c++编译器.
2.设置好make文件中的路径.
已经给你回短信了,发给你我修改过的make文件.
14 楼 enderhml 2009-03-24  
怎么又个

idgen not found

的错误啊

编译不果去啊
13 楼 healer_kx 2009-03-19  
C++的编译器也不是C++写的啊。追求这种东西,个人觉得没有太大的意义。
12 楼 zuland 2009-03-13  
night_stalker 写道
突然想到:为什么不用D来写DMD呢?


C是移植性最好的语言, D现在有三个平台的实现, 用C来做是很自然的.

实际上如果能够用OCAML/Haskell等来写的话, 代码量会少得多. 毕竟用C写程序, 需要处理的琐碎事情太多了.

11 楼 ideage 2009-03-08  
简单说下:

1.先下载 http://ftp.digitalmars.com/dmd.1.041.zip ,DMC
2.解压DMC,设置路径,然后到src目录,运行 make -fwin32.mak即可.
3.win32.mak可能要设置下:就是把路径设置正确,设置为你DMC中的路径
10 楼 yntcsb 2009-03-07  
引用
经过试验,我已经在WindowsXP Sp2下成功编译出DMD的Release版本!

能把试验过程给出来吗?我也想试试。
9 楼 RednaxelaFX 2009-03-06  
night_stalker 写道
突然想到:为什么不用D来写DMD呢?

这应该是潮流和趋势吧。会有的,虽然现在Google Code上的版本还不够成熟。
不太清楚Walter的考虑是怎样的,不过大致可以猜测有两点:
1、在编写D编译器时尚未有可用的D编译器,而写好这个编译器时代码量已经很大,没必要就不想重新写;
2、D的语言特性没有完全冻结,用一个快速变化中的语言来写代码的维护成本比较高。
要我说的话第一点的因素或许大些?第二点毕竟有D1是相对稳定的。

想起C#的编译器。微软当初实现C#编译器的时候,C#还不存在,自然只能用已有的语言来写;于是当时微软是用C++来写C#编译器的。编译器代码成熟之后,代码量已经非常大了,性能也还可以;加上当时没有立即的需求要用C#来重写编译器,所以一直到Visual Studio 2008/.NET Framework 3.5 SP1的C#编译器都是从开始的那个C++版本进化而来的。

而Mono计划在启动阶段的时候已经有C#编译器了,微软那个。Miguel为了学习C#而用C#写了Mono的第一个C#编译器。后来经过大量的修改,多年的进化,现在性能也还不错,能支持C# 3.0的新语法。
不仅如此,Mono在2.2正式将它的C#编译器开放为一个服务,可以在自己的程序里调用它来解析和编译C#代码。

微软的C# 5.0路线图的其中一点正好也是将C#编译器用C#重新实现一遍,并将编译器作为服务开放出来。这点反而让Mono走在了前面,着实有趣。在Visual Studio 2010 CTP里,.NET 4.0的System.Core.dll里已经有一个半成品的C#编译器了;它目前是用于支持C# 4.0的dynamic特性的。有兴趣的话也可以去看看。
8 楼 ideage 2009-03-06  
night_stalker 写道
突然想到:为什么不用D来写DMD呢?


呵呵,你太有才了,还真有这样的项目:Dil,在Google Code呢.兼容D1,D2.
7 楼 smallping79 2009-03-06  
D语言的时代终于到来了
6 楼 night_stalker 2009-03-06  
突然想到:为什么不用D来写DMD呢?
5 楼 sw2wolf 2009-03-06  
很好, 历史的必然, 个人力量总是有限的!
4 楼 ww21xx 2009-03-06  
这个要顶,,,,,强顶! DMD终于开源了, 大伙们都等的心痛啊! 以后D语言会越来越强! 加油!
3 楼 ideage 2009-03-06  
mzfhhhh 写道

小弟不懂,预测下D开源后的,发展趋势是怎么样呢?


简述下:
1.将有更多的大牛帮助开发和测试D。
2.你自己也可以编译自己的DMD。
3.D更符合当前流行趋势,符合GPL开源精神,得到开源社区支持。
4.看到源代码后,你发现没有任何后门,木马,让你用的更加放心。
5.D社区将迎来春天!!!
2 楼 mzfhhhh 2009-03-06  
小弟不懂,预测下D开源后的,发展趋势是怎么样呢?
1 楼 ideage 2009-03-05  
经过试验,我已经在WindowsXP Sp2下成功编译出DMD. Release版本!   

相关推荐

    编译器源代码之:DMD(D语言)dmd.2.026

    DMD,全称为Digital Mars D Compiler,是D语言的主要开源编译器之一,由Walter Bright创建并维护。D语言是一种静态类型、通用、面向对象的编程语言,旨在提高编程效率,同时保持运行时性能。DMD的版本dmd.2.026代表...

    Dmd编译器学习笔记

    Dmd是一个开源的、跨平台的编译器,它可以将D语言的源代码转换为机器码,从而在各种操作系统上运行。它支持多种平台,包括Windows、Linux、Mac OS等,这使得D语言的应用范围非常广泛。 在源文件部分,你可能会找到D...

    D编程语言编译器的辅助工具___下载.zip

    1. **DMD (D Mange Compiler)**:这是官方的D语言编译器,用于将D源代码转换为可执行程序。DMD具有快速编译速度和对最新D语言特性的支持。 2. **GDC**:GCC的D语言前端,允许D语言利用GCC的优化和平台支持。 3. **...

    Rulada:D编译器DMD版本1的通用库集-开源

    它是仅与Windows的D编译器DMD版本1一起使用的一组库和工具。 它包含新的运行时,允许同时使用Tango和Phobos库。 它主要与另一个项目(Dinrus,http://sourceforge.net/projects/dinrus)一起使用,作为生成新模块和...

    tools, D 编程语言编译器的辅助工具.zip

    tools, D 编程语言编译器的辅助工具 工具 这个存储库托管了各种在各种构建任务中使用DMD重新分发或者内部使用的工具。程序范围说明catdoc生成连接Ddoc文件。已经更改内部更改日志生成器。chmodzip生成ZIP

    DFL for DMD2.031

    在本篇文章中,我们将探讨DFL的最新版本——DFL for DMD2.031,以及它如何与DMD(D语言的官方编译器)的这一特定版本相结合,提升开发体验。 首先,我们需要了解DMD2.031。DMD是D语言的主要编译器,由Walter Bright...

    D_语言_2.0_编程参考手册

    4. **D语言的社区和工具**:介绍DUB项目管理工具、dlang.org网站资源、社区论坛、开源项目等。 5. **实践案例**:通过实际项目展示D语言的应用,如游戏引擎开发、Web服务器构建等。 这套手册对于初学者来说,能够...

    ldc:基于LLVM的D编译器

    LDC项目提供了具有现代优化和代码生成功能的便携式D编程语言编译器。 编译器使用官方的DMD前端来支持D2的最新版本,并依赖LLVM Core库进行代码生成。 LDC是完全开源的; 未从其他项目中获取/改编的部分源代码已...

    安装程序:适用于各种系统的dmd安装程序

    DMD,全称为Digital Mars D Compiler,是一款开源的D编程语言编译器,由Walter Bright创建并维护。本教程将详细介绍如何使用适用于各种系统的DMD安装程序,以及与之相关的工具和技术,如shell脚本、Bash、Fish shell...

    D Compiler IDE-开源

    3. **构建工具集成**:IDE会内置D语言的编译器,如GDC、LDC或DMD,自动执行编译和链接过程,提供错误和警告的实时反馈。 4. **调试工具**:集成的调试器允许开发者设置断点、单步执行、检查变量值等,以调试代码。 5...

    dlangide:基于DlangUI的D语言IDE

    总结,DlangIDE是一个利用DlangUI库构建的跨平台D语言IDE,它集成了调试器、编译器支持(如DMD和LDC)、代码补全(DCD)以及包管理(Dub)。该IDE旨在提供一个全面的开发环境,适用于Windows、Linux和macOS用户。源...

    esdl:电子系统描述语言

    并且由于该语言是基于D编程语言构建的,因此您需要最新版本的DMD编译器来编译Vlang源文件。 ESDL与2.081或更高版本的DMD编译器一起使用。 可以从页面下载DMD编译器。 目前,Vlang仅在64位Linux计算机上进行了测试。

    DFL Printting!

    DMD通常指的是Digital Mars D编译器,这表明项目是用D语言编写的。 标签“源码 工具”暗示了DFL Printting!可能是一个开源项目,包含源代码,并且是一个开发者工具,可能用于帮助程序员进行打印功能的集成或者调试...

    aesir:Æsir—开源跨平台MMORPG客户端

    您可以从d.acomirei.ru的底部获取D编译器(带有dmd前缀),但这需要一些调整才能起作用。 这些编译器被配置为使用VC ++的本地副本,因此我认为您可以将sc.ini(设置文件)替换为dlang.org官方dmd发行版中的一个,...

    OpenVR-D:Valve的C ++ OpenVR库的D绑定

    OpenVR-D是一个项目,它是Valve的开源C++ OpenVR库的D语言绑定。这个库主要目的是为了让D语言开发者能够方便地接入和利用OpenVR API,从而开发虚拟现实(VR)应用。OpenVR是一个跨平台的SDK,为各种VR硬件设备提供了...

    java代码雨源码-visuald:VisualD-D编程语言的VisualStudio扩展

    支持资源编译器 自定义构建命令 自定义构建步骤前/后 自动依赖生成 依赖项目之间的自动链接 新项目模板 与VC项目集成 通过构建定制实现无缝集成 可访问 DMD 和 LDC 命令行选项 并行编译 调试器 提供 D 表达式评估的 ...

    DMD-P10-display-master.zip

    - 解压"DMD-P10-display-master.zip",将库文件复制到Arduino IDE的库目录中,以便在编译器中使用。 - 在Arduino程序中,需要包含库头文件,并实例化相关的对象来访问和控制LED面板。 - 通过库提供的函数,可以...

    dpebble:Pebble SDK 的 D 绑定

    4. **构建和调试**: 利用Pebble SDK的构建工具链和D语言的编译器,编译并打包应用。可以使用模拟器或实际设备进行测试和调试。 5. **发布应用**: 一旦应用完成并通过所有测试,你可以将其上传到Pebble应用商店,供...

Global site tag (gtag.js) - Google Analytics