Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

0PARTAGES

3  8 
« 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 ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Dale-Cooper
Membre à l'essai https://www.developpez.com
Le 17/10/2013 à 23:33
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.
18  1 
Avatar de 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.
10  0 
Avatar de 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
10  1 
Avatar de ptah35
Membre éclairé https://www.developpez.com
Le 17/10/2013 à 13:44
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é.
9  0 
Avatar de minnesota
Membre émérite https://www.developpez.com
Le 18/10/2013 à 11:57
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.
10  1 
Avatar de Sirus64
Membre éclairé https://www.developpez.com
Le 17/10/2013 à 13:44
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é.
7  1 
Avatar de ctxnop
Membre chevronné https://www.developpez.com
Le 17/10/2013 à 16:42
Citation Envoyé par pgoetz Voir le message
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
Citation 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
6  0 
Avatar de Davidbrcz
Rédacteur https://www.developpez.com
Le 17/10/2013 à 14:07
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....
5  0 
Avatar de Aurelien.Regat-Barrel
Expert éminent sénior https://www.developpez.com
Le 17/10/2013 à 14:15
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" ?
5  0 
Avatar de jblecanard
Membre expert https://www.developpez.com
Le 17/10/2013 à 14:30
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.
5  0