Comment CoffeeScript peut-il être écrit en CoffeeScript?

Donc, en tant que nouveau programmeur web (les antécédents sont principalement en C, C ++ et Python) sans expérience javascript (ou envie de l’expérimenter, en fonction de ce que j’ai vu) Je vois. Une petite nuance intéressante que j’ai remarquée, c’est que CoffeeScript a été écrit en CoffeeScript, ce qui est cool … mais je ne comprends pas vraiment comment cela est possible. Malheureusement, j’ai choisi de prendre Network Security à la place de Comstackrs lors de mes derniers cours en informatique.

J’ai entendu parler de personnes écrivant des langues dans la langue cible pour interpréter en utilisant des compilateurs existants pour cette langue, mais je ne peux pas trouver d’informations sur la façon dont cela pourrait fonctionner puisque c’est la première implémentation.

Je suppose qu’un script shell incorporé pourrait prendre en compte certains éléments du cadre initial pour construire un langage autoréférentiel ( ce terme décrit-il correctement ce comportement?) ?

Ce n’est pas nouveau. Les compilateurs C ont été écrits en C. Python a été écrit en Python .

Il est possible d’utiliser un compilateur pour Language X pour comstackr une version plus récente de lui-même, avec plus de fonctionnalités. Cela s’appelle bootstrapping .

  • Amorçage d’une langue
  • Ecrire un compilateur dans sa propre langue
  • Comment écrivez-vous un compilateur pour une langue dans cette langue?
  • Amorcer un compilateur: pourquoi?

BTW, si vous voulez en savoir plus sur les compilateurs, en dépit d’avoir manqué uni, jetez un coup d’œil à Apprendre à écrire un compilateur – en particulier, le Dragon Book .

La réponse de Matt est excellente. Laissez-moi juste élaborer avec quelques informations spécifiques à CoffeeScript:

La version originale du compilateur CoffeeScript a été écrite en Ruby, mais elle a été transférée à CoffeeScript pour la version 5.5.0, le 21 février 2010.

En pratique, le compilateur bootstrap peut rendre les choses difficiles avec un langage en constante évolution, car le compilateur doit être réécrit pour tenir compte de ces modifications. Ce paragraphe des documents officiels vous donne une idée des défis à relever:

git checkout lib && bin/cake build:full est une bonne commande à exécuter lorsque vous travaillez sur le langage principal. Il va rafraîchir le répertoire lib (au cas où vous auriez cassé quelque chose), comstackr votre compilateur modifié, l’utiliser pour se reconstruire (un bon test d’intégrité), puis exécuter tous les tests. S’ils réussissent, il y a de bonnes chances que vous ayez réussi votre changement.

Le répertoire lib contient le code JavaScript compilé du compilateur CoffeeScript (obtenu?), Fournissant un intermédiaire utile dans le processus de démarrage. Étant donné que le code CoffeeScript du compilateur ne s’exécute jamais directement sur lui-même, il est plus facile de modifier le langage.