Il ne faut pas oublier Noop ou java like
On optimise pas du code comme ca parce que l'on trouve qu'il n'est pas assez rapide. C'est vant qu'il faut se poser la question de si il faut l'optimiser ou non. AMILIN a lu mon code optimisé en asm, et l'a trouvé tout a fait lisible. Je ne programme rarement que pour moi.
Un truc dont on n'a pas parlé et qui rejoins un peu l'avis de SebA, c que les compilateurs sont aussi des optimiseurs, et effectuent cette tâche de mieux en mieux.
Par exemple, tout le monde sait qu'il ne fo pas écrire :
mais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for (i=0; i<10000; i++) { if (a > 0) { /* code qui ne modifie pas a */ } else { /* code qui ne modifie pas a */ } }
Or, cette optimisation, qui rend le code un peu moins lisible, n'est pas utile pour peu que vous utilisiez un bon compilateur optimiseur, et que vous sachiez régler les options d'optimisation, puisque le compilateur n'hésitera pas à faire lui-même cette optimisation...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 if (a > 0) { for (i=0; i<10000; i++) { /* code qui ne modifie pas a */ } } else { for (i=0; i<10000; i++) { /* code qui ne modifie pas a */ } }
ca c'est maintenant un sujet d'optimisation. Pour continuer cette discution, lire le post-it du forum C++ à ce sujet. Il y en 5 pages pleine. Il y est notement dit que les compilateurs ne font pas tout. Et l'exemple si dessous pourra être optimisé si sa structure est suffisement simple. Moi je préfère ne pas compter dessus, mais si cela n'en vaut pas la peine, autant laisser la plus lisible effectivement.
Je ne suis pas capable malheureusement de donner un avis tres technique sur la question, mais dans mon cas je entre java et c++, c'est le c++!! c'est tellement plus rapide!
En tout dans mon domaine (systeme), c'est c et c++ regneront encore longtemps! (et sous unix c'est encore mieux)
le c# jamais essaye!
de plus, si on considère le schéma donné par Epictète
http://www.usethesource.com/cgi-bin/index.pl?section=Software
C et C++ représentent des milliards de lignes de code de matière grise,
réutilisables pour beaucoup
qui va renoncer à cet investissement intellectuel ?
Bon, y'a un truc qu'il faut clarifier : chaque langage a son domaine d'application ! Ce n'est pas parce que le C++ est super rapide, qu'il convient à toute application. Le PHP et Perl sont largement meilleur pour tout ce qui est gestion des chaînes de caractères ! (en passant, le C++ supporte très peu de fonction de gestions des chaînes de caractères dans la librairie de base, même pas de trim, hu hu hu!) J'ai par exemple écrit un parser d'email (fichier Eudora/Mozilla) en une soirée en PHP grâce aux expressions régulières. Faire la même chose en C++ m'aurait pris une semaine. Et puis en PHP (et Java ?), on ne gère plus la mémoire : c'est le compilateur/interpréteur qui s'occupe des pointeurs et tous ces trucs super chiant qui font des SIGSEGV (arg!).
C/C++ c'est bien beau, mais c'est hyper lourd ! (je suis qd même un très grand fan de C++ ;-)
@+ Haypo
Les chaînes de caractères n'ont jamais été implémentées en c++ (pur, sans librairies) pour la simple raison que ça n'est qu'une abstraction:je préfère savoir ce que cache le code que je tape plutot que d'utiliser un type de données 'string' opaque (les classes C++ montrent encore le code de gestion qu'il y a derrière) je ne vois pas en quoi php serait plus rapide pour les chaînes que le c++, quoique peut etre plus 'pratique' au niveau de ce que le programmeur tape, une différence qui s'atténue (quand meme !) quand on commence à utiliser la librairie. Coté gestion de la mémoire je n'aime pas laisser les autres faire le boulot à ma place... et je n'ai jamais eu d'access violation (version windows des seg fault) avec mes pointeurs, il suffit de faire correspondre les new et les delete, un code 'bien écrit' aide le programmeur à éviter ces problèmes.
Haypo, encore une fois, le C++, ne se limite pas aux fonctions standard... Quand on parle de code réutilisable, de nombre de projet C/C++, c'est pour ca. Ton projet de parse d'email, je pourrais le faire en autant de temps en utilisant la CLX. (Et ca n'est pas un manque de modestie, je ne connais pas parfaitement ces instances, je ne la manipule que rarement, et beaucoup l'utilisent infiniment mieux que moi, seulement, c'est très simple.) Et la CLX n'est pas la seule API a fournir ces fonctions.
Je ne crois pas que le domaine d'application fasse défaut au C++. Imaginez que les serveurs web interprettent des scripts en C++, et le langage reprendra encore de l'ampleur (je ne parle pas des cgi, ils ont l'air en declin, mais ce n'est pas mon domaine non plus, je ne sais pas trop)
Si c'est vraiment le cas, je vois 3 possibilités :Envoyé par bleyblue
- soit tu as un microprocesseur à la place du cerveau
- soit tu n'as jamais eu à faire à un projet VRAIMENT gros
- soit tu as effectivement des fuites de mémoire dans tes progs, mais elle ne se sont pas encore manifestées... croise les doigts !
eh non, j'ai déjà fait de gros projets... vous croyez vraiment qu'une fuite de mémoire ça arrive tous les jours ? ça arrive uniquement à ceux qui ne font pas attention (bon je vais me taire j'avoue que ça m'arrive mais je finis généralement par trouver la faute) !
Ce que je voulais dire, c'est que dire qu'une erreur ne survient jamais dans ses prog est aussi débile que d'affirmer qu'on aura jamais d'accident de voiture (ou autre). Tu as beau faire toujours super gaffe, tu n'en est pas moins humain...
ah oui j'aurait peut etre pas du dire 'jamais'. en tout cas j'ai rarement des erreurs de ce type, car il n'est pas compliqué de les éviter. Je ne dis pas que ça n'est pas possible...
Quand on utilise des langages proches de la machine comme C ou C++, on est libre de se tirer une balle dans le pied autant que l'on est libre de faire tout ce que l'on veut.
Quel débat ! Moi je dirais simplement que chaque langage a un domaine d'application dans lequel il excelle (sinon il n'est pas utilisé et personne n'en cause et donc il n'existe plus).
Je dirais que le C++ a un avenir encore certain, mais que Java n'est pas en reste. Comme l'a dit quelqu'un : les téléphones portables sont programmables en java maintenant. Il y a même John Romero (celui qui a fait le célèbre Daikatana qui a été présenté 3 fois de suite au salon de l'E3) qui se consacre maintenant à ça : les jeux en java sour téléphone portable.
Mais sinon pour en revenir à l'avenir du C++ il faut voir plus large : l'avenir de l'informatique. Moi je pense que ce qui va se développer c'est la reconnaissance de la parole (avec disparition du clavier), d'autres périphériques de pointage que la souris (il y a des stylos à retour de force qui permettent d'évoluer dans un univers à 3 dimensions qui sont en cours d'élaboration). La réalité virtuelle se développe aussi : bientot les écrans seront remplacés par soit des casques soit par des projecteurs holographiques en 3D. Mais bon pour tout ça c'est pas pour les années qui viennent. Mais faut voir loin... Et est-ce que tout ça sera programmable en C++ où ce sera tellement laborieux qu'il faudra un langage de plus haut niveau.
la distinctinction entre langage de haut et de bas niveau diverge énormément selon les personnes.
Communément, on parle de niveau d'abstraction.
Or pour ce qui est des nouvelles technologies, il suffit de bibliothèques supplémentaires, c'est tout. Je ne pense pas que la hauteur du language évolue en fonction des bibliothèques. pour moi la hauteur d'un langage dépend donc du niveau d'abstraction le plus bas, pas le plus haut...
Le C++ va certainement resté incontournable pendant encore longtemps, ne serais-ce que pour maintenir le nombre halluciant de projets développés en C/C++.
L'avenir du C++ dépend simplement de son évolution propre, de la bonne volonté des boites créant les compilos et de l'évolution des librairies non standart (voir de l'émergence de l'une d'entre elle comme standart).
Prenons un exemple pour chaque catégories :
-> la norme C++: ça fait plus de 5 ans qu'elle n'as pas changé !
pourtant il y a beaucoup de bonnes idées dans les langages concurent de même nature (je pense entre autre au Pascal (Delphi) ). ils serait peut être temps que les mecs de l'ISO travaillent un peu plus dessus....
-> compilos : le mot réservé 'export' n'est toujours pas implémenté dans tous les compilos que je connaisse.
-> les libs: ben si aucune librairie n'éxistait, je me vois mal recommencé à utilisé l'API windows tel quel.
Les librairies peuvent compensées les lacunes du C++ face par exemple au java. Si des dlls standarts aussi complètes que ce que fait java existaient , un programme C++ ne serait pas plus gros. c'est d'ailleurs ce qu'essaye (entre autre) de prouver m$ avec le C#
Mais il y a de quoi resté confiant, le C a très bien passé le cap de l'objet, mais il ne faut pas que ce language reste statique pour perdurer.
[/list][/quote][/code]
Tu te vois prgrammer des graphismes en 3D entièrement en assembleur ? Heureusement qu'il y a des langages de plus haut niveau. Maintenant à partir de là c'est ce que je voulais dire quand je disais qu'il faudra un langage de plus haut niveau : on ne sait pas à quoi ressemblera l'ordinateur de demain. Et peut être qu'aucun langage actuel n'est adapté à la programmation des futures évolutions. Je veux dire que récemment il n'y a pas eu de grandes innovations. Toutes les nouveautés étaient des améliorations.Le concept de l'ordinateur n'a pas beaucoup évolué.Envoyé par Fëanor13
Imagines si par exemple on n'utilse plus un système binaire mais ternaire ou quaternaire. Tout est à refaire : des circuits aux OS en apssant par les compilateurs etc. Il me semble que les russes avaient déjà tenté de faire des machines en ternaire.
Imagines encore pire : si on se base sur une logique sui laisse place à une subjectivité. Une machine non déterministe par exemple. Tout le concept de programmation est à revoir ! Et à mon sens c'est une notion qu'il faudra implanter aux machines si on veut espérer qu'elles puissent s'auto-programmer ou auto-évoluer.
Le C++ n'a plus de place dans un contexte comme ceci. Mais c'est pour quand ? mystère.
Sinon pour ta définition de langage haut/bas niveau je suis d'accord. Bas niveau c'est proche de la machine et haut niveau c'est plus abstrait.
ben pour la 3D, ça me dérange pas de codé en C++ avec la lib OpenGL et Glut. les libs compensent le bas niveau.
Pour ce qui est du bas et du haut niveau, tu n'as pas tout a fait compris mon explication. je pense que :
Java est considéré comme de plus haut niveau que le C++ car le niveau d'abstraction minimal est plus élevé que le niveau d'abstraction minimal du C++. Pourtant pourtant l'abstraction des MFC ou de QT est comparable à celui du java.
pource qui est des ordinateurs ternaires ou quaternaires, je pense que cela ne changerai rien au languages, mais tous les compilos seraient à refaire et tous les progs à recompiler.
Il s'agit plutot de comcept de prog, et c'est vrai que l'on a pas inventé grand chose depuis l'objet et le générique (templates).
pourtant même des conceptes éxistant n'existent pas en C++, comme par exemple les ensembles et les intevals de Pascal (on doit les faire à la main), etc...
si les outils évolus (je pense à la reconnaissance vocal au lieu du clavier), cela ne change pas le fait que des libs complèteront ce qui existe déjà. dans une appli graphique type CLX ou MFC, on ne gère plus vraiment les entrées clavier, c'est le système qui s'en occupe, ou alors des libs nous font passer outre ces détails...
Si les conceptes de prog évolunt (logique floue, etc...) le C++ aussi peut évolué comme il l'a déjà fait en passat du C au C with class, puis au C++
Pour le haut/bas niveau c'est bien ce que j'avais compris.
Sinon en fait pour le reste tu ne vois pas le fond du problème. Pour ce qui est des ordinateurs ternaires ou quaternaires : tous les circuits logiques sont différents : les ALU, FPU, mémoires, etc. L'assembleur ne sera pas du tout pareil. Beaucoup d'opérations se feront autrement. Notemment parce que les informations seront codées de façon radicalement différente. Et quand je dis ça c'est pas juste passer de mots mémoire de 32 à 64 bits par exemple. Imagines carrément que l'information soit compressée en hard. sur des bits prenant 4 valeurs c'est tout à fait possible d'imaginer des nouveaux concepts de compression en temps réel.
Notre vision de la programmation repose sur des notions comme les expression, les variables, les sauts et donnent des choses un peu plus évolués dans les langages de plus haut niveau comme les boucles, etc. Mais si ces notions étaient remises en question ? Si la machine ne se programmait plus en entier mais serait "éduquée" ? Par exemple on ne lui dirait plus comment faire une chose mais ce qu'elle doit faire. On ne contrôlerait plus la manière dont elle la fait. Toutes les subtilités que l'on utilise au quotidien serait inutiles. Tu vois ce que je veux dire ?
Et pour les périphériques à reconnaissance vocale je ne pensais pas aux bricoles qu'on a aujourd'hui. Je pensais à un périphérique qui analy en même temps qu'il reçoit. Pa exemple quand je te parle tu entends des mots. si plusieures personnes parlent tu distingue les différentes voix. Hors ceci est très complexe par un ordinateur selon la manière dont on voit l'informatique en ce moment. Je ne crois pas qu'avec les notions algorithmiques et matérielles que l'on a en ce moment on puisse traiter efficacement ces choses.
Imaginez que la moindre petite bestiole est capable de raisonnement. Elle peut réagir en fonction de ce que ses sens lui donnent comme information. La petite bestiolle elle a pas un gros P4 dans la tête et pourtant elle distingue en direct les "voix" et les "visages", "formes" etc. Je ne suis pas sur que l'on se dirige dans la bonne direction en continuant d'utiliser un C++ en rajoutant des librairies ad vitam eternam. Il y a plus simple, c'est obligé !
En quoi ça va supprimer le boucles, les if, les else, les exceptions et les objets ???????Envoyé par Metal Tom
T'es tu déjà intéressé au réseaux neuronaux ? La pluspart sont codés en C++Envoyé par Metal Tom
Voui mais dans un monde comme ça il n'y aurait plus de programmeur mais que des utilisateurs. On lui dit quoi faire, comme pour un chien. Ya plus de programmateurs de chiens à ce que je sache...Envoyé par Metal Tom
Capteur plus processeur préprogrammé. Où est le neuf ?Envoyé par Metal Tom
La reconnaissance vocale y arrive de plus en plus. laisse lui le temps. il y a cinquante ans, le informatitiens avaient du mal à faire faire une division à leur machine.Envoyé par Metal Tom
Tu surestime énormément ce qu'est capable de faire l'homme. la puissance de calcul d'un ordinateur atteint à peine actuellement celle d'une mouche. Il s'agit de machins mécaniques réagissant à des courants éléctriques précis à des moments précis, alors que le moindre nerf (sur quelques milliards) est capable de réagir sans faille à une intansité électrique de n'importe quelle intensité, de n'importe quelle fréquence et durée et à (presque) n'importe quel temps. Un P4 est une lamentable grossièreté à coté de ce qu'est un système nerveux quel qu'il soit.Envoyé par Metal Tom
C'est beau les idéaux... mais ici on parle d'argumentation et de techniques..Envoyé par Metal Tom
Désolé si j'ai été un peu sec, mais ça fait trois posts que je me répète.
Pour ce qui est d'autres types de langages, adaptés à la logique floue par exemple, ils existent mais il ne s'agit pas forcément de langage de programmation. De même notre langage à nous, humains si suppérieurs [ironie], est faite pour la communication et non pas la description d'algorythme. Il ne s'agit même plus de niveau d'abstraction ou de concept de programmation différents, mais de langue de NATURE différente, c'est pour ça que je ne considère pas ce que disent les militaire comme étant de ma langue...
Partager