2010-09-14 18 views
9

Perché il compilatore non può compilare semplicemente il mio codice mentre lo digito?Perché il compilatore non può compilare semplicemente il mio codice mentre lo digito?

Dal punto di vista dell'utente, potrebbe funzionare senza problemi come la colorazione della sintassi oggi. Se smetti di digitare abbastanza a lungo (forse un paio di secondi) la compilazione (non il collegamento) finirebbe e gli errori di codice verrebbero identificati usando qualcosa come la colorazione della sintassi.

Non è che il mio computer mostro quad core 3GHz fosse davvero impegnato a fare qualcos'altro. Perché non lasciarlo compilare tutto il tempo?

+2

Forse perché quando ce l'hai qualcuno vorrà spegnerlo. http://stackoverflow.com/questions/665747/disabling-the-vb-background-compiler-in-vs2008 –

+0

Che lingua stai usando? Al giorno d'oggi non è raro che gli IDE vengano compilati al volo. – nos

+0

Smetti di usare il Blocco note come editor e usa un vero IDE, quindi otterrai le funzionalità che chiedi :) – slugster

risposta

6

Questo è esattamente ciò che fa l'editor di codice VB.NET in Visual Studio.

Il vantaggio è molto più accurato di IntelliSense rispetto a C#. Lo svantaggio è che spreca enormi quantità di tempo e memoria del processore. :-(

+0

Lo stesso vale per F #. – sholsapp

+0

È solo uno spreco se non si usa _. – Rocketmagnet

+0

@Rocketmagnet: può rendere l'interfaccia utente lenta e interferire con i processi in background (ad esempio altri programmi). Non è come SQL Server in cui è possibile impostare un limite di memoria e utilizzo della CPU. – egrunin

3

Alcuni IDE compilano (o almeno controllano la sintassi e alcune semantiche) il codice mentre viene digitato. Ad esempio, penso che Eclipse lo faccia. Penso che Visual Basic 6 (e forse le versioni precedenti) hanno fatto questo.

+0

Per quanto ne so, Eclipse (almeno il JDT) esegue controlli di sintassi durante la digitazione, ma la compilazione effettiva (ovvero produzione di file di classe) viene eseguita solo quando si salva un file. (Questo potrebbe essere cambiato negli ultimi anni, però.) –

5

Può. O, per essere più utile, la risposta a questa domanda dipende

  1. Che lingua
  2. Che grado di ottimizzazione si richiede
  3. Come infastidito sarete se si digita temporaneamente qualcosa di stupido, e le compilazioni del compilatore e inietta il risultato nel file binario prima di poterlo correggere.

Alcune ottimizzazioni davvero forti sarebbero molto complicate da fare al volo. D'altra parte, una compilation di base, se non è necessario preoccuparsi di assegnare gli offset per le istruzioni X86? Sicuro.

3

Nota che IDE stai utilizzando, ma è così che funziona VB.NET.

2

Non sono esperto nei compilatori o nei metodi con cui il codice viene convertito in IL e linguaggio macchina, ecc. Ma anche così posso vedere come l'alterazione del mio programma da parte di un'istruzione di controllo del flusso può invalidare completamente il lavoro svolto da un compilatore fino a quel punto: aggiungendo o modificando una singola riga di codice, intere porzioni di un programma potrebbero diventare obsolete, inutilizzate o in qualche altro modo richiedere una rivalutazione:

Piuttosto, risparmia quei cicli di CPU per distributed.net o SETI @ Home invece di ricompilare continuamente il mio codice mentre lo altero

+2

Non eseguo SETI @ Home e la mia CPU non piangerà se butto via il suo lavoro. – Rocketmagnet

+0

Non sto suggerendo che i cicli di inattività della CPU sono cattivi, solo che potrebbero essere utilizzati per cose migliori. – JYelton

0

Che dipende totalmente dalla lingua

Le lingue con sintassi indipendente dal contesto "potrebbero" precompilare espressioni una volta digitate. Tuttavia, la compilazione di questo progetto di lingue è sempre veloce, quindi perché utilizzare la CPU quando è possibile eseguire rapidamente il lavoro in batch quando il codice è pronto?

Altri linguaggi, ad esempio C++, dipendono dal contesto. Nella maggior parte dei casi, il compilatore non può comprendere un'espressione senza aver già letto l'intero codice prima dell'espressione. È davvero difficile da analizzare ed è per questo che abbiamo il controllo degli errori prima della compilazione solo ora (in VS2010 e altri ide recenti). In questo caso sembra impossibile implementare la funzione che stai richiedendo.

Detto questo, non sono affatto uno specialista. Questo è tutto ciò che so a riguardo.

0

lingue Anche interpretati come PHP hanno il supporto per questo nell'editor Komodo. Sono sicuro che ci sono molti altri editor che supportano questo per quasi tutte le lingue.

Problemi correlati