L'histoire de la conversion automatique du langage de TypeScript / JavaScript / Python

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.

スクリーンショット 2020-05-06 20.00.44.png

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.

etc. Cependant, c'est une très bonne bibliothèque si elle fonctionne depuis le début.

Résumé

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.

Recommended Posts

L'histoire de la conversion automatique du langage de TypeScript / JavaScript / Python
L'histoire de Python et l'histoire de NaN
L'histoire de la manipulation des variables globales Python
L'histoire du traitement A du blackjack (python)
L'histoire selon laquelle le coût d'apprentissage de Python est faible
Traitement d'image? L'histoire du démarrage de Python pour
L'histoire de la lecture des données HSPICE en Python
le zen de Python
L'histoire de sys.path.append ()
L'histoire de FileNotFound en Python open () mode = 'w'
L'histoire de la construction de Zabbix 4.4
Vers la retraite de Python2
Mise à jour automatique du module Python
Le pouvoir des pandas: Python
L'histoire de la mise en œuvre du sujet Facebook Messenger Bot avec python
Sakura L'histoire du fonctionnement de la bouteille Python sur Internet
L'histoire de l'introduction de Jedi (package de complétion automatique de python) dans emacs
L'histoire du rubyiste aux prises avec Python :: Dict data with pycall
[Python] Tensorflow 2.0 ne supportait pas Python 3.8, donc l'histoire de la rétrogradation de Python
L'histoire selon laquelle la version de python 3.7.7 n'était pas adaptée à Heroku
First Python 3 ~ Le début de la répétition ~
Le 14 mars est le jour du rapport de circonférence. L'histoire du calcul du ratio de circonférence avec python
L'histoire de la participation à AtCoder
Existence du point de vue de Python
[Python] Notification LINE des dernières informations à l'aide de la recherche automatique Twitter
pyenv-changer la version python de virtualenv
L'histoire de la création d'un pilote standard pour db avec python.
L'histoire de l'exécution de python et de l'affichage des résultats sans fermer vim
L'histoire du "trou" dans le fichier
[Python] Comprendre le potentiel_field_planning de Python Robotics
10 fonctions du "langage avec batterie" python
Revue des bases de Python (FizzBuzz)
L'histoire du remontage du serveur d'application
À propos de la liste de base des bases de Python
Histoire d'approximation de puissance par Python
L'histoire de l'exportation d'un programme
L'histoire de la création d'un module qui ignore le courrier avec python
Apprenez les bases de Python ① Débutants élémentaires
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
Conversion de la chaîne <-> date (date, datetime) en Python
Collecte automatique des cours boursiers à l'aide de python
Changer la longueur des chaînes csv Python
L'histoire d'essayer de reconnecter le client
Vérifiez le comportement du destroyer en Python
L'histoire d'une erreur dans PyOCR
[Python3] Comprendre les bases de Beautiful Soup
4 langage de comparaison de fermeture (Python, JavaScript, Java, C ++)
Passez le chemin du module python importé
L'histoire de la mise en place de MeCab dans Ubuntu 16.04
Comparaison des modules de conversion japonais en Python3
Notes d'apprentissage depuis le début de Python 1
Vérifier l'existence du fichier avec python