Pregunta

Me pregunto qué es lo maduro y estable D, y si puede ser un buen reemplazo para C / C ++.

Sé que actualmente hay dos bibliotecas estándar (Phobos y Tango).¿Sigue siendo el caso de que no hay una biblioteca estándar unificada?

Además, escuché hace algún tiempo que los idiomas tienen problemas en los límites del código GEDCED / no GCED.No pude encontrar ninguna referencia sobre eso en el sitio web D, ¿este problema sigue siendo cierto?

¿Fue útil?

Solución

La versión 1 de D es madura y estable, y definitivamente hay personas que lo usan para el trabajo real. Phobos es la única biblioteca estándar que ha tenido o probablemente lo habrá hecho, pero las foboes de D1 carecen de suficiente que se crearon varias bibliotecas de terceros para completar las brechas. Tango es el más grande de estos y es la biblioteca de terceros más utilizada (por lo tanto, por qué con frecuencia se llama una segunda biblioteca estándar, aunque no lo es, y Walter Bright será rápido para señalar que no lo es). Sin embargo, el tango y los phobos en D1 no se mezclan muy bien (IIRC porque el tango reemplaza algunas cosas estándar como el colector de basura), por lo que es una buena posibilidad de que alguien programar en D1 use Tango sin Phobos. Además, D1 está soportado por múltiples compiladores además del compilador principal de Digital Marte, incluidos LDC y GDC.

La versión 2 de D está ahora llegando a la madurez y la estabilidad. Han dejado de hacer cambios importantes en el idioma, por lo que generalmente no tiene que preocuparse por todo lo que se está rompiendo con una actualización del compilador, al igual que el caso en el pasado, mientras aún estaban clavando el idioma. De hecho, ahora es lo suficientemente maduro como para que Andrei Alexandrescu se liberara el lenguaje de programación D como un recurso definitivo en el idioma que debería mantenerse válido errores de restringido en el texto (y es uno de los mejores libros de lenguaje de programación que yo 'He leído también). Sin embargo, todavía hay mucha fijación de errores, por lo que es muy posible que se convertirá en un error que le cause un poco de irritación de su aplicación particular. Definitivamente es lo suficientemente maduro y estable como para hacer un trabajo real con él, pero tenga en cuenta que es muy posible que se encuentre con errores.

Tango aún no ha sido portada en D2, por lo que no es realmente una opción al programar en D2. Sin embargo, Phobos está llegando muy bien ahora. Está recibiendo muchas grandes incorporaciones (¡en realidad tiene contenedores ahora! - La falta de contenedores en Phobos es una gran razón para usar Tango en D1 en lugar de Phobos), y tiene algunas cosas realmente poderosas en él - Std.algorithm es particularmente agradable. La forma en que se maneja las funciones de lambda, las funciones anidadas y los punteros de función hacen que las funciones de paso a los algoritmos sean más fáciles de lo que está en el estándar actual de C ++. Además, se ha fijado en D2 para que el colector de basura y algunas otras cosas básicas que el tango se duplicó ahora está separado de los phobos. Entonces, una vez que el tango ha sido portada a D2, podrás mezclar phobos y código de tango, aunque como se ha señalado en una respuesta previa, Phobos y Tango usan las filosofías de diseño más bien diferentes (el tango es muy similar a Java y Phobos utilizando plantillas y meta-programación con tipificación de pato en lugar de interfaces), por lo que no sé qué tan bien se mezclarán de ese punto de vista.

Actualmente, creo que DMD es el único compilador que está actualizado con respecto a la especificación de D2, pero creo que se está trabajando en los compiladores de GDC y LDC D (aunque lo activo que funciona es, no lo sé). Además, Walter Bright está trabajando actualmente en el puerto de DMD de 64 bits, por lo que obtendremos una compilación nativa de 64 bit uno de estos días relativamente pronto.

En general, diría que D2 está listo para su uso, pero debe ser consciente de que todavía hay mucho trabajo que se está haciendo con respecto a las correcciones de errores y similares. Por lo tanto, D2 está definitivamente listo para el uso de pasatiempos y potencialmente para un uso grave en el trabajo, pero si usted es realmente necesita estabilidad (como si estuvieras boeing y un error significa muerte), entonces D1 probablemente sea Una mejor opción. Por supuesto, lo mejor que debe recordar sobre D2 es que tiene muchas características que D1 no tiene, así que, a menos que realmente necesite una estabilidad de roca sólida, entonces D2 es probablemente la forma de ir. Afortunadamente, continúa maduro y se estabiliza, por lo que el tiempo se acerca definitivamente cuando no habrá ninguna pregunta de que usar D2 sería mejor.

Sin importar, tanto D1 como D2 son buenos reemplazos para C y C ++ en el caso general. Pueden hacer lo que hacen C y C ++, y (especialmente en el caso de D2) probablemente pueda hacerlo mejor. El lugar principal que D podría quedarse atrás está en qué tan bien está optimizado. Hay un montón de código que será tan rápido en D como en C o C ++, pero todavía hay mucho trabajo que se está haciendo en D, por lo que hay suficiente espacio para optimizarlo más, y a veces se retrasará detrás de C y C ++ por eficiencia. . Entonces, en general, D es eficiente, pero si usted es realmente necesita tanta eficiencia como pueda obtener, es posible que aún no sea lo suficientemente bueno para lo que necesita (aunque está llegando). Además, hay un montón de bibliotecas C y C ++ maduras, mientras que D no tiene ningún lugar cerca del mismo nivel de código que flota para trabajar. Cualquier código C podría usarse con D, ya que se pueden llamar a las funciones C, y algunos de los códigos de C ++ podrían ser (aunque hay bastantes restricciones al mezclar el código de C ++ con D), de modo que no necesariamente sería gran parte de Un impedimento, pero es algo por lo que ser consciente. T

El lugar principal donde faltaba serían bibliotecas GUI.Hay algunos para D1, y se está trabajando en bibliotecas de GUI para D2, pero no creo que ninguno de ellos sea particularmente maduro en este punto.

Entonces, como con todo, qué idioma deberías usar depende de lo que estás haciendo.D hará la mayoría de las cosas y hará bien.Pero no lo hace todo, y todavía está madurando.Personalmente, en este punto, utilizo D, a menos que necesite usar algo más para un proyecto en particular, lo que no es a menudo, a menos que el proyecto ya haya escrito en otra cosa, y no tiene sentido ponerlo en este momento.Entonces, sugeriría altamente usar D, pero tendrás que investigarlo y usarlo para ver si realmente hará lo que quiere en este punto.

Otros consejos

Recomiendo usar D2 con Phobos.Está en el punto en que el lenguaje es lo suficientemente agradable y lo suficientemente estable como para compensar las frustraciones ocasionales causadas por problemas de implementación.

Sé que actualmente hay dos bibliotecas estándar (Phobos y Tango), así que asumo que podría haber personas que intentan unificarlas.

"Unificación" es extremadamente improbable debido a las diferencias en las licencias. Cuando el tango se verá portado a D 2.0, podrá usarlo junto a Phobos, lo que no es posible (fácilmente) posibles en D 1.0.

Además, escuché hace algún tiempo que los idiomas tienen problemas en los límites del código GEDCED / no GCED. No pude encontrar ninguna referencia sobre eso en el sitio web D, ¿este problema sigue siendo cierto?

Creo que solo hay problemas si no tiene cuidado con la forma en que administra la memoria. Si todas las referencias a un objeto asignado GC se almacenan fuera de las regiones de memoria marcadas como ROOTS GC, el GC considerará que el objeto no referenció y lo eliminará.

Si tuviera que elegir D como reemplazo C hoy, ¿qué D (v 1.0 o V 2.0) y qué biblioteca estándar sugeriría?

Phobos y Tango van en direcciones algo diferentes. Los phobos (en D 2.0) vientan estrechamente con las nuevas características de D2. Tango es más lleno de características, y contiene módulos que no están presentes en Phobos, por ejemplo. Soporte de cliente HTTP / FTP, varias clases de criptografía, etc. También siguen las diferentes filosofías de diseño (Phobos es más imperativo / meta-programación-ISH, mientras que el tango es muy estrictamente similar a OOP, y así similar a Java a ese respecto). < / p>

Me pregunto qué es lo maduro y estable D, y si puede ser un buen reemplazo para C / C ++.

Sería desconfiado de usar cualquier idioma que aún no haya sido respaldado por un organismo de estándares como ANSI, ISO o ECMA.Ese es tal vez un indicador de madurez.Dicha Java y Delphi, por ejemplo, caerían en esa categoría, y aunque no uso esos idiomas, probablemente podrían describirse como "maduros".

Otra medida podría ser el número y la calidad de los libros y los artículos escritos para el idioma.Hay un libro para D que soy consciente de Andrei AlexandrescuSu.También ha escrito un largo artículo en el idioma para el DR. Dobbs, donde trata específicamente el problema de la biblioteca estándar.

He tenido una buena experiencia escribiendo un pequeño juego en D1 con Phobos y SDL, pero es un proyecto bastante pequeño.

En mi opinión, D carece:

  • Un foro web oficial donde las personas pueden obtener ayuda y buscar respuestas (no noticias)
  • un repositorio oficial para muchos SDS convertidos en D (por ejemplo, SDL, GTK, etc., a menudo son difíciles de encontrar y usar, cuando existen en absoluto).

No creo que la cuestión de reemplazar C sea sobre si un reemplazo potencial es "bueno" o "maduro" lo suficiente en un nivel teórico, sino de consideraciones prácticas y el hecho de que C es "lo suficientemente bueno" por lo quees usado para.A menos que un idioma tenga completos entornos de construcción y tiempo de ejecución nativos para cada sistema operativo principal, no es realmente práctico para qué C se usa.El hecho de que C sea el idioma de POSIX es una parte importante de todo el tema.

Seguramente otros idiomas de nivel semi-bajo como D podría tener grandes aplicaciones en campos especializados.Pero es poco probable que vea el software principal de MultiplicForm (servidores web, servidores de base de datos, procesadores de Word, navegadores web, etc.) escritos en D porque ningún sistema operativo importante (mucho menos) viene con un entorno de construcción D o tiempo de ejecución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top