
El equipo de desarrollo de LDC cerró
el año
pasado con la
versión 1.19.0 del compilador D usando LLVM , y el equipo central comenzó el nuevo año con la
versión 2.090.0 del compilador de referencia DMD . Y si no lo ha escuchado, no hace mucho tiempo había noticias importantes sobre el
compilador D basado en GCC, GDC . Maquillaje!
LDC 1.19.0
Esta versión contiene una actualización del compilador LDC a la versión D de la interfaz 2.089.1, que era la versión actual en el momento del lanzamiento, inmediatamente después de la Navidad católica. Los ensamblajes ensamblados
se basan en LLVM 9.01 .
Entre los aspectos más destacados de esta versión se encuentra cierta simpatía por Android. La biblioteca DRuntime / Phobos ya está disponible para todos los objetivos de Android. Esta versión se puede usar junto con
el Proyecto
D de Android de Adam Ruppe , una compilación de programas e interfaces de asistencia,
ahora en versión beta casi completa , para el desarrollo en Android D con LDC.
Los usuarios de Windows encontrarán que las bibliotecas de enlaces basadas en MinGW se han actualizado. Ahora se derivan de archivos
.def del paquete
MinGW-w64 7.0.0 . Estas bibliotecas le permiten usar las bibliotecas del sistema de Windows sin tener que instalar el SDK de Windows.
DMD 2.090.0
La última versión de DMD
se anunció el 7 de enero . Salió con 10 cambios importantes y
71 errores cerrados, amablemente proporcionados por 48 coautores .
Con esta versión, ahora es posible más con parámetros diferidos.
D ha apoyado durante mucho tiempo las opciones perezosas :
El argumento del parámetro diferido no se evalúa hasta que se llama a la función. El argumento se procesa solo si / cuando el parámetro se evalúa dentro de la función.
Por lo tanto, el argumento diferido puede ejecutarse 0 o más veces.
Bajo el capó, se implementan como delegados. Ahora puede llegar al delegado base tomando la dirección del parámetro, que anteriormente estaba prohibido.
import std.stdio; void chillax(lazy int x) { auto dg = &x; assert(dg() == 10); writeln(x); } void main() { chillax(2 * 5); }
Esta versión también hace obsoleto el
idioma D utilizado por aquellos que necesitan distinguir entre la finalización (destrucción no determinista de objetos, generalmente iniciada por el recolector de basura) y la destrucción normal (destrucción determinista de objetos) desde el interior de un destructor de clase o estructura.
En el estado actual de GC, se prohíbe cualquier operación de GC durante la finalización. Sin embargo, D no proporciona finalizadores y destructores separados. Solo hay
~ esto , que se llama destructor, a pesar de que desempeña ambos roles. Esto a veces crea dificultades al implementar destructores para tipos que están diseñados para asignadores GC y no GC. Cualquier llamada al GC durante la limpieza puede provocar un error InvalidMemoryOperationError. Esto implica la necesidad de la solución antes mencionada.
Ahora puede llamar a la función estática de GC, core.memory.GC.inFinalizer, para obtener su estado en el destructor. Devuelve verdadero si el subproceso actual está finalizando, en cuyo caso no desea realizar ninguna acción que implique operaciones con el GC. (Esperaba algo como esto antes de escribir el siguiente artículo en
mi serie GC ).
Gdc
Gracias al arduo trabajo de Ian Bucklau, Johannes Pfau y todos los voluntarios que han apoyado y contribuido a lo largo de los años, el GDC
fue admitido en GCC 9 a finales de 2018 y estuvo disponible como parte del kit GCC 9.1 lanzado en mayo pasado. GCC 9.2 fue lanzado en agosto pasado. Esta versión de GDC implementa la versión 2.076 del front-end D. Puede
construirlo usted mismo o instalarlo desde el mismo lugar donde generalmente obtiene GCC 9.x.
Del traductor
Este número del blog bloqueó casi por completo el bloqueo del próximo artículo sobre programación confiable, incluido D, bueno, con la excepción de las críticas y el estado de las cosas con el IDE, por lo que resultó extremadamente exitoso.