1

Je suis en train de concevoir un moteur d'orchestration capable d'automatiser des tâches dans plusieurs environnements: les interfaces utilisateur Web JavaScript, les serveurs Web Python et les environnements d'exécution c. Une approche possible consiste à écrire le noyau d'orchestration dans chaque langue. Cela semble fragile car chaque nouvelle fonctionnalité du moteur devra être ajoutée à chaque langue prise en charge (et les bogues devront être résolus plusieurs fois, tout en traitant des idiomes différents dans chaque langue). Une autre approche consisterait à écrire le noyau une fois dans la langue du plus petit dénominateur commun (éventuellement c), puis à l'inclure dans les autres langues. Mais, je pense que le déploiement des bibliothèques compilées vers les navigateurs serait un cauchemar sinon impossible. Donc, une autre option que je considère est la génération de modèles et de code. Le moteur pourrait alors être écrit une fois (probablement en Python), et les flux de travail compilés à chaque cible en utilisant des modèles jinja.Génération de code pour plusieurs plates-formes

Cette dernière approche semble-t-elle faisable? Si je fais cette route, quels pièges devrais-je connaître? Devrais-je l'aspirer et écrire le moteur trois fois?

+0

Voulez-vous dire que vous réimplémentez Chef ou Ansible? –

+0

@JohnZwinck heh, bonne question! Je ne pense pas que je ne traite pas de la configuration du serveur et du déploiement des applications. Même si j'étais, les gens ont senti qu'il y avait place pour l'ansible et le sel;) mais non, c'est plus sur le traitement des données dans plusieurs temps d'exécution. – matthewatabet

Répondre

1

Peu importe la technique que vous utilisez, vous serez confronté à trois problèmes potentiels:

  1. En utilisant « même (orchestration-pilote) les données » à travers toutes les cibles N. Il y aura un moyen préféré pour chaque cible de représenter ces données. Vous pouvez choisir le plus petit dénominateur commun (par exemple, texte ou XML) au prix de rendre les moteurs cibles plus maladroits à écrire
  2. Trouver l'effet équivalent dans chacune des N cibles. Imaginez que vous ayez besoin d'un "eval" (j'espère que non) dans chaque cible; même si elles apparaissent pour avoir des implémentations similaires, certains détails seront erronés et vous devrez contourner cela
  3. Les performances d'une ou de plusieurs cibles sont médiocres.

Si vous codez votre propre implémentation, vous pouvez plus facilement surmonter 2) et 3).

Si vous générez du code, vous avez plus de flexibilité pour modifier le fonctionnement d'une cible particulière. Si vous utilisez des «modèles» textuels simples pour générer du code de langue cible, vous ne pourrez pas générer du code très efficace; vous ne pouvez pas optimiser ce que vous générez. Si vous utilisez un générateur de code plus sophistiqué, vous pourriez générer/optimiser le résultat.

Il est difficile de dire combien de problèmes vous allez avoir, en partie parce que vous ne nous avez pas dit ce que ce moteur va faire ou ce que sont les langages cibles. Il sera également difficile à dire même avec ces données; Jusqu'à ce que vous ayez un système en cours d'exécution, vous ne pouvez pas être sûr qu'il n'y a pas de surprise grossière. Les gens utilisent des techniques sophistiquées de génération de code lorsqu'ils sont confrontés à l'inconnu parce que cela maximise la flexibilité et facilite donc la résolution des complications.

Les gens utilisent une génération de code plus simple lorsqu'ils n'ont pas l'énergie d'apprendre à utiliser un générateur sophistiqué. S'ils ont de la chance, aucun problème ne se pose et ils gagnent. Si cette expérience ne demande pas beaucoup de travail, alors vous devriez essayer et espérer le meilleur.

+0

merci pour la réponse! Comme je l'ai mentionné dans la question, les langages cibles comprennent JavaScript, python et c. J'espère que cela pourra aider! – matthewatabet

+0

Quand vous parlez de "génération de code sophistiquée", qu'avez-vous en tête? – matthewatabet