Me gustaría decir que me convertí en un entusiasta de D ayer, cuando aprendí cuánto mejor que C++, y he estado estudiando D durante dos días seguidos de puro amor. Oh, no es perfecto, ¿pero comparado con C++? No contestar. Lo mismo para Java. C# fue mi lenguaje preferido desde hace 3 días, pero hoy creo que ha bajado de rango.
Sin haber usado D para ningún trabajo serio todavía, podría estar equivocado. Pero D tiene una respuesta a todas las críticas principales que comúnmente se plantean en contra de C++, desde el tiempo de compilación hasta la seguridad de tipo deficiente, al dolor de cabeza de mantener archivos de encabezado, para ralentizar la compilación.D no es sólo una mejora evolutiva, que ha innovaciones que se encuentra en ninguno de los lenguajes populares del mundo:
- Se dice que tienen uno de los compiladores más rápidos del mundo
- Puede usar try/catch/finally y RAII, pero
scope(exit)
hace que el código de excepción sea más fácil de leer y escribir
- Puede definir los cierres que el compilador puede alinear (¿algún compilador de C++ 11 hace eso? No estoy seguro, estoy atrapado en Visual C++ 2008 debido a una necesidad de compatibilidad con Windows CE)
- La recolección de basura es estándar pero opcional, para que pueda escribir programas con garantías de baja latencia evitando las asignaciones de GC (¿pero cómo administrar la memoria? Sospecho que uno podría usar
alias this
hacer punteros inteligentes al estilo de C++?)
- rebanadas, un mecanismo de acceso colección que es mucho más seguro que los iteradores de C++ y también mucho más conveniente, sin necesidad de repetir a sí mismo como en
lower_bound(blobCollection.begin(), blobCollection.end(), blob)
- genéricos son más flexible que en C++ y no producen páginas de mensajes de error
- metaprogramación tiempo de compilación que enormemente supera a C++ (y, obviamente, C# también)
- Compile-time reflection la que (espero, pero no puedo confirmar) se podría utilizar para construir un sistema de reflexión en tiempo de ejecución si uno quisiera
- Un enfoque bien diseñado, de múltiples paradigmas h concurrencia con características interesantes para las arquitecturas de memoria compartida y de paso de mensajes
- Compatibilidad incorporada para pruebas unitarias
- Expresiones de matriz, p. ej. a [] = (b [] + c [])/2 (MATLAB hace esto de forma más concisa, pero entre los lenguajes de uso general este tipo de característica es raro)
- Características superiores de coma flotante (por ejemplo, nextUp()/nextDown()/ulp(), flotantes hex, control de excepciones de hardware)
Para un compilador o una biblioteca de motor de búsqueda, D obviamente sería excelente. Y dado que D es muy similar a C++, no tendrías que perder mucho tiempo aprendiéndolo, ¿por qué no? Además, no debería ser tan difícil portar pequeños programas y bibliotecas desde C++. Tengo la impresión de que los enlaces de GUI también han mejorado, así que quizás D funcione bien para un editor de texto en estos días.
Es cierto que no estoy contento con todo. Todavía están atendiendo a la multitud C, por lo que todavía tiene que rellenar sus declaraciones switch
con breaks
, la palabra clave static
se usa de manera confusa, las lambdas requieren llaves y una declaración de "retorno" (en oposición a la sintaxis más rápida de C# x -> x+1
), todas las funciones y try/catch requiere llaves, pass-by-reference está implícito en el sitio de llamadas ... pero lo que D ofrece es demasiado bueno para dejarlo pasar.
Pero, por supuesto, mientras que la lengua D es claramente una maravilla, y la biblioteca estándar aparentemente ha madurado, las herramientas que rodean podrían no ser tan bueno: IDE, soporte para plataformas de teléfonos inteligentes, etc. El único IDE he intentado, Visual D (complemento IDE para Visual Studio) funciona bastante bien, incluida la depuración que parece funcionar tan bien como el depurador de Visual C++ y que puede ingresar a la biblioteca estándar (¡divertido!). Sin embargo, la finalización del código aún no funciona muy bien.
En comparación con C#, D es mejor en la mayoría de las áreas pero parece débil cuando se trata de vinculación dinámica y reflexión. Por ejemplo, su editor de texto podría tener fácilmente un sistema de complemento en .NET, pero no estoy tan seguro de que D.NET también ofrezca generación de código de tiempo de ejecución mientras que D no lo haga.Sin embargo, existe un research compiler para compilar D con código .NET. Dado que C++/CLI ya compila a .NET (C++/CLI), quizás algún día uno pueda usar D igualmente bien para código administrado y nativo (con un pequeño golpe de rendimiento en terreno administrado, por supuesto).
Interoperabilidad con C/C++ y .NET son bastante decentes. D se supone que interopera con las funciones de C++ y las clases heredadas individualmente a través de extern (C++)
y C++ name mangling (pero que compilador name mangling?), Mientras que puedes crear fácilmente interfaces COM invocables desde .NET y otros lenguajes.
Sin saber lo que quiere hacer, o los idiomas que ya conoce, es imposible responder. Además, las personas que están calificadas para hablar sobre D frente a otros idiomas están casi seguro de ser entusiastas de D, por lo que es poco probable que obtengas una respuesta equilibrada. –
¿Cómo podríamos responder esto sin más detalles? Claramente vale la pena * * y no vale la pena para * otros *. ¿Qué esperas fuera del idioma? ¿Piensas desarrollar algo con él o es una experiencia de aprendizaje? ¿Has investigado lo que D ofrece? –
Acerca de la pregunta de Michael Petrotta, sí, estoy interesado en lo que D ofrece, pero TODOS los idiomas ofrecen la base Heaven y The Paradise en esta o aquella característica. Quiero saber de personas que realmente han estado trabajando en cosas reales si estas características son tan maravillosas como dicen. – Nisanio