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

C++ Discussion :

C++ est-il devenu un langage de script ?


Sujet :

C++

  1. #1
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut C++ est-il devenu un langage de script ?
    C++ est-il devenu un langage de script ?
    Un développeur estime que la norme C++ 11 a transformé le langage de programmation


    « C++ est devenu un langage de script », titre un développeur du nom de Jussi Pakkanen, dans un billet de blog.

    Sous ce titre, qui pourrait provoquer le courroux de certains utilisateurs du langage, Jussi Pakkanen apporte une analyse objective, qui n’est pas dénuée de tout sens. « Avec la sortie de C++ 11, quelque chose d’extraordinaire s’est produit. L’accent mis sur les bibliothèques utilisables, les types et autres subtilités ont transformé conceptuellement C++ en un langage de script », introduit celui-ci.

    Pour se situer dans le contexte, Pakkanen estime qu’un langage de script diffère d’un langage compilé comme C par les critères suivants :

    • pas de gestion manuelle de la mémoire ;
    • la syntaxe et les fonctionnalités complexes expressives peuvent être mises en œuvre en seulement quelques lignes de code ;
    • des puissantes fonctions de manipulation de chaines ;
    • une grande bibliothèque standard.



    Avec C++ 11, toutes ces exigences deviennent réelles pour C++. Pour appuyer ses propos, Pakkanen présente un bout de code permettant de lire toutes les lignes d’un fichier pour les enregistrer dans un fichier différent (cas concret où se démarquent les langages de script).

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include<string>
    #include<vector>
    #include<algorithm>
    #include<fstream>
     
    using namespace std;
     
    int main(int argc, char **argv) {
      ifstream ifile(argv[1]);
      ofstream ofile(argv[2]);
      string line;
      vector<string> data;
      while(getline(ifile, line)) {
        data.push_back(line);
      }
      sort(data.begin(), data.end());
      for(const auto &i : data) {
        ofile << i << std::endl;
      }
      return 0;
    }

    S’il fallait faire la même chose en C, cela devrait prendre beaucoup plus de lignes de code et il serait difficile d’obtenir un résultat pareil, selon Pakkanen. De plus :

    • chaque ligne de code est claire, compréhensible et expressive ;
    • pas de fuites de mémoire ;
    • compilation avec optimisation –O3 proche des performances de Python VM ;
    • meilleures performances que n’importe quel langage de script « non-JITted ».


    Ces changements n’ont pas pour objectif de faire disparaître les langages de script, ironise Jussi Pakkanen, avant de conclure que « C++ peut désormais être utilisé dans les scénarios pour lesquels le langage n’était pas prévu à la base ».


    Source : blog de Jussi Pakkanen


    Et vous ?

    Qu’en pensez-vous ? C++ 11 fait-il de C++ un langage de script ? Pourquoi ?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par Hinault Romaric Voir le message
    pas de gestion manuelle de la mémoire
    C++ permet de gérer manuellement la mémoire.
    C'est donc plus qu'un langage de script.

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 632
    Points : 30 711
    Points
    30 711
    Par défaut
    Salut
    Citation Envoyé par oodini Voir le message
    C++ permet de gérer manuellement la mémoire.
    C'est donc plus qu'un langage de script.
    C'est l'éternel problème des verbes pouvoir / devoir / être capable de (permettre / obliger )

    C++ permet la gestion dynamique de la mémoire, mais il faut avouer que tout est fait pour nous inciter à y renoncer aussi souvent que possible.

    En comparaison, dés que l'on atteint un certain degré de complexité (ne serait-ce que le fait d'avoir des chaines de caractères de taille variable, sans même aller jusqu'à l'utilisation du paradigme OO par le développeur ), C nous oblige à gérer la mémoire de manière dynamique

    Ceci dit, LLVM et clang ont clairement démontré depuis belles lurettes qu'il était possible d'utiliser C et C++ en JIT

    Et pour répondre à la question de savoir si C (ou C++) pourrait être un langage de script, j'aurais tendance à dire que seule la présence (ou l'absence) d'un interpréteur fait qu'un langage sera plutôt orienté "script" ou plutôt orienté "compilation".

    Le fait qu'il n'existe (hormis clang) aucun interpréteur pour C ou pour C++ n'indique finalement qu'une seule chose : personne ne s'est, pour l'instant, intéressé à l'éventualité de créer un tel interpréteur

    Bien sur, avec le système d'include, il y a sans doute des barrières difficiles à passer, mais aucune barrière n'est infranchissable par nature

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Points : 47
    Points
    47
    Par défaut
    Si on devait aller dans le sens de la réflexion de Mr. Pakkanen, c'est plutôt la découverte de la meta-programmation statique, les travaux de monsieur Alexandrescu et la libraire Boost qui ont contribué à permettre une nouvelle utilisation du langage et qui aboutirent à la nouvelle spécification du C++.
    Je dirais donc qu'il est en retard dans son analyse.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Et pour conjuguer les deux derniers commentaires, faire du JIT avec de la métaprog... :/

  6. #6
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 325
    Points : 3 769
    Points
    3 769
    Billets dans le blog
    12
    Par défaut
    Grâce aux pointeurs intelligents (smart pointers), on peut éviter la gestion manuelle de la mémoire, tout en bénéficiant de l'intérêt des pointeurs (ex: polymorphisme).
    Utiliser les pointeurs intelligents permet même de gagner en sécurité, par contre je trouve que c'est plus lourd à écrire que de simples pointeurs.

    des puissantes fonctions de manipulation de chaines ;
    C'est bien d'avoir inclue les Regex, mais pourquoi il n'y a pas de méthode trim() et split() en C++11 ?

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2011
    Messages : 2
    Points : 0
    Points
    0
    Par défaut
    quelqu'un veut voir ce interpreteur du c++ basé sur LLVM/clang
    cling: http://cern.ch/cling
    il'y a des autres mais, j'ai oublié ses noms

  8. #8
    Membre expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Points : 3 892
    Points
    3 892
    Par défaut
    Pour ma part je dirais que j'y avais pensé, mais qu'au final non, si on veut faire mieux que son code qui ne fait que lire un fichier, et faire un certain traitement dessus, ça risque de devenir assez moche. Il faut reconnaître que la possibilité de ne pas faire apparaître la gestion de la mémoire manuelle est effectivement possible tout au long de ce traitement. Toutefois, on se préoccupe en réalité beaucoup plus de la gestion de la mémoire qu'on ne le crois : faire un reserve() avant une série de push_back() ça en fait partie. Passer en argument par const& également, ++it au lieu de it++ si on veut aller un peu plus loin. Toutes ces petites habitudes en fait.

    Je ne dirais donc pas un langage de script, toutefois un langage simple d'utilisation, définitivement oui, et ce depuis le C++11. (attention, dès qu'on passe côté créateur les choses sont à nouveau à leur difficulté habituelle). C'est ce qui me fait croire en la possibilité d'un enseignement C++11 pour débutant plus accessible qu'avant.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3
    Points : 6
    Points
    6
    Par défaut
    Entre l'écriture d'un bash de 500 lignes illisibles et non maintenables (utilisant des variables et des tableaux obscurs) et un petit programme en C++, la question du choix du langage peut en effet se poser.
    Pour ma part, j'ai tendance à associer le scripting au côté "interprété" d'un langage, sinon pourquoi ne pas avoir par exemple, des scripts init.d écrits en C++ ? et pour aller plus loin un système d'exploitation dont la configuration ne serait faite que par fichiers xml ?
    Ce que je veux dire c'est que le scripting doit permetre de réaliser des tâches systèmes (déplacement de fichier, lancement de process...etc) spécifiques mais dont le contenu doit rester fonctionnellement simple par souci de maintenabilité.
    Mais bon, je m'éloigne du sujet qui n'est pas "Qu'est-ce qu'un langage de script ?"
    En tout cas je suis d'accord pour dire que le C++
    c'est plus qu'un langage de script

  10. #10
    Futur Membre du Club
    Chercheur
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Classer un vector<> ?
    Il n'y a que moi que ça choque ?
    Il n'utilise le vector que pour une classification ? C'est pas une list<> qu'il faudrait utiliser afin que ce soit réellement efficace ?

    Après, ne pas donner le critère "exécutable a la volée" dans les critères est un peu abusif pour moi (bien que pour le C++ il y ait CINT).

  11. #11
    Membre expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Points : 3 892
    Points
    3 892
    Par défaut
    Citation Envoyé par IceFinger Voir le message
    Il n'y a que moi que ça choque ?
    Il n'utilise le vector que pour une classification ? C'est pas une list<> qu'il faudrait utiliser afin que ce soit réellement efficace ?

    Après, ne pas donner le critère "exécutable a la volée" dans les critères est un peu abusif pour moi (bien que pour le C++ il y ait CINT).
    vector est dans une grande majeure partie des cas plus performant que list.

  12. #12
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Points : 850
    Points
    850
    Par défaut
    Si la liste des différences qui, selon Monsieur Pakkanen, existent entre un "langage de script" d'un "langage de programmation", suffisait à définir ce qu'est un langage de script, alors oui, probablement que C++ serait un devenu un langage de script.

    Le problème est que personne ne semble s'entendre sur ce qu'est un langage de script. Selon moi (mais je n'ai bien sûr aucune autorité en la matière), un langage de script se différentie d'un langage de programmation non pas par des caractéristiques intrinsèques mais plutôt par la façon dont le langage est utilisé :
    - si le langage est utiliser pour réaliser un programme destiné à étendre un logiciel existant qui lui fournit un contexte d'exécution, alors le langage est un langage de script (par exemple, un script Python dans OpenOffice, un script VBA dans MSOffice ou un script JavaScript dans une page HTML).
    - si on écrit avec un langage un programme ne dépendant que du système d'exploitation et/ou d'un interpréteur (JVM, .NET, python) alors il s'agit d'un langage de programmation.

    Un langage comme Python par exemple, est soit un langage de programmation soit un langage de programmation de script selon le contexte dans lequel il est utilisé.

  13. #13
    Membre éclairé

    Homme Profil pro
    Architecture logiciel
    Inscrit en
    Janvier 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecture logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 103
    Points : 713
    Points
    713
    Par défaut
    Au passage avant de répondre, tout langage est compilé. La compilation permet de passer d'un langage source à un langage destination. Il ne faut pas confondre compilation avec compiltation en binaire.

    Qu’en pensez-vous ? C++ 11 fait-il de C++ un langage de script ? Pourquoi ?
    Je pense qu'il faudrait avoir une définition claire d'un langage de script. À cette sauce, presque tous les langages sont des langages de script.
    Un point important, pour moi, quand j'entends script, j'entends surtout langage spécialisé, pas de gestion de mémoire, écriture simple, pas de déclaration des types des variables, etc.
    Maintenant C++ permet d'éviter la gestion de la mémoire (bien que les smart pointers existent depuis bien avant Boost, etc.) et qu'on puisse utiliser l'inférence de type, j'ai encore du mal à rentrer dans mes autres critères : le C++ est un langage très complexe et plein de subtilités. Il nécessite un long apprentissage pour ne pas ressembler à n'importe quoi. C'est toujours d'ailleurs ce qui me fait rire quand je vois des CVs avec écrit expert C++ avec un an d'expérience et quelques heures de cours à l'université.

  14. #14
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Points : 2 522
    Points
    2 522
    Par défaut
    Pour commencer, sa définition de ce qu'est un langage de script est très discutable. Je pense personnellement que c'est plus en rapport avec l'usage qu'on en fait qu'avec ses caractéristiques techniques.

    On peut comprendre son message comme : C++ pourrait très bien être utilisé désormais comme langage de script. Sur ce point, je pense qu'il y a des langages plus adaptés.

    Edit : tiens, je me suis fait devancer par ptah35. On est bien d'accord...

  15. #15
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Tous les points qu'il énumère sont déjà présents depuis C++03 voir 98.
    Le code qu'il présente n utilise qu'une toute petite fonctionnalité de C++11 et pourrait se ré-écrire en C++03 sans soucis.

    Bref, il est à coté de la plaque....

  16. #16
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    L'exemple de code donné est très proche du C++ "avant C++ 11" : seule la ligne 17 nécessite d'être modifiée pour compiler en C++ 98...

    C'est à se demander si la grande nouveauté au final c'est pas de mieux mettre en avant une approche qui était déjà là mais qui n'arrivait pas à s'imposer face à l'historique de l'approche "C with classes" ?

  17. #17
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Pour moi, le débat n'a pas lieu d'être. Etant donné le flou de la frontière entre un langage de script et pas de script (ce qui dépend du contexte comme l'explique très bien ptah35), qu'est ce que ça peut bien faire ? S'il considère C++ comme un langage de script, grand bien lui fasse. Faire cette constatation ne va pas changer grand chose à l'écosystème du langage. Quant à déclarer que les nouvelles fonctionnalités ouvrent de nouveaux usages, c'est un bel enfoncement de porte ouverte !

    Citation Envoyé par Sirus64 Voir le message
    Au passage avant de répondre, tout langage est compilé. La compilation permet de passer d'un langage source à un langage destination. Il ne faut pas confondre compilation avec compiltation en binaire.
    Si beaucoup de langages dit interprétés sont effectivement compilés, tous ne le sont pas. Exemple: un script Bash. Il sera exécuté directement, sans transformation préalable dans une autre représentation.

    Moi je trouve que la distinction interprété/compilé n'est pas si mauvaise. Dans un langage dit "interprété", on n'a besoin que du code source, le logiciel qui exécute et celui qui compile ne faisant qu'un. Dans un langage "compilé", on peut exécuter le résultat de la compilation sans avoir besoin du code source, ni du compilateur. C'est une différence de taille je trouve.

  18. #18
    Invité
    Invité(e)
    Par défaut mouarf
    on reste très loin ce que permettent les languages de script moderne. En python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import sys
     
    ifile, ofile = sys.argv[1:3]
    lines = sorted(ofile.readlines())
    ifile.write(''.join(lines))
    Et vu que getline a des performances catastrophiques (googlez "c++ getline slow"), je ne serais pas étonné qu'en plus la version python ait des performances au moins égales à celle du c++.

  19. #19
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    file_put_contents($fichier1,file_get_contents($fichier2));

    Vous m'excuserez mais pour le moment je reste sur les "vrais" langages de script

    Un titre un peu racoleur pour finalement dire que le C++11 c'est bien parce que c'est plus clair qu'avant ...

  20. #20
    Membre à l'essai
    Homme Profil pro
    Architect logiciel
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architect logiciel

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Points : 24
    Points
    24
    Par défaut Etrange comparaison
    compilation avec optimisation –O3 proche des performances de Python VM
    Etrange comparaison, n'est-t-il pas?

    Comparer C++ (-O3) avec Python en terme de performance alors que tous auraient pensé que C++ eût battu Python sans coup férir.
    Donc, C++ se complexifie (cf parametric template) et devient aussi "peu" performant qu'un language de script tel que Python.

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/08/2013, 20h44
  2. Ruby est-il un langage de Script ?
    Par Guilhem89 dans le forum Ruby
    Réponses: 2
    Dernier message: 16/12/2011, 11h46
  3. Définition langage de scripting
    Par Filippo dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 28/12/2004, 10h25
  4. [langage] perl script pour balancer un B-arbre
    Par RonMaster dans le forum Langage
    Réponses: 5
    Dernier message: 22/10/2004, 18h35
  5. [langage] cherche script pour formater une chaine
    Par MASSAKA dans le forum Langage
    Réponses: 7
    Dernier message: 12/11/2003, 13h18

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