69 votes

Avez-vous utilisé l'un des interpréteurs (et non compilateurs) C++ ?

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

1 votes

@GeorgFritzsche Cette question concerne le C++, pas le C.

1 votes

Vote de clôture car trop large.

31voto

Shep Points 2086

NOTE : Ce qui suit est plutôt spécifique à CINT, mais étant donné qu'il s'agit probablement de l'élément le plus important de l'histoire de l'entreprise. largement utilisé interprète C++, il peut être valable pour tous.

En tant qu'étudiant diplômé en physique des particules qui a beaucoup utilisé CINT, je dois vous mettre en garde. Bien qu'il "fonctionne", il est en cours d'élimination progressive 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 origines en tant qu'interprète C, il ne parvient pas à interpréter certains des composants les plus critiques du C++. Les modèles, par exemple, ne fonctionnent pas toujours, ce qui vous découragera d'utiliser les éléments qui rendent le C++ si flexible et utilisable.

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

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

  4. Le scoping n'est pas cohérent avec le C++ compilé : il est assez fréquent de voir du code de la forme

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

    alors que tout compilateur C++ fonctionnel se plaindrait que correcton est sorti du champ d'application, CINT le permet. Le résultat est que le code CINT n'est pas vraiment C++, juste quelque chose qui y ressemble.

En bref, CINT n'a aucun des avantages de C++, et tous les inconvénients plus certains.

Le fait que CINT soit encore utilisé est probablement plus un accident historique dû à son inclusion dans le cadre Root. À l'époque où il a été écrit (il y a 20 ans), il y avait un réel besoin d'un langage interprété pour le traçage/ajustement interactif. Aujourd'hui, il existe de nombreux paquets qui remplissent ce rôle, dont beaucoup ont des centaines de développeurs actifs.

Aucun d'entre eux n'est écrit en C++. Pourquoi ? Tout simplement parce que le C++ n'est pas conçu pour être interprété. Le typage statique, par exemple, vous permet de réaliser des gains importants en matière d'optimisation lors de la compilation, mais il sert surtout à encombrer et à surcontraindre 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 d'apprentissage sera inférieur à celui que vous perdrez à trébucher sur CINT, même si vous connaissez déjà 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 de Root en exécutables C++ normaux pour éviter CINT. Ceux de la jeune génération suivent cet exemple ou utilisent Python pour les scripts.

Par ailleurs, la compilation de Root (et donc de CINT) prend environ une demi-heure sur un ordinateur moderne et échoue parfois avec les nouvelles versions de gcc. C'est un paquet qui a servi un objectif important il y a de nombreuses années, mais qui montre clairement son âge aujourd'hui. En regardant dans le code source, vous trouverez des centaines de casts de style c dépréciés, des trous énormes dans la sécurité des types et une utilisation intensive des variables globales.

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

2 votes

Bien que toutes vos plaintes concernant cint soient parfaitement valables (et vous en avez oublié quelques-unes), vous pouvez me croire sur parole : l'interprète COMIS pour PAW était bien pire. De plus, PAW offrait un environnement adéquat pour le traçage interactif - il avait juste les problèmes d'échelle que l'on peut attendre d'un codage de type fortran 77.

1 votes

@dmckee Croyez-moi, je suis content de ne pas travailler avec PAW. Mon point de vue n'est pas que CINT est pire que todo seulement qu'il y a beaucoup de choses qui seraient mieux.

0 votes

Comment peut-il être plus lent ?

29voto

Il y a s'accrocher Le projet du Cern d'un interpréteur C++ basé sur clang - c'est nouvelle approche sur la base de 20 ans d'expérience dans Cinte de racine et il est assez stable et recommandé par les gars du Cern.

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

19 votes

Cling fonctionne en fait en compilant de manière interactive, c'est plus un compilateur JIT qu'un interprète. De plus, en tant que "gars du CERN", je me sens obligé de commenter la phrase "recommandé par les gars du CERN" : beaucoup d'entre nous diront que la principale leçon après 20 ans de Root est que le logiciel monolithique (Root) basé sur un seul langage (C++) est une erreur. Cling est une bonne béquille pour ceux qui continuent à faire la guerre au C++ comme le meilleur des langages, mais nous ne sommes pas tous en train de quitter CINT en clopinant sur un autre interpréteur C++ : pour du code interpénétré, vous pouvez faire bien mieux que C++, utilisez Python ou Ruby.

20voto

dmckee Points 50318

Cint est le processeur de commande pour le paquet d'analyse de la physique des particules. Racine . Je l'utilise régulièrement, et il fonctionne très bien pour moi.

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

modification tardive : : Copié d'un duplicata ultérieur parce que le posteur de ces questions ne semblait pas vouloir poster ici : igcc . Je ne l'ai jamais essayé personnellement, mais la page web semble prometteuse.

2 votes

Je connais plusieurs étudiants diplômés en physique qui font la majorité de leur codage en cint/Root, et même s'ils n'ont pas toujours de belles choses à dire, cela répond à leurs besoins en termes de performances et de flexibilité.

0 votes

Eh bien, c'est du c++ avec une couche supplémentaire de complexité due à la nécessité de construire les dictionnaires de code binaire de l'intercepteur<-->. De plus, l'arbre de classe racine est une douleur. Mais cint fonctionne. Il fonctionne beaucoup mieux que COMIS à l'époque de cernlib.

3 votes

@littlenag Dire que Root "répond à [nos] besoins" est un peu généreux. Le framework est horriblement défectueux sur plusieurs niveaux de base, et continue à être largement utilisé uniquement parce qu'il est complètement non-modulaire et donc presque impossible à supprimer. CINT est un exemple parfait de quelque chose que vous doivent installer lorsque tout ce que vous voulez faire est de lire dans un fichier de données.

5voto

Alan Points 7273

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

2voto

jfm3 Points 13666

Il y a longtemps, j'utilisais un interprète C++ appelé CodeCenter. Il était plutôt sympa, même s'il ne pouvait pas gérer des choses comme les champs de bits ou la manipulation de pointeurs fantaisistes. Les deux aspects les plus intéressants de cet outil étaient la possibilité d'observer les changements de variables et d'évaluer le code C/C++ à la volée pendant le débogage. De nos jours, je pense qu'un débogueur comme GDB est tout aussi bon.

0 votes

Que ferait l'interpréteur s'il rencontrait une instance de modèle ? (ou autre activité de prétraitement). Y avait-il un certain niveau de précompilation/prétraitement pour gérer les modèles ou le préprocesseur ?

0 votes

Oui, tous les trucs CPP et les modèles faisaient partie du langage interprété. Plutôt sympa.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X