2010-07-08 8 views
44

Me pregunto qué tan maduro y estable es D, y si podría ser un buen reemplazo para C/C++.¿El lenguaje D tiene múltiples bibliotecas estándar y problemas con GC?

Sé que actualmente hay dos bibliotecas estándar (Phobos y Tango). ¿Sigue siendo el caso 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 GCed/no GCed. No pude encontrar ninguna referencia sobre eso en el sitio web de D, ¿así que este problema sigue siendo cierto?

+1

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

+1

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. –

+3

"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

Respuesta

34

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.

+0

Tango es la biblioteca estándar. Sin embargo, es un tiempo de ejecución independiente. A menudo, las ideas de "stand lib" y "el código que necesitas antes de que todo funcione" se confunden. Tango se puede usar como el segundo. – BCS

+0

"Tango es la biblioteca estándar". ¿Huh? –

+0

OK s/Tango/Phobos/o s/es/no es/Debo haber cambiado la forma de la tecla a medio pulsar. : b – BCS

12

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

"Unificación" es extremadamente improbable debido a diferencias en las licencias. Cuando Tango será portado a D 2.0, podrás usarlo junto a Phobos, lo cual no es (fácilmente) posible en D 1.0.

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

Creo que solo hay problemas si no tiene cuidado con la forma de administrar la memoria. Si todas las referencias a un objeto asignado por GC se almacenan fuera de las regiones de memoria marcadas como raíces de GC, el GC considerará el objeto sin referencia 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. Fobos (en D 2.0) se relaciona estrechamente con las nuevas características de D2. Tango tiene más funciones y contiene módulos que no están presentes en Phobos, p. Soporte de cliente HTTP/FTP, varias clases de criptografía, etc. También siguen diferentes filosofías de diseño (Phobos es más imperativo/meta-programación-ish, mientras que Tango es muy estrictamente similar a OOP, y por lo tanto similar a Java en ese sentido).

0

No creo que la cuestión de reemplazar C sea acerca de si un posible reemplazo es "bueno" o "maduro" en un nivel teórico, sino más bien sobre consideraciones prácticas y el hecho de que C es "lo suficientemente bueno" para para qué se usa A menos que un idioma tenga entornos completos nativos de compilación y ejecución para cada uno de los principales sistemas operativos, no es realmente práctico para qué C se utiliza. El hecho de que C es el lenguaje de POSIX es una gran parte de todo el problema.

Seguramente otros lenguajes de bajo nivel como D podrían tener grandes aplicaciones en campos especializados. Pero es poco probable que veas el principal software multiplataforma (servidores web, servidores de bases de datos, procesadores de texto, navegadores web, etc.) escrito en D porque ningún SO mayor (mucho menos todos) viene con una compilación D o un entorno de tiempo de ejecución.

+8

D no necesita un "entorno de tiempo de ejecución", D se compila en ejecutables nativos como C o C++ o Delphi. D tiene compiladores para plataformas principales, y GDC (D en back-end GCC) permite compilar en cualquier plataforma compatible con GCC.Ya hay servidores web escritos en D, no estoy seguro acerca de los procesadores de texto, pero también hay varios editores de texto (D IDEs) escritos en D. –

+2

@Cybershadow: Even C requiere soporte en tiempo de ejecución. En la mayoría de los casos en cajas de Unix se llama glibc. –

+2

glibc está vinculado dinámicamente por elección, no por requisito. Bien podría estar vinculado estáticamente; en la mayoría de los casos, el tiempo de ejecución de C está vinculado estáticamente en las aplicaciones de Windows. Creo que D actualmente vincula estáticamente Phobos en todas las plataformas también. –

5

Me pregunto qué tan maduro y estable es D, y si podría ser un buen reemplazo para C/C++.

Sería cauteloso al utilizar cualquier lenguaje que aún no estuviera respaldado por un organismo de estándares como ANSI, ISO o ECMA. Ese es quizás un indicador de madurez.Dicho esto, Java y Delphi, por ejemplo, entrarían en esa categoría, y aunque no utilizo esos idiomas, probablemente podrían describirse como "maduros".

Otra medida podría ser la cantidad y calidad de libros y artículos escritos para el idioma. Hay un libro para D del que estoy enterado por Andrei Alexandrescu. También ha escrito un largo article sobre el idioma del Dr. Dobbs, donde se ocupa específicamente del problema de la biblioteca estándar.

+8

Tanto como creo que tener un estándar oficial como ISO es algo bueno, en muchos sentidos, creo que los lenguajes como Java se han beneficiado de tener una implementación estándar en lugar de un estándar para las implementaciones basadas en. No tiene que preocuparse de si su implementación en particular coincide con el estándar y cómo va a diferir de algún otro compilador que pueda necesitar. Simplemente funciona como funciona. Entonces, un estándar oficial es una buena señal de madurez para un idioma, pero no creo que su falta signifique demasiado. –

4

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

En mi opinión, D carece:

  • un foro oficial web donde la gente puede obtener ayuda y la búsqueda de respuestas (NO grupos de noticias)
  • un repositorio oficial para muchos SDK convierte a D (por ejemplo SDL , Gtk, etc. A menudo son difíciles de encontrar y usar, cuando existen.)
+0

El principal lugar para buscar proyectos D se encuentra en http://www.dsource.org/, pero definitivamente podría usar algún trabajo con respecto a la organización y similares. –

+0

https://github.com/D-Programming-Deimos fue creado recientemente para cumplir este propósito para enlaces. Actualmente es pequeño, pero es la primera vez que hay un repositorio oficial para este propósito. También está el proyecto mucho más antiguo de Derelict en dsource. – Dwayne

+0

Parece que hay una versión beta de un foro oficial hoy en día en http://forum.dlang.org –

28

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

Cuestiones relacionadas