web-dev-qa-db-fra.com

Avez-vous utilisé l'un des interprètes C++ (pas des compilateurs)?

Je suis curieux de savoir si quelqu'un a utilisé UnderC, Cint, Cling, Ch ou tout autre interpréteur C++ et pourrait partager son expérience.

65
Allan Wind

NOTE: Ce qui suit est plutôt spécifique à CINT, mais étant donné que c'est probablement l'interpréteur C++ le plus le plus utilisé largement utilisé, il peut être valable pour le centre commercial.

En tant qu'étudiant diplômé en physique des particules qui a beaucoup utilisé le CINT, je devrais vous prévenir. Bien que cela "fonctionne", il est en train de disparaître , et ceux qui passent plus d'un an en physique des particules apprennent généralement à l'éviter pour plusieurs raisons:

  1. En raison de ses racines d'interprète C, il n'interprète pas certains des composants les plus critiques de C++. Les modèles, par exemple, ne fonctionnent pas toujours, vous serez donc découragé d'utiliser des éléments qui rendent le C++ si flexible et utilisable.

  2. Il est plus lent (d'au moins un facteur de 5) que le C++ optimisé au minimum.

  3. Les messages de débogage sont beaucoup plus cryptiques que ceux produits par g ++.

  4. Le cadrage est incohérent avec le C++ compilé: il est assez courant de voir le code du formulaire

    if (energy > 30) { 
        float correction = 2.4;
    }
    else {
        float correction = 6.3;
    }
    
    somevalue += correction; 
    

    alors que tout compilateur C++ actif se plaindrait que correcton était hors de portée, CINT le permet. Le résultat est que le code CINT n'est pas vraiment C++, mais quelque chose qui lui ressemble.

En bref, CINT ne présente aucun des avantages du C++, ni ses inconvénients, ni même d’autres.

Le fait que le CINT soit encore utilisé est probablement un accident historique du fait de son inclusion dans le cadre ROOT. À l'époque de sa rédaction (il y a 20 ans), il existait un réel besoin d'un langage interprété pour le traçage/ajustement interactif. Il existe maintenant de nombreux packages qui remplissent ce rôle, beaucoup d'entre eux ayant des centaines de développeurs actifs.

Aucune de celles-ci n'est écrite en C++. Pourquoi? Tout simplement, C++ n'est pas destiné à être interprété. Le typage statique, par exemple, vous permet d’optimiser l’optimisation lors de la compilation, mais sert surtout à encombrer et à surcharger votre code si l’ordinateur n’est autorisé à le voir qu’au moment de l’exécution. Si vous avez le luxe de pouvoir utiliser un langage interprété, apprenez Python ou Ruby, le temps qu'il vous faudra pour apprendre sera moins long que celui que vous perdriez en découvrant CINT, même si vous connaissez déjà le C++.

D'après mon expérience, les chercheurs plus âgés qui travaillent avec ROOT (le paquet que vous devez installer pour exécuter CINT) finissent par compiler les bibliothèques ROOT dans des exécutables C++ normaux pour éviter CINT. Ceux de la jeune génération suivent ce chemin ou utilisent Python pour l'écriture de scripts.

Incidemment, ROOT (et donc CINT) prend environ une demi-heure à compiler sur un ordinateur assez moderne et échouera parfois avec les nouvelles versions de gcc. C'est un ensemble qui remplissait une fonction importante il y a de nombreuses années, mais il montre désormais clairement son âge. En examinant le code source, vous découvrirez des centaines d'incantations obsolètes en style C, d'énormes failles dans la sécurité des types et une utilisation intensive de variables globales.

Si vous écrivez en C++, écrivez C++ tel qu'il est censé être écrit. Si vous devez absolument avoir un interpréteur C++, CINT est probablement un bon choix.

29
Shep

Il y a cling le projet d'interprétation en C++ basé sur clang - c'est nouvelle approche basé sur 20 ans d'expérience dans ROOT cint assez stable et recommandé par les gars du Cern.

Voici Nice Google Talk: Présentation de cling, un interpréteur C++ basé sur clang/LLVM .

23

cint est le processeur de commande du progiciel d'analyse de la physique des particules ROOT . Je l'utilise régulièrement, et cela fonctionne très bien pour moi.

Il est assez complet et s'entend bien avec le code compilé (vous pouvez charger des modules compilés pour les utiliser dans l'interpréteur ...)

late edit :: Copié à partir d'une copie ultérieure, car l'affiche de cette question ne semblait pas vouloir publier ici: igcc . Je n'ai jamais essayé personnellement, mais la page Web semble prometteuse.

19
dmckee

J'ai (il y a environ un an) joué avec Ch et je l'ai trouvé assez bon.

4
Alan

Il y a longtemps, j'ai utilisé un interpréteur C++ appelé CodeCenter. C'était joli Nice, bien qu'il ne puisse pas gérer des choses comme des champs de bits ou des manguiers fantaisistes. Les deux avantages de cette solution sont que vous pouvez surveiller le changement des variables et évaluer le code C/C++ à la volée lors du débogage. De nos jours, je pense qu’un débogueur comme GDB est fondamentalement aussi bon.

2
jfm3

Il y a aussi longtemps que j'utilisais un produit appelé Instant C mais je ne savais pas qu'il s'était développé

2
user11269

Il existe un programme appelé c-repl qui fonctionne en compilant votre code de manière répétée dans des bibliothèques partagées à l'aide de GCC, puis en chargeant les objets résultants. Il semble évoluer rapidement si l'on considère la version du référentiel d'Ubuntu est écrite en Ruby (sans compter GCC bien entendu), tandis que le dernier git est en Haskell. :)

0

Il y a quelques temps, j’ai cherché à utiliser ch pour vérifier si je pouvais l’utiliser pour les DLL de test de boîte noire dont je suis responsable. Malheureusement, je n'arrivais pas à comprendre comment le charger et exécuter des fonctions à partir de DLL. Encore une fois, je n'étais pas si motivé et il pourrait bien y avoir un moyen. 

0
Jon Trauntvein