IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Cela a-t-il un sens de dire que Java est un langage de "plus haut niveau" que C++ ?


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut Cela a-t-il un sens de dire que Java est un langage de "plus haut niveau" que C++ ?
    Bonjour.
    Dans un message récent d'une liste de diffusion consacrée à une distribution Linux en voie de création, quelqu'un suggérait d'utiliser Java plutôt que des langages comme le C++ parce que, prétendait-il, Java était un langage "de plus haut niveau" .

    A première vue cela m'a paru franchement aberrant et j'ai répondu, un peu abruptement, que cela n'avait pas grand sens et que, en ce qui concerne le "niveau", C++ et Java étaient sur le même plan.

    Je suis peut-être allé un peu trop loin et un peu au-delà de mes compétences, je le confesse...

    On m'a répondu simplement que je me trompais car "C++ peut manipuler directement les pointeurs, il n'a pas de "garbage collector" [quel rapport avec le "niveau" je me demande ?] , et il ne possède ni introspection ni annotation".

    (En ce qui concerne la manipulation directe des pointeurs on peut évidemment répondre qu'elle est certes possible en C++ mais en principe jamais nécessaire, et que de ce point de vue les possibilités d'intervention en bas niveau n'empêchent personne d'intervenir "à haut niveau" (et que c'est même sauf cas particulier la bonne pratique en C++ d'éviter ces manipulations directes de pointeurs, le C++ ayant justement été conçu en partie pour pouvoir "échapper" à de telles manipulations, qu'on est censé utiliser en C++ uniquement dans les rares cas où on y est absolument obligé)).



    Qu'en pensez-vous ?

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 075
    Points
    28 075
    Par défaut
    Je connais le C mais ni vraiment le C++, ni le Java (je suis plus VB et C#).

    Mais effectivement j'aurais réagis comme toi.

    L'idée que je me fais de ces 2 langages les place sur le même niveau
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre averti Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Points : 302
    Points
    302
    Par défaut
    Tu devrais trouver des arguments ici

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    C'est juste une bonne question pour un bon troll.

  5. #5
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    Je voyais plutôt ma question comme une question de "grammaire" au sens large (ou de "vocabulaire" ou de "sémantique lexicale" si vous préférez) :
    - que veut-on dire exactement quand on dit qu'un langage est de "de plus haut niveau" qu'un autre dans le cas général
    - et surtout : ceci posé, est-ce que cette comparaison a vraiment un sens lorsqu'on souhaite l'appliquer aux relations entre Java et C++ , est-ce que les différences entre ces deux langages relèvent en quoi que ce soit d'une question de 'niveau' (ceci, tout à fait indépendamment d'un choix ou d'une préférence pour l'un ou pour l'autre).

    En particulier pour reprendre le texte que je citais dans mon premier message :
    - y a-t-il vraiment une relation entre le "niveau" d'un langage et la présence ou l'absence d'un garbage collector dans ce langage (ou avec l'existence d'introspection ou d'annotations) ?

    Bref je voulais questionner la notion de niveau et son application à la caractérisation et à la comparaison de langages et non polémiquer sur la question : lequel des deux est le meilleur ?

  6. #6
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Paye ton troll. Quels blagueurs ces dev linux.

  7. #7
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    (Personnellement j'argumenterais pas avec quelqu'un qui envisage de développer un OS avec du java ... )

    Sinon :

    A programming language is low level when its programs require attention
    to the irrelevant.
    --Alan Perlis
    Mais sinon, le troll est trop évident, faut pas sauter dedans. (pourrait faire un peu plus d'effort pour sortir des troll plus déguisé)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  8. #8
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    Il me semblait avoir expliqué clairement le problème que je posais dans mon message précédent, un problème plus notionnel qu'autre chose et qui n'a aucune raison de dégénérer en une polémique entre langages.
    Je ne vois pas ce qu'il y a de trollesque dans cette affaire.

    "être de plus/moins haut niveau que" n'est de tout façon pas un prédicat évaluatif mais purement descriptif. Ce n'est pas spécialement "bien" ou "mal" d'être de haut ou bas niveau.

    Ensuite, j'ai posé des questions comme celles-ci qui encore une fois n'ont rien de polémique et dont la réponse m'intéresse simplement pour mieux cerner les notions en jeu telles que vous les utilisez :

    - est-ce qu'on peut dire qu'avoir ou pas un garbage collector est pour un langage quelque chose qui réfère à son "niveau", est-ce que cela a à avoir avec la notion de "niveau" ?
    Impossible de répondre paisiblement à cette question ?

    - mêmes question pour introspection et annotations : est-ce que ces notions ont à voir avec la notion de "niveau", d'après vous ?

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Vu que java utilise une machine virtuelle, on peut dire qu'il est de plus haut niveau, car moins près de la machine.
    Par contre je le metterais au même niveau que le C++ managé.

    Tout cela n'est que mon point de vue.

  10. #10
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Grosso modo, ils sont des niveaux identiques. Chacun court après l'autre pour certains concepts (généricité, multithreading, ...).

  11. #11
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Pour moi, la notion de niveau avant tout associée à des bibliothèques, plus qu'à des langages. Il y a des bibliothèques bas niveau qui permettent juste de s'interfacer avec des points particuliers de la machine (par exemple, écrire dans un fichiers), des bibliothèques de niveau intermédiaire, qui permettent de réaliser une tâche technique (par exemple, sérialiser ses informations), et des bibliothèques haut niveau (ou même le programme principal) qui se place plus au niveau fonctionnel que technique et utiliseront les bibliothèques techniques (par exemple, une bibliothèque de gestion de personnage dans un jeu de rôle).

    Après, il y a des langages qui sont plus ou moins adaptés à écrire des bibliothèques d'un certain niveau de manière propre et élégante (avec entre autre le fait qu'une bibliothèque d'un certain niveau ne doit pas demander à son utilisateur de devoir se préoccuper de détails d'un niveau inférieur).

    De ce point de vue là, la Java me semble adapté au haut niveau, mais pas au bas niveau (où l'on a souvent besoin de gérer finement la mémoire à la main). Pour le niveau intermédiaire, je ne sais pas, je n'ai pas de pratique du Java.

    De son côté, le C brille à bas niveau, mais ne permet pas bien de monter les niveau, car il demande toujours à l'utilisateur de faire attention à la gestion bas niveau de la mémoire.

    Le C++ me semble bien couvrir une très large gamme de niveau. Les plus bas comme les plus hauts.

    Par rapport au débat initial,
    "C++ peut manipuler directement les pointeurs, il n'a pas de "garbage collector" [quel rapport avec le "niveau" je me demande ?]
    Cet argument sur la possibilité d'utiliser des pointeurs ne me semble pas dire qu'il n'est pas haut niveau, juste qu'il n'est pas uniquement haut niveau. Ça peut effectivement poser deux problèmes en terme de niveau à mon sens :
    - Il est plus facilement possible que dans d'autres langages que de mauvais développeurs écrivent des bibliothèques qui n'isolent pas bien des niveaux inférieurs
    - Il est moins aisé de travailler dans un environnement où l'on n'a pas confiance dans un bout de code (un plug-in, par exemple), et où l'on souhaite limiter les actions qu'il peut avoir sur le reste du programme.

    Pour ce qui est du GC, c'est un moyen comme un autre de gérer un des aspects bas niveau de la mémoire. J'aimerais bien en avoir un en C++, mais le C++ actuel n'est pas non plus dépourvu d'outils pour gérer cet aspect (et si je faisais du Java, j'aimerais certainement avoir le RAII en plus du GC).

    il ne possède ni introspection ni annotation".
    C'est je pense effectivement un grand manque du C++, et c'est une fonctionnalité qui me semble plus utile pour écrire des bibliothèques intermédiaire utilisable de manière agréables par le code haut niveau.

    Maintenant, le C++ fourni aussi des mécanismes permettant d'écrire de telles bibliothèques de niveau intermédiaire qui manquent au Java (par exemple, les templates qui permettent une introspection limitée, mais qui est résolue à la compilation).


    Je dirais qu'en terme de philosophie, le C++ a comme objectif que couvrir une vaste gamme de niveaux, et que l'élévation de niveau du code soit non seulement possible, mais aussi qu'elle soit possible avec un coût lié à l'abstraction réduit au minimum.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  12. #12
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    J'appuie le point de vue de JolyLoic. C++ ets un énorme couteau suisse et tenter de le limiter est contre-productif

  13. #13
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Pour moi, cette notion de niveau n'a pas (plus?) le moindre sens (*).

    Concernant la gestion de la mémoire, le problème est double, et il a une même origine : les gens ne connaissent pas le C++. Du coup ils utilisent des pointeurs là où le RAII est salvateur et nous donne le même niveau de fiabilité (si ce n'est un meilleur -- vu que le principal problème est que la majorité des développeurs ne sait pas traiter les cas exceptionnels pour les restituer des ressources en conséquence (mémoire, socket, ...)). Double parce que : les non initiés feront n'importe quoi, et qu'il est difficile d'imposer un niveau de connaissances sur les mainteneurs.

    (*) Un langage a pour moi des caractéristiques, et pour chaque caractéristique, il sera plus ou moins riche.
    C++ est riche pour attaquer le hard, Java est pauvre.
    C++ est nul pour l'introspection dynamique, Java est riche.
    C++ a un typage très riche (cf boost.unit, dont le pendant (qui aurait été hardcodé à l'image de + sur les String, IIRC) a été refusé pour le Java).
    Java n'a rien en natif pour faire de la PpC (n'est-ce pas un truc haut-niveau, ça ?), C++ a le pattern NVI, et Eiffel dispose de mots-clés dédiés.
    a+b, me parait plus haut niveau que a.add(b).
    J'irai même jusqu'à dire que le RAII est plus haut niveau que try-finally (si on reprend les arguments du gars sur ta ML, vu que c'est transparent, i.e. non explicite), mais ce n'est là en fait qu'une question de goût.

    Bref, pour moi cette distinction ne veut rien dire.

    S'intéresser à la facilité de la gestion de la mémoire et de la qualité du pool de développeurs, c'est autre chose.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  14. #14
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    Pour moi, cette notion de niveau n'a pas (plus?) le moindre sens (*).
    Un probleme est qu'il manque une definition. Et si tout le monde est relativement d'accord pour ce qu'est un langage de base niveau (en gros un langage fournissant une vue peu abstraite du hardware), pour un langage de haut niveau il y a au moins deux definitions en presence:
    - langage fournissant une vue tres abstraite du hardware.
    - langage permettant de fournir des vues proches du domaine d'utilisation (alias tres abstraite).

    Et pour la premiere, le C++ n'est pas particulierement bien place (c'est un langage de bas niveau), mais pour la seconde il est plutot bien place (on peut construire des abstraction masquant presque totalement les notions de bas niveau, tout en les utilisant).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  15. #15
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    Pour ce qui est de la définition de la relation "être de plus haut niveau que", je ne me risquerai pas vraiment à en proposer une formulation rigoureuse, mais dans ma petite tête je pense toujours à quelque chose comme ceci pour me guider dans la compréhension de cette notion :
    - supposons que j'écrive dans un langage A un programme qui utilise, disons par exemple, sept fonctions (ou procédures etc. peu importe le nom exact) du langage A.
    Supposons maintenant que dans un langage B, je dispose d'une fonction unique, partie intégrante du langage B, qui fasse à elle seule la même chose que ce que faisait mon programme en langage A : là, je dirais sans hésiter que le langage B est (au moins à cet égard) de plus haut niveau que le langage A.

    Et en ce sens on dirait évidemment que par exemple le C est de plus haut niveau que l'assembleur.
    Mais entre des langages comme C++ (ou si l'on veut la partie non-C de C++) et Java, il est beaucoup moins évident qu'une telle comparaison ait réellement un sens.

  16. #16
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par ptyxs Voir le message
    Pour ce qui est de la définition de la relation "être de plus haut niveau que", je ne me risquerai pas vraiment à en proposer une formulation rigoureuse, mais dans ma petite tête je pense toujours à quelque chose comme ceci pour me guider dans la compréhension de cette notion :
    - supposons que j'écrive dans un langage A un programme qui utilise, disons par exemple, sept fonctions (ou procédures etc. peu importe le nom exact) du langage A.
    Supposons maintenant que dans un langage B, je dispose d'une fonction unique, partie intégrante du langage B, qui fasse à elle seule la même chose que ce que faisait mon programme en langage A : là, je dirais sans hésiter que le langage B est (au moins à cet égard) de plus haut niveau que le langage A..
    Donc etre de haut niveau se resume pour toi a l'ampleur de la bibliotheque standard sans influence des autres bibliotheques disponibles?
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  17. #17
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    D'abord il ne s'agit pas ici d'une conception théorique que je soutiendrais, mais de la façon dont, à tort ou à raison, j'avais tendance à comprendre la notion.

    Ensuite tout dépend de quoi on parle, si on parle du langage on parle du langage au sens strict et de ses bibliothèques standard.
    Rien n'empêche par ailleurs d'étendre l'enquête à d'autres bibliothèques, bien entendu, qui sont il me semble quasiment par définition de plus haut niveau que le langage lui-même.

  18. #18
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par ptyxs Voir le message
    D'abord il ne s'agit pas ici d'une conception théorique que je soutiendrais, mais de la façon dont, à tort ou à raison, j'avais tendance à comprendre la notion.

    Ensuite tout dépend de quoi on parle, si on parle du langage on parle du langage au sens strict et de ses bibliothèques standard.
    Rien n'empêche par ailleurs d'étendre l'enquête à d'autres bibliothèques, bien entendu, qui sont il me semble quasiment par définition de plus haut niveau que le langage lui-même.
    Tu es tres fort dans l'optique de la premiere definition. Je cherche simplement a montrer qu'il est raisonnable d'aller voir plus loin si on s'interesse au langage plutot qu'a sa bibliotheque -- et que la capacite d'un langage a fournir des abstractions utilisables est un facteur important.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  19. #19
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    OK.

  20. #20
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    Pour moi, cette notion de niveau n'a pas (plus?) le moindre sens (*).
    Clairement.

    Néanmoins, j'ai tendance à trouver les langages fonctionnels (pure) réellement de plus haut niveau que tout le reste. Mais j'ai peut être une vue biaisée..
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

Discussions similaires

  1. Vous voulez dire Merci ? C'est par ici !
    Par M.Dlb dans le forum Contribuez
    Réponses: 62
    Dernier message: 22/06/2012, 14h58
  2. Est ce que c'est bon de dire ça de son employeur?
    Par matinpeys dans le forum Entretien
    Réponses: 8
    Dernier message: 30/06/2011, 10h24
  3. Réponses: 1
    Dernier message: 31/12/2008, 11h30
  4. quel code pour dire "x n'est pas un Integer" ?
    Par nat44 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 31/07/2008, 10h29
  5. Comment peut-on dire : une bdd est petite, moyenne ou grosse
    Par Pierrinot dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 20/10/2004, 08h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo