Mouai, content de voir que le langage GO retombe comme un soufflé, et que ceux qui criaient à la révolution il y a quelques mois l'ont déjà oublié.
Mais ça recommencera avec le prochain truc que sortira Google...
Pour Java qui est devant, ça me parait logique, c'est le seul langage demandé par les entreprises entièrement gratuit et accessible sans emmerde sur toutes les plateformes (je suis sous mac par exemple, j'ai fais aucun choix pour prendre Java, c'était ça ou la VM sous Windows).
Euh, non, ce n'est absolument pas le seul…Pour Java qui est devant, ça me parait logique, c'est le seul langage demandé par les entreprises entièrement gratuit et accessible sans emmerde sur toutes les plateformes (je suis sous mac par exemple, j'ai fais aucun choix pour prendre Java, c'était ça ou la VM sous Windows).
Puis sur Apple de souvenir (je c'est pas si la politique d'Apple a changé avec ça dernière version) mais malheureusement java sur mac c'est bien tant que l'appli ne nécessite pas la dernière version, dans le cas contraire c'était une horreur pratiquement impossible de mettre un java up-to-date
On remarquera C et C++ sont super stables depuis au moins 15 ans... Par contre pour ce qui est de Java, avec les derniers troubles (rachat de Sun, départ du "père" de Java) et à voir la tendance de la courbe, j'ai l'impression qu'il va perdre son statut de leader.
Sur mac java s'update tout seul il me semble si on enclenche les updates automatiques.Puis sur apple de souvenir (je c'est pas si la politique d'apple a changé avec ça dernière version) mais malheureusement java sur mac c'est bien tant que l'appli ne nécessite pas la dernière version, dans le cas contraire c'était une horreur pratiquement impossible de mettre un java up-to-date
Sinon rien n'empêche d'installer plusieurs jre sur son mac comme sur pc , c'est la même chose.
la différence est que quand tu achètes un mac , tu as java ( et php et perl et ruby et sh , bash et apache et plein d'autres trucs ... ) d'office sur ton mac.
Par contre il faut installer gcc via xcode pour compiler du C/C++
Cette étude est un peu biaisée car pour moi, le C et le C++ sont un seul et même langage. Je programme dans les deux aussi bien, parfois indistinctement. Dans cette perspective unifiée, le C/C++ sont encore nettement plus populaires que le Java. Le C en particuliers est encore au top dans tous ce qui touche la programmation de bas-niveau, hormis les quelques exceptions qui obligent à utiliser l'assembleur.
Pour moi la raison de la longévité du C/C++ est simple: la base de UNIX/C est solide comme le roc. Un investissement dans UNIX/C n'est jamais vraiment perdu. Apple l'a reconnu en adoptant un dérivé UNIX comme base pour son Mac OS X. Pour illustrer cet avantage, j'ai chez moi un livre sur la programmation avancée dans UNIX (commande, ksh et C) qui a été écrit au début des années '80. Ce livre, je le conseillerais sans gêne à n'importe qui qui voudrait acquérir les bases UNIX/C ou les rafraîchir. Quel autre système peut en dire autant? Peut-être les bons vieux MVS.
Aucun autre logiciel n'a montré une plus grande durabilité que UNIX/C. On tentera encore de créer d'autres bases pour les surpasser, comme la JVM/Java. Mais le passé est garant de l'avenir: je crois que le C/C++ survivra au Java, et pourrait même l'enterrer, sauf peut-être dans les grandes institutions bancaires dans lesquelles il finira confiné aux côtés du COBOL. Souvenons-nous de feu ADA, Pascal, Smalltalk, etc.
Je travaille plus en Java par les temps qui courent. Cette plate-forme a ses avantages et j'apprécie le fait qu'il soit merveilleusement bien outillé. J'avoue ausi que le Java est actuellement plus dynamique que le C/C++, par contre il n'est pas mature et est une plate-forme très mouvante (ex: JDK1.4 à JDK5, J2EE1.4 à J2EE5). Je crois aussi qu'on se fatiguera de la complexité inutile et coûteuse qu'implique l'ajout d'une couche supplémentaire et des cycles de CPU virtuels qui viennent avec. C'est sans parler des bogues potentiels. Une fois le programme installé et en fonction, la JVM devient du «do-nothing machine», puisque qu'elle n'ajoute rien de plus. Ce do-nothing se paye en machines très performantes. Certains parleront des avantages au niveau de la sécurité, mais ceux-ci sont de plus en plus remis en question.
À mon avis, le réel avantage du Java tient plus à son garbage collector, qui permet de réduire les risques de fuites de mémoires. Il pardonne plus facilement le novice. Mais essentiellement, c'est la qualification du task force produit par les universités modernes qui impose le Java. On veut plus de programmeurs mis plus rapidement à la tâche.
Il reste que l'informatique est un monde complexe. On ne peut pas vraiment en voiler la complexité avec des concepts magiques comme le GC. Concrètement, en Java, on fini par passer beaucoup de temps à apprendre les particularités du language, qui lui sont spécifiques et moins spécifiques à la machine physique comme pour le C/C++ et l'assembleur. On n'apprend pas par ricochet à connaître la machine qu'on exploite. On doit plutôt apprendre à connaître le fonctionnement de la JVM, qui n'est pas tangible. Mais règle générale, en Java, plus personne ne veut savoir ce qu'est vraiment un Code Segment, un Data Segment, un Heap et un Stack. Pourtant, c'est ce savoir qui permet de comprendre réellement la différence entre une variable statique et dynamique, de comprendre ce qu'est le GC, et pourquoi il ne nettoiera pas une variable qui assigne directement une chaîne, comme par exemple:
D'autres difficultés se posent avec le Java. Par exemple, celui-ci ne supporte pas les typedef et les enum, on doit créer une classe avec des constantes. Aussi, comme tout est un pointeur par défaut ou presque, il a été long pour moi de comprendre la différence entre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part String s = "Cette chaîne ne sera jamais nettoyée par le GC même si on exécute s = null";
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part int i = 1;
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part Integer i = 1;
Même que je ne suis pas sûr de ce que fait le deuxième exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Integer i = new Integer(1);
Il faut admettre que le C/C++ s'est quand même assis sur ses lauriers. On a bien fait quelques améliorations, comme le C++, le STL (merci à feu SGI), les auto_ptr, etc. On peut se positionner avantageusement dans l'enjeu de la portabilité en utilisant des logiciels comme wxWidgets ou Fox Toolkits. Mais pendant ce temps très long, Java est arrivée à la course avec des tonnes de librairies très utiles, de la sérialisaton built-in, il s'est aligné sur les concepts modernes d'architecture logicielle et s'est donné des environnements comme Eclipse et NetBeans.
Parmi les améliorations souhaitables, il y a le c++ox, qui pourrait bien donner un nouvel élan au C/C++. La sérialisation, entre autre, est un concept très utile. Mais surtout, j'espère vraiment qu'on arrivera à harmoniser la syntaxe C++, non pas avec le modèle Java, mais avec ce qui se rapprocherai du C original. Sinon, je me demande si je ne vais pas revenir au C tout simplement.
Je deviens alergiques aux règles syntaxiques modernes, en particulier celles du Java qui nous font utiliser des majuscules pour désigner les entités communes et des minuscules pour les entités propres. Et puis cette manie de détruire les clients! On ne pourrait pas simplement se contenter de détruire leur fiche dans le système! Non, il faut absolument créer le patient quand il arrive et le détruire quand il change de clinique
On est rendu avec des messages qui s'envoient eux-même en se passant par la passerelle et des objets Action à qui on signale de s'exécuter. C'est tout juste si on en vient pas à ce que l'expéditeur se fasse envoyer par son colis pour le mener à destination! Il me semble parfois que je me retrouve plus facilement dans la syntaxe logique et cryptique du C que dans la structure plus imagée typique au Java. Après tout, la programmation c'est des maths, pas un récit d'aventure!
J'ai du mal a croire qu'autant de monde fasse encore du C au lieu du C++, c'est sûrement lié aux étudiants en informatique et au programmateurs de microcontrolleurs...
Personnellement, je trouve C plutôt rudimentaire et même C++ "nature" me semble un peu léger... M'enfin tout dépend l'utilité qu'on en a...
Et Delphi PHP alors ?
Oui, ça c'est vrai… hélas (/me n'est pas très fan de Java).
A la seule et unique condition qu'Apple décide de mettre à disposition la chose. Alors que sur les autres systèmes tu vas chercher ta mise à jour chez Sun^WOracle le jour de sa sortie, sur mac, tu attends Apple. Après, oui, c'est bon. Et c'est automatique (quand tu n'es pas derrière le firewall d'un réseau qui ne reconnait pas correctement les mac -- si, si, c'est possible).
Et des accolades et des pipes cachés derrière des combos à trois touches (ne parlons même pas du delete). Ce n'est pas fait pour développer ces trucs. Donc normal qu'il n'y ait pas gcc. Java est requis pour pouvoir disposer d'un interpréteur au même titre que perl ou ruby. Quitte à faire leur propre paquetage (souvenez-vous, les binaires de Java ne sont pas distribués par Sun^>Oracle, mais par Apple), autant installer le jdk avec j'imagine.la différence est que quand tu achètes un mac , tu as java ( et php et perl et ruby et sh , bash et apache et plein d'autres trucs ... ) d'office sur ton mac.
Par contre il faut installer gcc via xcode pour compiler du C/C++
Non, attends, nous sommes en train de réagir aux trolls de tiobe (le trucs qui mesure des requêtes faites à des moteurs de recherche et nullement le taux d'utilisation ou de satisfaction des langages), si en plus il fallait réagir à un mini troll qui vante le GC tout en mettant C et C++-RAIIen dans le même sac ... (accessoirement, si je suis d'accord avec d'autres de ses arguments)Envoyé par Florian
Oh moi les guerres de religions... Les quelques uns qui se croient avoir approprié le C ou le C++ au point de me faire la morale, moi qui en fait depuis alentour de 20 ans, ils peuvent aller se rhabiller. J'ai appris le C++ dans un cours de langage C et dans un livre de référence C/C++, écrit à l'époque par l'auteur à succès d'une brique sur le langage C. Le dernier quart du livre était consacré au C++, le reste était pour le C.
Il a été généralement accepté que le C++ ai été emmené comme une évolution du C et non comme une réécriture. On aime ou on aime pas, mais c'est ainsi. Tout code en C peut normalement se compiler en C++, à quelques exceptions près quand on touche au langage de bas niveau peut-être. Dans ce cas, il faut utiliser l'étiquette extern "C". Pour le reste, ça compile et ça marche aussi bien. Mieux, si on veut compiler en C seulement, sans extern "C", c'est le même foutu compilateur qui fait le travail. Deux langages?
J'avais été tenté de faire exclusivement du C++, question d'évoluer. Jeunesse oblige Jusqu'à ce que je m'amuse à réécrire un outil qui écoutait le buffer d'un port série. Ma réécriture C++ qui implémentait un ring en objet était très clean, très esthétique. Franchement, c'était de l'art! Mais aussi belle soit-elle, elle n'était pas assez rapide pour écouter sans perdre du contenu. Apparemment, trop de temps de CPU était consacré à appeler le pointeur this pour accéder aux deux index utilisés. La version C originale se contentait de définir et d'incrémenter deux variables définies dans l'espace global. C'était plat, mais ça marchait. Je n'ai pas perdu de temps à faire fonctionner la version C++.
J'ai bien compris ce jour là que le C++ ne peut pas se passer du C, ni même de l'assembleur (avec qui il se marie à merveille) dans certains cas pointus. Peu de langage de seconde génération ou plus, sinon aucun autre, ne peux prétendre être aussi bien harmonisé à l'assembleur que le C. Le programmeur C++ qui snobe le C est un estropié!
Désolé pour les intégristes.
La même chose s'applique pour Objective-C, sauf qu'il n'y a même pas besoin de “extern "C"”.
En conclus-tu pour autant que C et Objective-C sont le même langage ?
Moi, pas.
Si tu le fais, ça implique que, par transitivité, C++ = Objective-C. Ce n'est absolument pas le cas.
(Enfin, il existe des compilateurs ne compilant que le code C.)
C'est un peu comme dire que le français et le latin, puisque l'un hérite de l'autre, c'est la même chose…
De même que le latin est partie intégrante du français, le C l'est pour le C++. Ce n'est pas pour autant que mélanger indistinctement l'un et l'autre est une pratique recommandée !
Le « C/C++ », c'est bien un truc d'ancien (sans vouloir être péjoratif ni insultant, hein ).
Mais peut-être que ce débat mériterait un topic dédié dans la section C++, non ?
Partager