Dans le concept d'erreur précédent, il était très utile de générer des macros car nous ajoutions souvent de nouvelles erreurs. La génération de code elle-même, cependant, est assez compliquée (code C++ qui imprime le code ; ce qui n'est pas non plus idéal pour la compilation croisée, voir aussi #2814).
Nous avons maintenant un ensemble plus ou moins fixe de quelques erreurs. La question est donc de savoir ce que nous devons faire :
@PhilippGackstatter @raphi011 @kodebach @Piankero Qu'en pensez-vous ?
Personnellement, je préfère l'option 1. Les codes d'erreur ne devraient changer que très rarement, ce qui rend négligeable l'effort supplémentaire d'écriture manuelle du code C et de synchronisation des autres langues. L'effort initial devrait également être moindre par rapport à la mise en place de toute forme de génération automatique.
Pourquoi pas l'option 2 ?
Les modèles de moustache doivent être fournis avec les données d'entrée d'une manière ou d'une autre. Soit nous devons utiliser un exécutable personnalisé qui est compilé au moment de la construction. Dans ce cas, nous nous débarrasserions simplement des std::cout << ...
dans le code C++, mais rien d'autre ne changerait. L'autre option consiste à utiliser l'exécutable moustache par défaut, qui est un script Ruby et nécessite donc l'installation de Ruby.
De plus, kdb gen
ne peut pas être réutilisé, car cela nécessiterait de compiler d'abord kdb
, ce qui nécessite kdberrors.h
.
Pourquoi pas l'option 3 ?
La génération du code C peut fonctionner dans CMake, mais des langages plus complexes peuvent avoir des problèmes avec l'utilisation de CMake.
Si nous décidons d'utiliser une forme de génération de code, nous ne devrions générer que les parties qui doivent absolument être générées. Par exemple, le kdberrors.h
actuel contient beaucoup de code qui est complètement statique et indépendant des erreurs que nous avons réellement. Ce code ne doit pas être généré, nous devrions le #include
à partir d'un fichier statique.
Je préfère également l'option 1 en raison des codes d'erreur stables. L'ajout de la génération de code ajoute également une complexité inutile au code global qui est à nouveau sujet aux erreurs.
@kodebach merci pour votre élaboration sur l'option 2
Je pense qu'il est assez clair que nous optons pour l'option 1,
Pour les fixations, cela signifie que peu de changements.
Ce qui serait bien si nous avions un tutoriel d'écriture contraignant, décrivant :
J'espère que nous pourrons étendre ce tutoriel pour les différentes situations que nous voyons dans différentes langues. @Piankero pouvez-vous s'il vous plaît commencer à écrire le tutoriel, en particulier la section de gestion des erreurs (comment implémenter l'héritage, ...)
Tutoriel : #2875
Décision de conception : # 2872