Python ou C++ ?

La question est dans le titre.

a marqué ce sujet comme résolu.

Les __ ne rendent pas le membre privé, ils renomment juste le champ en le préfixant du nom de la classe à l'extérieur. L'attribue reste parfaitement accessible.

Il n'y a pas vraiment d'interface en Python, le ducktyping + conventions permettant de s'en passer. Cependant depuis certaines versions ont à des classes abstraites qui peuvent donc tenir ce rôle. Mais c'est implémenté avec des métaclasses et decorateurs donc sans toucher au langage.

Enfin non il n'y a pas de multiple dispach en Python. En réalité il y a un décorateur de dispo pour faire du simple dispach (sur un seul argument donc) dispo dans la lib standard. En soit le multiple dispach ne serait pas dur à implémenté. De part sa nature dynamique, pas besoin de modifier le langage. Si il n'est pas dispo c'est que les dev ce sont confronté à des problèmes d'ambiguïté et de complexité forte de résolution lorsque ça a été envisagé ce qui a amené à la version simple actuellement disponible.

Mais encore une fois de par sa nature il est rare d'en avoir besoin. C'est dynamique, on peut tester le type ou regarder le nombre d'arguments nommés ou positionnelles facilement. Le fait que le type ne soit pas donné dans la signature, le duck typing et les différents types d'arguments rend le besoin beaucoup moins présent.

Édit: @lmghs oui je sais que GCC est passé au c++ mais c'est pas tout le projet GNU et c'est pour ça que je dis "en majorité".

+0 -0

Vous êtes repartis dans le débat des avantages/inconvénients des langages là. :p

Pour répondre à l'OP : C++ est bon, Python est bon. Ces deux langages sont très différents et très complets dans leurs domaines respectifs. Il faudrait définir vers quoi tu t'orientes afin de pouvoir être guidé. Si tu ne sais pas, l'un comme l'autre feront l'affaire, ils sont bien documentés, ont une communauté importante et des centaines de milliers de ressources sur le Net et dans des livres.

+2 -0

Vous êtes repartis dans le débat des avantages/inconvénients des langages là. :p

Boarf non on parle caractéristiques des langages, on ne porte pas de jugement de valeurs dessus. Dire que Java est OO ou pas ne dit pas si c'est bien ou non.

Personnellement je pense que faire de vrais projets est la seule et vrai façon de maîtriser un langage. On ne peut pas tout bien appréhender sans l'utiliser. Quelque soit le langage que l'OP choisira, il faudrait qu'il se concentre sur un projet pour pratiquer.

Sinon en 2015 on ne fait pas des jeux en C++ et rarement en Python (sauf de petits jeux en 2D).

Juste pour signaler que Helium Rain (et tous les jeux UE4) est à 99% en C++.

Ha oui pardon. Ils ont pas mit un langage plus haut niveau dans le moteur ?

edit: il en reste pas moins que je ne suis pas sûrs que ce soit à conseiller pour un débutant.

+0 -0

Je vais donner mon point de vue, qui est aussi partial que pragmatique. Pour moi il faudrait que tu apprennes les deux, donc la vraie question à se poser, c'est dans quel ordre.

Tu connais C et Java qui sont deux langages statiques. Il manque encore dans ta boîte à outils un rouleau de scotch, c'est-à-dire un langage dynamique qui te permette de prototyper très rapidement de gros programmes, de produire de petits scripts utilitaires en 2 minutes, et de coller ensemble sans te prendre la tête des morceaux de soft pour en faire des systèmes complexes.

Dans ces conditions, apprends Python en premier. Avec Python et C dans ta boîte à outils, et sachant que les deux sont faciles à mixer dans un même programme, il n'y aura virtuellement plus aucun soft pour lequel tu ne seras pas suffisamment équipé en termes de technologies : ta boîte à outils te permettra de toucher l'ensemble du spectre en termes de couches d'abstraction, et surtout tu pourras bosser efficacement (comme l'a dit Kje : démarrer un soft en Python, obtenir un résultat fonctionnel en un rien de temps, puis remplacer les parties les plus critiques en perfs par du C en cas de besoin).

À moyen/long terme, remplacer ta compétence en C par C++ ne pourra t'être que bénéfique. Tout comme C, il est facile de le faire interagir avec Python, il est compilé statiquement, et il est proche du silicium. Contrairement à C, il est complexe, et t'offrira de puissants mecanismes pour que même tes morceaux de code "compilés en natif" soient extensibles et facilement maintenables. Je préfère laisser plus expérimenté que moi sur la question pour te fournir la tetrachiée d'arguments qui t'expliqueront que C++ est un excellent investissement pour remplaxer C sur le long terme. Cela dit vu que tu connais déjà le C, je ne crois pas (mais là ce n'est que mon point de vue) qu'il soit dans ton intérêt de t'y mettre dans l'immédiat en le préférant à Python, du moins ce n'est pas ce qui enrichira le plus ton bagage technique.

+11 -0

PS : À propos de cette histoire de pointeurs. LE truc à savoir avec Python (du moins son interpréteur standard), c'est qu'en Python, à quelques exceptions très spécifiques près, toutes les variables sont des PyObject*, et tout ce qui porte un nom (modules, objets, fonctions, et même les classes) est un PyObject. Par extension, en Python, tu passes ton temps à manipuler des pointeurs (sans forcément le savoir), et tu peux foutre tout et n'importe quoi dans une variable.

Une fois que t'as compris ça, et qu'un PyObject n'est en fait qu'une grosse table de hachage, t'as tout compris aux entrailles de Python.

+3 -0

Sinon en 2015 on ne fait pas des jeux en C++ et rarement en Python (sauf de petits jeux en 2D). -Kje

Alors, c'est fait en quoi ?

ez613

J'avais entendu parlé que de nombreux jeux étaient fait en lua, je ne connais pas donc je modère mes propos.

the_new_sky

Lua est très facile à intégrer pour rajouter des possibilités de scripting à des programmes en C ou C++. C'est d'ailleurs son principal intérêt : c'est très léger et simple, donc l'interpréteur peut être lié statiquement dans d'autres programmes.

À partir de là, il me semble bien en effet que certains jeux s'en servent pour scripter des niveaux, tout comme certains autres softs se servent de Lua pour avoir un système de configuration léger et puissant.

Par contre il n'a aucune valeur en standalone (pas de lib standard, une POO aussi laborieuse et embryonnaire qu'en Perl, pas de gestion native de l'unicode…), donc c'est toujours une surcouche d'autre chose. Typiquement, les petits jeux faits avec Löve2D se voient imposer toute la structure du moteur de jeu (qui est en C), et le reste est scripté à l'arrache en Lua en se servant de variables globales spéciales définies par le framework.

+1 -0

J'avais entendu parlé que de nombreux jeux étaient fait en lua, je ne connais pas donc je modère mes propos.

the_new_sky

Beaucoup de jeu intègrent du Lua oui. Et ça peut aussi bien être Python, C++… C'est très varié. Mais aujourd'hui la référence ça reste C#/Javascript avec Unity.

Stranger

Javascript ne s'appelle pas plutôt Unityscript ?

On choisi un langage en fonction de l'application. Les langages Python et C++ peuvent avoir des domaines application en commun mais certains domaines sont exclusifs à l'un ou à l'autre. Les raisons principales qui vont justifier le choix de tel ou tel langage pour un domaine d'application sont :

  • Les performances nécessaires
  • Les outils fournis par le langage et sa communauté
  • Les paradigmes offerts par le langage
  • Le temps de dévelopement à disposition

Par exemple, pour réaliser un jeu vidéo, les outils disponibles (moteur physique, moteur graphique, etc.) est un critère important pour le choix d'un langage. Les performances peuvent être importantes si le projet implique d'afficher beaucoup de polygones à l'écran. Enfin, un langage offrant un paradigme facilitant l'abstraction des concepts peut aider à réaliser un projet de grande taille en peu de temps.

Parfois un critère peut largement primer sur les autres. C'est la raison pour laquelle le kernel Linux est presque entièrement écrit en C. Le langage C est le langage haut niveau le plus bas niveau (il a été conçu pour écrire des OS). Les développeurs du kernel maîtrisent donc totalement le comportement du programme fini malgré sa grande complexité, de par le côté primitif du langage. Le critère performances et maîtrise prime donc sur le paradigme.

Dans la même idée, c'est exactement parce le langage Lua n'amène aucune bibliothèque, et est donc super light à lier/contrôler, qu'on l'utilise pour le jeu vidéo (comme dit au dessus), là où des logiciels comme blender qui ont besoin de pas mal d'outils pour faire des choses facilement vont plutôt utiliser Python comme langage de script.

Après, s'il n'y a pas de C++ dans le noyau linux, c'est principalement pour deux raisons :

  • A très bas niveau, le C++ a besoin de bibliothèques supplémentaires (gestion des exceptions, …)
  • Linus Torvalds a dit qu'il tuerai (peut être pas exactement, mais c'est l'idée) toute personne qui ajouterait ne serait-ce qu'une ligne de C++ dans le noyau.

Le C de nos jours a aussi de très gros concurrents, comme Rust, pour tout ce qui est système.

Linus Torvalds a dit qu'il tuerai (peut être pas exactement, mais c'est l'idée) toute personne qui ajouterait ne serait-ce qu'une ligne de C++ dans le noyau.

Connaissant Linus, ça m'ettonerai pas que la phrase soit plus fleurie que ça encore.

Linus Torvalds a dit qu'il tuerai (peut être pas exactement, mais c'est l'idée) toute personne qui ajouterait ne serait-ce qu'une ligne de C++ dans le noyau.

Connaissant Linus, ça m'ettonerai pas que la phrase soit plus fleurie que ça encore.

Kje

Il avait d'ailleurs rédigé ce mail à propos du C++. Au moins, il a le mérite d'être franc.

une POO aussi laborieuse et embryonnaire qu'en Perl

nohar

C'est vrai que la faire de la POO avec Perl, ça devient rapidement un vrai chantier. Par contre, ce qui est positif, pour avoir utilisé Perl 6 dernièrement, c'est que l'on pourra enfin faire de la programmation orienté objet proprement avec la nouvelle version.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte