Bonjour,
J'aimerai savoir pourquoi il ne semble y avoir aucun effort, quel qu'il soit, dans la direction de la reflection, ou introspection ?
Je sais qu'il existe RTTI, mais c'est tout de même très largement insuffisant. Je sais également qu'il existe des outils ou libs pour en faire un peu plus, mais toujours insuffisant la plupart du temps, ou nécessitant une mise en place ou utilisation très complexe.
Je trouve les solutions basées sur des libs assez inacceptables. Il faut "remplir soit même" les metadatas ce qui pose le problème de la maintenance et de l'oublie. Il faut absolument penser à mettre les metadatas à jour dès qu'on modifie une classe. Certaines libs permettent de ne pas avoir à maintenir une classe et ses metadatas, mais elles se basent alors sur énormément de préprocesseur et on perd complètement la syntaxe d'origine du C++. C'est très lourd et inélégant.
D'autres solutions consistent en faire intervenir un outil intermédiaire dans la chaine de compilation, genre Qt et son "moc". C'est la moins pire des solutions je trouve, mais ca reste lourd, compliqué et ca introduit tout un tas de nouveaux problèmes auxquels il faut se former. Comme le fait que ca génère des fichiers qui sont injectés dans la compilation alors qu'ils n'existent pas dans la solution d'un Visual Studio (par exemple).
Les experts n'ont eu de cesses de répéter dans toutes les conférences qu'il faut laisser faire le compilo, que le compilo sait tout à propos de votre code, qu'il faut faire du standard, etc... Bah je ne demande pas mieux, mais du coup, pourquoi ce n'est pas le compilo qui génère les metadatas ?
Toutes les réponses que j'ai pu avoir sur le sujet jusqu'ici sont de l'ordre du "en C++ on ne paie que pour ce qu'on utilise", "c'est trop lourd/pas assez performant" et "c'est trop complexe à faire".
Je suis d'accord avec le fait de ne pas impacter les codes qui n'en ont pas besoins, je suis d'accord pour dire que ca peut plomber les perfs ou qu'on ne peut pas faire de la reflexion sur tout.
Mais pourquoi il n'y a pas de reflection possible dès lors qu'un certain nombre de contraintes sont respectées ? Une reflection choisie, via des attributs par exemple. Ou autre ?
Je suis persuadé qu'il n'est pas possible que je sois le seul abruti a me poser cette question, des gens ont forcément fait des propositions sur le sujet.
L'absence de reflection est pour moi un vrai frein pour au développement de solutions de sérialisations, ce qui a son tour est un frein au développement de solution réseau. Mais pas que.
Partager