Difference between revisions of "Compilers"
Klickverbot (talk | contribs) |
ZILtoid1991 (talk | contribs) (→Comparison) |
||
(72 intermediate revisions by 21 users not shown) | |||
Line 5: | Line 5: | ||
<td style="width:33%; vertical-align: top; padding: 10px 10px; background: #f9f9f9; border: 1px solid #ccc; border-top: 1px solid #eee; border-bottom: 2px solid #999;"> | <td style="width:33%; vertical-align: top; padding: 10px 10px; background: #f9f9f9; border: 1px solid #ccc; border-top: 1px solid #eee; border-bottom: 2px solid #999;"> | ||
= [[DMD|DMD »]] = | = [[DMD|DMD »]] = | ||
− | '''Digital Mars D compiler''' <br/>The | + | '''Digital Mars D compiler''' <br/>The official reference D compiler. |
<div style="text-align: right;">[[DMD|DMD Portal »]]</div> | <div style="text-align: right;">[[DMD|DMD Portal »]]</div> | ||
</td> | </td> | ||
<td style="width:33%; vertical-align: top; padding: 10px 10px; background: #f9f9f9; border: 1px solid #ccc; border-top: 1px solid #eee; border-bottom: 2px solid #999;"> | <td style="width:33%; vertical-align: top; padding: 10px 10px; background: #f9f9f9; border: 1px solid #ccc; border-top: 1px solid #eee; border-bottom: 2px solid #999;"> | ||
+ | |||
+ | |||
+ | |||
+ | [[Category:Compiler]] | ||
= [[GDC|GDC »]] = | = [[GDC|GDC »]] = | ||
'''GCC D compiler'''<br/> | '''GCC D compiler'''<br/> | ||
− | Fast and open source. | + | The DMD compiler front end coupled with the GCC compiler back end. Fast and open source. |
<div style="text-align: right;">[[GDC|GDC Portal »]]</div> | <div style="text-align: right;">[[GDC|GDC Portal »]]</div> | ||
</td> | </td> | ||
Line 20: | Line 24: | ||
= [[LDC|LDC »]] = | = [[LDC|LDC »]] = | ||
'''LLVM D compiler'''<br/> | '''LLVM D compiler'''<br/> | ||
− | Fast and open source. | + | The DMD compiler front end coupled with the LLVM compiler back end. Fast and open source. |
<div style="text-align: right;">[[LDC|LDC Portal »]]</div> | <div style="text-align: right;">[[LDC|LDC Portal »]]</div> | ||
</td> | </td> | ||
Line 26: | Line 30: | ||
</tr> | </tr> | ||
</table> | </table> | ||
− | |||
− | |||
− | |||
− | |||
== Which compiler should I use? == | == Which compiler should I use? == | ||
− | + | For beginners, DMD is the recommended choice, as it is the implementation closest to the D Language Specification. Otherwise, the best choice depends on the project's needs, the target platforms, and personal preferences. GDC and LDC both generate substantially faster binaries than DMD. | |
== Comparison == | == Comparison == | ||
− | {| class="wikitable" | + | {| class="wikitable" style="width: 65em" |
! | ! | ||
!DMD | !DMD | ||
Line 44: | Line 44: | ||
|'''Platforms''' | |'''Platforms''' | ||
| | | | ||
+ | *Windows | ||
*Linux | *Linux | ||
− | * | + | *OS X |
*FreeBSD | *FreeBSD | ||
− | |||
| | | | ||
+ | *Windows (alpha) | ||
*Linux | *Linux | ||
− | * | + | *OS X (untested) |
− | *FreeBSD | + | *FreeBSD (untested) |
− | |||
| | | | ||
+ | *Windows | ||
*Linux | *Linux | ||
− | * | + | *OS X |
*FreeBSD | *FreeBSD | ||
− | * | + | *OpenSolaris |
+ | *iOS (alpha) | ||
+ | *Android | ||
|--- | |--- | ||
+ | |||
|'''Architectures''' | |'''Architectures''' | ||
| | | | ||
* i386 | * i386 | ||
* amd64 | * amd64 | ||
+ | * arm64(aarch64)(experimental) | ||
| | | | ||
+ | Complete (runtime / standard library) support: | ||
* i386 | * i386 | ||
* amd64 | * amd64 | ||
+ | * x32 | ||
+ | * armel | ||
+ | * armhf | ||
+ | Partial or bare-metal only support (packages for gdc in [https://packages.debian.org/sid/gdc-5 debian]): | ||
+ | * alpha | ||
+ | * arm64 (aarch64) | ||
+ | * hppa | ||
+ | * hurd-i386 | ||
+ | * kfreebsd-amd64 | ||
+ | * kfreebsd-i386 | ||
+ | * m68k | ||
+ | * mips | ||
+ | * mipsel | ||
+ | * ppc | ||
+ | * pcc64 | ||
+ | * ppc64el | ||
+ | * s390x | ||
+ | * sparc64 | ||
| | | | ||
+ | Complete (runtime / standard library) support: | ||
* i386 | * i386 | ||
* amd64 | * amd64 | ||
+ | * armel | ||
+ | * armhf | ||
+ | |||
+ | Near-complete support: | ||
+ | * arm64 (aarch64) | ||
+ | * ppc | ||
+ | * ppc64 | ||
+ | * ppc64el | ||
+ | * mips64 | ||
+ | |||
+ | Partial or bare-metal only support: | ||
+ | * mips | ||
+ | * s390x | ||
+ | * WASM | ||
|--- | |--- | ||
− | |''' | + | |'''Distribution''' |
− | | | + | | |
− | | | + | *Source |
− | | | + | *Multi-platform source/binary archive |
+ | *Multi-platform installer ([https://github.com/jacob-carlborg/dvm DVM]) | ||
+ | *Windows installer | ||
+ | *OS X package (.dmg) | ||
+ | *Debian/Ubuntu package (.deb) | ||
+ | *Fedora package (.rpm) | ||
+ | *OpenSUSE (.rpm) package | ||
+ | *Debian/Ubuntu repository via http://d-apt.sourceforge.net | ||
+ | *OS-X homebrew and macports repositories | ||
+ | *Nix/NixOS package (for NixOS, other Linux and OS X) | ||
+ | | | ||
+ | *Source | ||
+ | *Windows / Linux binary archive | ||
+ | *Debian/Ubuntu repository | ||
+ | *Gentoo repository | ||
+ | *Archlinux repository | ||
+ | | | ||
+ | *Source | ||
+ | *Windows / Linux / OS X binary archive | ||
+ | *Debian/Ubuntu repository | ||
+ | *Fedora repository | ||
+ | *Gentoo repository | ||
+ | *FreeBSD repository | ||
+ | *[[Installing_LDC_on_GNU_Guix|GNU Guix]] | ||
+ | *Nix/NixOS package (for NixOS, other Linux and OS X) | ||
|--- | |--- | ||
|'''Backend''' | |'''Backend''' | ||
− | | DMD | + | | [https://github.com/dlang/dmd/tree/master/src/dmd/backend DMD] ([http://digitalmars.com/download/freecompiler.html DMC] fork) |
− | | GCC | + | | [http://gcc.gnu.org/ GCC] |
− | | LLVM | + | | [http://llvm.org/ LLVM] |
|--- | |--- | ||
|'''License''' | |'''License''' | ||
− | | | + | | Boost |
− | | | + | | GPL 3 or later |
| LDC-specific code: 3-clause BSD | | LDC-specific code: 3-clause BSD | ||
|--- | |--- | ||
|'''Inline assembler''' | |'''Inline assembler''' | ||
− | | | + | | |
− | | | + | * DMD Intel-like syntax (i386/amd64) |
− | | | + | | |
+ | * GCC syntax (all targets) | ||
+ | | | ||
+ | * DMD Intel-like syntax (i386/amd64) | ||
+ | * GCC syntax (all targets) | ||
+ | * [[LDC inline IR|LLVM inline IR]] | ||
|--- | |--- | ||
|'''SIMD''' | |'''SIMD''' | ||
Line 95: | Line 163: | ||
| Partial (?) | | Partial (?) | ||
| Partial (?) | | Partial (?) | ||
+ | |--- | ||
+ | |'''Phobos as a shared library''' | ||
+ | | | ||
+ | * Linux | ||
+ | * FreeBSD ? | ||
+ | | | ||
+ | * Linux | ||
+ | * FreeBSD ? | ||
+ | | | ||
+ | * Linux | ||
+ | |--- | ||
+ | |'''Building D code as shared library''' | ||
+ | | | ||
+ | * Linux | ||
+ | * FreeBSD ? | ||
+ | * Windows ? | ||
+ | | | ||
+ | | | ||
+ | * Linux | ||
+ | * OS X | ||
+ | |--- | ||
+ | |'''Dynamic loading of D shared libraries''' | ||
+ | | | ||
+ | * Linux | ||
+ | | | ||
+ | | | ||
+ | * Linux | ||
+ | * OS X | ||
|--- | |--- | ||
!colspan="4" align="center"|<br/>'''Linux specific''' | !colspan="4" align="center"|<br/>'''Linux specific''' | ||
|--- | |--- | ||
|'''Object file format''' | |'''Object file format''' | ||
− | | | + | | ELF |
− | | | + | | ELF |
− | | | + | | ELF |
|--- | |--- | ||
!colspan="4" align="center"|<br/>'''Mac specific''' | !colspan="4" align="center"|<br/>'''Mac specific''' | ||
|--- | |--- | ||
|'''Object file format''' | |'''Object file format''' | ||
− | | | + | | Mach-O |
− | | | + | | Mach-O |
− | | | + | | Mach-O |
|--- | |--- | ||
!colspan="4" align="center"|<br/>'''Windows specific''' | !colspan="4" align="center"|<br/>'''Windows specific''' | ||
|--- | |--- | ||
|'''Object file format''' | |'''Object file format''' | ||
− | | | + | | OMF (32) / COFF (32 & 64) |
− | | | + | | COFF |
− | | | + | | COFF |
|} | |} | ||
+ | |||
+ | ==Package and/or binary availability, by platform and compiler== | ||
+ | |||
+ | Some unofficial repositories and downloads are listed here, but of course many more do exist. With a little searching, you may be able to find something more up to date for your chosen OS. | ||
+ | |||
+ | Very old compilers are (mostly) omitted, as they are unlikely to be of interest to users. | ||
+ | |||
+ | {| class="wikitable" style="width: 65em" | ||
+ | !rowspan="2"|<br/>Platform | ||
+ | !colspan="3" align="center"|Compiler | ||
+ | |--- | ||
+ | !DMD | ||
+ | !GDC | ||
+ | !LDC | ||
+ | |--- | ||
+ | !Windows | ||
+ | | | ||
+ | *[http://dlang.org/download.html Manual download] | ||
+ | *[https://chocolatey.org Chocolatey] | ||
+ | | | ||
+ | *[http://gdcproject.org/downloads Manual download] | ||
+ | | | ||
+ | *[https://github.com/ldc-developers/ldc/releases Manual download] | ||
+ | |--- | ||
+ | !OS X | ||
+ | | | ||
+ | *[http://brew.sh Homebrew] | ||
+ | *[https://www.macports.org MacPorts] | ||
+ | *[https://nixos.org/nixos/packages.html#dmd Nix] | ||
+ | *[http://dlang.org/download.html Manual download] | ||
+ | | | ||
+ | | | ||
+ | *[http://brew.sh Homebrew] | ||
+ | *[https://nixos.org/nixos/packages.html#ldc Nix] | ||
+ | *[https://github.com/ldc-developers/ldc/releases Manual download] | ||
+ | |--- | ||
+ | !iOS | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | *[https://github.com/smolt/ldc-iphone-dev/releases Manual download] | ||
+ | |--- | ||
+ | !Android | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | *[https://github.com/ldc-developers/ldc/releases Manual download] | ||
+ | *[[Build D for Android|Instructions on setup]], including a native package | ||
+ | |--- | ||
+ | !Linux (generic) | ||
+ | | | ||
+ | *[http://dlang.org/download.html Manual download] | ||
+ | | | ||
+ | *[http://gdcproject.org/downloads Manual download] | ||
+ | | | ||
+ | *[https://github.com/ldc-developers/ldc/releases Manual download] | ||
+ | *[[LDC cross-compilation for ARM GNU/Linux|Source]] (ARM/Linux cross-compiler) | ||
+ | |--- | ||
+ | !Cross-platform | ||
+ | | | ||
+ | * [https://github.com/jacob-carlborg/dvm DVM] (Any version) | ||
+ | | | ||
+ | | | ||
+ | |--- | ||
+ | !colspan="4" | Distribution-specific packages | ||
+ | |--- | ||
+ | !Debian | ||
+ | | | ||
+ | *[http://dlang.org/download.html Manual download] | ||
+ | *[http://d-apt.sourceforge.net APT repository] | ||
+ | | | ||
+ | * [https://packages.debian.org/buster/gdc stable] | ||
+ | * [https://packages.debian.org/bullseye/gdc testing] | ||
+ | * [https://packages.debian.org/sid/gdc unstable] | ||
+ | | | ||
+ | * [https://packages.debian.org/buster/ldc stable] | ||
+ | * [https://packages.debian.org/bullseye/ldc testing] | ||
+ | * [https://packages.debian.org/sid/ldc unstable] | ||
+ | |--- | ||
+ | !Ubuntu | ||
+ | | | ||
+ | *[http://dlang.org/download.html Manual download] | ||
+ | *[http://d-apt.sourceforge.net APT repository] | ||
+ | | | ||
+ | [http://packages.ubuntu.com/search?keywords=gdc gdc] | ||
+ | | | ||
+ | [http://packages.ubuntu.com/search?keywords=ldc ldc] | ||
+ | |--- | ||
+ | !Fedora | ||
+ | | | ||
+ | *[http://dlang.org/download.html Manual download] | ||
+ | | | ||
+ | | | ||
+ | See https://apps.fedoraproject.org/packages/ldc | ||
+ | |--- | ||
+ | !OpenSuse | ||
+ | | | ||
+ | *[https://build.opensuse.org/package/show/devel:languages:D/dmd devel:languages:D] | ||
+ | | | ||
+ | | | ||
+ | *[https://build.opensuse.org/project/show/devel:languages:D devel:languages:D] | ||
+ | *[https://build.opensuse.org/project/show/home:marc_schuetz:branches:devel:languages:D home:marc_schuetz] | ||
+ | |--- | ||
+ | !CentOS | ||
+ | | | ||
+ | *[http://dlang.org/download.html Manual download] | ||
+ | | | ||
+ | | | ||
+ | |--- | ||
+ | !Arch Linux | ||
+ | | | ||
+ | *Community | ||
+ | | | ||
+ | *Community | ||
+ | *AUR ([https://aur.archlinux.org/packages/gdc-git/ git HEAD]) | ||
+ | | | ||
+ | *Community | ||
+ | *AUR ([https://aur.archlinux.org/packages/ldc-git/ git HEAD]) | ||
+ | |--- | ||
+ | !Gentoo | ||
+ | |colspan="3" align=center | see https://wiki.gentoo.org/wiki/Dlang | ||
+ | |--- | ||
+ | !FreeBSD | ||
+ | | | ||
+ | *[http://dlang.org/download.html Manual download] | ||
+ | *Ports | ||
+ | | | ||
+ | | | ||
+ | *[https://www.freshports.org/lang/ldc Ports] | ||
+ | |} | ||
+ | |||
+ | == Experimental compilers and forks == | ||
+ | |||
+ | * [[SDC|SDC (Snazzy D Compiler)]] - from-scratch D compiler implementation, written in idiomatic D. | ||
+ | * [https://github.com/smolt/ldc-iphone-dev LDC for iOS] - LDC-based toolkit for cross-compiling to iOS | ||
+ | * [https://github.com/joakim-noah/android/releases D for Android] - Toolkit for cross-compiling to Android (x86 using DMD and ARM using LDC) | ||
+ | * [https://github.com/Syniurge/Calypso Calypso] - LDC fork which provides direct Clang interoperability, allowing the use of C headers directly. | ||
+ | * DCompute ([[LDC CUDA and SPIRV]]) - Library and LDC fork to "target CUDA and SPIR to enable hassle free native execution on the gpu" -upstreamed into LDC | ||
+ | * [https://github.com/yebblies/dmd/tree/microd MicroD] - DMD fork which outputs C source code instead of object files | ||
+ | * [https://github.com/adamdruppe/dtojs dtojs] - DMD fork which outputs JavaScript source code instead of object files | ||
+ | * [[DIL]] - D compiler written in D2/Tango (inactive project) | ||
+ | * [https://github.com/Ace17/dscripten dscripten] - LDC/emscripten-based toolchain for compiling D to asm.js / WebAssembly | ||
+ | |||
+ | Category page: [[Experimental compilers]] | ||
+ | |||
+ | [[Category:Compiler]] |
Latest revision as of 18:35, 28 August 2024
DMD »Digital Mars D compiler |
GDC »GCC D compiler |
LDC »LLVM D compiler |
Which compiler should I use?
For beginners, DMD is the recommended choice, as it is the implementation closest to the D Language Specification. Otherwise, the best choice depends on the project's needs, the target platforms, and personal preferences. GDC and LDC both generate substantially faster binaries than DMD.
Comparison
DMD | GDC | LDC | |
---|---|---|---|
Platforms |
|
|
|
Architectures |
|
Complete (runtime / standard library) support:
Partial or bare-metal only support (packages for gdc in debian):
|
Complete (runtime / standard library) support:
Near-complete support:
Partial or bare-metal only support:
|
Distribution |
|
|
|
Backend | DMD (DMC fork) | GCC | LLVM |
License | Boost | GPL 3 or later | LDC-specific code: 3-clause BSD |
Inline assembler |
|
|
|
SIMD | Partial (?) | Partial (?) | Partial (?) |
Phobos as a shared library |
|
|
|
Building D code as shared library |
|
| |
Dynamic loading of D shared libraries |
|
| |
Linux specific | |||
Object file format | ELF | ELF | ELF |
Mac specific | |||
Object file format | Mach-O | Mach-O | Mach-O |
Windows specific | |||
Object file format | OMF (32) / COFF (32 & 64) | COFF | COFF |
Package and/or binary availability, by platform and compiler
Some unofficial repositories and downloads are listed here, but of course many more do exist. With a little searching, you may be able to find something more up to date for your chosen OS.
Very old compilers are (mostly) omitted, as they are unlikely to be of interest to users.
Platform |
Compiler | ||
---|---|---|---|
DMD | GDC | LDC | |
Windows | |||
OS X | |||
iOS | |||
Android |
| ||
Linux (generic) |
| ||
Cross-platform |
|
||
Distribution-specific packages | |||
Debian | |||
Ubuntu | |||
Fedora | |||
OpenSuse | |||
CentOS | |||
Arch Linux |
|
|
|
Gentoo | see https://wiki.gentoo.org/wiki/Dlang | ||
FreeBSD |
|
Experimental compilers and forks
- SDC (Snazzy D Compiler) - from-scratch D compiler implementation, written in idiomatic D.
- LDC for iOS - LDC-based toolkit for cross-compiling to iOS
- D for Android - Toolkit for cross-compiling to Android (x86 using DMD and ARM using LDC)
- Calypso - LDC fork which provides direct Clang interoperability, allowing the use of C headers directly.
- DCompute (LDC CUDA and SPIRV) - Library and LDC fork to "target CUDA and SPIR to enable hassle free native execution on the gpu" -upstreamed into LDC
- MicroD - DMD fork which outputs C source code instead of object files
- dtojs - DMD fork which outputs JavaScript source code instead of object files
- DIL - D compiler written in D2/Tango (inactive project)
- dscripten - LDC/emscripten-based toolchain for compiling D to asm.js / WebAssembly
Category page: Experimental compilers