38

Così come un nuovo programmatore web (lo sfondo è principalmente in C, C++ e Python) senza esperienza javascript (o il desiderio di provarlo, basato su quello che ho visto) ho fatto qualche ricerca precursore su CoffeeScript e sono davvero Mi piace quello che vedo. Una piccola sfumatura che ho notato è che CoffeeScript è stato scritto in CoffeeScript, che è bello ... ma non capisco davvero come sia possibile. Sfortunatamente ho optato per prendere Network Security invece di compilatori durante i miei ultimi corsi di informatica.Come si può scrivere CoffeeScript in CoffeeScript?

Ho sentito parlare di persone che scrivono lingue nella lingua di destinazione per interpretare utilizzando compilatori esistenti per quella lingua, ma non riesco a trovare informazioni su come questo potrebbe funzionare poiché questa è la prima implementazione.

La mia ipotesi è uno script di shell incorporato che potrebbe prendersi cura di, che stabilisce alcune del quadro iniziale per la costruzione di un autoreferenziale (significa questo termine correttamente descrivere questo comportamento?) lingua?

+4

http: //en.wikipedia.org/wiki/Bootstrapping_ (compilatori) –

+3

essere avvisati che * è necessario * conoscere bene Javascript per codificare in CoffeeScript, dal momento che tutti gli errori di runtime puntano alla sorgente compilata. –

+0

Terminologia: si potrebbe dire che il compilatore di CoffeeScript era ** bootstrap ** dall'implementazione originale di Ruby. Potresti anche dire che il linguaggio di CoffeeScript è ** self-hosting **. – Quuxplusone

risposta

46

Questo non è niente di nuovo. I compilatori C sono stati scritti in C. Python has been written in Python.

È possibile utilizzare un compilatore per Language X per compilare una versione più recente di se stesso, con più funzioni. Si chiama bootstrapping.

A proposito, se volete saperne di più su compilatori, pur avendo perso al uni, dare un'occhiata a Learning to write a compiler — specificamente , the Dragon Book.

+0

Ho sentito pronunciare il termine Bootstrapped in precedenza, ma non ne ho avuto una chiara comprensione. Questo è davvero interessante, grazie per gli ottimi link, farò qualche lettura su bootstrap. Ho sentito parlare del libro dei draghi e ho letto "Deve leggere i libri di programmazione" su SO, dovrò verificarlo – Hortinstein

+1

Sono d'accordo con Matt. Ma, se vuoi imparare Coffeescript, consiglio vivamente di imparare Javascript prima. Può sembrare un po 'alieno rispetto a persone provenienti da ambiti linguistici diversi, ma i suoi concetti (come la funzione e la base del prototipo) sono utili per una varietà di soluzioni e framework software/applicativi. Ancora una volta, Coffeescript compila su Javascript. Quindi, ovviamente, nascosto sotto le classi e concetti dall'aspetto diverso in CS, i concetti di Javascript giocano un ruolo importante. E leggi The Dragon Book per capire come funzionano i compilatori. – NirmalL

42

La risposta di Matt è eccellente. Lasciatemi elaborati con una certa CoffeeScript-specifici info:

La versione originale del compilatore CoffeeScript è stato scritto in Ruby, ma è stato la transizione a CoffeeScript per v0.5.0, il 21 febbraio, 2010.

Come questione pratica, il compilatore bootstrap può rendere le cose difficili con un linguaggio in continua evoluzione, in quanto il compilatore deve essere riscritto per accogliere tali cambiamenti. Questo paragrafo dai documenti ufficiali vi dà un'idea delle sfide coinvolte:

git checkout lib && bin/cake build:full è un buon comando da eseguire quando si lavora sul linguaggio di base. Aggiornare la directory lib (nel caso in cui si sia rotto qualcosa), compilare il compilatore modificato, utilizzarlo per ricostruirsi (un buon test di integrità) e quindi eseguire tutti i test. Se passano, ci sono buone probabilità che tu abbia fatto un cambiamento di successo.

La directory lib contiene il JavaScript compilata del compilatore CoffeeScript (capito?), Fornendo un intermediario utile nel processo di avvio. Poiché il codice CoffeeScript del compilatore non esegue mai direttamente su su se stesso, ciò rende più facile apportare modifiche alla lingua.

+3

vorrei poterlo più sopra, grazie per aver dato specifiche di lingua. – Hortinstein