Attualmente sto lavorando all'implementazione di un nuovo linguaggio di programmazione, per divertimento. Mi rendo conto che la maggior parte delle lingue non diventano mai popolari, ma voglio comunque che il linguaggio abbia un'implementazione di alta qualità. Il linguaggio è vagamente lisp-like. Supporta chiusure, continuazioni di prima classe, una sintassi omoiconica, funzioni di prima classe, ecc. Inoltre, voglio che il mio linguaggio sia in grado di accedere a un codice di libreria già stabilito (in particolare la libreria Java standard, ecc.)
La compilazione dinamica in codice byte JVM è essenzialmente fuori questione, a causa della difficoltà di implementare il set di funzionalità dichiarato (escluse le funzioni di prima classe) utilizzando una macchina virtuale che non è progettata per supportarlo. D'altro canto, la compilazione in C / C ++ o qualche altro linguaggio di livello inferiore porterà ad un grado indesiderato di dipendenza dalla piattaforma e / o ridurrà / rimuoverà la possibilità di utilizzare la libreria standard Java tramite programmi scritti nella mia lingua. / p>
Il mio approccio (in gran parte completato) all'implementazione consiste nell'implementare un interprete di p-code personalizzato in Java. Il linguaggio di alto livello semplicemente compila il suo codice al volo essenzialmente su una serie di istruzioni per questa macchina virtuale personalizzata. Ogni istruzione è un oggetto che implementa un'interfaccia comune. Quando vengono eseguite, le istruzioni manipolano una macchina stack. Sfortunatamente, l'esecuzione di ogni istruzione richiede una chiamata al metodo virtuale; mentre la normale implementazione di tali interpreti non utilizza istruzioni basate su oggetti. Tuttavia, gli attuali micro-benchmark e le stime basate su ipotesi indicano che l'implementazione completata dovrebbe corrispondere alla velocità di Python, dati i programmi equivalenti.
Quindi pensi che questo metodo di implementazione sia pazzesco o amatoriale, visti gli obiettivi di progettazione della lingua?
Che cosa faresti in modo diverso?