Cet article est tiré du Calendrier de l'Avent GW "Calendrier pour défier quelque chose de nouveau" / 67) 5/6 article.
Lorsqu'il s'agit de formuler des API et de créer des SDK, la question du langage à prendre en charge se pose. Je veux minimiser l'effort pour créer un SDK, donc si possible, je voudrais le créer dans une langue et le convertir automatiquement dans une autre langue.
Peut être converti automatiquement! !! Bien que cela ne va pas aussi loin que cela, j'ai essayé de créer une bibliothèque qui semble assez regrettable.
JavaScript -> TypeScript
Il y a une histoire selon laquelle 60% des utilisateurs de Javascript ont également utilisé TypeScript, mais l'ancienne bibliothèque est toujours JavaScript, n'est-ce pas? Si vous ne pouvez pas migrer en raison du coût de la migration, il peut être pratique d'utiliser la conversion automatique.
Pour le moment, cette bibliothèque était pratique pour la conversion de JavaScript vers TypeScript.
https://github.com/gregjacobs/js-to-ts-converter
Je désassemble le JavaScript AST et reconstruit le TypeScript. C'est l'opposé de la compilation TypeScript. Il est écrit que le type est deviné à partir de l'environnement, mais il est presque inutile et tous sont quelconques. Mais ça semble bouger pour le moment! Il convertira jusqu'à ce point. (* Cela ne fonctionne pas. Il y a eu des erreurs)
Une fois que vous vous êtes habitué à AST, ce n'est pas si difficile, il est donc facile de faire quelque chose comme Personnaliser partiellement en fonction de votre projet.
JavaScript <-> Python
JavaScript et TypeScript sont le même langage, non? Vous pouvez entendre cela, mais JavaScript et Python sont des langages complètement différents.
Jiphy avait l'air bien pour ça
https://github.com/timothycrosley/jiphy
Je ne peux pas lire le contenu, mais je pense que c'est aussi probablement la construction et la conversion d'AST. C'est aussi un point fort qu'il existe une liste de syntaxes qui peuvent être converties.
S'il s'agit d'un programme du niveau répertorié dans cette liste, il fonctionnera sans problème, mais un peu triste est qu'il ne prend pas en charge la classe.
Jiphy does not implement stdlib components, classes, etc. It's SYNTAX ONLY.
Comme la classe ne le prend pas en charge, vous devrez l'utiliser dans un très petit programme ou corriger la classe plus tard.
TypeScript -> Java, Python, C#
Il est étonnant qu'il supporte plusieurs langages jsii https://github.com/aws/jsii
Jusqu'à présent, la conversion n'était que la conversion du contenu du programme, mais celui-ci a un mécanisme légèrement différent. TypeScript (ou node.js) s'exécute toujours en arrière-plan et son interface est convertie en Java, Python, C #.
Je pensais appeler une fonction Python, mais elle a été transmise à la fonction node.js exécutée dans les coulisses! C'est comme ça.
Puisqu'il n'y a qu'une seule langue qui fonctionne en arrière-plan, le taux de rencontre de bogues semble être faible.
C'est un mécanisme assez ancien, et je suis désolé de le dire Il présente également les inconvénients de consommer beaucoup de mémoire et de limiter les types pouvant être utilisés pour les arguments d'interface (car il est traduit dynamiquement en langues).
De plus, le plus gros problème est qu'il est difficile de le traiter plus tard, sauf si vous créez un projet exclusivement pour cela. Vous devez créer un programme selon les spécifications de langage définies par jsii. Par exemple
――Il est nécessaire d'écrire un programme qui reprend toutes les restrictions de chaque langue (Même si vous ne voulez que python, vous êtes soumis aux restrictions java et c #) --La règle de dénomination est fixe. Exemple: getXXX () est interdit. Switch est un mot réservé de C #, donc l'utilisation est interdite.
export par défaut
, ʻexport = `est interdit (probablement parce qu'il ne sera pas nommé)etc. Cependant, c'est une très bonne bibliothèque si elle fonctionne depuis le début.
J'ai essayé 3 bibliothèques de conversion de langue. Tous sont regrettables! Je suis venu sur place, alors j'espère que ce sera terminé dans un an ou deux.