Quel code voulez-vous envisager d'utiliser un générateur de code comme CodeSmith pour?

StackOverflow https://stackoverflow.com/questions/4720186

  •  12-10-2019
  •  | 
  •  

Question

J'utilise CodeSmith pour les modèles de PLINQO, pour construire mon DAL de mes objets DB; il fonctionne très bien!

Je crois que ce l'utilisation principale des applications de générateur de code, mais je suis curieux ... quel autre code serait vous envisagez d'utiliser un générateur de code pour? Avez-vous des modèles CodeSmith que vous utilisez fréquemment (si oui, que fait-il)?

Était-ce utile?

La solution

Je n'ai pas utilisé CodeSmith, mais je l'ai fait un peu de juste de génération de code. Noteably je l'ai écrit plus d'un système de gestion de configuration (CM) pour un système WiMAX, où le code a été généré pour CM 3 plates-formes différentes. La seule différence était le modèle de CM pour chaque plate-forme.

Le modèle était dans une langue spécifique de domaine personnalisé (DSL) que nous avons construit eu un analyseur syntaxique pour. La langue était un style conteneur / élément de base où les conteneurs pourraient nicher et avoir un identifiant, et les éléments sont des types définis pré. La documentation était un attribut des éléments et des conteneurs. Vous pouvez ajouter Lua extraits aux définitions d'éléments et conteneurs à faire la validation sémantique (par exemple, la valeur est dans le bon gamme, si elle est une adresse IP, il est dans une plage de CIDR définie ailleurs, etc.).

L'analyseur généré un arbre de syntaxe que nous avons ensuite poussé à des modèles. Le langage de template est une mise en œuvre partielle C de StringTemplate . Nous l'avons utilisé pour générer:

  • Une API spécifique de modèle C que les applications pourraient remettre en pour obtenir des valeurs de configuration,
  • Le code Lua recueilli pour valider le modèle et en fournissant des messages d'erreur utiles,
  • Deux « backends » pour l'API qui gérerait les valeurs en mémoire (pour la manipulation temporaire d'un modèle), et dans un système de base de données (pour le partage entre les processus),
  • analyseur de fichiers de configuration et écrivain,
  • documentation HTML et
  • Interface ligne de commande (CLI de) de mise en œuvre pour la visualisation interactive et la modification d'une configuration.

En rétrospective, je aurais dû simplement utilisé Lua directement comme DSL. Il aurait été plus bavard, mais ayant l'analyseur déjà et beaucoup de Lua choix structurants disponibles me aurait sauvé beaucoup d'efforts de développement.

Pour les choses qui ont une structure repetivie et des règles bien définies à ce que ces choses doivent faire, la génération de code peut être une chose merveilleuse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top