I compilatori sono usati al di fuori dello sviluppo?

14

Per quanto ne so, i compilatori sono pensati per gli sviluppatori che compilano il loro codice in file eseguibili (codice macchina). I compilatori non si estendono alla macchina di un cliente o al sistema dell'utente finale.

Invece, gli sviluppatori usano semplicemente il compilatore per convertire il loro codice in codice macchina, che viene poi trasportato alle altre macchine per l'uso come applicazioni.

I compilatori hanno una funzione al di fuori di questo processo? Se sì, quando vengono utilizzati?

    
posta Pankaj Upadhyay 30.08.2011 - 16:33
fonte

8 risposte

19

Sì e no. Sì, lo scenario classico è uno sviluppatore che utilizza un compilatore per generare codice macchina dal codice sorgente e il codice macchina viene quindi distribuito agli utenti.

ci sono tuttavia alcune eccezioni. Innanzitutto, molti progetti open source sono distribuiti principalmente (o anche solo in forma di codice sorgente) e si aspettano che l'utente li installi digitando un paio di comandi come make e poi make intall . Questo invocherà il compilatore, il linker, ecc., Per generare il codice macchina dal codice sorgente per quel computer degli utenti. In questi casi, tuttavia, il processo di creazione e installazione è (almeno inteso per essere) automatizzato al punto che l'utente raramente ha bisogno di molta conoscenza al di là del fatto che se non ha mai installato un pacchetto solo codice sorgente in precedenza , il loro gestore di pacchetti in genere elencherà alcuni pacchetti di "sviluppo" come prerequisito per l'installazione dell'applicazione a cui tengono veramente (anche se alcuni lo considerano ancora ostile agli utenti finali).

Un'altra eccezione (che è stata accennata, ma non spiegata molto bene nelle altre risposte che ho visto) è compilatori just-in-time (JIT). Un paio di ovvi esempi di compilatori JIT sono Microsoft Common Language Runtime (CLR) e Java Virtual Machine (JVM). In questi casi, normalmente ci sono due compilatori completamente separati coinvolti nella traduzione del codice sorgente in codice macchina. Uno è usato dallo sviluppatore. Tuttavia, anziché generare direttamente il codice macchina, genera un codice byte indipendente dalla macchina. CLR / JVM include quindi un compilatore secondo , completamente separato dal primo, che converte quei codici byte in codice macchina per il computer di destinazione.

Devo aggiungere che il secondo compilatore non è strettamente necessario. Le prime versioni di JVM (per un esempio) hanno semplicemente interpretato i codici byte invece di compilarli. Questo spesso comporta una penalizzazione delle prestazioni abbastanza grave, quindi le JVM più ragionevolmente recenti destinate all'uso di produzione includono un compilatore JIT.

    
risposta data 30.08.2011 - 17:42
fonte
24

Sì, i compilatori sono utilizzati principalmente dagli sviluppatori, con un paio di eccezioni notevoli. Gli utenti finali a volte usano compilatori per compilare e installare il software open source più recente, anche se non apportano alcuna modifica al codice. Inoltre, alcuni linguaggi di programmazione non hanno compilatori. Usano invece interpreti che "compilano" al volo. In tal caso, gli utenti finali devono avere l'interprete installato sui loro computer.

    
risposta data 30.08.2011 - 16:41
fonte
10

Un compilatore è definito come un programma che traduce il codice da una lingua all'altra (vedi Wikipedia ). L'uso più comune dei compilatori è tradurre la lingua sorgente in codice macchina, ma questo definisce la parola "compilatore".

Ad esempio, Python genera un codice byte quando importa un modulo, e quindi rientra nella definizione di un compilatore (perché converte dal linguaggio sorgente, Python, nella lingua di destinazione, codice byte Python).

Un altro esempio è il motore JavaScript V8. È converte JavaScript nel codice macchina x86 , e quindi si adatta anche alla definizione di un compilatore. V8 non solo si adatta alla definizione di un compilatore, ma è incluso in Chrome ed è ampiamente utilizzato sui computer client.

    
risposta data 30.08.2011 - 17:05
fonte
4

Un caso sarebbe per un'applicazione che generava dinamicamente il codice in fase di esecuzione e quindi eseguiva il codice generato. Questo codice dovrebbe essere compilato in fase di runtime.

Modifica: ci sono altre eccezioni, ma erano già state citate in altre risposte.

    
risposta data 30.08.2011 - 17:18
fonte
3

compilers are meant only for developers for compiling their programming-language code to executable(machin-code) files

Direi che "i compilatori sono considerati primari per gli sviluppatori ...". Ma ho visto esempi in cui i programmi generano un nuovo codice linguaggio di programmazione al volo e quindi hanno bisogno di un compilatore da installare sul computer degli utenti finali. Ciò non significa che l'utente finale debba lavorare con il compilatore da solo.

Possibili ragioni per la progettazione di questo programma:

    Prestazioni
  • : pensate a un'applicazione basata su regole in cui le regole sono memorizzate in una sorta di archivio dati dell'utente finale e avete alcuni dati di massa che devono essere elaborati da tali regole. Invece di interpretare più e più volte le regole, un programma genera prima il codice di elaborazione, lo compila e lo esegue rispetto ai dati da elaborare

  • pensa a un programma in cui l'utente finale può aggiungere una qualche formula matematica e lo sviluppatore del programma non vuole implementare il proprio parser / interprete per questo. Invece, il programma prende questa formula, fa alcune aggiunte per trasformarlo in una parte valida del codice del programma, lascia che il compilatore lo compili e lo esegua in seguito.

risposta data 30.08.2011 - 16:52
fonte
2

Esatto - i compilatori compilano il codice sorgente in un formato eseguibile, che viene poi collegato a un file binario eseguibile da un linker. Il codice sorgente può anche essere eseguito direttamente da un interprete come una delle tante shell della riga di comando (C-shell, bash, zsh, ecc.), Awk, sed, e così via.

Può essere difficile tracciare una linea chiara tra "sviluppatore" e "utente finale" a meno che non si limiti la discussione a un prodotto specifico. Gli sviluppatori sono tutti "utenti finali" degli strumenti che utilizzano e gli "utenti finali" potrebbero avere strumenti di sviluppo come compilatori e interpreti installati sulle loro macchine.

    
risposta data 30.08.2011 - 16:41
fonte
1

Gli amministratori potrebbero anche aver bisogno di usare i linguaggi di programmazione nella scrittura di script per eseguire varie attività automatizzate. Ad esempio, disporre di uno script che elimina i vecchi file di registro da un server dopo 90 giorni per liberare spazio su disco. Il linguaggio utilizzato per scrivere lo script deve essere interpretato o compilato in modo che possa essere eseguito sul sistema.

    
risposta data 30.08.2011 - 16:59
fonte
1

Alcuni programmi sono meta-programmi : durante l'esecuzione, potrebbero generare qualche altro programma (o qualche codice sorgente) e compilare quindi eseguirlo in qualche modo. Leggi anche la programmazione multistadio .

Quindi per usare questo tipo di programmi, sarebbe necessario un compilatore, anche se l'utente non sa come programmare se stesso (perché il computer genererebbe del codice che deve essere compilato).

Per un esempio, vedi MELT (che genera codice C ++ per estendere GCC ) o il CAIA sistema di intelligenza artificiale di J.Pitrat ( che generano il codice C, in particolare il proprio codice, per risolvere problemi combinatori).

Inoltre, alcune lingue e alcune implementazioni richiedono quasi che un compilatore sia presente ovunque (in ogni programma codificato in quella lingua e implementazione). Innanzitutto, diversi browser Web contengono un motore Javascript JIT (come V8 ). Inoltre, la maggior parte delle implementazioni Common Lisp -e.g. SBCL - contiene un compilatore (utile anche per l'esecuzione di applicazioni, che potrebbero generare e valuta espressioni). Leggi anche le lingue omoiconiche e Programmi Qine .

    
risposta data 04.12.2014 - 19:13
fonte

Leggi altre domande sui tag