Pour quelles raisons devrais-je choisir C # plutôt que Java et C ++? [fermé]

Fermé . Cette question est basée sur une opinion . Il naccepte pas les réponses actuellement.

Commentaires

  • Telle quelle est rédigée, la question était un exemple classique de " quelle langue est la meilleure? " questions hors sujet ici. Jai ' essayé de le rendre plus constructif avec une modification car il a en fait obtenu de bonnes réponses bien pensées. Cependant, gardez à lesprit la FAQ et ce billet de blog lorsque vous posez des questions de cette nature. .
  • Permettez-moi dajouter des éléments plus pointus. .NET a un DOM bien défini ( par exemple CodeDOM ) pour son langage et par conséquent, générer des choses dynamiquement à lexécution est beaucoup plus simple et plus efficace. Cela peut également être utile en tant que capacité infrastructurelle. En outre, le système de types a une correspondance 1-à-1 avec tous les types W3 natifs. À la base, W3 et dautres interops ont été intégrés dans la langue dès le début. Pour dautres langues, ces préoccupations étaient simplement renforcées et présentent de nombreux défis pour elles. De plus, si vous ' interopérez avec de nombreux langages et / ou protocoles, alors .NET est également très puissant
  • Hey, JoeGeeky, ajoutez votre commentaire en tant que une réponse à la question.
  • La vraie question est: pour quelles raisons dois-je choisir Nemerle, F * et F # plutôt que C #? (c.-à-d., les trois langues proviennent de MS et toutes les trois sont meilleures)
  • Je ne ' aucune déclaration du genre " langue / plate-forme X par rapport à la langue / plate-forme Y est TOUJOURS meilleure " est valide et je pense aussi que pour tout X et Y, il peut facilement être invalidé pour certains contextes. Quel ' est le point de cette question?

Réponse

La question doit être " Quelle langue est la mieux adaptée au développement dapplications modernes et typiques? ".

Modifier : Jai répondu à certains des commentaires ci-dessous. Une petite remarque: considérez que lorsque vous avez beaucoup de choses nativement, comme idiomes, cest une grande différence que de les implémenter ou de les télécharger et de les utiliser vous-même à chaque fois. Presque tout peut être implémenté dans nimporte lequel de ces langages. La question est – quest-ce que les langages vous fournissent nativement.

Donc, par surprise (certains arguments sappliquent aux deux langages) …

C # est meilleur que C ++ en cela:

  • Il a un ramasse-miettes natif .
  • Il vous permet de traiter les signatures des méthodes de classe comme des fonctions libres (cest-à-dire en ignorant le this argument pointeur), et donc créer des relations plus dynamiques et flexibles entre les classes. edit si vous ne savez pas ce que cela signifie, essayez dattribuer une méthode membre renvoyant void et acceptant void à un void (*ptr)() variable. Les délégués C # portent le pointeur this avec eux, mais lutilisateur ne doit pas toujours sen soucier. Ils peuvent simplement attribuer une méthode void() de nimporte quelle classe à nimporte quel autre délégué void().
  • Il a un énorme standard bibliothèque avec tant de choses utiles, bien implémentées et faciles à utiliser.
  • Elle permet à la fois des blocs de code managés et natifs.
  • La gestion des versions dassembly résout facilement les problèmes de lenfer des DLL.
  • Vous pouvez définir des classes, des méthodes et des champs pour quils soient internes à lassembly (ce qui signifie quils sont accessibles de nimporte où dans la DLL dans laquelle ils « sont déclarés, mais pas à partir dautres assemblys).

C # est meilleur que Java en ce sens que:

  • Au lieu de beaucoup de bruit (EJB, implémentations de classes statiques privées, etc.), vous obtenez des constructions natives élégantes et conviviales telles que Propriétés et événements .
  • Vous avez de vrais génériques (pas la mauvaise blague de casting que Java appelle génériques), et vous pouvez y réfléchir.
  • Il prend en charge les idiomes natifs de gestion des ressources (le using). Java 7 va également prendre en charge cela, mais C # la depuis bien plus longtemps.
  • Il na pas vérifié les exceptions 🙂 (discutable si cest bon ou mauvais)
  • Il est profondément intégré à Windows, si cest ce que vous voulez.
  • Il a Lambdas et LINQ, prenant donc en charge une petite quantité de programmation fonctionnelle.
  • Il permet à la fois la covariance générique et la contravariance explicitement.
  • Il a des variables dynamiques, si vous les voulez.
  • Meilleure prise en charge de lénumération, avec linstruction yield.
  • Elle vous permet de définir de nouveaux types de valeur (ou de non-référence).

Edit – Adressage des commentaires

  • Je nai pas dit que C ++ ne supportait pas le RAII natif. Jai dit que Java ne lavait pas (vous devez explicitement faire un essai / enfin). C ++ a des pointeurs automatiques qui sont parfaits pour RAII, et (si vous savez ce que vous faites) peut également remplacer le ramasse-miettes.
  • Je nai rien dit sur l émulation des fonctions gratuites. Mais par exemple, si vous devez accéder à un champ par un pointeur this, et liez la méthode qui le fait à un pointeur de fonction générique (cest-à-dire pas dans la même classe), alors il ny a tout simplement pas de manière native de le faire. En C #, vous obtenez le gratuitement. Vous navez même pas besoin de savoir comment cela fonctionne.
  • En " traitant les méthodes membres comme des fonctions libres " Je voulais dire que vous pouvez « t, par exemple, lier nativement une méthode membre à une signature de fonction libre, car la méthode membre " secrètement " nécessite le pointeur this.
  • Linstruction using, évidemment avec les wrappers IDisposable, est un excellent exemple de RAII. Voir ce lien . Considérez que vous navez pas autant besoin de RAII en C # quen C ++, car vous avez le GC. Pour les moments spécifiques où vous en avez besoin, vous pouvez explicitement utiliser using . Un autre petit rappel: la libération de mémoire est une procédure coûteuse. Les GC ont leur avantage en termes de performances dans de nombreux cas (surtout lorsque vous avez beaucoup de mémoire). La mémoire ne sera pas divulguée et vous ne dépenserez pas beaucoup De plus, lallocation est également plus rapide, car vous nallouez pas de mémoire à chaque fois, une seule fois de temps en temps. Appeler new consiste simplement à incrémenter un dernier – pointeur dobjet.
  • " C # est pire en ce quil a un ramasse-miettes ". Cest en effet subjectif, mais comme je lai dit en haut, pour la plupart des développements dapplications modernes et typiques, le ramassage des ordures est un sacré avantage.
    En C ++, vos choix sont soit de gérer manuellement votre mémoire en utilisant new a nd delete, ce qui conduit toujours empiriquement à des erreurs ici et là, ou (avec C ++ 11) vous pouvez utiliser les pointeurs automatiques de manière native, mais gardez à lesprit quils ajoutent beaucoup et beaucoup de bruit dans le code. Donc GC a toujours un avantage là-bas.
  • " Les génériques sont bien plus faibles que les modèles " – Je viens de le faire  » Je sais doù vous venez. Les modèles peuvent avoir leurs avantages, mais daprès mes contraintes dexpérience, la vérification de type de paramètre générique, la contravariance et la covariance sont des outils beaucoup plus puissants et élégants. La force des modèles est quils vous permettent de jouer avec le langage. bit, ce qui peut être cool, mais cause également beaucoup de maux de tête lorsque vous voulez déboguer quelque chose. Donc, dans lensemble, les modèles ont leurs fonctionnalités intéressantes, mais je trouve les génériques plus pratiques et plus propres.

Commentaires

  • Et si vous voulez toujours un garbage collector pour C ++, vous pouvez en télécharger un .
  • laissez-nous continuer cette discussion dans le chat
  • Une autre fonctionnalité importante de C # par rapport à Java, pour des raisons de performances, est la " struct ", un type dobjet qui peut être stocké sur la pile (ou dans des registres CPU, dans des cas particuliers) ou incorporé dans dautres objets du tas. Ils sont souvent utilisés pour les petits objets avec 1 à 4 champs, tels que les paires de coordonnées X, Y.
  • @LokiAstari Ça vous dérange? Tant que vous vous souvenez de désinscrire les gestionnaires dévénements et dutiliser le modèle Dispose sur les classes qui contiennent des wrappers natifs, ' tout ira bien. Cela ' est beaucoup moins à savoir et à retenir que la gestion de la mémoire en C ++.
  • -1 car il me manque les sections " C ++ est meilleur que C # en ce que … " et " Java est meilleur que C # … ". Je ne pense pas que C # soit supérieur dans tous les domaines, donc une réponse sans ces deux sections manque probablement dinformations importantes.

Réponse

Lenvironnement

.NET Framework et les clients Windows

Windows est le système dexploitation dominant sur les ordinateurs clients. Les meilleurs frameworks GUI pour les applications Windows sont Winforms et WPF avec .NET Framework . Le meilleur langage de programmation pour travailler avec .NET Framework et ses API est C # . Java nest pas une alternative pour cela.Et C ++ est un langage plus ancien sans gestion automatique de la mémoire. C # est similaire au C ++ mais dispose dune gestion automatique de la mémoire et vous navez pas besoin de travailler avec des pointeurs, ce qui vous rend plus productif. C ++ peut toujours être la meilleure option dans certains cas, mais pas pour les applications de base de données gourmandes en formulaires, courantes

IIS et Windows Server

Si vous avez lhabitude de travailler dans lenvironnement Windows et avec C #, vous aurez besoin du moindre investissement pour apprendre IIS pour la programmation de serveur et Windows Server pour administration de base.

Active Directory et Windows Server

Si vous développez un logiciel qui va être déployé dans les réseaux d’entreprise, il est probable qu’ils utilisent un environnement centré sur Windows utilisant un Windows Server avec Active Directory. Dans un tel environnement, il est plus facile d’intégrer et de déployer une solution conçue en C # et .NET Framework .

Personnellement, je « suis un développeur Java, pas un développeur C #, mais je travaille avec le web. Je passerais en C # si je développais des applications réseau pour le réseau Windows. Mais je préfère Java pour les serveurs Web basés sur Linux. Je choisirais C ++ pour les systèmes embarqués si je « n aurais » pas beaucoup de dépendances.

Oui, C # est un meilleur langage avec des fonctionnalités plus modernes que C ++ et Java, mais cest pas la chose la plus importante pour choisir C # .

Résumé

Lenvironnement de votre logiciel est le plus important pour le choix C # . Si vous travaillez dans un environnement avec clients Windows, serveurs Windows, Active Directory, IIS et peut-être SQL Server puis C # est le meilleur langage avec .NET Framework .

Si vous travaillez dans un environnement Unix avec par exemple services Web, Java serait mon choix. Et si vous travaillez avec des systèmes embarqués ou devez intégrer des périphériques matériels, C ++ serait un bon choix.

Commentaires

  • Absolument – cest pourquoi jutilise C # pas vraiment une autre raison
  • Vous pouvez certainement utiliser .NET sur dautres plates-formes via Mono, MonoTouch et MonoDroid, mais mes tests de performance ont révélé que Mono était nettement plus lent que .NET pour Windows, et le propre Compact Framework de Microsoft ' est extrêmement lent sous Windows CE: codeproject.com/KB/cross-platform/BenchmarkCppVsDotNet.aspx … bien sûr, WPF nest disponible que sur Windows (mais je ne ' Je naime pas ça de toute façon.)
  • De quelles dépendances voulez-vous dire que " Je choisirais C ++ pour les systèmes embarqués si je ne le ferais pas ' Jai gagné ' de nombreuses dépendances. " Parlez-vous des bibliothèques Java?
  • @Puckl oui, mais surtout le jvm / jre.
  • " Si vous travaillez dans un environnement Unix avec par exemple services web " il existe dautres langages & frameworks qui pourraient être pris en compte: ruby, Python, node.js etc

Réponse

C # et Java

C # est un très bon langage si:

  • Vous voulez faire du développement orienté objet à usage général. Cest un langage POO classique, typé statiquement.
  • Vous ciblez uniquement les plates-formes Microsoft (il convient de rappeler que Microsoft a effectivement cloné Java pour créer C #, car ils voulaient un langage de type Java qui verrouillerait les gens dans Windows. Ils auraient pu utiliser Java, mais cela aurait permis aux gens dexécuter facilement des applications sur dautres plates-formes ….)

C # en tant que langage est plus agréable que Java de différentes manières (mieux syntaxe pour les propriétés, les types de valeur, les génériques réifiés, etc.). Je préfère C # comme langage à Java, mais dans le grand schéma des choses, ce sont des langages assez similaires et adaptés à des applications similaires.

Dun autre côté, Java présente également de gros avantages:

  • Énorme écosystème open source – les bibliothèques pour Java que vous pouvez obtenir gratuitement sont par loin le meilleur de toutes les langues. Il est difficile dexagérer limportance de cela – du point de vue de faire avancer les choses, Java est très efficace.
  • Outils – les outils Java sont à mon avis meilleurs que ce que vous pouvez obtenir dans le monde .Net . par exemple. Maven (une fois que vous lavez maîtrisé!) Est particulièrement impressionnant.
  • Maintenabilité – Java existe depuis un certain temps et a réussi dans les grandes entreprises précisément parce quil est relativement stable et que beaucoup defforts ont été consacrés à la rétrocompatibilité. La syntaxe simple et légèrement verbeuse aide également Java ici – il est plus facile de lire et de maintenir le code si le code est très clair et explicite.
  • Nouveaux langages – La JVM a de nouveaux langages étonnants (Scala, Clojure , Groovy, etc.) qui sont le futur de la plate-forme Java. Cest là que se produit une grande partie de linnovation linguistique, et cela se produit beaucoup plus rapidement quen Java ou C #.

Donc, Java vs C # est un appel assez proche et cela dépend vraiment de savoir si vous voulez être dans le camp Microsoft ou dans le camp Open Source / multiplateforme.

Personnellement, je préfère Java parce que:

  • Lécosystème des bibliothèques est à mon avis beaucoup plus important que le fait que C # ait une syntaxe plus agréable que Java
  • À long terme, je veux que tout mon code soit correctement croisé -plateforme et capable de fonctionner sur de gros clusters de machines Linux bon marché sur le cloud.
  • Clojure est à mon humble avis le langage le plus prometteur au monde en ce moment, et si je men tiens à la plate-forme JVM, je serai capable tran sitionnez facilement mon code et mes compétences dans Clojure au fil du temps.

C / C ++

C / C ++ est fondamentalement une bête complètement différente. Je ne le recommanderais pas pour le développement d’applications générales de nos jours pour les raisons suivantes:

  • Gestion de la mémoire – pour la plupart des programmes à usage général de nos jours, vous ne voulez pas être gérer votre propre mémoire. Le nettoyage de la mémoire en C # ou Java est bien meilleur pour votre productivité et votre santé mentale que nimporte quelle technique de gestion de mémoire explicite que vous devrez utiliser en C / C ++
  • Complexité – C ++ en particulier est un langage extrêmement complexe. Il prend beaucoup de temps à maîtriser et le code lui-même peut aussi être terriblement complexe. (Les modèles C ++ par exemple sont particulièrement velus ….)
  • Productivité – la plupart du temps et tout le reste à égalité, il vous faudra plus de temps pour faire les choses en C / C ++.

Cependant, cest sans aucun doute un excellent choix dans un certain nombre limité de domaines spéciaux, en particulier:

  • Systèmes dexploitation – vous voudrez probablement utiliser C / C ++ si vous écrivez un système dexploitation.
  • Développement de jeux – presque tous Les meilleurs moteurs de jeux commerciaux sont C / C ++. Cest toujours le meilleur choix si vous développez un titre AAA exigeant (C # et Java conviennent parfaitement aux jeux moins exigeants / occasionnels)
  • Calcul haute performance – C / C ++ optimisé est probablement le meilleur moyen de créer du code très performant. Pour la plupart des applications, faire ce niveau doptimisation ne vaut pas la peine, mais dans certains domaines, il peut être extrêmement précieux (trading haute fréquence par exemple)
  • Accès matériel – Vous avez besoin dun accès direct accès au matériel (par exemple pour un système embarqué)

Donc en gros, C / C ++ est un excellent choix si et seulement si vous vous concentrez sur lun des domaines où il est particulièrement bien adapté .

Commentaires

  • Vous mentionnez maven comme un exemple de meilleurs outils pour java. Je ' ne suis pas particulièrement familier avec lui, mais en regardant la documentation, Maven ressemble assez à loutil de construction natif de .Net MSBuild. Quest-ce qui rend Maven meilleur que MSBuild?
  • +! (juste parce que je nai quune voix): vous avez très bien expliqué pourquoi lécosystème Java est meilleur et pourquoi il ne faut pas comparer uniquement la syntaxe de C # vs Java. Java a des bibliothèques et des outils plus nombreux et de meilleure qualité. Il ne se passe pas grand chose dans le langage Java lui-même, mais de nouveaux langages très intéressants apparaissent pour la JVM qui sont (IMO) beaucoup plus intéressants que C #. Je ne connais pas Clojure mais je trouve Scala très intéressant: conçu pour être OOP + FP depuis le début.
  • pourquoi tout le monde pense que le code C ++ est plein de gestion manuelle de la mémoire. Ce nest pas C vous savez, RAII signifie que vous navez presque jamais à allouer / libérer manuellement de la mémoire (les moments où vous le faites sont ceux où un langage comme C # vous serait inutile).
  • @gbjbaanb – probablement parce RAII est inadéquat pour la gestion de la mémoire à usage général. Il nest en aucun cas équivalent en flexibilité à un système GC complet comme vous le voyez en Java ou C #. Dès que vous dépassez les limites de RAII, vous êtes de retour dans le territoire de la gestion manuelle de la mémoire.
  • @mikera Je veux juste souligner quil y a aussi pas mal de développement de langage sur la plate-forme .NET. Par exemple. F # est un langage fonctionnel soigné qui intègre en douceur le reste de .NET, et Python a récemment été porté sur .NET en tant que Iron Python (et a également obtenu un IDE sympa ! ).

Réponse

I heard that syntactically they are almost the same. 

Syntaxiquement? Qui donne un singe volant sur la syntaxe? La syntaxe nest bonne que pour une seule chose: permettre une migration plus rapide à partir de langages syntaxiquement similaires. Cest tout.

C # est bien meilleur que Java. Considérez leur prise en charge de la programmation générique et fonctionnelle – C # est bien en avance sur Java. Sans parler des surcharges dopérateurs et dautres bonnes choses – C # est bien mieux présenté. Il ny a aucun moyen que Java puisse être considéré comme meilleur que C #.

C ++ et C # est plus un concours. C ++ a un modèle de compilation archaïque incroyablement ennuyeux et un tas de maladies de C, mais ses modèles sont bien plus puissants que les génériques, et ses approches de gestion des ressources sont beaucoup plus flexibles et puissantes en général, car using est un échec complet , et il sexécute plus rapidement.

Commentaires

  • Je pense quil faut comparer à la fois les fonctionnalités du langage et la disponibilité dun langage sur différentes plates-formes. Avec C # one est verrouillé avec Microsoft, avec Java, on ne lest pas: ' est un gros avantage, au moins pour les développeurs UNIX / Linux. La POO + FP sont des fonctionnalités intéressantes, mais pourquoi vous en soucier peut utiliser Scala, qui fonctionne sur la JVM et peut sinterfacer avec le code Java hérité? Je napprendrais jamais un langage spécifique à la plate-forme à moins dy être obligé.
  • @Giorgio: Le projet Mono existe . Mais deuxièmement, Microsoft prend réellement soin de sa plate-forme – ils lui donnent régulièrement des mises à niveau importantes. Java na pratiquement rien de nouveau. De plus, la question concerne C # vs Java, pas CLR vs JVM.
  • @DeadMG: Pour autant que je sache, je ne peux prendre aucun programme C # développé sur Windows et le construire avec Mono. Pas CLR vs JVM? La question est de savoir pourquoi les gens utilisent C # ou Java. Pour que les gens utilisent une langue, ils ont besoin dun environnement dexécution et dun système dexploitation. Je ne discute pas du fait que C # a plus de fonctionnalités que Java, mais Java est beaucoup plus portable: cest un facteur qui peut influencer ladoption dun langage. En fait, Java est encore beaucoup plus utilisé que C # même sil ne dispose pas de certaines fonctionnalités avancées.
  • @Giorgio, vous pouvez prendre nimporte quel programme C # et le construire avec Mono. Vous ne pouvez pas utiliser certaines bibliothèques (qui ne font pas partie du langage C # de toute façon). Et java nest pas " beaucoup plus portable ". Vous pouvez coder pour iOS en C #, mais pas en Java, par exemple.
  • @Giogio, Mono est au moins aussi portable que JVM.

Réponse

Eh bien, C# a quelques fonctionnalités intégrées intéressantes comme LINQ et délégués. Il tire le meilleur parti des deux mondes – Java et C++. Regardez ici pour une comparaison complète.

Mais jaime mieux le monde Java – beaucoup plus de frameworks open source et il fonctionne sur toutes les plates-formes. Et ne me parlez pas de Mono – ce nest pas une option fiable.

Commentaires

  • +1: " Mais jaime mieux le monde Java – beaucoup plus de frameworks open source et il fonctionne sur toutes les plates-formes. " Soit ' espère quOracle ne changera pas cela!
  • Expliquez, ce que ' nest pas " fiable " en mono?
  • @Petar Minchev, ce nest que de votre faute. Vous devez suivre les consignes de portabilité et vous ne devriez pas utiliser des bibliothèques non portables – et de cette façon toute application complexe fonctionnerait de manière fiable avec Mono. Des choses comme WPF ne seront jamais portées.
  • @Petar Minchev, il y en a beaucoup de non-portables Bibliothèques Java. Vous devez toujours faire attention à la portabilité, quelle que soit la langue que vous ' utilisez. Et de toute façon, la question concerne les langues, pas la Les bibliothèques tierces.
  • @Petar Minchev, GTK # est portable. Utilisez-le à la place.

Réponse

Selon certaines sources (voir par exemple http://www.indeed.com/jobtrends ) C # est toujours moins populaire que Java, et aussi populaire que C ++.

C # fournit des fonctionnalités qui manquent à Java, par exemple prise en charge directe de certains idiomes de programmation tels que les propriétés, le style de programmation fonctionnelle, etc. C # a un niveau dabstraction plus élevé que C ++, ce qui est un avantage lorsque le temps de développement est plus important que la vitesse du programme.

Personnellement, je préfère toujours les mondes Java / C ++. Comme la dit Petar Minchev, Java a plus de frameworks et dapplications open-source, il fonctionne partout, est moins lié à un fournisseur et à un système dexploitation particuliers. Le C ++ présente des avantages similaires, même si le code nécessite souvent des adaptations allant dune plateforme à une autre. Comme je préfère développer sur Linux et, à ma connaissance, je ne peux pas avoir un C # à part entière sur Linux, je ne me suis jamais vraiment intéressé au C # car mes besoins en programmation sont couverts par C, C ++, Java, Scala.

Dun autre côté, pour de nombreux développeurs, être lié à un fournisseur particulier nest pas un problème: Microsoft a une position dominante sur le marché des systèmes dexploitation et C # offre de nombreuses opportunités demploi. Par conséquent, de nombreux développeurs IMO adoptent C # car, en plus dêtre un langage riche en fonctionnalités, cest aussi un bon investissement.

Commentaires

  • " Je ne peux pas avoir pleinement C # sous Linux " – Pourriez-vous nous en dire plus? Voulez-vous dire que le framework .Net complet nest ' t disponible car je nai ' pas rencontré de problèmes avec le langage C # lui-même ( ou F # dailleurs) sur Linux?
  • @wawa: A ma connaissance le framework .Net correspond au JDK, et le framework .Net nest disponible que pour Windows alors que le JDK est disponible pour plusieurs OS ' s. Si ce nest pas correct, je peux modifier ma réponse (et changer mon opinion également).
  • Je pense quune analogie plus proche serait la bibliothèque de classes de base avec le JDK. La BCL a des pièces normalisées et non normalisées. Le projet mono met en œuvre les pièces standardisées ainsi que la plupart des pièces non standardisées.
  • @wawa: Merci pour linformation. Jenvisage dessayer C # en utilisant Mono. Pourtant, jai toujours le sentiment assez fort que C # est beaucoup plus étroitement lié à Microsoft que Java ne lest à Oracle (ou à Sun dans le passé).

Réponse

Quen est-il de " Quel cadre de développement logiciel, qui comprend un langage de programmation " son mieux?

Vous avez oublié dinclure dautres éléments, comme l " environnement " avec lequel vous allez travailler.

  1. Allez-vous travailler uniquement pour le système d’exploitation Windows, mais n’avez-vous pas besoin d’être de bas niveau et de disposer de beaucoup de mémoire et d’autres ressources?

    Choisissez .NET comme framework sur Windows, et utilisez C #.

  2. Allez-vous travailler uniquement pour Windows, mais ne doit pas être de bas niveau, MAIS, ne le fait pas avez beaucoup de ressources?

    Choisissez le Framework Delphi (et le langage de programmation Object Pascal Delphi ou le langage de programmation Lazarus Object Pascal)

  3. Votre application est-elle requise. pour soutenir seve comme un jeu, dans différents mobiles?

    Choisissez le Java Framework et le langage de programmation Java.

  4. Est-ce Linux avec KDE comme graphique interface?

    Choisissez le framework QT, avec C ++

  5. Est-ce Linux avec Gnome comme interface graphique?

    Choisissez le framework GObject / GLib , avec C ++

  6. Allez-vous travailler avec beaucoup dopérations de bas niveau, comme le développement de pilotes?

    Le C ou C ++ simple est utilisé pour plusieurs opérations Systèmes, avec des bibliothèques standard, comme cadre.

Juste mes 2 cents.

Commentaires

  • Je ' ne suis pas sûr de 3. Les smartphones sont très populaires aujourdhui et AFAIK, tous prennent en charge C # sous une forme ou une autre, mais seul Android prend en charge Java.
  • Est-ce que ' t Delphi est mort? 🙂
  • @ šljaker Non, mais ce nest ' que ces jours très populaires.
  • @svick: Cest un mensonge. Outre Android, Java existe également sous une forme ou une autre sur iOS, Symbian, WinMo, Blackberry, Maemo et WebOS (cest-à-dire tout ce qui compte ou qui compte encore; don ' pour commencer plates-formes encore plus petites). Android, Blackberry et Symbian prennent officiellement en charge Java comme option de développement; Sun prenait en charge Java sur iOS même si Apple nen avait pas envie. Java est le langage de développement principal des téléphones Android et Blackberry. Je ne peux ' t dire la même chose avec C #, AFAICT il ' nest officiellement pris en charge que sur WinMo.

Réponse

Si vous effectuez une recherche, vous risquez de tomber sur une discussion sur les principaux langages de programmation. Voici lun des résultats de la recherche – http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html – Java semble toujours être le langage le plus populaire.

Java a essayé de supprimer certaines des lacunes du C ++ (et de simplifier la vie des programmeurs pour les applications non temps réel et non critiques). C # étant le dernier venu à la fête, a évité certaines des lacunes du langage Java. C # a fait beaucoup de progrès (car Microsoft a beaucoup de contrôle dessus) tandis que les avancées de Java ont été bloquées pendant une période de temps considérable en raison de conflits entre ses parties prenantes.

Réponse

Quelques choses qui nont pas encore été mentionnées:

C # est meilleur que C ++ parce que:

Il supprime avec des fichiers den-tête, ce qui se traduit par une grande simplicité.

C # est meilleur que Java car:

Il prend en charge à la fois le type de référence (classe) et le type de valeur (struct) défini par lutilisateur types, qui, si vous savez ce que vous faites, peuvent apporter des avantages significatifs en termes de performances.

Il prend en charge les délégués, qui sont comme des interfaces à méthode unique, simplifiant ainsi considérablement le codage des constructions fréquentes qui impliquent des objets à méthode unique.

Commentaires

  • Pouvez-vous expliquer en quoi le fait davoir à la fois des types de référence et de type valeur peut améliorer les performances en C #?
  • Par exemple, si vous souhaitez disposer dun tableau denregistrements , en Java, vous navez pas dautre choix que de décrire votre enregistrement à laide dune classe, votre tableau sera donc un tableau de références à une multitude dobjets alloués séparément. En C #, vous pouvez décrire votre enregistrement en utilisant une structure, de sorte que votre tableau ne sera quune seule zone continue de mémoire contenant vos structures lune après lautre, tout comme en C.
  • Comme autre exemple, si vous le souhaitez pour définir un petit nouveau type, (un type qui tiendrait dans un mot machine,) vous navez pas à lui définir une nouvelle classe; vous pouvez simplement en faire une structure, afin quelle obéisse à la sémantique des valeurs. Passer de telles structures ne sera pas plus cher que de transmettre des références à des objets, mais vous aurez lavantage de ne pas allouer, construire et ramasser des objets.
  • Je comprends. Les classes sont donc instanciées sur le tas et accédées via des références tandis que les structures sont instanciées sur la pile (?)
  • Presque correct. La seule inexactitude dans cette instruction est quune structure sera trouvée sur le tas si elle est incorporée dans un autre objet, ou si elle se trouve dans un tableau de structures. Et il sera également trouvé sur le tas sil est un jour encadré, exactement de la même manière que les types valeur sont encadrés en Java.
  • Réponse

    Vous devez choisir la meilleure langue pour votre environnement attendu et votre expertise.

    Choisissez C # si vous travaillez dans un environnement Microsoft uniquement. Alors que C # est normalisé sous ISO / CEI 23270: 2003, la version de Microsoft reste la seule implémentation complète. Plusieurs parties clés du langage ne sont pas couvertes par la norme et sont donc soumises aux brevets de Microsoft. Personne dautre nimplémentera une version complètement compatible de la langue pour dautres systèmes, donc en fait, vous êtes verrouillé par le fournisseur sur Microsoft Windows et .Net tant que vous utilisez la langue. Si vous recherchez des compétences à utiliser sur le marché du mobile, il est préférable de vous tourner vers un autre langage.

    Java fonctionne, mais a beaucoup de frais généraux, en partie à cause de fonctionnalités telles que le ramasse-miettes. Java nest pas non plus normalisé par ISO / CEI, vous navez donc aucune garantie si vous changez de plate-forme et de version de Java, uniquement les meilleures intentions de Sun / Oracle. Si vous envisagez de travailler avec Android, cest certainement la voie à suivre . La programmation dAndroid est essentiellement Java, avec quelques changements.

    C ++ est normalisé et presque tous les compilateurs suivent la norme internationale, vous avez donc un comportement garanti MAIS le langage ne vous protège pas de vous-même. Vous devez effectuer vous-même le nettoyage et la vérification des débordements. Ce nest pas difficile. Les programmeurs C / C ++ font cela depuis de nombreuses années. Apple utilise Objective C pour tout, donc si vous voulez viser Apple, je vous recommande dessayer plutôt cela.

    Si vous vous voyez abandonner Windows à un moment donné, je vous suggère dapprendre à la fois C / C ++ et Java – qui sont tous deux commercialisables pour le moment.

    Réponse

    En ce qui concerne C ++ vs C # (car je ne suis pas assez compétent en Java), ce qui me manque ici, cest la possibilité daccéder à des éléments de bas niveau sous Windows. Par exemple, vous ne pouvez pas (encore) développer un pilote daffichage natif en C #, mais vous pouvez le faire avec C ++. Cela naméliore pas C ++. Je vois C ++ contre C # comme Assembly contre C.

    C # est dans mon voir beaucoup plus efficace si vous regardez le temps quil faut pour implémenter réellement une fonctionnalité. La pénalité de performance du runtime .Net est négligeable pour 99% des applications développées. Cela peut être important si vous exécutez une boucle serrée, oui par tous les moyens, mais la plupart du temps une application est inactive, en attente de tout type dentrée, de signal ou dinterruption (disque IO, clic de bouton, réseau, achèvement de lanimation).

    La bibliothèque CLR avec tous ses fonctions a une autre r grand avantage. Quand je formais C # aux développeurs juniors, la plupart dentre eux ont dit quils aimaient la convention de dénomination logique des classes, des membres et des espaces de noms. La recherche dune fonctionnalité de méthode était logique dans le SDK, ce à quoi Visual Basic 5 était gravement défectueux. Cela les a énormément aidés à adopter la bibliothèque. Après avoir appris la syntaxe dun langage, apprendre une nouvelle bibliothèque est important pour bien comprendre nimporte quel SDK. Cela vous évite de réinventer la roue.

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *