Domanda

Supponiamo che tu abbia bisogno di un compilatore C.Sarebbe preferibile scrivere quel compilatore in una lingua simile a C, data la complessità di un compilatore di quel grado.Nel migliore dei casi, il compilatore C sarebbe scritto in c, ma ciò richiederebbe che un compilatore C inizi.Se un errore è fatto nella realizzazione di una delle prime iterazioni dei compilatori, potrebbe propagarsi.In che modo i compilatori assicurano che questo non accada?Ovviamente, nessun codice è impeccabile, nemmeno il processore è, ma se non hai in qualche modo misurato la stabilità, non sai nemmeno se il tuo compilatore è stabile.Quali supposizioni sono fatte e come è giustificato?Immagino che sia anche dipendente dall'architettura.

Modifica: per stabilità, intendo che il codice funziona come previsto.

È stato utile?

Soluzione

La parola che gli scrittori del compilatore usano per questa è la "conformità".Un compilatore implementa correttamente la specifica della lingua è conformante.Ci sono aziende che, come parte della loro attività, vendiamo test di conformità per vari standard, compresi i linguaggi di programmazione.

È raro per gli errori propagare attraverso le generazioni del compilatore da incidente (anche se è successo su proposito ).

Altri suggerimenti

Succede che i compilatori contengano errori sottili.Nessun errore sfacciato, poiché gli errori sfaccianti saranno rilevati e fissi.

Un compilatore che è se stesso compilato da un compilatore con errori sottili tenderà ad avere errori sfaccianti.Saranno facili da rilevare perché sono così sfacciati.Saranno difficili da risolvere perché questi errori sfaccianti saranno prodotti da un codice sorgente perfettamente fine, quindi chi vuole aggiustarlo avrà difficoltà a trovare il problema reale.

La soluzione sarà quella di realizzare un compilatore di qualità sufficiente che gli insetti sono molto rari ed estremamente rari all'interno del compilatore.Ci aspettiamo anche che i bug del compilatore influiscano di più il codice molto complicato, quindi lo scrittore del compilatore dovrebbe scrivere il codice semplice e segue i modelli di codifica comuni.

Una risposta è test, test, test.Per esempio.GCC viene fornito con un set di test sempre crescenti che vengono controllati ogni volta che il compilatore è stato costruito.Molti compilatori sono tenuti a superare il cosiddetto Test Triple Test: compilare il codice per il tuo compilatore C usando compilatore A, dando c_1;Compilare c con c_1 dando c_2, compilare c con c_2 dando c_3.Ora c_2 e c_3 sono stati compilati con c e dovrebbero essere uguali.In caso contrario, qualcosa che pescante sta succedendo.

Dai un'occhiata a Regher's "Incorporato in Academia" Blog, è una delle persone che lavorano intorno alStrumenti del compilatore LLVM e tocca regolarmente sugli strumenti e sulle tecniche utilizzate per rendere il compilatore migliore (o automatizzare parti dell'edificio).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top