2008-10-07 28 views
15

Soy un programador de Java bastante experimentado que ha estado haciendo un poco de cosas de Win32 en los últimos años. Principalmente he estado usando VB6, pero realmente necesito pasar a algo mejor.Delphi versus C++ Builder - Cuál es la mejor opción para un programador de Java Hacer Win32

He pasado un mes jugando con Delphi 2009. Me gustan las cosas de la interfaz gráfica de usuario de VCL, Delphi parece más adecuado para las llamadas a la API de Windows que VB6, realmente me gusta el hecho de que es mucho mejor en OO que VB6 y Me gusta el marco de pruebas unitarias que viene con el IDE.

Pero realmente me duele el hecho de que no hay ningún recolector de basura ampliamente utilizado para Delphi: tener que liberar cada objeto manualmente o usar interfaces para todo parece tener un impacto bastante grande en la forma en que puede hacer las cosas una forma orientada a objetos. Además, no estoy particularmente interesado en la sintaxis, o en el hecho de que debes declarar todas las variables en la parte superior de un método.

Puedo manejar Delphi, pero me pregunto si C++ Builder 2009 podría ser una mejor opción para mí. Sé muy poco sobre C++ Builder y C++, pero tampoco sé mucho sobre Delphi. Sé que hay mucho en el lenguaje C++, pero sospecho que solo es necesario conocer un subconjunto para hacer las cosas de manera productiva ... He oído que el C++ de hoy en día es mucho más productivo para programar que el C++ de Hace 10 años.

Voy a estar haciendo un nuevo desarrollo solo para no tener que dominar todos los aspectos del lenguaje C++. Si puedo encontrar un equivalente para cada una de las funciones de lenguaje de Java, estaré contento, y a medida que avance Podría comenzar a mirar las cosas más avanzadas un poco más. (Lo siento si suena dolorosamente ingenuo - si es así, por favor, ¡enderezarme!)

Por lo tanto, para un programador Java que sea nuevo en Delphi y C++ Builder, ¿cuál consideraría una mejor opción para el desarrollo productivo de Win32 exes y dlls, y por qué? ¿Cuáles crees que son los pros y los contras de cada uno?

+1

¿Por qué no C# y .NET? – Alan

+1

Estoy programando un complemento de Excel bastante complicado, y el pequeño tamaño de descarga y la fácil instalación son las principales prioridades. Por más que me gusta el aspecto de C#, y lo he analizado un poco, creo que estaría mejor con algo que compila con código nativo para este proyecto. –

+0

¿Presumiblemente ya ha considerado la posibilidad de escribir el complemento usando VBA? Aprecio que este sea un lenguaje/entorno bastante repugnante para desarrollar, pero ¿hay otras razones por las que no podría implementar el complemento usando VBA? –

Respuesta

20

Delphi o C++ Builder - es una elección difícil!

Como sabrá, son básicamente muy similares, desde el punto de vista IDE y RAD.

Los pros y los contras de cada uno, independientemente del fondo, son un poco así.Ambos comparten un gran diseñador y framework de formularios RAD (VCL) bidireccional que son ideales para el desarrollo nativo de Windows.

Delphi:

  • PARA: activa comunidad de alcance, y entusiasta
  • PARA: Delphi 2009 es la mejor versión durante muchos años
  • PARA: "unidades" Delphi hacen fuente de C/cabecera los pares de archivos parecen arcaicos
  • EN CONTRA: No hay destrucción automática, ya que los objetos salen del alcance, por lo tanto, muchos 'finalmente están en su código
  • EN CONTRA: El idioma puede ser' wordy ', que es una cuestión de gusto
  • EN CONTRA: El uso de DLL's o bibliotecas en otros idiomas (esp. C) requiere archivos de cabecera de Delphi a ser escritos

C++ Builder

  • PARA: C++ Builder 2009 es probablemente la mejor versión que haya sido
  • PARA: RAII lenguaje simplifica la gestión de memoria enormemente
  • PARA: Las plantillas son increíblemente útiles y potentes, incluso si la implementación de C++ Builder tiene algunos errores.
  • PARA: Soporte para impulsar y otras bibliotecas modernas basadas en plantillas (a pesar de que el apoyo Boost no es 100%)
  • para: interoperabilidad con Delphi significa que la mayoría de los componentes de Delphi se puede utilizar fácilmente.
  • PARA: Fácil de usar con archivos DLL/bibliotecas de terceros con encabezados C/C++.
  • PARA: C++ puede verse mejor en un CV que Delphi.
  • CONTRA: CB2009 es "Unicode única" - las implicaciones de esto para la portabilidad del código son diferentes y menos bien pensado que para Delphi
  • CONTRA: C++ Builder base de usuarios es mucho menor que Delphi. Tal vez un 20% o menos.
  • EN CONTRA: Borland/Inprise casi mata al BCB hace unos años, y solo resucitó después de grandes esfuerzos de la comunidad. (Sin embargo, el compromiso Codegear/Embarcadero parece impresionante)
  • EN CONTRA: C++ Builder no es la parte superior de la pila dentro de Codegear.
  • CONTRA: proveedores de componentes de otros fabricantes no siempre entienden/soporte para C++ Builder

Eso es todo. Solo para expresar mi posición, soy un usuario feliz de BCB2007/2009 (desde BCB5), y tampoco uso Delphi con frecuencia. Hace unos años, consideré un cambio de C++ a Delphi, pero la falta de modismo RAII fue lo único que encontré difícil de aceptar.

+0

Muchas gracias Roddy, parece una comparación buena y equilibrada. La expresión de RAII es algo nuevo para mí, pero a partir de una pequeña lectura, me parece que solo puede funcionar porque C++ destruye automáticamente los objetos asignados por la pila. Se ve mucho mejor que Create/try/finally/free para cada objeto de la pila Delphi –

+0

Por cierto, ¿alguna vez has intentado utilizar un recolector de basura con el constructor C++? –

+0

@MB: No, no he probado Barry's GC con C++ Builder. La gestión de montones con Delphi vs. C++ puede ser un área difícil, por lo que espero que pueda necesitar algunos ajustes para que funcione. – Roddy

2

Por supuesto sintaxis de Java es más como C++ que como Delphi, pero creo que el modelo de objetos es más similar a Delphi:

  • herencia simple. Las interfaces existen, pero son más como COM que como las interfaces de Java.
  • objetos se asignan en el montón y se accede por referencia

usted puede encontrar un artículo comparando los tres idiomas here

+0

Gracias Giacomo. Ese documento parece bastante útil, aunque fue actualizado por última vez en 1997, entonces me pregunto si las cosas han cambiado mucho desde entonces. Con Boost, por ejemplo para C++ ... sé muy poco acerca de Boost, pero he visto a gente hablar de ello como una "piedra angular del nuevo C++", o algo así. –

7

Delphi va a ser mucho más fácil para que usted pueda llegar a un acuerdo con, asegurarse de que tiene para administrar su memoria, pero su muy simple

MyObj = TMyObj.Create; 

try 
    MyObj.DoSomething; 
finally 
    MyObj.Free; 
end 

en Delphi todos los objetos se asignan en el montón, por lo que la regla es muy simple si lo crea que lo libere.

C++ con su pila y objs basados ​​en el montón significa que tiene un poco más que aprender y más posibilidades de meterse en problemas.

+1

Creo que estoy bien con la comprensión de desprendimiento de objetos, sólo estoy encontrando un poco de dolor a tener que pensar en lo que será el propietario de objeto, etc., cuando lo estoy diseñando cosas. ¿El último C++ Builder tiene un colector de basura decente para hacer que la liberación manual sea generalmente innecesaria? –

+0

No, constructor de C++ no tiene incorporado en recolector de basura, creo que hay algunas soluciones de 3 ª parte, pero la verdad es mucho mejor aprender acerca de cómo administrar la memoria por primera vez en cualquier lenguaje que crea código nativo antes de iniciar el camino de la un recolector de basura adicional. Saludos –

+0

Tim J - recolección de basura que he oído se está convirtiendo en parte del estándar de C++ pronto, pero lo que eso significa, en realidad, no sé (siendo un poco idea sobre C++). –

9

Vaya con Delphi y puede usar el Boehm Garbage Collector API escrito por Barry Kelly para que pueda tener recolección de basura en Delphi. Barry escribió esto antes de trabajar para CodeGear como arquitecto compilador. Tiene problemas con aplicaciones realmente grandes, y lo más probable es que no funcione con Delphi de 64 bits. Él habla un poco de esto en este podcast interview.

Incluso si no usa ese gestor de memoria de recogida de basura, aún recomendaría Delphi en lugar de C++. La única ventaja que C++ le brinda para el desarrollo general es la sintaxis del parche rizado. Si no te importa la sintaxis de Delphi, entonces para la mayoría de las cosas lo encontrarás mejor. Concedido C++ Builder tiene todo el Delphi VCL y RTL, por lo que no es tan malo como Visual C++, pero todavía creo que Delphi sería una mejor opción.

Para complementos de Excel (como mencionó en su comentario) Recomendaría Delphi sobre el generador de C++ porque tiene mejor compatibilidad COM (que creo que necesita para complementos de Excel).

+2

Excelente, gracias Jim. Me encontré con el recolector de basura, me había desconcertado el hecho de que apenas podía encontrar menciones de que alguien realmente lo estaba usando o si era compatible con versiones recientes. Definitivamente veré el podcast que mencionas, eso no es algo con lo que me haya encontrado. –

+0

Es un podcast muy informativo. Aconsejaría a cualquiera que esté interesado en que Garbage Collector escuche. –

5

Personalmente, creo que hay otras consideraciones importantes aparte de las diferencias entre los idiomas. Por ejemplo, Delphi IDE es totalmente increíble para construir GUI en una forma WYSIWYG. No he usado el generador de C++ IDE, pero me sorprendería mucho si tiene un generador de interfaz gráfica de usuario que sea tan bueno como Delphi.

Aunque superficialmente la sintaxis de C++ se parece más a la de Java, el modelo de objetos de Delphi es en realidad más cercano al de Java. Aunque existen punteros en Delphi, en la práctica las referencias a objetos (como las de Java) se usan el 99% del tiempo. Incluso en C + + moderno, no creo que sea posible evitar punteros. No es que haya nada de malo con los punteros per se, pero en la práctica ...

En lo personal, soy principalmente un chico de Java en estos días, pero pasé 2 años trabajando con Delphi y volvería a él. en un instante. Por el contrario, tengo muy poca experiencia con C++ y preferiría limpiar inodoros que regresar a ese idioma :)

+0

LOL - gran respuesta, gracias Don. Estoy muy contento de evitar punteros siempre que sea posible, eso es definitivamente un plus para Delphi. Pero creo que la construcción de GUI es la misma para C++ Builder que para Delphi (aunque en realidad no lo he probado en C++ Builder). –

+1

@Don: "Me sorprendería que tenga un constructor de GUI tan bueno como Delphi". Sorpréndase. Es idéntico, excepto que genera código C++ en su lugar. Puede usar componentes más de 3 ª parte de Delphi, reutilizar las formas de Delphi en aplicaciones C++, etc. Incluso se puede añadir archivos de Delphi .pas a su C++ proyecta – Roddy

1

"Por ejemplo, el IDE de Delphi es totalmente increíble para construir GUI de manera WYSIWYG. '' Usé el generador de C++ IDE, pero me sorprendería mucho si tiene un constructor de GUI tan bueno como Delphi ''.

En realidad, el editor de GUI de C++ Builder es exactamente el mismo editor, y funciona de la misma manera. Es fantástico.

.Net tiene una gran cantidad de clases, al igual que Java. C# tiene una sintaxis similar a Java y debido a la gran biblioteca de clases funciona de manera similar. Y es un entorno perfectamente adecuado para programar. Pero, francamente, Delphi es un lenguaje mucho más agradable, IDE y entorno general para trabajar. C# fue diseñado por la misma persona que diseñó Delphi y se siente muy similar en muchos aspectos, así que no asuma que debido a que Delphi compila el código nativo (aunque también puede usar Delphi .Net), es fundamentalmente más difícil de usar. No es, en absoluto.

Mi recomendación personal sería para Delphi, porque es un lenguaje genial. Sin embargo, si estás interesado en aprender C++, C++ Builder es probablemente la mejor manera de hacerlo.

2

Creo que si vas con Delphi le resultará más fácil después de unos momentos de usar, también se cuenta con más apoyo de terceros y algunas de las características introducidas en Delphi antes de C++ Builder

también leer este blog desde ex Java y ahora el hombre detrás de la mayor parte de la base de datos y el trabajo DataSnap en Delphi, Steve Shaughnessy, sobre su experiencia acerca de la programación Delphi después de 10 años de Java :-) http://blogs.codegear.com/steveshaughnessy/2006/12/03/30193

+0

Enlace de interés que - gracias. –

1

Programa profesional en Delphi durante los últimos 10 años y tengo un buen conocimiento de C++. Me gustaría ir al estilo Delphi. La sintaxis es mucho más simple y la administración de la memoria también. Ese GC para Delphi nativo no lo escuché aún ... Aunque no me gustó mucho las trampas en el código Delphi.Net introducido debido a la.GC NET, que no soy muy aficionado a la GCS ;-)

+1

¡Salud, Fabricio! No voy a discutir con su opinión sobre el recolector de basura, pero después de muchos años sin problemas con Java personalmente me adore ;-) –

+0

mecánicos propiedad de la VCL me sirvió bien a través de los años y que no fallan. La manipulación directa de la memoria siempre es problemática (como se necesita a veces cuando se utiliza WinAPI). Una queja que tengo sobre .NET gc es la falta de un gancho automático llamado cuando el objeto finalmente se destruye. –

1

Una cosa que me olvidé de mencionar antes:

Desde un punto de vista económico, que en realidad no necesidad de elegir. Compre el paquete RAD Studio, y por un modesto costo adicional en un idioma individual, obtendrá las personalidades Delphi y C++ Builder en el mismo IDE.

Y, vale la pena mencionar que el paquete C++ Builder incluye el compilador Delphi, y puede escribir/agregar archivos Delphi .pas e incluirlos como parte de sus proyectos en C++.

+0

Oh cariño, me he dado cuenta de que me equivoqué y compré el paquete Delphi 2009 solo, cuando pensé que C++ Builder estaba incluido en él ...Ahora pondré a prueba al equipo de atención al cliente de Embarcadero y veré si es un "compañero demasiado lamentable" o "nos complace poder ayudarlo". –

+0

Ayúdame a pagar la diferencia, y consigue el paquete de ambos juntos. ¡Espero que sean amables! –

+2

Actualización: fueron geniales: cancelaron mi pedido original y yo coloqué uno nuevo para la actualización. Justo como esperaba realmente, pero nunca se sabe porque algunas compañías parecen hacer todo lo posible por ser torpe/basura. Me complace ver que Embarcardero son buenos chicos :) –

6

Después de trabajar con los cumplidores Borland C y C++ desde BCC 4.1/DOS y Delphi desde 3.0 hasta 2007, puedo decir sinceramente que te llevas de una gran aventura en ambos sentidos. Pasar de C/C++ en Borland's Builder y RAD IDE es un cambio sustancial de paradigma (y curva de aprendizaje) de VC++, C++ y .NET de Microsoft (han utilizado VC desde la primera versión de MS-DOS: los mini enlazadores beige de tres anillos).

La elección entre C++ y Delphi es una que sugiero que haga después de mojarse en algunos proyectos de tamaño pequeño a mediano en ambos idiomas. Comencé un programador C y después de unos cinco años cambié a Delphi (V3.0) cuando el VCL acaba de hacer que la programación de Windows sea mucho más fácil y productiva.

Tenga en cuenta que Delphi es un lenguaje seductor para programadores procedentes de otros lenguajes como COBOL, FORTRAN, VisualBasic porque su sintaxis y reglas de código imponen un tipo de disciplina que evita que uno se meta en problemas. La precisión y la potencia del metal en bruto de C lo convierten en un excelente lenguaje de programación de sistemas (controladores de dispositivos, código O/S, programación integrada en tiempo real), pero en manos inexpertas puede morderlo.

El generador de C++ de Borland (la VCL de Delphi añadida al compilador de C++) elimina muchos de los bordes filosos de C++ y es mi segundo idioma favorito. Dado que Borland agregó compatibilidad con .NET a los dos idiomas , existe un fuerte argumento para usar Builder en lugar de VC++ para la programación de marcos de MS. Aunque C# tiene una buena cantidad de 'amigabilidad' incorporada en comparación con C++, si me presionan, seguiré apegándome a Delphi o Builder si recién comenzara.

Para aprender las cuerdas, prototipos y programas de concepto rápido simplemente no hay un lenguaje que pueda vencer a Delphi especialmente con el VCL y los componentes de terceros. Sin exageraciones, solo hechos.

+0

Prince Riley, lo tomaré como un voto para Delphi. Particularmente útil ya que parece que has usado tanto. ¡Gracias! –

2

No hay nada que no haya podido hacer en C++ VCL que no pude hacer con Delphi VCL y casi todos los componentes Delphi funcionan bien en C++ Builder. Como programo tanto para Windows como para UNIX, C++ es más portátil.

Si usa C++ STL u otra biblioteca bien diseñada para sus contenedores, la recolección de basura se convierte en un punto discutible, y de lo contrario el manual GC no es difícil (uno aprende buenos hábitos, que debe practicar de todos modos independientemente de un GC). Siempre que use RAII siempre que sea posible, mantenga su administración de memoria encapsulada en contenedores, tenga en claro la propiedad del objeto y use solo punteros como referencias no disponibles (todo lo cual también debería estar haciendo independientemente del idioma), GC realmente no debería ser una problema.

1

Si vas a hacer mucha programación de Windows, aprende C++. ¿Aprenderías alemán en preparación para un viaje a Francia? C/C++ es el idioma nativo de la API de Windows. Lidiar con las estructuras y llamadas de datos de WinAPI es mucho más simple en C/C++. En cuanto a RAD, he usado MSVC durante aproximadamente 13 años y puedo combinar una aplicación GUI tan rápido como cualquiera que use el editor de GUI de Visual Studio.

Cuestiones relacionadas