Le compilateur de TypeScript

Alex Young

Traducteur

bredelet

Dans cet article, l'auteur vous décrit le fonctionnement du nouveau compilateur de TypeScript et fait une comparaison avec les autres compilateurs.

Commentez

- Titre : Le compilateur de TypeScript

- Auteur : Alex Young

- Traducteur : bredelet

- Parution : 8 septembre 2014

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2014 Alex Young. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Avant-propos

- II. Fonctionnement du compilateur

- III. Comparaison avec d'autres compilateurs

- IV. Automatisation

- V. Conclusion

- VI. Remerciements

I - Avant-propos

Un nouveau compilateur TypeScript a été annoncé en parallèle à la relocalisation du projet sur GitHub.

Le travail que nous avons fait jusqu'ici sur le nouveau compilateur s'est révélé très prometteur. À son état d'avancement actuel, le nouveau compilateur est capable de compiler du code TypeScript existant cinq fois plus vite que le compilateur officiel courant. Ce ne sont que des résultats préliminaires. Une fois que le compilateur sera terminé nous pourrons vous dessiner un rapport plus complet des améliorations de performance.

II - Fonctionnement du compilateur

Vous vous demandez peut-être comment le compilateur TypeScript fonctionne. Le code source est disponible à l'adresse GitHub : Microsoft/TypeScript, et il est écrit en TypeScript. Il est structuré autour des fonctionnalités et idiomes utilisés fréquemment en TypeScript, comme les services et les génériques.

Il contient un analyseur syntaxique, un analyseur lexical, et toute l'infrastructure nécessaire pour le traitement des options de ligne de commande et des fichiers. L'analyseur syntaxique génère un arbre de syntaxe qui est utilisé par un « émetteur » produisant la sortie appropriée. Vous y verrez de nombreuses instructions switch qui multiplexent sur des énumérations liées aux éléments du langage.

III - Comparaison avec d'autres compilateurs

L'analyseur syntaxique de CoffeeScript est généré depuis un fichier Jison - si bien qu'au contraire de TypeScript il possède une grammaire non contextuelle sous forme de fichier. Il y a des tentatives d'écriture de compilateur TypeScript basé sur Jiton qui valent la peine d'être suivies. LiveScript est aussi basé sur Jiton.

Le compilateur de ClojureScript transforme le code ClojureScript en JavaScript. À l'origine ClojureScript était écrit en Clojure (NdT : un langage de la JVM), et je ne suis pas certain qu'il soit encore autohébergé. Il existe cependant un fork qui l'est.

IV - Automatisation

Une difficulté avec les compilateurs JavaScript est qu'il faut recompiler les fichiers source en JavaScript à chaque changement. Heureusement, la commande tsc a une option --watch (NdT : observer), alors vous pouvez écrire tsc -w fichier.ts pour surveiller les changements de fichier.ts.

Cela peut facilement être utilisé par un module tel que nodemon pour aussi redémarrer le processus Node automatiquement (si vous utilisez Node).

Il y a aussi des plug-ins Grunt et Gulp pour TypeScript :

- gulp-typescript

- grunt-typescript

V - Conclusion

C'est intéressant de constater qu'il semble y avoir trois approches principales pour traduire et compiler en JavaScript :

- un analyseur syntaxique basé sur une grammaire non contextuelle ;

- un analyseur autohébergé écrit à la main ;

- un autre langage.

Si quelqu'un m'avait montré TypeScript j'aurais cru qu'il était écrit avec un langage du CLR (NdT : la plate-forme d'exécution .NET), alors c'est bien qu'il soit autohébergé et puisse s'exécuter simplement sans l'aide des outils de développement Microsoft.

VI - Remerciements

L'article original peut être lu sur le site DailyJS : TypeScript's Compiler.

Nous tenons à remercier f-leb pour sa relecture attentive et assidue, bredelet pour sa traduction et Winjerome et Tarh_ pour leur aide à la publication de cet article.