C++ est-il devenu un langage de script ?
Un développeur estime que la norme C++ 11 a transformé le langage de programmation

Le , 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++ : Sélectionner tout
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 ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de oodini oodini - Membre émérite https://www.developpez.com
le 17/10/2013 à 12:19
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.
Avatar de koala01 koala01 - Expert éminent sénior https://www.developpez.com
le 17/10/2013 à 13:00
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
Avatar de FxMacCobra FxMacCobra - Membre du Club https://www.developpez.com
le 17/10/2013 à 13:05
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.
Avatar de oodini oodini - Membre émérite https://www.developpez.com
le 17/10/2013 à 13:08
Et pour conjuguer les deux derniers commentaires, faire du JIT avec de la métaprog... :/
Avatar de Gugelhupf Gugelhupf - Modérateur https://www.developpez.com
le 17/10/2013 à 13:17
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 ?
Avatar de bmoez.j bmoez.j - Nouveau Candidat au Club https://www.developpez.com
le 17/10/2013 à 13:21
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
Avatar de germinolegrand germinolegrand - Membre expert https://www.developpez.com
le 17/10/2013 à 13:22
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.
Avatar de ejorge ejorge - Futur Membre du Club https://www.developpez.com
le 17/10/2013 à 13:23
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

Avatar de IceFinger IceFinger - Futur Membre du Club https://www.developpez.com
le 17/10/2013 à 13:38
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).
Avatar de germinolegrand germinolegrand - Membre expert https://www.developpez.com
le 17/10/2013 à 13:39
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.
Offres d'emploi IT
Ingénieur analyste programmeur (H/F)
Safran - Auvergne - Montluçon (03100)
Data scientist senior H/F
Safran - Ile de France - Magny-les-Hameaux (Saclay)
Ingénieur conception en électronique de puissance H/F
Safran - Ile de France - Moissy-Cramayel (77550)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil