38 votes

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

Donc, comme un nouveau programmeur web (arrière-plan est mostely en C,C++ et Python) avec pas de javascript de l'expérience (ou le désir de faire l'expérience, basée sur ce que j'ai vu) j'ai fait quelques précurseurs de la recherche sur CoffeeScript et je suis vraiment aimer ce que je vois. Un peu de fraîcheur nuance que j'ai remarqué est que CoffeeScript a été écrit en CoffeeScript, ce qui est cool... mais je ne comprends pas vraiment comment c'est possible. Malheureusement, j'ai opté pour prendre la Sécurité du Réseau au lieu de Compilateurs lors de ma dernière supérieurs niveau des cours d'Informatique.

J'ai entendu parler de gens qui écrivent des langues dans la langue cible à interpréter à l'aide de compilateurs existants pour cette langue, mais je ne peux pas creuser aucune info sur la façon dont cela pourrait fonctionner puisque c'est la première mise en œuvre.

Ma conjecture est un shell script qui peut prendre soin de fixant certaines du cadre initial pour la construction d'une auto-référentielle (n'est ce terme décrire correctement ce problème?) de la langue?

45voto

Matt Ball Points 165937

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 de compiler une nouvelle version de lui-même, avec plus de fonctionnalités. Il est appelé amorçage.

BTW, si vous voulez en savoir plus sur les compilateurs, en dépit d'avoir manqué à l'université, avoir un regard sur l'Apprentissage de l'écriture d'un compilateur — plus précisément, le Dragon Livre.

42voto

Trevor Burnham Points 43199

Matt réponse est excellente. Permettez-moi seulement d'élaborer avec certains CoffeeScript spécifiques info:

La version originale de la CoffeeScript compilateur a été écrit en Ruby, mais il a été transféré à l'CoffeeScript pour v0.5.0, le 21 Février 2010.

En pratique, le bootstrap compilateur peut rendre les choses difficiles avec l'évolution constante de la langue, comme le compilateur doit être réécrit pour accueillir ces changements. Ce paragraphe de l'officiel docs vous donne une idée de l'enjeu:

git checkout lib && bin/cake build:full est un bon de commande à exécuter lorsque vous travaillez sur la base de la langue. Il va vous rafraichir la lib répertoire (dans le cas où vous avez cassé quelque chose), construire votre compilation modifiés, l'utiliser pour reconstruire lui-même (une bonne santé mentale test), puis exécuter tous les tests. Si ils passent, il ya une bonne chance que vous avez fait un changement réussi.

L' lib répertoire contient la compilation JavaScript de la CoffeeScript compilateur (compris?), fournir un utile intermédiaire dans le processus d'amorçage. Depuis la CoffeeScript code du compilateur ne va pas directement sur elle-même, qui le rend plus facile de faire des modifications importantes à la langue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X