compiler construction - DMD vs. GDC vs. LDC
compiler-construction (3)
- El inconveniente significativo de DMD es la deficiencia de la biblioteca compartida:
- Personalmente, me sorprendió que GDC sea compatible con D2, pero dicen que sí :
- D1: 1.067
- D2: 2.053
- LDC parece que apenas se mantiene: "D2 solo funciona en x86-32 Linux" . Para mí, es un tema sensacional.
- Mientras buscaba LDC, encontré un compilador más (?!): dil . Aún no lo he probado, pero al menos actualmente se mantiene. Investigaré más sobre este tema CUANTO ANTES. EDITAR: como se señaló en los comentarios,
dil
no está cerca de un estado algo completo por ahora, solo es capaz de analizar el código y generar documentación de las fuentes.
¿Cuáles son los pros / contras de los diferentes compiladores D? ¿Cómo es compatible el rendimiento y el cumplimiento estándar / D2? ¿Qué tan bien se soportan los depuradores? ¿Qué tan buenos son los mensajes de error y la integración IDE? ¿Qué tan bueno es el soporte de 64 bits? Mi pensamiento hasta ahora:
DMD
- Maduro y bien mantenido
- Solo una plataforma, el soporte de 64 bits no es bueno
- No es FOSS
GDC
- Admite varias plataformas
- Tiene optimizaciones muy maduras, ¿así que es rápido?
- ¿Tiempo de ejecución fuera de fecha?
- GCC por lo que un buen soporte depurador?
LDC
- Admite varias plataformas
- LLVM, ¿entonces es compatible con JITing?
- Tiene optimizaciones muy maduras, ¿así que es rápido?
- No muy bien mantenido?
- ¿Tiempo de ejecución fuera de fecha?
muerto / no trabajando
- Dang
- sdc
- MiniD: muy, muy agradable, pero no D (nunca lo afirmó)
Estoy pensando en seleccionar ARM y creo que GDC es la herramienta de elección, pero no estoy seguro.
A partir de febrero de 2012, parece que LDC no es realmente una opción utilizable (al menos en Debian).
Por ejemplo, considere el primer programa en el libro D :
import std.stdio;
void main(string[] args)
{
writeln("Hello, world!");
}
Esto no se compilará con LDC en mi sistema:
hello.d(24): Error: module stdio cannot read file ''std/stdio.d''
Lo mismo es cierto del primer programa en dlang.org :
import std.stdio;
void main() {
ulong lines = 0;
double sumLength = 0;
foreach (line; stdin.byLine()) {
++lines;
sumLength += line.length;
}
writeln("Average line length: ",
lines ? sumLength / lines : 0);
}
Esto se debe a que mi LDC no es compatible con Phobos, la biblioteca de tiempo de ejecución de D actual . Parece que es posible construir una versión D2 de LDC, incluido Phobos, pero esa no es la forma en que se envía al menos a Debian.
GDC, y por supuesto DMD, ambos compilan lo anterior muy bien. Parece que GDC está bastante actualizado (DMD lanzó 2.057 hace dos meses y GDC lo admite ahora).
Para mí, GDC fue la opción obvia porque un simple '' apt-get -V install gdc
'' traía tanto el compilador como el tiempo de ejecución de Phobos sin problemas (probado en Debian inestable).
DMD es la implementación de referencia. Solo el backend es propietario, el frontend es de código abierto.
La calidad de la generación de código no es tan abrumadora. Sin embargo, la compatibilidad con x64 tiene solo unos pocos meses.
GDC y LDC se basan en la interfaz de DMD, por lo que puede tomar algún tiempo hasta que se fusione una nueva versión de la interfaz.
Como los backends que usan son muy maduros y buenos, la calidad de estos compiladores depende principalmente del código de pegamento que conecta frontend y backend.
LDC y GDC todavía se desarrollan activamente, pero principalmente por unos pocos tipos.
En general, podrían usar algo de mano de obra.