C'est une traduction foireuse. Dans la source c'est
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.Envoyé par la source
Ce qui, soit dit en passant, est complètement irrelevant comme comparaison![]()
En fait, si, dans son idée, le temps d’ « exécution » du « script » c++ est égal à la somme de :
- temps de compilation (la première fois)
- temps d’exécution
Tandis que le temps d’ « exécution » du script python est égal à la somme de :
- temps de lancement de la vm python (tout le temps)
- temps d’exécution du programme.
Dans cette optique là, comparer les deux fait (un peu) sens pour dire qu’en terme de « worst case performance », c++ fait au moins aussi bien que python.
Mais ça reste quand même bof bof comme comparaison…
Oui, c'est d'autant moins malin que Python met en cache le bytecode dans un fichier .pyc pour justement éviter de recompiler à chaque fois...
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.
Bonsoir,
Pour moi la différence entre les langages de programmation haut niveau, c'est que certains délèguent la robustesse du code au programmeur. Pour les besoins que l'on sait, on trouvera ce type de langage plus adapté qu'un autre. D'autres dispensent le programmeur de tracasseries d'allocation mémoire, fuites..., en mettant suffisamment de fonctionnalités pour ça. Ce type de langage est également préférable dans les situations qu'on sait.
La distinction de la catégorie c/c++ de certains langages (scripts) reste cette traduction en binaire une seule fois pour toutes, avec cette manipulation bas niveau de la mémoire en direct.
Cet extrait ne contient-il pas substantiellement le but de l'article?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 ».
bien que connaissant peu ou rien du c++ et modestement du c je crois avoir compris ceci:
Il veut démontrer que la simplification du codage se rapproche, en terme de production pour le programmeur des langages interprétés, donc plus de robustesse garanti au programmeur.
La simplicité et clarté du code démonstratif m'incite d'ores et déjà à m’intéresser au c++, me disant qu'il est en fin de compte moins pénalisant en avantages que procure les langages interprétés.
Cet article m’a bien fait rire, surtout l’exemple. Le C++ n’est pas du tout adapté au scripting…
Voici le même programme, écrit en Haskell : http://lpaste.net/94404.
Il ne faut pas trop s’emporter avec C++11![]()
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.![]()
Mis à part le fait qu'il n'utilise que la nouvelle syntaxe de for du standard 2011, je me pose des questions au sujet de la performance de son truc...
Utiliser un vector, donc, un tableau dynamique tout ce qu'il y a de plus bête, puis le trier ensuite avec sort, ça ne serait pas plus efficace avec un conteneur fait pour, genre... je sais pas, on veut un conteneur trié, alors, std::set, qui trie à l'insertion?
Enfin, de toute façon, même si je suis d'accord que C++11 est bien utile pour diverses raisons, il n'empêche qu'il reste des trucs chiants en C++, par exemple le fait de devoir utiliser des pointeurs dans les collections polymorphiques, au lieu de pouvoir utiliser des références.
Et s'il voulait mettre en avant le traitement du texte en C++11, il aurait peut-être dû trouver le moyen de parler des conversions int/float/double <-> string.
Attention, codes pompés de divers sites, j'ai la flemme de penser...
Pour rappel, avant, on devait faire des trucs comme ça pas sûr de tout, je n'ai jamais aimé cette façon de faire):
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include <sstream> int i = 5; std::string s; std::stringstream out; out << i; s = out.str();
Ou comme ça, en squattant la libc ( ce que je faisais, j'ai horreur des flux ):
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 /* strtol example */ #include <stdio.h> /* printf */ #include <stdlib.h> /* strtol */ int main () { char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff"; char * pEnd; long int li1, li2, li3, li4; li1 = strtol (szNumbers,&pEnd,10); li2 = strtol (pEnd,&pEnd,16); li3 = strtol (pEnd,&pEnd,2); li4 = strtol (pEnd,NULL,0); printf ("The decimal equivalents are: %ld, %ld, %ld and %ld.\n", li1, li2, li3, li4); return 0; }
Maintenant, on à ça:
C'est quand même vachement mieux, pour concurrencer Java ou les langages de script, non? Même si, je me doute bien, ce n'est pas la panacée...
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
22
23
24
25
26 // stol example #include <iostream> // std::cout #include <string> // std::string, std::stol int main () { std::string str_dec = "1987520"; std::string str_hex = "2f04e009"; std::string str_bin = "-11101001100100111010"; std::string str_auto = "0x7fffff"; std::string::size_type sz; // alias of size_t long li_dec = std::stol (str_dec,&sz); long li_hex = std::stol (str_hex,nullptr,16); long li_bin = std::stol (str_bin,nullptr,2); long li_auto = std::stol (str_auto,nullptr,0); std::cout << str_dec << ": " << li_dec << '\n'; std::cout << str_hex << ": " << li_hex << '\n'; std::cout << str_bin << ": " << li_bin << '\n'; std::cout << str_auto << ": " << li_auto << '\n'; return 0; }
PS: je continue à utiliser scanf, printf et leurs petits copains, car tant qu'il me faudra passer par des stream pour lire un fichier en "pur c++" je ne serai pas satisfait.
PPS: j'ai de plus en plus l'impression que DVP fait de plus en plus dans le people version geek. Java ne mourra pas demain, même si un gland le dit. Les tablettes tactiles ne remplaceront jamais le desktop, même si c'est plus adapté pour un PDG. C++ n'est pas utilisé comme langage de script, et ça fait des années qu'on pourrait le faire, si on le voulait, et si la syntaxe était moins complexe.
Encore une news bien naze.
Un truc par rapport a ce point et l'exemple:
La manipulation de chaine...j'espere qu'il ne parle pas de textes encodes via unicodedes puissantes fonctions de manipulation de chaines ;
Notez que son exemple ne marche pas correctement sous windows si les entrees ne sont pas des chaines ascii (ou Ansi je sais plus).
Peut etre que quand C++ aura de quoi traiter du texte unicode correctement, je serais d'accord pour l'utiliser a la place de quelques scripts python.
Cela dis le set n'a pas une memoire contigue. J'aurais aime que flat_set et flat_map (dans boost) fassent partie du standard: ce sont des vector qui agissent comme des set et map. Plus lents a l'insertion, invalident les valeurs quand elles bougent, mais carrement plus rapide a la recherche et a l'iteration.
Bonjour, je suis d'accord sur le début de ta phrase, mais la fin me rend totalement des nues ; le C++11 permet de faire du code clean, rapide. Bien que certains le pensent fortement, je ne pense pas que celui-ci change la philosophie de base du langage (pour plein de raisons que je pourrais développer dans un autre message) ; concernant le vive du sujet donc l'enseignement, outre ton message, je me souviens que tu pensais et tu avais exposé l'idée suivante (très proche de ton message) que pour un débutant en C++, il vaudrait mieux lui faire apprendre le C++11 (pour des raisons de simplicité, de solutions apportées et nouvelles features et autres...) ;
Je suis totalement pas d'accord, le debutant en C++, devra toujours se referer au C++03, bien qu'en lui enseignant(le cpp11) tu lui diras, que le code est plus clean, plus rapide à écrire (exemple range for), plus puissant, et autres... ; mais ce dernier devra tout de même comprendre pourquoi c'est le cas, et donc se référer à l'ancienne norme à savoir le C++03 (pour ensuite regarder les solutions, et nvlles features qu'apportent le C++11)
Pour ma part, si par langage de script on entend langage qu'on utilise pour ses besoins quotidiens, pour un traitement rapide, alors je répond que oui je l'utilise également ainsi (par exemple j'avais besoin d'un petit script qui transformait des images png en images 16 bits en terme de code asm8086, j'ai écrit ça en moins d'une demi-heure en C++/SFML, intégré ça à mon dépôt, et zou, ça faisait fort bien le travail).
Pour ce qui est de dire apprendre C++03 avant C++11, c'est exactement comme dire d'apprendre le C avant le C++. C'est utiliser l'approche ascendante. L'approche que je prône est descendante, c'est à dire montrer d'abord comment utiliser quelque chose (du plus utile au plus subtil), puis comment marche ce quelque chose, et enfin comment passer du côté créateur avec cette fonctionnalité.
Il n'y a aucun intérêt à dire : voilà du code legacy, on va vous apprendre à coder comme ça, ensuite on passera à du code moderne et vous pourrez tout réapprendre et perdre vos mauvaises habitudes.
L'approche ascendante a un intérêt majeur : on sait ce qu'il se passe dans les dessous de ce qu'on apprend de nouveau. Mais un inconvénient majeur : tant qu'on a pas connaissance complète de tout le haut-niveau, toute cette connaissance du bas-niveau est absolument et fondamentalement inutile en pratique, voire nuisible. Est-il utile de préciser que l'apprenant va s'ennuyer et se décourager à souhait si à chaque fois qu'on monte d'une couche on lui dit : bon tout ce que t'as appris avant, bah on peut faire mieux, plus vite, plus simplement, tu peux réapprendre à coder.
Et le fait est que l'on aura beau utiliser l'approche ascendante au maximum, dès lors qu'on tombera sur une nouvelle feature qui n'était pas couverte par la base qu'on a eu des couches inférieures, hop on se retrouve en approche descendante qui finalement est plus naturelle (oui, qui donc sur ce forum a appris comment implémenter une std::function avant d'en utiliser une ?).
Savoir faire un programme qui fonctionne et fait ce que l'on a prévu, voilà quelque chose de plus utile que de perdre son temps à essayer de faire dès le premier coup quelque chose d'optimisé dans les moindres détails, ce qui ne s'apprend en définitive et quoi qu'il arrive qu'avec l'expérience.
Si l'on vous avait expliqué la physique atomique avant de vous montrer que l'huile ne se mélange pas avec l'eau, il y a fort à parier que l'on se moquerait de votre professeur de physique-chimie pour un bout de temps.
Si l'on vous avait inculqué les règles de la grammaire avant même de vous avoir appris à vous exprimer, vous n'auriez à mon humble avis pas compris grand chose à la première explication, vous auriez appris à parler avec retard, et il aurait fallu repasser par la case cours de grammaire par la suite de toute façon. Ceci est probablement le parallèle le plus parlant/convaincant que je puisse trouver.
Dans le descriptif il n'est nullement question de tri, mais dans le code si : son cahier des charges est mal formulé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).![]()
bonjour,
j'ai envie de rajouter qu'avec les histoires de cloud, de web, etc. ce qui manque aussi à C++ pour se comparer à javascript/python/java/.net c'est un mode "safe" où le compilateur arrive à prouver que le programme n'est pas dangereux pour celui qui l'exécutera :
--> il manque à C++ un mode où le compilateur arrive à prouver que le programme ne présente aucun risque du point de vue d'un anti-virus
notez que C++/CLI lui possède un mode safe : c'est celui où on n'écrit aucune ligne de C++, uniquement du code avec des types .NET
C'est absurde.
Premièrement, ce n'est pas le rôle du compilateur, mais du code qui exécutera le code compilé, soit la machine virtuelle pour les langages cités. C'est le résultat de la compilation qui doit être contrôlé, pas l'étape de transformation du code source. Vérifier le code source n'a aucun intérêt puisque le code compilé peut être altéré.
De plus, les contrôles en question ont lieu sur la cohérence du bytecode pour prévenir les plantages et les comportements incohérents, mais il n'apportent aucune garantie de sécurité à l'utilisateur. Les exemples de trous de sécurtié béants en Java et en Javascript ne manquent pourtant pas dans l'histoire !
Ca n'a aucun sens de vouloir appliquer cela à du code assembleur. Mais si tu fais tant confiance à cette sécurisation, tu n'as qu'à compiler ton code C++ en Javascript. Enjoy.
Y en a aussi qui aiment les huîtres chaudes.
Si tu ne fais pas confiance à un programme, tu l’exécutes dans un bac à sable.
Et ça n’a rien à voir avec la techno employée. On peut très bien sandboxer du code asm (même si, je te l’accorde, on manque d’outils simples à utiliser pour que ça soit à la portée du premier quidam venu).
Enfin, je suis curieux de savoir ce qu’est un programme qui ne « présente aucun risque du point de vue d’un anti-virus ». Un truc qui ne lit aucun fichier, n’écrit rien, ne communique pas en réseau et n’alloue pas de mémoire*? Ça va être limité comme programme, c’est sûr…
Partager