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 :
-
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.
-
Il est plus lent (d'au moins un facteur 5) que le C++ minimalement optimisé.
-
Les messages de débogage sont beaucoup plus énigmatiques que ceux produits par g++.
-
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.
1 votes
@GeorgFritzsche Cette question concerne le C++, pas le C.
1 votes
Vote de clôture car trop large.