Qual è il vantaggio di apprendere e comprendere la costruzione del compilatore?


10

Sono un laureando nel mio terzo anno di laurea in Ingegneria del Software. Da quest'anno, la mia università ha introdotto un nuovo corso chiamato "Compiler Constructions", che ti insegna le basi della teoria della costruzione di un compilatore.

Quale sarebbe il vantaggio reale per un ingegnere del software di imparare a costruire un compilatore?


2
Anche se non mi pento assolutamente di aver seguito il corso sui compilatori, è stato il più duro che abbia mai avuto. La maggior parte dei corsi CSci o aveva una teoria significativa che doveva essere appresa, o molta programmazione, non entrambi. I compilatori avevano entrambi.
David Thornley,


1
L'ho fatto anche a uni nel mio terzo anno. - È stato il secondo miglior modulo che ho seguito in tutto il corso (dopo l'IA).
TWith2Sugars,

@ TWith2Sugars: Perché dovresti dire che CC è uno dei migliori?
Nipuna,

1
il penny è caduto più volte per me in classe - oltre a un docente coinvolgente e compagni decenti, l'ho reso qualcosa che mi è davvero piaciuto. Uno di quei momenti che ricordo è che abbiamo iniziato a fare espressioni grammaticali all'inizio e il docente ha detto "Questo non avrà senso fino al secondo termine" - Il secondo termine è quando abbiamo iniziato a costruire il resto del compilatore (1 ° termine abbiamo costruito un parser / tokeniser). Questo per me lo ha reso un ottimo modulo.
TWith2Sugars,

Risposte:


12

C'è un lato pratico nell'apprendimento della costruzione del compilatore. Ci sono state diverse occasioni in cui ho avuto bisogno di creare parser per implementare un linguaggio di comando specifico dell'app. Mi ha permesso di creare interfacce flessibili e programmabili per l'app.

Ti dà anche una visione più ampia del perché alcune lingue sono progettate come sono e perché nessuna lingua è perfetta.

È un corso difficile, uno dei più difficili nel curriculum. Ho fatto l'errore di prenderlo durante una sessione estiva; mai seguire un corso per compilatori in una sessione estiva, il tuo cervello esploderà.


5
+1 per l'esplosione del cervello. Inoltre, non rimandare mai la scrittura del compilatore fino alla fine del semestre! Lo so per esperienza ...
Jeremy Heiler,

20

Oh è buono. Prendilo, non te ne pentirai.

Ottieni informazioni sulla magia dei linguaggi di programmazione, sulle loro caratteristiche comparative, sulla trasformazione del codice di alto livello nella sua forma eseguibile. Comprenderai meglio molte funzionalità linguistiche, avrai una visione più ampia di ciò che è possibile e di come sono fatte. Vedrai tutto con occhi diversi.

È saggio passare il tempo all'università per imparare le cose fondamentali di CS. Linguaggi di programmazione concreti, strumenti e librerie vanno e vengono tutti, ma la fondazione rimane.

Inoltre, se sopravvivi al corso (a condizione che sia serio) puoi congratularti con te stesso per avere il cervello giusto per la programmazione. Ottieni qualche progetto pratico fatto con questa teoria, menzionalo nel tuo curriculum e susciterai molto interesse con buoni datori di lavoro.


2
Inoltre ti dà un'idea di cosa sia un linguaggio buono / cattivo, che è un argomento regolare qui intorno.
JBR Wilkinson,

8

Decisamente!

Ad esempio, potrebbe non essere un argomento che utilizzeresti quotidianamente come una classe di database, la comprensione dei compilatori ti fornirà un'ottima base.

Un esempio simile sarebbe una classe di sistemi operativi. Potresti essere un programmatore e non pensare a come funziona un sistema operativo ogni giorno, ma avere le basi su di esso ti aiuterà a lungo termine.


2
Il mio corso di laurea OS è stato il primo posto in cui ho dovuto capire davvero la concorrenza. Era estremamente pratico. Il mio corso di lingue di programmazione per studenti universitari era il migliore quando stavamo scrivendo parser.
appena dal

Per qualche motivo nel mio terzo anno ho rimosso il modulo OS :( Volevo davvero farlo anche
io

6

Sì! Il corso ti fornirà una comprensione molto più approfondita dell'analisi del linguaggio di programmazione, dei tipi di dati e delle funzioni e di come tradurlo in codice macchina per CPU specifiche: s.

Questo, di per sé, potrebbe non essere molto pratico nell'uso quotidiano, ma ti darà la certezza di sapere effettivamente come funzionano le cose . Questo è molto utile (parlando con esperienza qui) quando devi fare un'ottimizzazione di basso livello e trovare quei bug davvero cattivi, che hanno tutti gli altri sconcertati.


4

Al giorno d'oggi c'è un sacco di buzz sulle lingue specifiche del dominio . E valgono davvero tutto il brusio, il loro vero potenziale deve ancora essere esplorato . Quindi, le abilità di costruzione dei compilatori diventeranno non solo importanti ma essenziali in futuro. Dedico circa il 60% del mio tempo di sviluppo all'implementazione di compilatori eDSL, anche se l'attuale problema non è affatto direttamente correlato ai compilatori.


cosa intendi per compilatori eDSL?
Nipuna,

1
Poiché sto usando linguaggi che supportano la metaprogrammazione, ogni linguaggio specifico di dominio incorporato che implemento è praticamente una macro di compilatore. Alcuni sono abbastanza complicati, con il loro sistema di tipi e numerosi passaggi di traduzione, alcuni sono banali, ma tutti sono compilatori. Nessun punto negli interpreti a meno che non siano realmente necessari.
SK-logic,

1

Vale la pena seguire un corso per capire come vengono costruiti gli strumenti che verranno utilizzati per l'intera carriera di programmatore (ad es. Compilatori, interpreti, parser) e quali sono le limitazioni.

Vale anche la pena farlo in un contesto accademico, in quanto espone i fondamenti interessanti e non le molte complessità del mondo reale, che è disordinato e impantanato nel trattare con linguaggi e architetture legacy, cioè molta complessità. È anche più probabile che tu possa lavorare su tutti gli aspetti di un compilatore per costruirne uno intero per un corso, piuttosto che lavorare su uno nel settore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.