Citation:
Et pourtant, c'est tellement pratique... Non seulement pour le développeur, mais aussi pour celui qui télécharge ton code source et qui a à se taper d'installer toutes les dépendances externes, dans les bonnes versions. En général, si tu vas chercher un projet open-source écrit en Java, C#, Python, etc., tu peux le compiler et le faire s'exécuter de la façon la plus évidente possible, tout de suite. Par exemple, ouvrir la solution et faire "Build". Ou dans le cas de Python, ne rien faire du tout et simplement exécuter le programme. On ne peut pas en dire autant de la plupart des projets C++. Je crois avoir passé 5 bonnes heures avant de réussir à faire compiler un certain remake de Settlers 2, ou Battle for Wesnoth.
Je connais plusieurs personnes qui bossent dans des domaines très divers (jeux vidéos, embarqué critique, calcul numérique haute performance) et qui utilisent tous le C++. Tous ont des besoins différents avec des contraintes différentes, je vois mal comment le standard pourrait tous les combler sans que ca devienne un gros foutoir ou qu'ils soient obligés d'aller voir ailleurs pour récupérer un outils que le langage n'offrirait pas. Etant donné que les outils offerts par Java/C#/... sembler contenter tout le monde, est ce que ca ne veut pas dire qu'ils ne sont destinés qu'à un seul type (au sens large) de projet ? Je ne prendrais pas les paris car j'ai peur de la réponse.
De plus, le problème des dépendances est un problème liés aux outils. Sur ma debian, si je télécharge un paquet source d'un logiciel depuis les dépots, j'ai toutes les dépendances que je n'ai pas déjà (car oui, j'ai déjà pas mal de dépendances "classiques" déjà présentes) qui s'installent toute seule. Si je le télécharge depuis le net, les dépendances sont souvent listés et ca me prends 5 mins à installer.
Je n'y peut rien si tu utilises un système où il faut tout aller chercher par soi même sur le net.
Citation:
Il est plus rapide de ne pas avoir à gérer qqchose que d'avoir à le gérer. La question n'est pas "j'aime ou non", mais bien "est-ce que pour les besoins de mon programme, je peux me passer de gérer cet aspect, ou est-ce nécessaire de le gérer manuellement?". Or, dans un vaste éventail de situations, la réponse sera "un garbage collector ferait aussi bien sinon mieux que moi", et dans cette optique, quand bien même je "préfèrere" la gestion manuelle, je perds mon temps à l'implémenter. À noter qu'il est possible d'avoir un garbage collector en C++, mais c'est du travail à mettre en place.
Je sais pas comment tu codes mais je ne gère (presque) rien manuellement de la mémoire, des classes RAII-ssante offrant tout ce dont j'ai besoin. Je ne vois pas comment un GC pourrait m'offrir quelque chose puisque je ne fais rien de particulier pour gérer ma mémoire.
Citation:
Les includes existent pour supporter le modèle de compilation du C et non pour fournir des vues d'ensembles. De toute manière, si vous faites des templates, vous devez savoir que l'implémentation se retrouve nécessairement dans le .h, et on revient au "système de C#", avec le problème évident que tout ce code sera recompilé encore et encore.
Les headers sont certes là pour le modèle de compilation, il n'empèche qu'il offre une vue d'ensemble du projet. Et sinon, oui j'utilise les template mais principalement sous forme de template-métaprogramming qui au final n'amène pas du tout au même problème de lisibilité. Il est rare que je doive développer une classe "utilitaire" template.
Citation:
Si vous voulez un résumé de votre classe en C#, utilisez la vue "Object Browser" de Visual Studio, c'est bien mieux qu'un fichier d'en-tête.
On a les fichiers d'en tête pour ca plus tous les outils externes qui peuvent exister à coté.
Citation:
Mais dans les faits, la qualité et la fiabilité des outils C++ sont inférieurs, parce que C++ est trop complexe (particulièrement à cause du préprocesseur). Resharper n'a rien à envier à Visual AssistX.
Accordé, les outils de refactoring C++ sont moins puissants que ceux de Java ou C#. Mais à coté, il faut voir que le C++ offre bien plus de liberté que Java ou C# ou n'importe quoi d'autre
Citation:
L'IDE Sharpdevelop: environ 25MB de code source C#. Temps de compilation: 1 minute 25 secondes.
Le jeu Battle for Wesnoth: environ 6MB de code source C++. Temps de compilation: environ 18 minutes (j'ai arrondi vers le bas)
Donc, environ un quart de l'équivalent C# compile en 12 fois plus de temps (et je suis généreux). On parle donc d'un facteur
50 environ. Bien sûr, ce n'est pas un test très scientifique, mais cela correspond bien à mon expérience en général. Et c'est un fait reconnu avec une explication tout aussi connue. Voir par exemple
http://stackoverflow.com/questions/3...n-take-so-long
Tu as toi même donné la réponse. Une compilation C++ fait beaucoup plus de chose qu'une construction en Java/C#. Normal que ca prenne plus de temps. Faudrait comparer ce qui est comparable. Et joel marque un point avec les headers précompilés. Et clang/llvm devrait aussi réduire les temps de compilation.
Citation:
Pour ce qui est de l'ambiguïté tableau/pointeur, elle ne se pose pour ainsi dire jamais puisque je n'utilise à peu près jamais des tableaux C (il y a std::array maintenant)
Tous les exemples que tu as fournis sont bourrés de pointeurs dans les paramètres des fonctions, comment tu sais si ce sont des tableau ou des objets dans ce cas sans te référer aux commentaires ?
Citation:
Je ne comprends pas ce que tu veux dire pas "imbriquer des appels", en quoi cela se rapporte aux pointeurs?
Si foo prend un pointeur, ca oblige bar a renvoyer un pointeur. Pour éviter les fuites de mémoire, un pointeur intelligent c'est mieux et comme y'a pas de conversion automatique de boost::shared_ptr<T> vers T*, tu te retrouves à utiliser get().