Durante mucho tiempo he querido diseñar un lenguaje de programación que combine la extensibilidad con la eficiencia (y la seguridad, la facilidad de uso, etc.) Recientemente redescubrí D y me pregunto si D 2.0 es más o menos el lenguaje que quería hacerme. Lo que más me gusta es el potencial de la metaprogramación; en teoría, ¿podría el sistema D's traits habilitar las siguientes características en tiempo de compilación?¿Es D lo suficientemente potente para estas funciones?
tiempo de ejecución de la reflexión: ¿Está el tiempo de compilación reflexión rasgos suficientes para construir un sistema de reflexión en tiempo de ejecución a la de Java/.NET?
Conversión de código: utilizando un metaprograma, cree C#/C++/etc. versiones de su programa D cada vez que lo compila (punto de bonificación si los comentarios del documento pueden propagarse).
Rasgos. No me refiero al metaprogramming traits integrado en D, me refiero a object-oriented traits for class composition. Un programa D indicaría un conjunto de rasgos para componer, y un metaprograma los integraría.
Motor de inferencia de unidades: dada alguna notación para indicar opcionalmente unidades, p.
unit(value)
, ¿podría un metaprograma D examinar el siguiente código, inferir las unidades correctas y emitir un mensaje de error en la última línea? (Escribí una cosa para boo así que puedo asegurar que esto es posible, en general, el programa-ancho):auto mass = kg(2.0); auto accel = 1.0; // units are strictly optional auto force = mass*accel; accel += metresPerSecondSquared(9.81); // units of 'force' and 'accel' are now known force += pounds(3.0); // unit mismatch detected
No quise sugerir que el convertidor debería admitir todas las características, incluido el lenguaje de ensamblaje :), pero solo la idea de que D podría inspeccionar el código lo suficiente como para * intentar * una conversión. – Qwertie
De esta manera uno podría escribir un programa en D, C++ y C# simultáneamente al limitarse a un cierto subconjunto de D. Naturalmente, tendría que, por ejemplo, convierta los argumentos de la plantilla lambda en argumentos de tiempo de ejecución o replique automáticamente las plantillas con diferentes argumentos, de acuerdo con las limitaciones del idioma de destino. Tal herramienta de conversión podría hacer que D sea más atractivo para escribir ciertas bibliotecas, especialmente algoritmos y estructuras de datos exóticas, aunque reconozco que no necesariamente se debe lograr con la metaprogramación. – Qwertie
Es posible, creo, pero eso requeriría un traductor de idiomas en tiempo de compilación ... Sería un proyecto enorme ... – DejanLekic