¿Es D una alternativa creíble a Java y C ++? [cerrado]

163

¿Es el lenguaje D una alternativa creíble a Java y C ++? ¿Qué se necesitará para convertirse en una alternativa creíble? ¿Debo molestarme en aprenderlo? ¿Merece evangelizar?

La razón principal por la que pregunto es que con el nuevo estándar C ++ (c ++ 0x) casi aquí, es claro para mí que el lenguaje ha superado el punto de no retorno con respecto a que alguien lo haya entendido. Sé que C / C ++ nunca morirá, pero en algún momento tenemos que seguir adelante. Incluso COBOL tuvo su día y Java en muchos aspectos deshizo C ++. ¿Qué es lo siguiente? ¿D llena la factura?

Mark Kegel
fuente
23
COBOL regresará, pero sigue adelante y aprende D si te hace cosquillas. Leer las hojas de té tiene tanto poder como cualquier otra cosa para predecir The Next Big Language.
Shog9
55
No me preocupa cuál es el próximo gran idioma, me preocupa más que si tuviera que decirle a mi empleador que quería usar D en mi próximo proyecto, no me tomarían en serio porque el idioma no es t todavía.
Mark Kegel
22
Cabe señalar que las páginas "D vs. C ++" de Marte digital son altamente discriminatorias contra C ++. muchas veces dicen "c ++ no puede hacerlo", C ++ puede hacerlo
Johannes Schaub - litb
23
@Johannes: No se trata de lo que el lenguaje hace posible, es lo que el lenguaje hace fácil. - Brian Hurt
missingfaktor
9
@Rahul, estuvo de acuerdo, pero deberían decirlo como "esto no es fácil de hacer en C ++" y no es que no sea posible en absoluto.
Johannes Schaub - litb

Respuestas:

130

Lo que determina el éxito y la popularidad de un lenguaje de programación para el desarrollo de software en el mundo real está solo parcialmente relacionado con la calidad del lenguaje en sí. Como lenguaje puro, D posiblemente tenga muchas ventajas sobre C ++ y Java. Como mínimo, es una alternativa creíble como lenguaje puro, todas las demás cosas son iguales.

Sin embargo, otras cosas son importantes para el desarrollo de software, casi más que el lenguaje en sí mismo: portabilidad (en cuántas plataformas se ejecuta), soporte de depurador, soporte IDE, calidad de biblioteca estándar, soporte de biblioteca dinámica, enlaces para API comunes, documentación, el desarrollador comunidad, impulso y soporte comercial, solo por nombrar algunos. En todos estos aspectos, D está irremediablemente detrás de Java, C ++ y C #. De hecho, diría que incluso está detrás de los llamados lenguajes de "scripting" como Python, Perl, PHP, Ruby e incluso JavaScript en este sentido.

Para ser franco, simplemente no puede construir una aplicación multiplataforma a gran escala usando D. Con una biblioteca estándar inmadura, no hay soporte en ningún IDE moderno (hay complementos para Visual Studio y Xamarin Studio / MonoDevelop), limitado soporte de biblioteca dinámica / compartida, y pocos enlaces a otros idiomas, D simplemente no es una opción hoy en día.

Si te gusta lo que ves de D, por supuesto, apréndelo: no debería llevarte mucho tiempo si ya conoces Java y C ++. No creo que el evangelismo sea útil: en este punto, si D va a tener éxito, lo que realmente necesita es que más personas lo utilicen en silencio y aborden sus principales deficiencias, como la biblioteca estándar y el soporte IDE.

Finalmente, en cuanto a C ++, aunque la mayoría está de acuerdo en que el lenguaje es demasiado complejo, miles de empresas están utilizando con éxito C ++ como parte de una combinación saludable de lenguajes al permitir solo un subconjunto más pequeño y bien definido del lenguaje. Todavía es difícil vencer a C ++ cuando se requiere tanto el rendimiento sin procesar como el uso de memoria pequeña.

dmazzoni
fuente
8
decir que "no tiene soporte en ningún IDE moderno" está exagerando un poco. Hay soporte en eclipse. Todavía no es de primera clase, pero está allí y está mejorando.
BCS
46
La ausencia de evidencia no es evidencia de ausencia.
FeepingCreature
29
Si uno hace una afirmación positiva como 'hay unicornios rosados', debe ofrecer evidencia antes de que sea razonable aceptar. Por supuesto, eso no significa que no haya unicornios rosados ​​como dijo @FeepingCreature, sino simplemente afirmar que no es un argumento convincente o válido.
JoshD
8
@Feeping: Es un lindo dicho que a James Randi le gusta tirar, pero simplemente no es cierto. Si sus pruebas tienen evidencia razonable que respalde que la prueba debe encontrar algo, pero no, eso es evidencia de ausencia.
GManNickG
9
Quiero agregar que construimos aplicaciones a gran escala con D1 y Tango. De acuerdo, no somos multiplataforma, solo Linux, pero aún así. Toda nuestra infraestructura está escrita en D y procesamos más de 30k solicitudes por hora con un gran back-end DHT también escrito en D.
Marenz
109

Solo para agregar mis propias experiencias a la mezcla:

Hace aproximadamente un año trabajé en un proyecto de juego a pequeña escala (3 codificadores) que duró 3 meses, donde usamos D como nuestro idioma principal. Lo elegimos en parte como un experimento, en parte porque ya tenía enlaces para SDL y algunas otras herramientas que estábamos usando, y sobre todo por los beneficios que parece tener sobre C ++.

Nos encantó usarlo. Fue rápido de aprender y fácil de escribir. Muchas de sus características demostraron ser invaluables, y extraño que hayan vuelto a C ++.

Sin embargo, los siguientes puntos nos hicieron la vida más difícil:

  1. No había un buen IDE en ese momento, lo cual era un problema importante. Terminamos haciendo el nuestro personalizando Scite. Esto funcionó bien, pero no fue ideal.
  2. No hubo depurador en el momento. Nos las arreglamos para que WINDBG funcionara de forma aleatoria, pero no era confiable. La depuración de código sin un depurador hizo la vida infernal a veces.
  3. Había 2 bibliotecas estándar para elegir en ese momento (Tango y Phobos). Comenzamos con uno, cambiamos al otro y realmente necesitábamos una combinación de características de ambos (¡Tangobos!). Esto causó dolores de cabeza y alguna reescritura de código.
  4. Enlaces a otras herramientas no disponibles. Al final tuvimos que cambiar a DirectX (por razones que no entraré). No había enlaces para DirectX disponibles, así que tuvimos que escribir el nuestro en C ++, construirlo como un .dll y enlazarlo a eso. Este fue un trabajo bastante desagradable y tomó algo de tiempo.

En general, nos encantó escribir D. Realmente, escribir código fue fácil y fue rápido de aprender. Los problemas que he mencionado hacen eco de la respuesta que se ha aceptado para esta pregunta: son los bits "adicionales" los que deben abordarse en D, el núcleo es sólido.

xan
fuente
44
entrada genial ... ahora hay un depurador !! :)
bbqchickenrobot
14
No entiendo por qué DirectX es un problema. No soy un programador de D, pero pensé que D puede entender C? ¿Y DirectX tiene una API C?
es relativamente fácil de usar el material DirectX con interfaces D nativas, por lo que no es necesario escribir un contenedor en c ++, excepto en algunos casos especiales
Quonux
@Quonux: Esa fue nuestra experiencia en ese momento, en 08. No duden que las cosas han avanzado mucho desde entonces. No puedo recordar los detalles sangrientos más.
xan
1
Actualización de 2019: el lenguaje de programación D se ha expandido significativamente. Ahora puede usar GDB listo para usar con Dlang. DPP le permite incluir directamente cualquier encabezado C en Dlang. Calypso le permite usar cualquier biblioteca de C ++ en Dlang, incluida Qt: tiene algunos errores, pero funciona en gran medida.
noɥʇʎԀʎzɐɹƆ
60

Estoy de acuerdo en que C ++ se está convirtiendo en un lenguaje sin salida, y me duele decir eso, después de haberlo usado durante los últimos 17 años.

Creo que D es el sucesor legítimo de C ++. Desde la perspectiva del lenguaje, "hace todas las cosas correctas" (incluso si no estoy de acuerdo con cada decisión de cada minuto). Creo que con C y C ++ en declive, no hay otro lenguaje de nivel de sistemas que realmente pueda hacer lo que hacen, mientras se mantiene en el mundo de los lenguajes modernos, ¡excepto D! D no solo cumple este rol, ¡también es excelente! Una mirada a D1.x debería ser suficiente para convencerte de eso, pero cuando miras a D2.0 te deja boquiabierto. En mi opinión, hoy en día no hay otro lenguaje que funcione tan bien como D2.0 para salvar los paradigmas de programación imperativos y funcionales, que solo se volverá más significativo en los próximos años.

La falta de aceptación general, o incluso visibilidad, así como las bibliotecas maduras y de gran escala, son un obstáculo, por supuesto. Sin embargo, no creo que puedas descartarlo por esto. Estoy convencido de que D va creciendo hasta convertirse en uno de los más importantes idiomas alrededor en los próximos años - y los que están tomando en serio ahora van a estar en buena posición para tomar la iniciativa cuando llegue ese momento.

Creo que la diferencia se producirá debido, en gran parte, a la participación de Andrei Alexandrescu. Eso no es para desacreditar a Walter Bright de ninguna manera, quien ha hecho un trabajo trascendental para traer D al mundo. Pero Alexandrescu es una figura importante y convincente en la comunidad de C ++, y allí es de donde vendrán la mayoría de los posibles conmutadores D. Y también ha hecho una contribución significativa e importante a D2.0 en su apoyo a la programación funcional.

Todavía puede resultar que D está condenado a ser el Betamax de los lenguajes de nivel de sistemas, pero mi dinero está en eso en los próximos dos años.

philsquared
fuente
20
C no está en declive para la programación a nivel de sistemas. Linux, Windows y OS X están desarrollados en C. Del mismo modo, muchos microcontroladores y sistemas operativos para microcontroladores están programados con C.
Kevin
12
No creo que D "haga todo lo correcto". Lo correcto sería comenzar desde cero, no tratar de hacer un mejor C ++. Creo que se necesitan cambios más radicales para justificar un cambio a gran escala lejos de C ++.
jalf
9
Kevin: Windows y OS X no están desarrollados en C. Los fragmentos del kernel sí, por supuesto, pero Windows usa montones de C ++ y OS X Obj-C. Linux es el único sistema operativo que conozco donde C ha sido elevado a un estado de lenguaje verdadero y no se usa nada más.
jalf
16
Buena predicción. Han pasado 2 años desde esta publicación, y D no está más cerca de la adopción general.
mikerobi
18
@mikeobi LOL! Los dos años comienzan cada vez que lees esa oración ;-)
philsquared
20

Me gusta que D sea obra de un genio, principalmente una mente: Walter Bright, cuyo compilador de Zortech fue fantástico en su día.

En contraste, C ++ es demasiado diseño por comité, incluso si Bjarne es una influencia. Demasiadas funciones complementarias y sintaxis nueva y extraña. Esta diferencia se refleja en la facilidad de aprendizaje y la facilidad de uso diario, menos errores.

Los lenguajes más coherentes conducen a una mayor productividad y alegría del programador, ¡pero esto es subjetivo y discutible! (Supongo que debería votar mi propia respuesta)

DarenW
fuente
9
Ahora hay otro genio trabajando en ello: Andrei Alexandrescu. Lo que ha hecho con D2.0 es, en mi humilde opinión, al menos tan sorprendente como lo que Walter ha hecho con D1.x. Entre los dos (sin descontar los numerosos otros contribuyentes) D se está convirtiendo en un lenguaje a tener en cuenta. Mire este espacio
philsquared
55
hacer que 3 (o más) malditos buenos programadores: Bartosz Milewski
BCS
77
Entonces, C ++ fue creado originalmente por un tipo realmente inteligente, y ahora está controlado por un comité de personas realmente inteligentes, mientras que D fue creado originalmente por un tipo realmente inteligente, y ahora está siendo controlado por un ... grupo de personas realmente inteligentes. Sí, veo cómo eso hace que D sea superior. ;) (pista: la fealdad de C ++ no tiene nada que ver con los comités. Es una consecuencia de los objetivos de diseño del lenguaje. Se suponía que era (casi) un subconjunto de C. D no es, y no fue así , lo que significa que podría evitar muchas de las verrugas (a costa de evitar también la popularidad que trajo)
jalf
44
@jalf tienes razón en que la "fealdad" de C ++ no se debe al diseño del comité. Sin embargo, su lentitud en la evolución es.
philsquared
15

D es un buen lenguaje y decentemente popular , pero como todos los idiomas, es solo otra herramienta. La herramienta que debe usar depende del tipo de persona que sea, cómo piensa, el entorno en el que trabaja, qué restricciones de los idiomas aplica el programa y, lo más importante, el programa en sí. Si tiene tiempo, definitivamente recomendaría aprender D. En el peor de los casos, nunca lo usará. Lo más probable es que aprenda qué aspectos de él le gustan más, y bajo qué condiciones brilla más, y aprovechará eso para hacer nuevos programas.

Recomendaría mirar la tabla de comparación D para ver cuáles son las características del idioma y ver si suena bien para usted.

Spodi
fuente
10

El lenguaje D es moderno. Ningún idioma es perfecto, y no hay duda sobre esto. Pero los idiomas nacen para hacer la vida más fácil. Donde el lenguaje D en comparación con C ++ tiene muchas características buenas, en términos de complejidad. Participan muchas otras especialidades de combinación de idiomas, lo que ayuda a los codificadores a codificar más rápido, con las funciones TOP introducidas por otros idiomas. Consulte también: para obtener más detalles sobre D y otros idiomas

  • D vs C ++, es la compatibilidad, donde intervienen enormes lenguajes C ++ y requiere compatibilidad con D. D permite ya una compatibilidad del 100% con C, lo cual es una buena victoria aún.

  • D vs C ++, C ++ es mi opinión, un lenguaje muy agradable, pero es difícil de codificar y requiere mucho tiempo, requiere más y más experiencia para tener éxito, pero D permite hacer lo mismo con simplicidad

  • D vs C ++, no estoy seguro de si C ++ lo hace, pero D no permite la asignación de variables de restricción de tipo usando "auto", que es bueno tener una dinámica variable, cuando se requiere puede hacer un tipo estricto

  • D vs C ++, si tiene experiencia en otro idioma, puede comenzar directamente con él, tiene un mapa de ruta de aprendizaje fácil y está diseñado por un equipo experimentado y un soporte de la compañía.

  • D vs C ++, lo más agradable que encontré de D, es el estilo de código, da la apariencia y sensación exactamente igual a C / C ++, mientras que la codificación recuerda que estoy haciendo C / C ++ realmente moderno que se llama D

Hay muchas más buenas razones para el lenguaje D, no hay razón para subestimar ningún idioma, siempre es la elección del usuario.

Comunidad
fuente
7

Realmente depende de cuáles son sus necesidades - aplicaciones comerciales a gran escala escritos en D hacen existir en el lado del servidor, y para que la D (típicamente usando Tango / Mango) es un ajuste perfecto, y que es probable que sean capaces de servir más peticiones que con cualquier otro idioma / plataforma.

Para obtener soluciones más especializadas en términos de protocolos e interactividad (que son muchas), tendrá más problemas para encontrar las bibliotecas necesarias y es probable que la falta de herramientas lo afecte más.

larsivi
fuente
1
¿podría dar un ejemplo de una aplicación comercial de este tipo?
Alexander Malakhov
1
@ Alexander Malakhov: A ... hmm ... buena pregunta ... Estoy feliz de que hayas preguntado si existe una aplicación comercial ... una pregunta bien pensada ... ciertamente ... admiro ... ... este es el tipo de preguntas que debemos hacer ... muestra su intelecto ... hmm ... déjame buscar ... Aplicación comercial en D ... hmm ... bueno ... . solo espera ... Lo sé pero ... simplemente no puedo recordarlo ... ciertamente hay ... solo espera ... Todavía estoy buscando ... ¡espera!
Simple Fellow
7

D es bastante impresionante, y el libro de Andrei al respecto está bien escrito. Pero como han dicho otros, necesita las herramientas y el soporte de la plataforma. GDC puede, con el tiempo, ser la respuesta a ambas.

¿Has visto esto?

"GNU Debugger agrega soporte para lenguaje D": http://www.linux.com/news/enterprise/biz-enterprise/358956-gnu-debugger-adds-d-language-support

Además, el sitio digitalmars tiene páginas que tratan sobre la interfaz de C y C ++ (para aquellas bibliotecas sin las que no puede vivir). Me pregunto si hay alguna herramienta que, dado un archivo de encabezado C, apunte a escribir los prototipos D.

Personalmente no en este punto de empuje para hacer un gran proyecto en D, pero me gustaría utilizar D para herramientas internas, conseguir experiencia con ella y la introducción de otros a él.

La pregunta original era si D es una alternativa creíble a Java y C ++. No creo que D y Java realmente compitan mucho en la práctica; D compite con C ++ y ahora Go. Otras preguntas abordan las diferencias entre D y Go, pero Go generalmente se considera más fácil de usar. Así que sospecho que el futuro de D depende mucho de cuánto espacio hay para respirar entre C ++, el actual rey de la colina, y Go, la alternativa mucho más fácil que tiene el respaldo de Google.

ACTUALIZACIÓN: Acabo de descubrir que mi capítulo favorito del libro de Andrei , el de concurrencia, está disponible de forma gratuita en línea. Definitivamente vale la pena leer!

Y aquí hay una discusión acerca de LOOOONG los relativos méritos / objetivos / enfoques de Go y D .

AmigoNico
fuente
No sé mucho sobre Rust; Estoy esperando que llegue a 1.0. Pero tienes razón, definitivamente parece que vale la pena verlo y parece jugar en este mismo espacio.
AmigoNico
1
Lo único que no me gusta de D es el sistema de tipos. Se ve viejo Las jerarquías OO son intrusivas. No me gusta como punto de partida. Rust es mejor en esto.
Germán Diago
4

Parece que la pregunta ha sido respondida. D es el mejor lenguaje en comparación con C ++.

La cuestión de si para fines prácticos D tiene una mejor infraestructura es secundaria.

En resumen, si ambos son idiomas completamente nuevos sin ningún soporte alrededor de ellos D es el mejor idioma, ergo, es el mejor idioma.

vfclists
fuente
4

Como lenguaje, siempre sentí que D está más cerca de C # que C ++. No en características y bibliotecas, sino en "sentimiento". Es mucho más limpio, más agradable ... divertido (que C ++). En mi humilde opinión, el mayor obstáculo para convertirse en una alternativa creíble es herramientas, IDE y depurador. Si D supera algunos obstáculos de uso / adopción generalizados, se manifestarán más herramientas y bibliotecas. (Yo mismo volveré a D, si habrá un IDE y depurador utilizables).

gerleim
fuente
¿Qué pasa con el complemento mono-d ?: mono-d.alexanderbothe.com
user1284631
3

Funciona muy bien para mis propios proyectos de mascotas. Lo usaría para proyectos de empleadores, pero por no saber lo difícil que sería para ellos encontrar a alguien que se haga cargo de la fuente después de que me mude. No hay razones técnicas para evitarlo, al menos en las plataformas compatibles. (toco madera)

DarenW
fuente
3

Un enfoque es buscar trabajo en su área. Encuentre los trabajos que le gustaría hacer y vea qué habilidades están solicitando. Si están pidiendo C ++ o Ruby u Oracle o D, esa es la habilidad que es principalmente para ayudarte a conseguir el trabajo que deseas.

Peter Lawrey
fuente
3

Parece un lenguaje muy bien diseñado; mucho mejor que C - C ++ - Objetivo C. Puedo vivir sin un IDE o un depurador por un tiempo, pero no sin una buena biblioteca documentada para D 2.0.

Volveré en 6 meses ...

Bill el lagarto
fuente