Metodi di compilazione in linguaggio di programmazione interpretato come app c ++ indipendente

0

Sto scrivendo un'implementazione interpretata di un nuovo linguaggio di programmazione (solo per divertimento). In questa implementazione il linguaggio viene prima compilato in un linguaggio intermedio, che viene poi interpretato da un interprete. L'interprete è scritto in Mono C #. Tuttavia ho avuto questa idea di tradurre metodi, che non restituiscono dati al codice C ++ e quindi compilare questo codice e avviarlo in fase di runtime. In questo modo alcuni metodi potrebbero essere eseguiti più velocemente. Sarebbe considerato una cattiva pratica / idea?

    
posta 107MP 18.07.2016 - 19:20
fonte

3 risposte

1

Would that be considered as a bad practice/idea?

Enh? Il mio primo istinto è che non guadagneresti molto in termini di prestazioni. Girare un nuovo processo e inviare i dati è un po 'pesante.

Il mio secondo istinto è che non sono sicuro di quanto generale sarai in grado di farlo. Solo perché i metodi non restituiscono dati non significa che non funzionano con i dati. Hai ancora bisogno di essere in grado di trasformare i dati dell'interprete in un formato in cui il codice C ++ può arrivare. E poiché la maggior parte delle lingue consente effetti collaterali, il codice C ++ dovrà essere in grado di apportare modifiche e inviare i dati indietro. No, "allora rileverò se il codice ha effetti collaterali" non è una soluzione praticabile poiché questo è un problema generalmente irrisolvibile per le lingue di qualsiasi complessità.

Se scegli un linguaggio compilato come target, probabilmente stai meglio facendo compilare un compilatore per indirizzare quella lingua piuttosto che interpretare a metà le cose.

    
risposta data 18.07.2016 - 19:36
fonte
0

C'è una storia più lunga di implementazione delle lingue convertendole in una seconda lingua e poi con la compilazione dell'intervista. C ++ e NO sono stati entrambi fatti in questo modo.

    
risposta data 18.07.2016 - 20:09
fonte
0

Questo è ciò che fanno JITters. È una buona idea, ma non aiuterà le prestazioni a meno che non lo facciate per il codice più interno - cioè il codice in cui il contatore del programma viene più spesso trovato. C'è poco da guadagnare ottimizzando il codice che è relativamente raramente eseguito.

Il programma trascorre la maggior parte del tempo in attesa di I / O, quindi l'ottimizzazione non sarà d'aiuto, a meno che non sia possibile eliminare l'I / O.

A proposito, se dimentichi di scrivere l'interprete e di generare direttamente C ++, anche questo è un ottimo modo per andare. Ottieni sia le prestazioni del C ++, sia l'accesso a tutte le funzioni della libreria disponibili per esso.

    
risposta data 18.07.2016 - 20:24
fonte

Leggi altre domande sui tag