PDA

Visualizza la versione completa : [OT] Implementare un linguaggio di programmazione


l'anna
21-08-2011, 12:48
Ciao a tutti, premesso che non intendo osare tanto, mettermi a scrivere un linguaggio di programmazione, non saprei proprio da dove iniziare e non ne ho le capacità!,
comunque solo per curiosità vorrei chiedere:

i linguaggi di programmazione sono a loro volta dei programmi, giusto?
E in linguaggio sono stati scritti?
Ad esempio, il C in che linguaggio è stato scritto?

Scusate per la mia somma ignoranza :spy:

Grazie!

MItaly
21-08-2011, 17:15
Originariamente inviato da l'anna
i linguaggi di programmazione sono a loro volta dei programmi, giusto?
I compilatori o gli interpreti.


E in linguaggio sono stati scritti?
In genere in C (o un po' più di rado in C++), dato che sono linguaggi estremamente efficienti, di livello sufficientemente basso per poter scrivere il runtime di altri linguaggi e ne esistono compilatori per praticamente qualunque piattaforma.


Ad esempio, il C in che linguaggio è stato scritto?

Può sembrare paradossale, ma praticamente tutti i compilatori C attuali sono scritti... in C, e sono "self-hosting" (ovvero, in genere sono compilati con sé stessi).
Il trucco è che se devi creare un compilatore C per un'altra architettura, comunque hai già un computer su cui gira un compilatore C, per cui puoi scrivere un nuovo back-end (ovvero, generatore di codice, ottimizzatore, linker, ...) del compilatore C che già hai in modo che sia in grado di generare un eseguibile in formato comprensibile alla nuova piattaforma per cui vai ad effettuare il porting (il processo di compilare per un'altra piattaforma è detto "cross-compiling").
A questo punto, si copia l'eseguibile così creato sul computer di destinazione (magari dopo averlo usato per compilarne il sistema operativo), e gli si fa ricompilare sé stesso diverse volte, ottenendo così un compilatore "nato" completamente sul nuovo sistema operativo.

Se non è possibile effettuare questo processo (cosa però che ormai non capita praticamente più), si parte da zero, ovvero dall'assembly, con cui si scrive una versione ridotta all'osso del compilatore, con le sole caratteristiche fondamentali; a questo punto si può scrivere un compilatore più completo usando questo subset del linguaggio che si è implementato, e così via.

L'intero processo è detto bootstrapping del compilatore, puoi leggere qualcosa in proposito qui (http://en.wikipedia.org/wiki/Bootstrapping_%28compilers%29).

l'anna
21-08-2011, 18:25
Grazie infinite per la esaustiva e chiara risposta, finalmente mi son tolta la curiosità,
ora approfondisco nel link che hai suggerito:
grazie!

MItaly
21-08-2011, 18:44
:ciauz:

Loading