Assemblatori utilizzati durante lo sviluppo di un linguaggio di programmazione?

-4

Attualmente sto progettando e sviluppando un linguaggio di programmazione da zero. Principalmente come esperienza di apprendimento. Anche se non è interamente correlato alla domanda, è importante conoscere un po 'del retroscena .

Ho un'idea abbastanza precisa di come trasformerò il codice della mia lingua nel codice assembly di destinazione, ma c'è un piccolo problema: quali assemblatori normalmente si usano quando si sviluppa e si crea un linguaggio di programmazione (come per generazione di codice)?

Per Windows, potrei teoricamente compilare la mia lingua nella sintassi MASM , ma non sarebbe disponibile su tutte le macchine Windows di destinazione che utilizzano il mio linguaggio di programmazione. E credo (non credermi sulla parola) ho letto da qualche parte che non ti è permesso raggrupparlo con il tuo software e ridistribuirlo.

Suppongo che si possa usare NASM , dato che funzionerebbe su Linux e ha il potenziale di lavorare anche su Windows. Ma sento che ci deve essere un altro modo. Sicuramente le persone non si sono affidate a software standalone per compilare i loro programmi in passato?

Esiste un assemblatore specifico per l'architettura in bundle con il sistema operativo in uso oppure è necessario fare affidamento su tale software sopra menzionato?

Sono sicuro che si potrebbe compilare solo a uno e zero con nessun passo intermedio di linguaggio assembly, ma suona un po 'noioso, non credi? ; -)

    
posta D. Ataro 23.04.2018 - 13:06
fonte

1 risposta

5

La maggior parte dei compilatori raggruppa un assemblatore e un linker come parte del loro back-end. Questi possono o non possono essere programmi autonomi. Ad esempio, LLVM non genererà un linguaggio di assemblaggio testuale, ma genererà il codice macchina direttamente dall'IR in memoria (rappresentazione intermedia). L'utilizzo di LLVM come libreria nel compilatore è il modo più semplice per ottenere un back-end del compilatore nativo di livello produttivo.

Si noti che molti linguaggi di programmazione non sono implementati come compilatori ma come interpreti, poiché gli interpreti sono generalmente molto più facili da sviluppare. Per esempio. potresti ottenere la garbage collection "gratuitamente" dalla lingua host, senza dover sviluppare un runtime di lingua oltre al compilatore.

    
risposta data 23.04.2018 - 17:48
fonte

Leggi altre domande sui tag