Developpez.com

Le Club des Développeurs et IT Pro

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

Un développeur estime que la norme C++ 11 a transformé le langage de programmation

Le 2013-10-17 12:14:17, par Hinault Romaric, Responsable .NET
« 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++ :
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 ?
  Discussion forum
68 commentaires
  • Dale-Cooper
    Membre à l'essai
    Titre racol-trolleur, article dénué d'intérêt. Une vraie blague. Pourquoi toujours se tenir à ce type de présentation dans les news de développez.com?
    Un peu d'originalité vous tuerait ?
    Par exemple ces questions niaises à la fin ? "C++ 11 fait-il de C++ un langage de script ? Pourquoi ?".
    Non mais quel humain normalement constitué peut ne pas éclater de rire ?! Et l'auteur, pardon le traducteur (attention aux erreurs de traduction relevées dans les commentaires !) n'a pas honte ?
    C'est quoi le but ? informer les gens ? Dans ce cas là on attendrait un peu de travail en amont. Exemple :
    1) Définir ce qu'est un langage de script
    2) Rappeler brièvement dans quel contexte le c++ est utilisé
    3) Expliquer les avantages / désavantages liés à sortir le C++ de son emploi habituel
    4) Conclure en apportant des éléments de réponses à la question suivante, qui me semble moins absurde que l'originale : "quel intérêt peut avoir un programmeur à utiliser le C++ plutôt qu'un langage de script pour accomplir des tâches de haut niveau"

    Plutôt que ça on a une mauvaise traduction et des blagues. Arrêtez le massacre !

    Un programmeur en colère.
  • oodini
    Membre émérite
    Envoyé par Hinault Romaric
    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.
  • koala01
    Expert éminent sénior
    Salut
    Envoyé par oodini
    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
  • ptah35
    Membre éclairé
    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é.
  • minnesota
    Membre émérite
    après

    Python est-il adapté pour un usage professionnel ?
    Java est-il un langage de programmation mourant ?

    voilà

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



    Notre portail actualités est en passe de devenir une référence dans les bêtisiers.
  • Sirus64
    Membre éclairé
    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é.
  • ctxnop
    Membre expérimenté
    Envoyé par pgoetz
    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.
    C'est une traduction foireuse. Dans la source c'est
    Envoyé par la source
    compile time with -O3 is roughly the same as Python VM startup and has to be done only once
    Autrement dit, il compare le temps de compilation avec le temps de démarrage de la machine virtuelle utilisée par l'interpréteur Python.
    Ce qui, soit dit en passant, est complètement irrelevant comme comparaison
  • Davidbrcz
    Rédacteur
    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....
  • Aurelien.Regat-Barrel
    Expert éminent sénior
    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" ?
  • jblecanard
    Membre expert
    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 !

    Envoyé par Sirus64
    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.