Question

Je suis un programmeur Java assez expérimenté qui a beaucoup travaillé sur Win32 ces dernières années. J'utilise principalement le VB6, mais je dois vraiment passer à quelque chose de mieux.

J'ai passé environ un mois à jouer avec Delphi 2009. J'aime les éléments de l'interface graphique VCL, Delphi semble plus adapté aux appels API Windows que VB6, j'aime beaucoup le fait qu'il soit bien meilleur que OB VB6. comme le framework de tests unitaires fourni avec l'IDE.

Mais j’ai vraiment du mal à accepter le fait qu’il n’existe pas de système de récupération de place largement utilisé pour Delphi - le fait de devoir libérer chaque objet manuellement ou d’utiliser des interfaces pour tout semble avoir un impact assez important sur la manière dont vous pouvez faire les choses de manière efficace. manière orientée objet. De plus, je ne suis pas particulièrement intéressé par la syntaxe, ni par le fait que vous devez déclarer toutes les variables en haut d'une méthode.

Je peux gérer Delphi, mais je me demande si C ++ Builder 2009 pourrait être un meilleur choix pour moi. Je connais très peu de choses sur C ++ Builder et C ++, mais je ne connais pas très bien non plus Delphi. Je sais qu'il y a beaucoup de choses dans le langage C ++, mais je suppose qu'il est seulement nécessaire d'en connaître un sous-ensemble pour que les choses se fassent de manière productive ... J'ai entendu dire que le C ++ d'aujourd'hui est beaucoup plus productif pour programmer que le C ++ de Il ya 10 ans.

Je ne ferai de nouveau développement que pour ne pas maîtriser tous les aspects du langage C ++. Si je peux trouver un équivalent pour chacune des fonctionnalités du langage Java, je serai assez heureux et, au fur et à mesure de mes progrès, pourrait commencer à regarder un peu plus les choses plus avancées. (Désolé si cela semble douloureusement naïf - si tel est le cas, mettez-moi au clair!)

Ainsi, pour un programmeur Java novice dans Delphi et C ++ Builder, lequel considérez-vous comme un meilleur choix pour un développement productif des fichiers .exe et dll Win32, et pourquoi? Selon vous, quels sont les avantages et les inconvénients de chacun?

Était-ce utile?

La solution

Delphi ou C ++ Builder - un choix difficile!

Comme vous le savez bien, ils sont fondamentalement très similaires du point de vue de l'EDI et du RAD.

Le pour et le contre de chacun - indépendamment du contexte - sont un peu comme ceci. Les deux partagent un concepteur de formulaire RAD (VCL) bidirectionnel idéal pour le développement Windows natif.

Delphi:

  • POUR: Grande communauté active et enthousiaste
  • POUR: Delphi 2009 est la meilleure version depuis de nombreuses années
  • POUR: Delphi "quot units" faire en sorte que les paires de fichiers source / en-tête C paraissent archaïques
  • AGAINST: Pas de destruction automatique car les objets quittent la portée, ce qui signifie que beaucoup de "sont enfin dans votre code
  • "
  • CONTRE: la langue peut être verbeuse, ce qui est une question de goût
  • CONTRE: L'utilisation de DLL tierces ou de bibliothèques dans d'autres langages (notamment C) nécessite l'écriture de fichiers d'en-tête Delphi

C ++ Builder

  • POUR: C ++ Builder 2009 est probablement la meilleure version de tous les temps
  • FOR: l'idiome RAII simplifie énormément la gestion de la mémoire
  • POUR: les modèles sont incroyablement utiles et puissants, même si l'implémentation de C ++ Builder contient des bogues.
  • POUR: Prise en charge de BOOST et d'autres bibliothèques modernes basées sur des modèles (même si la prise en charge de Boost n'est pas à 100%)
  • FOR: Une excellente interopérabilité avec Delphi signifie que la plupart des composants Delphi peuvent être facilement utilisés.
  • POUR: Facile à utiliser avec les DLL / bibliothèques tierces avec en-têtes C / C ++.
  • FOR: C ++ peut paraître meilleur sur un CV que Delphi.
  • CONTRE: CB2009 est "Unicode uniquement". - les implications de ceci pour la portabilité du code sont différentes et moins bien pensées que pour Delphi
  • AGAINST: La base d'utilisateurs C ++ Builder est beaucoup plus petite que Delphi. Peut-être 20% ou moins.
  • CONTRE: Borland / Inprise a presque tué BCB il y a quelques années et n'a été ressuscité qu'après de gros efforts de la part de la communauté. (Cependant, l'engagement de Codegear / Embarcadero semble impressionnant.)
  • AGAINST: C ++ Builder n’est pas en haut de la pile dans Codegear.
  • CONTRE: les fournisseurs de composants tiers ne comprennent pas toujours / ne prennent pas en charge C ++ Builder

C'est à peu près tout. Juste pour préciser ma position, je suis un utilisateur heureux de BCB2007 / 2009 (depuis BCB5), et j’utilise aussi rarement Delphi. Il ya quelques années, j’avais envisagé de passer de C ++ à Delphi, mais l’absence d’idiome RAII était la seule chose avec laquelle je trouvais difficile de composer avec.

Autres conseils

Allez avec Delphi et vous pouvez utiliser la API Boehm Garbage Collector écrite par Barry Kelly afin que vous puissiez disposer d'un ramasse-miettes dans Delphi. Barry a écrit ceci avant d'aller travailler pour CodeGear en tant qu'architecte de compilateur. Il a des problèmes avec de très grandes applications, et ne fonctionnera probablement pas avec Delphi 64 bits. Il en parle un peu dans cette interview en podcast .

Même si vous n'utilisez pas ce gestionnaire de mémoire, je recommanderais quand même Delphi au C ++. Le seul avantage que C ++ vous donne pour le développement général est la syntaxe entre accolades. Si la syntaxe Delphi ne vous dérange pas, vous la trouverez mieux pour la plupart des choses. Certifié C ++ Builder possède la totalité de la VCL et de la RTL Delphi. Ce n'est donc pas aussi grave que Visual C ++, mais je pense toujours que Delphi serait un meilleur choix.

Pour les compléments Excel (comme vous l'avez mentionné dans votre commentaire), je recommanderais Delphi au constructeur C ++ car il offre un meilleur support COM (dont vous avez besoin pour les compléments Excel).

Delphi sera beaucoup plus facile à gérer, bien sûr, vous devez gérer votre mémoire, mais c’est très simple

MyObj = TMyObj.Create;

try
  MyObj.DoSomething;
finally
  MyObj.Free;
end

Dans Delphi, tous vos objets sont alloués sur le tas, donc la règle est très simple si vous le créez, vous le libérez.

C ++ avec ses objs empilés et empilés signifie que vous avez un peu plus à apprendre et plus de possibilités d’avoir des ennuis.

Après avoir travaillé avec les compléments Borland C et C ++ depuis BCC 4.1 / DOS et Delphi de 3.0 à 2007, je peux vous dire honnêtement que vous êtes dans une grande aventure de toute façon. Passer de C / C ++ à Builder et à IDE RAD de Borland représente un changement de paradigme considérable (et une courbe d'apprentissage) à partir des VC ++, C ++ et .NET de Microsoft (ont utilisé VC de la première version MS-DOS - les mini reliures à trois anneaux beiges).

Le choix entre C ++ et Delphi est celui que je vous suggère de faire après avoir mis les pieds dans l'eau sur quelques projets de taille petite à moyenne dans les deux langues. J'ai commencé comme programmeur C et, après environ cinq ans, je suis passé à Delphi (V3.0) lorsque la VCL a rendu la programmation Windows beaucoup plus facile et plus productive.

Soyez averti, Delphi est un langage séduisant pour les programmeurs venant d’autres langages tels que COBOL, FORTRAN, VisualBasic, car sa syntaxe et ses règles de code imposent une sorte de discipline qui empêche les ennuis de se produire. La maigreur et la puissance de base de C font de C un excellent langage de programmation système (pilotes de périphérique, code O / S, programmation embarquée en temps réel), mais il peut être manipulé par des personnes inexpérimentées.

C ++ Builder de Borland (la VCL de Delphi ajoutée au compilateur C ++) supprime de nombreuses arêtes vives C ++ et constitue mon deuxième langage préféré. Depuis que Borland a ajouté le support .NET aux deux langues Il existe un argument de poids pour utiliser Builder au lieu de VC ++ pour la programmation MS. Bien que C # intègre une bonne convivialité par rapport au C ++, si je le faisais mieux, je continuerais à m'en tenir à Delphi ou à Builder si je venais juste de commencer.

Pour apprendre les ficelles du métier, pour les programmes de prototypage et de concepts rapides, il n’existe tout simplement pas de langage capable de battre Delphi, en particulier avec les composants VCL et tiers. Pas de battage publicitaire, juste des faits.

Personnellement, je pense qu’il existe d’autres considérations importantes en dehors des différences entre les langues. Par exemple, l'EDI de Delphi est totalement génial pour construire des interfaces graphiques à la manière WYSIWYG. Je n'ai pas utilisé l'EDI de constructeur C ++, mais je serais vraiment surpris qu'il ait un générateur d'interface graphique aussi agréable que Delphi.

Bien que superficiellement la syntaxe de C ++ ressemble davantage à celle de Java, le modèle objet de Delphi est en réalité plus proche de celui de Java. Bien que des pointeurs existent dans Delphi, dans la pratique, les références aux objets (comme celles en Java) sont utilisées 99% du temps. Même en C ++ moderne, je ne pense pas qu'il soit possible d'éviter les pointeurs. Non pas qu'il y ait quelque chose qui cloche avec les pointeurs en soi, mais dans la pratique ....

Sur une note personnelle, je suis principalement un gars de Java ces jours-ci, mais j'ai passé 2 ans à travailler avec Delphi et y reviendrais sans hésiter. En revanche, je n'ai qu'une expérience très limitée du C ++ et préférerais nettoyer les toilettes plutôt que de retourner dans cette langue:)

Bien sûr, java sintax ressemble plus à c ++ qu’à delphi, mais je pense que le modèle objet ressemble plus à delphi:

  • héritage unique. Les interfaces existent mais ressemblent plus à COM qu’à des interfaces java.
  • les objets sont alloués sur le tas et accessibles par référence

vous pouvez trouver un document comparant les trois langues ici

Je pense que si vous utilisez Delphi, vous le trouverez plus facile après quelques temps d'utilisation. De plus, il prend davantage en charge les tiers et certaines des fonctionnalités introduites dans Delphi avant C ++ Builder

.

a également lu ce blog d’ex-Java et le responsable de la plupart des bases de données et datasnap à Delphi Steve Shaughnessy, qui raconte son expérience de la programmation Delphi après 10 ans de Java :-) http://blogs.codegear.com/steveshaughnessy/2006/12/03/ 30193

Il n'y a rien que je n'ai pas pu faire dans la VCL C ++ que je ne puisse pas faire avec la VCL Delphi et la quasi-totalité des composants Delphi fonctionnent correctement dans C ++ Builder. Depuis que je programme pour Windows et UNIX, C ++ est plus portable.

Si vous utilisez C ++ STL ou une autre bibliothèque bien conçue pour vos conteneurs, le ramassage des ordures devient un sujet de discussion, et sinon le GC manuel n’est pas difficile (on apprend rapidement les bonnes habitudes - que vous devriez pratiquer de toute façon, indépendamment de la GC). Tant que vous utilisez RAII dans la mesure du possible, gardez votre gestion de la mémoire encapsulée dans des conteneurs, définissez clairement la propriété des objets et utilisez uniquement des pointeurs comme références nilables (que vous devriez également utiliser indépendamment de la langue), GC ne devrait pas être une solution. problème.

"Par exemple, l'EDI de Delphi est totalement génial pour la construction d'interfaces graphiques en mode WYSIWYG. Je n'ai pas utilisé l'EDI de constructeur C ++, mais je serais vraiment surpris qu'il ait un générateur d'interface graphique aussi agréable que Delphi. "

En réalité, l'éditeur d'interface graphique C ++ Builder est exactement le même éditeur et fonctionne de la même manière. C'est fantastique.

.Net a un grand nombre de classes, un peu comme Java. C # a une syntaxe similaire à celle de Java et, en raison de l’énorme bibliothèque de classes, fonctionne de manière assez similaire. Et c’est un environnement parfaitement adéquat pour programmer. Mais franchement, Delphi est un langage, un IDE et un environnement général beaucoup plus agréable. C # a été conçu par la même personne que celle qui a conçu Delphi et "se sent". très semblable à bien des égards, il ne faut donc pas supposer que, car Delphi compile en code natif (bien que vous puissiez également utiliser Delphi .Net), il est fondamentalement plus difficile à utiliser. Ce n'est pas du tout.

Ma recommandation personnelle serait pour Delphi, car c'est un langage cool. Toutefois, si vous souhaitez apprendre le C ++, C ++ Builder est probablement la meilleure façon de le faire.

Je programme professionnellement à Delphes depuis 10 ans et j'ai une bonne connaissance du C ++. J'irais à la manière de Delphes. La syntaxe est beaucoup plus simple et la gestion de la mémoire également. Ce GC pour Delphi natif que je n'ai pas encore entendu parler ... Bien que je n'aime pas trop les pièges introduits dans le code Delphi.Net à cause du .NET gc, je n'aime pas beaucoup les gcs ;-)

Une chose que j'avais oublié de mentionner auparavant:

Du point de vue des coûts, vous n'avez pas vraiment besoin de choisir. Achetez le package RAD Studio et moyennant des frais supplémentaires modestes pour une langue donnée, vous obtenez les personnalités Delphi et C ++ Builder dans le même environnement de développement.

Et, il convient de mentionner que le package C ++ Builder inclut le compilateur Delphi. Vous pouvez également écrire / ajouter des fichiers .pas Delphi et les inclure dans vos projets C ++.

Si vous envisagez beaucoup de programmation Windows, apprenez le C ++. Apprendriez-vous l'allemand en préparation d'un voyage en France? C / C ++ est le langage natif de l'API Windows. Traiter avec les structures de données et les appels WinAPI est tellement plus simple en C / C ++. En ce qui concerne RAD, j'ai utilisé MSVC pendant environ 13 ans et je peux combiner une application graphique aussi rapidement que quiconque utilisant l'éditeur graphique de Visual Studio.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top