Totalement d'accord avec ceci. Il faut arrêter avec Java.
Qt est l'avenir.
Totalement d'accord avec ceci. Il faut arrêter avec Java.
Qt est l'avenir.
Tu peux argumenter ? Pourquoi ce framework plutôt qu'un autre ?
Sur ce site il y a un déjà un grand débat C++ vs Java.
Pour le peu de Java que j'ai fait, ces 2 langages peuvent être complémentaire et non concurrentiel.
Je vois mal une unité de calcul au Cern ou CEA autre qu'en C/C++. Et j'ai tout autant de mal à voir un WebService en C++. Même si c'est possible de faire les 2 dans les 2 langages.
Pour en revenir au titre, avec Java tu fais un dév cross-plateformes, en C++ y'a toujours une adaptation du dév. Si c'est pas toi qui la fait c'est le framework.
Pour les mobiles, je n'y connais rien (j'ai fait un peu de PalmOS), chaque OS a son propre mode de fonctionnement, donc comment est-il possible de faire un code multi-plateforme ? Si Embarcadero crée un framework qui fait abstraction de toutes les spécificités des OS, je leur tire mon chapeau.
Même si chaque langage continue et continuera à avoir ses particularités, ses avantages et ses défauts, il faut avouer que la montée en puissance de Qt met un pavé dans la mare dans le monde du développement cross-platform. Avec Qt, on atteint une productivité parfois supérieure à celle qu'on peut avoir avec aux autres langages objets pourtant parfois bien plus récents, tout en continuant à bénéficier d'optimisations bas-niveau si nécessaire.
Il comble le gros soucis du langage qu'on avait il y a encore quelques années, à savoir développer rapidement tout en assurant la compatibilité multi-platformes sans efforts supplémentaires ou presque, et sans devoir empiler trente milles librairies différentes (avec les incohérences que ça suppose, rien que de devoir assurer les fonctions de conversions entre des strings et autres conteneurs de lib différentes, j'en ai soupé...).
Plus le temps passe et plus je me dis que j'ai peut-être finalement misé sur le bon cheval, les annonces sur Qt devenant de plus en plus intéressantes.
Qu'est-t-il possible de faire avec un autre langage par rapport au C++ ?
De la réflexion, de la sérialisation (quoi que avec Boost), et une meilleure gestion des chaines (je pense au split(), join() qui sont absent dans le standard même si présent dans Boost...)
Avec C++11, et plus tard C++17 (Modules, API : FileSystem et Networking), je pense que le C++ n'aura rien à envier aux autres langages.
Je pense qu'on pourrait très bien faire du mobile et du web en C++ (oui oui, du web), mais si on ne le fait pas trop maintenant, c'est qu'on ne le fera pas forcément plus tard non plus.
Personnellement, ce n'est pas vraiment les pointeurs et la gestion de la mémoire qui m'inquiètent, car comme dit plus haut on a les références (&), aujourd'hui les pointeurs sont nécessaires pour les collections hétérogènes ou pour les classes qui s'appellent elles-mêmes (liste chainée par exemple).
Avec "pour un new de créé, faire un delete" et le RAII il ne devrait pas y avoir de problème de mémoire.
Ce qui m'inquiète c'est plutôt la richesse du C++, moi-même j'en apprend tout les jours sur ce langage, alors que pour Java j'en ai fais le tour en quelques semaines/mois (sans compter les API).
C++ est plus "permissif" (les variables globales, l'héritage multiple par exemple), il demande plus de temps d'apprentissage et donc on est susceptible d'avoir une courbe d'apprentissage plus longue (ex: j'ai une variable au-dessus de la déclaration d'une classe, puis d'une fonction, est-ce que la variable est accessible dans la classe, et dans la fonction ? à quoi sert "::variable" dans un programme ? Différence entre un struct et une class ? Pourquoi peut-f-on faire de l'héritage privé ? etc... ).
Autre exemple, avec différentes manières de déclarer et initialiser en C++ :
C'est justement cette richesse qui peut se retourner contre les développeurs qui travaillent en équipe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 std::vector<std::string> v = { "xyzzy", "plugh", "abracadabra" }; std::vector<std::string> v({ "xyzzy", "plugh", "abracadabra" }); std::vector<std::string> v{ "xyzzy", "plugh", "abracadabra" }; // see "Uniform initialization" below
Après il faut voir le bon coté des langages de "haut niveau", les langages compilés en bytecode je veux dire, si on met de coté le garbage collector.
Java avait des performances mitigés au début mais donne des performances assez proches du C++ dans certains cas aujourd'hui, même si la consommation de mémoire reste supérieur.
Je pense qu'il y a du bon dans un langage plus cadré et restrictif comme Java.
N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java
Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI
Si on veut jouer sur les mots, avec Java, c'est du dev mono plateforme: le binaire généré ne fonctionne que sur une machine virtuelle java
Si c'est le framework qui s'adapte, alors où est le problème? L'important, c'est que le programme ne soit pas modifié d'une plate-forme à l'autre, peu importe que ce soit le framework qui fasse l'abstraction!
Hum... justement, ces derniers temps, le nombre d'OS à tendance à se réduire, non?
Si ils arrivent à faire un truc qui marche sur iTrucs et android, ils touchent déjà 80% du marché, je pense.
Après, côté technique, je doute fortement que le principe de fonctionnement de l'API des OS soit fondamentalement différent: déjà, beaucoup sont basés sur un UNIX, ce qui permet d'utiliser POSIX. Ca résout une bonne partie des problèmes.
Après, côté graphique, le principe est toujours le même: un buffer, des fonctions pour le manipuler, un système de coordonnées, voire, allez, un contexte openGL.
En C++, tu fait quelques templates "primitives", et tu bâtis le reste du framework dessus. Reste plus qu'a spécialiser les templates pour chaque OS que tu veux supporter, le reste s'adapte automatiquement.
Comme tu le dis si bien, boost permet la serialization. La réflexion, je ne sais pas. D'ailleurs, je ne sais pas à quoi ça sert... enfin, en théorie, oui, mais dans la pratique...
Sinon, qu'est-ce qui est possible en C++ qui ne l'est pas dans les autres langages, c'est une question intéressante aussi.
Par exemple, surcharge d'opérateur que Java n'a pas aux dernières nouvelles.
Paramètres par défaut que C# n'a pas.
Héritage multiple, qui peut avoir son utilité, bien qu'a utiliser avec prudence...
Divers sites de référence propres! Genre cplusplus.com ou cppreference.com. Parce que désolé de dire ça, mais je ne parviens que difficilement à m'y retrouver dans la doc Oracle et dans la msdn.
Et surtout, des conteneurs très bien foutus et intuitifs!
Genre std::set, si on le compare à HashSet de C#, c'est plus agréable à manier je trouve, ou alors j'ai raté une étape... std::set, je n'ai eu besoin que de 5 minutes la première fois pour comprendre comment ça marche avec une classe faite par l'utilisateur. Avec HashSet, il semble que je n'ai rien commpris puisque le résultat que je veux, je ne l'ai toujours pas.
Il y a aussi les versions "multi". Je sais pas pour Java, mais .NET ne les intègre pas.
Vrai que filesystem manque cruellement...
Pour moi, C++ & boost permet de tenir la dragée haute aux autres langages. Manque que l'IHM, mais pour moi, les IHM ne doivent pas être intégrées au standard, ça bouge bien trop vite pour ça, et on parle de standard industriel ici, pas d'un standard pour la mode.
Tu soulèves un sacré lièvre. C'est vrai que C++ demande probablement une meilleure coordination des gens, et il certain que l'apprentissage est plus long.
D'un autre côté, une fois maîtrisé, je pense que ce langage est plus productif que les autres. J'ai plus qu'a espérer qu'un jour j'aie un CDI dans une boîte ou les chefs pensent comme ça aussi
flesystem est à double tranchant, et n'a, à mon avis, pas sa place dans le standard du langage lui-même. c++ est sensé être indépendant de la plateforme sur laquelle il est compilé (processeur et os, c'est la raison pour laquelle, par exemple, la taille des types natifs n'est pas définie dans le standard). Cette indépendance vis à vis de la plateforme est, à mon avis, un bon choix, car gérer les différences entre plateforme au niveau du standard du langage serait ingérable et amènerait inévitablement à une perte de portabilité. L'inconvénient est que le programme doit être compilé sur la plateforme cible.
C'est pourquoi c'est une bonne chose que filesystem reste dans une lib tierce (boost en l'occurence, et vous remarquerez que boost::filesystem doit être compilé; on ne peut pas utiliser uniquement l'en-tête).
« L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
Spinoza — Éthique III, Proposition VII
Sujet très intéressant, mais il semble que certaine personne ne connaisse pas bien les langages que sont Java et c# (comme moi qui n'y connait pas grand chose au c++), certes le c++ évolue mais pas aussi vite que ces 2 là (je parle de la standardisation).
Et bon le cross-plateforme c'est jolie sur le papier, mais la mise en œuvre c'est pas la même chose.
Pour une classe de base sans traitement elle marchera sûrement tel quel sur tous les mobiles, mais à partir du moment où on a des traitements des interactions avec le téléphone chaque plateforme à ses librairies et ses méthodes propres, après suffit de mettre une couche d'abstraction (c'est aussi l'un des rôles des machines virtuel) mais existe-t-il une solution vraiment correcte et performante à l'heure actuelle (qui serait très proche d'un développement natif ciblant la plateforme) ?
Je pense que c'est surtout là qu'est le problème peut importe le langage.
Pour le hashset c'est super simple à utiliser (toujours regarder les exemples du msdn) après faut voir ce que tu voulais faire avec.
Il se trouve que c'est exactement l'inverse: on fait plus de web et de mobile avec C++ qu'auparavant (sans que ca soit super explosif comme grandissement non plus). Essentiellement parceque certaines applications gourmandes en resources sont moins cher a gerer en C++ (parceque contrairement a ce que certains pensent, les cou des serveurs ou les perfs peut parfois etre plus cher que le salaire des developpeurs... ne serait-ce que si ca rends l'application difficilement utilisable.)
A part RAII, ce ne sont pas les arguments qu'un developpeur de C++ moderne aurait apporte........Personnellement, ce n'est pas vraiment les pointeurs et la gestion de la mémoire qui m'inquiètent, car comme dit plus haut on a les références (&), aujourd'hui les pointeurs sont nécessaires pour les collections hétérogènes ou pour les classes qui s'appellent elles-mêmes (liste chainée par exemple).
Avec "pour un new de créé, faire un delete" et le RAII il ne devrait pas y avoir de problème de mémoire.
Dans la pratique, je pense que c'est de la pessimization.Ce qui m'inquiète c'est plutôt la richesse du C++, moi-même j'en apprend tout les jours sur ce langage, alors que pour Java j'en ai fais le tour en quelques semaines/mois (sans compter les API).
C++ est plus "permissif" (les variables globales, l'héritage multiple par exemple), il demande plus de temps d'apprentissage et donc on est susceptible d'avoir une courbe d'apprentissage plus longue (ex: j'ai une variable au-dessus de la déclaration d'une classe, puis d'une fonction, est-ce que la variable est accessible dans la classe, et dans la fonction ? à quoi sert "::variable" dans un programme ? Différence entre un struct et une class ? Pourquoi peut-f-on faire de l'héritage privé ? etc... ).
Autre exemple, avec différentes manières de déclarer et initialiser en C++ :
C'est justement cette richesse qui peut se retourner contre les développeurs qui travaillent en équipe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 std::vector<std::string> v = { "xyzzy", "plugh", "abracadabra" }; std::vector<std::string> v({ "xyzzy", "plugh", "abracadabra" }); std::vector<std::string> v{ "xyzzy", "plugh", "abracadabra" }; // see "Uniform initialization" below
L'avenir nous le diras mais pour avoir ete dans des cas de fortes differences de connaissances du C++ dans l'equipe, tant qu'il y q quelqu'un pour transferere les connaissances c'est vraiment un probleme tres mineur.
Ou alors les devs veulent pas apprendre auquel cas c'est un autre probleme bien plus grave...
(note anexe) Deux choses bien differentes. "haut niveau" ca sous entends "loin de la machine" et C++ est aussi bien haut que bas niveau (et va meme parfois plus haut que la plupart des language courants).
Après il faut voir le bon coté des langages de "haut niveau", les langages compilés en bytecode je veux dire, si on met de coté le garbage collector.
« L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
Spinoza — Éthique III, Proposition VII
je parlais de la standardisation chose que j'ai pu voir sur le portail de développer mais après sur l'utilisation du langage en lui même
Et pour ouvrir un fichier?
Et pour afficher du texte?
Et pour exécuter une commande système?
Les fonctions ne sont pas compilées, pour toi? Il faut m'expliquer comment tu fais alors...
Le standard définit les résultats des appels à des fonctions sans préciser comment ce résultat doit être obtenu, et c'est ce manque qui permet d'avoir quelque chose de portable.
Il est de notoriété commune que le standard actuel, surnommé C++11, à mis près de 10 ans à naître.
C++ évolue réellement moins vite que les autres langages, et je peux dire, sans avoir goûté à une pomme, qu'elle à poussé moins vite qu'une poire, pour reprendre ton analogie.
Par contre, dire que la vitesse d'évolution des standards d'un langage type Java/C# est un avantage comparé à C++, je suis à la fois d'accord et pas d'accord.
Java, par exemple, à un standard de base (le premier je parle) assez primitif, qui n'avait même pas les template. D'un autre côté, les langages de VM ne boxent pas dans la même catégorie: là où C++ vise à être général et utilisable pour n'importe quelle application, Java et C# me semblent viser principalement les applications à faible contraintes de performance machine mais à grosses contraintes de rendement en terme d'interfaces Homme Machine.
Hors, pour l'électronique, je pense que les évolutions rapides sont moins utiles que les évolutions stables, contrairement au domaine des IHM ou il faut un peu "suivre la mode". D'où la dualité dans mon propos précédent.
Par rapport à HashSet, brièvement, parce que ce n'est pas le sujet ici (quoique), pour l'utiliser avec une classe utilisateur, il faut manifestement(cf http://badger.developpez.com/tutoriels/dotnet/hashset/ ) écrire une seconde classe implémentant IEqualityComparer. Ce n'est pas exactement très pratique, et le comportement est assez étrange, en tout cas, sur ce que j'ai tenté de faire, j'ai du commettre un impair puisque le résultat n'est pas celui attendu.
En C++, avec std::set, il suffit d'implémenter l'opérateur inférieur bool Foo::operator<(Foo const& other) et tout est géré tout seul.
Difficile de comparer C++ à d'autres langages typiquement utilisés, vu que (à ma connaissance) seul C++, C et C# sont standardisés - et C# est standardisé par ECMA, c'est donc plus un approval du document fournit par MS qu'un véritable standard internationnal. Parmi les langages de programmation usuels, bien peu font l'objet d'un standard ISO (et ces choses là, ça n'évolue pas nécessairement très vite).
T'inquiète ; std::tr2::filesystem arrive ! (et oui, c'est indépendant de la plateforme ; ça met à contribution l'opérateur /, et les path sont notés avec / ; reste le problème des volumes, mais il doit existe une alternative).Envoyé par r0d
Je ne suis pas trop d'accord. Je suis personnellement pour que les IHM soient intégrés au standard - le modèle de développement d'une IHM ne varie pas d'une plateforme à l'autre (on est toujours sur un système fenêtre + contrôles). L'apparence varie, mais le principe de base reste suffisamment semblable pour qu'il existe déjà des solutions multi plateformes (Qt, GTK+, wxwidget...). S'il est possible de concevoir ces librairies, alors il est possible de concevoir une librairie standard s'appuyant sur des principes similaires.Envoyé par Freem
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.
Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.
Je déteste dire ça, mais aujourd'hui, tout développement d'application doit (malheureusement) se faire vite.
Et, pour simplifier au maximum, C++ ne donne pas la possibilité de faire vite.
Encore une fois, j'insiste, aujourd'hui, malheureusement ça n'est pas la qualité et la pérennité, mais la vitesse de développement.
Aujourd'hui la mode est au code jetable : on fait vite, à l'arrache, ça prend deux jours, ça marche. Dans un mois il faut faire une évolution ? On jette l'ancien code, on fait vite, à l'arrache, ça prend deux jours, ça marche.
Le C++ n'a pas ce rapport "vitesse / ça marche" qu'ont tous les autres langages (cf tous les posts précedents) : C#, Php et même Delphi.
Je ne critique pas le C++ en tant que tel, je dis juste que ce discours n'est pas en rapport avec le marché mondial actuel. Et encore une fois : "malheureusement".
.I..
Pour être honnête, je suis assez mitigé, mon avis n'est pas aussi tranché que ce que j'ai écrit précédemment.
D'un côté, effectivement, le modèle, l'architecture du code, est toujours la même, mais d'un autre côté, les recommandations par rapport à l'interface changent selon l'OS.
Le souci que rencontre wxWidgets est d'ailleurs lié à ça: jongler avec les différences d'une API à l'autre est loin d'être aisé, surtout en respectant l'esprit derrière (histoire que ça s'intègre proprement).
Il me semble moi que définir les préconditions et les postconditions, ça permet justement de faire en sorte que toute implémentation de la norme respecte ça - plutôt qu'une implémentation interne qui est, par définition, liée à la machine sur laquelle le code s'exécute. Par exemple, si je dis que std::thread() DOIT utiliser la fonction Win32 CreateThreadEx(), comment est-ce que je peux proposer std::thread sur Linux ?
Savoir comment les choses sont fait n'a pas d'intérêt.
C'est sûr, on ne peux pas le nier
Java ? Un standard ? Ah bon ?
Non. Il y a un comité, piloté par Oracle, qui dit comment le langage doit évoluer, et qui fait la surprise à tout le monde après en ajoutant des choses qui n'étaient pas prévues (mais qui facilitent les développements de leurs équipes ; ok, troll inside). Ce n'est pas ça, un standard. Un standard, c'est validé par une équipe internationale d'experts indépendants et non lié au working group qui a écrit le standard (ce qui permet de repérer les erreurs, les incohérences, les limites, etc). Puis il est validé, et voté par un organisme indépendant international (par exemple, ISO). Rien que ces étapes, ça demande environ 2 ans.
Java n'a jamais été standardisé, et ne le sera jamais, parce que ça obligerait Oracle à permettre des implémentations concurrente sans limite d'usage (ce qui n'est pas le cas aujourd'hui, cf. le procès retentissant contre Google), et ça limiterait sa "capacité à innover" (lire : à faire des procès aux autres).
Et Java n'a toujours pas les templates - il y a des generic, dont la puissance est infime comparée aux template du C++.
C# est effectivement un standard (ECMA-334), mais (pour parler poliment) c'est un standard du pauvre. L'organisme ECMA est certes reconnu par ISO (et de fait, les standard ECMA peuvent devenir, sur demande, des standard ISO, et ce phénomène s'est reproduit deux fois pour C#), mais il n'en reste pas moins que le process de standardisation ECMA est nettement plus simple que le process ISO. En gros, vous venez avec votre proposition de norme, vous indiquez clairement que c'est royalty free (ou quelque chose de proche ; FRAND par exemple), et hop, c'est dans la poche. C'est pour ça que les entreprises passent par ECMA pour faire standardiser leurs solutions. Une fois la solution bien établie, vous pouvez demander une standardisation ISO, qui n'est rien de plus qu'un vote (le standard ECMA et le standard ISO étant alors identique).
Le problème qui se pointe, c'est que seules les versions 1.0 et 2.0 sont standardisées - pas les versions 3.0 et 4.0, ni la nouvelle version 5.0. La dernière version ne fait même pas l'objet d'un document de design par MS, si ma mémoire est bonne (je peux me tromper).
Du point de vue du process utilisé pour le développement, comparer Java, C# et C++ n'est pas possible. Maintenant, si tu donnes la responsabilité des évolutions de C++ à une seule entreprise (disons Google ; Apple a ObjectiveC, Oracle a Java, MS a C#), alors le langage va évoluer plus vite (mais les évolutions seront peut-être moins pertinente).
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.
Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.
oui, c++ j'aime bien
mais je trouve cet avis bizarre de la part des repreneurs de borland d'un système de développement principalement pascal (delphi) dont le c++ est depuis longtemps le parent pauvre.
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.
Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.
C'est moi où on vente le contraire de ce qu'on nous dit depuis des années : Java est connu pour son côté multi-plateformes grâce à sa machine virtuelle, là où C et C++ sont bons pour exploiter les ressources natives de la machine du fait de leur langage bas niveau... Et maintenant on nous dit le contraire ?Pour le développement natif, en fonction des écosystèmes, les développeurs s’orientent le plus souvent vers objective-c ou Java.
Pourtant, ceux qui cherchent à créer des applications cross-platform tout en bénéficiant d’une approche efficace pour la réduction des couts peuvent trouver leur bonheur au sein du C++.
Perso je ne suis plus.
Site perso
Recommandations pour débattre sainement
Références récurrentes :
The Cambridge Handbook of Expertise and Expert Performance
L’Art d’avoir toujours raison (ou ce qu'il faut éviter pour pas que je vous saute à la gorge {^_^})
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager