La versión 1 de D es madura y estable, y definitivamente hay gente que la usa para el trabajo real. Phobos es la única biblioteca estándar que D ha tenido o que probablemente tendrá alguna vez, pero Fobos de D1 carece de suficientes bibliotecas de terceros para llenar los vacíos. Tango es el más grande de todos y es la biblioteca de terceros más utilizada (de ahí que a menudo se lo denomine una segunda biblioteca estándar aunque no lo sea, y Walter Bright se apresurará a señalar que no lo es). Sin embargo, Tango y Phobos en D1 no se mezclan muy bien (IIRC porque Tango reemplaza algunas cosas estándar como el recolector de basura), por lo que hay muchas posibilidades de que alguien programando en D1 use Tango sin Phobos. Además, D1 es compatible con múltiples compiladores además del compilador principal de Digital Mars, incluidos LDC y gdc.
La versión 2 de D acaba de alcanzar la madurez y la estabilidad. Han dejado de realizar cambios importantes en el idioma, por lo que generalmente no tiene que preocuparse de que todo se interrumpa con una actualización del compilador, como ocurría en el pasado, mientras seguían clavando el idioma. De hecho, ahora es lo suficientemente maduro como para que Andrei Alexandrescu haya lanzado The D Programming Language como un recurso definitivo en el lenguaje que debe permanecer válido para evitar errores en el texto (y es uno de los mejores libros de lenguaje de programación que he leído) . Sin embargo, todavía hay mucha corrección de errores, por lo que es muy posible que se encuentre con un error que le causa un poco de irritación por su aplicación particular. Definitivamente es lo suficientemente maduro y lo suficientemente estable como para hacer un trabajo real con él, pero ten en cuenta que es bastante posible encontrar errores.
Tango aún no ha sido portado a D2, por lo que no es realmente una opción cuando se programa en D2. Sin embargo, Phobos está llegando bastante bien ahora. Está obteniendo una gran cantidad de adiciones (¡en realidad tiene contenedores ahora !: la falta de contenedores en Phobos es una gran razón para usar Tango en D1 en lugar de Fobos), y tiene algunas cosas realmente poderosas: el algoritmo estándar es particularmente agradable. La forma en que D maneja las funciones lambda, las funciones anidadas y los punteros a las funciones hace que pasar las funciones a los algoritmos de años luz sea más fácil que en el estándar actual de C++. Además, se ha corregido en D2, por lo que el recolector de basura y algunas otras cosas centrales que Tango estaba duplicando ahora están separadas de Phobos. Entonces, una vez que Tango haya sido portado a D2, podrás mezclar Phobos y código Tango, aunque como se señaló en una respuesta anterior, Phobos y Tango usan filosofías de diseño bastante diferentes (Tango es muy similar a Java y Phobos utilizando mucho plantillas y metaprogramación con pato-tipado en lugar de interfaces), así que no sé qué tan bien se mezclarán desde ese punto de vista.
Actualmente, creo que dmd es el único compilador que está actualizado con respecto a la especificación para D2, pero creo que se está trabajando en los compiladores gdc y LDC D (aunque qué tan activo el trabajo es, no lo sé). Además, Walter Bright está trabajando actualmente en el puerto de dmd de 64 bits, por lo que obtendremos compilación nativa de 64 bits uno de estos días relativamente pronto.
En general, yo diría que D2 está listo para usar, pero debe tener en cuenta que todavía hay mucho trabajo por hacer con respecto a la corrección de errores y similares. Entonces, D2 definitivamente está listo para usar como hobby y potencialmente para un uso serio en el trabajo, pero si necesita estabilidad (como si usted es Boeing y un error significa muerte), entonces D1 probablemente sería una mejor opción.Por supuesto, lo más importante que hay que recordar sobre D2 es que tiene muchas características que D1 no tiene, así que a menos que realmente necesites una sólida estabilidad, entonces es probable que D2 sea el camino a seguir. Afortunadamente, continúa madurando y estabilizándose, por lo que definitivamente se acerca el momento en que no habrá dudas de que usar D2 sería mejor.
Independientemente, tanto D1 como D2 son buenos reemplazos para C y C++ en el caso general. Pueden hacer lo que C y C++ hacen, y (especialmente en el caso de D2) probablemente puedan hacerlo mejor. El principal lugar en el que D podría quedarse atrás es en qué tan bien está optimizado. Hay un montón de código que será igual de rápido en D que en C o C++, pero aún se está trabajando mucho en D, por lo que hay mucho espacio para optimizarlo aún más y, a veces, quedará rezagado respecto de C y C++ para la eficiencia . Entonces, en general, D es eficiente, pero si necesita realmente tanta eficiencia como puede obtener, puede que aún no sea lo suficientemente buena para lo que necesita (aunque está llegando). Además, hay muchas bibliotecas maduras de C y C++, mientras que D no tiene el mismo nivel de código flotante para trabajar allí. Cualquier código C podría usarse con D ya que las funciones C pueden invocarse desde D, y parte del código C++ podría ser (aunque existen bastantes restricciones cuando se mezcla código C++ con D), por lo que no sería necesariamente mucho de un impedimento, pero es algo a tener en cuenta. El lugar principal donde falta son las bibliotecas de GUI. Hay algunos para D1, y se está trabajando en las bibliotecas de GUI para D2, pero no creo que ninguno de ellos sea particularmente maduro en este momento.
Por lo tanto, como con todo, el idioma que debe usar depende de lo que esté haciendo. D hará la mayoría de las cosas y las hará bien. Pero no hace todo, y aún está madurando. Personalmente, en este punto, uso D a menos que necesite usar algo más para un proyecto en particular, que no es frecuente a menos que el proyecto ya haya sido escrito de otra manera, y no tiene sentido portarlo ahora. Por lo tanto, sugeriría mucho usar D, pero tendrás que buscarlo y usarlo para ver si realmente hará lo que quieras en este momento.
Creo que esto debería ser Community-wiki. Puede consultar las respuestas de [Walter Bright] (http://stackoverflow.com/users/33949/walter-bright). A veces responde preguntas sobre el estado de D aquí mismo en stackoverflow. – Lucas
Yo (personalmente) elegiría otro idioma que no sea D, aunque aprecio el trabajo de Alexandrescu. En lugar de restringirse a esta opción, quizás deba buscar entre la variedad de idiomas disponibles. No iría por Go aún, demasiado inestable y, en última instancia, depende de tu disposición a aprender un nuevo idioma. –
"Cuál es el reemplazo correcto para C" depende mucho de lo que quieras hacer con el idioma. Las respuestas diferirán dependiendo de qué atributos de C son esenciales para tu trabajo. Así que recomiendo enumerar algunos de los aspectos de C que considera más importantes. – Baxissimo