Cosa significa che "la lingua A è scritta nel linguaggio B"?

29

Spesso sento il termine che la lingua A è scritta nel linguaggio B. Ad esempio, PHP è stato scritto C , C # è scritto in C ++ .

Qualcuno può spiegare cosa vuol dire e se è anche corretto? Questo ha qualcosa a che fare con il compilatore dell'interprete usato dalla lingua?

Inoltre quali sono i fattori su cui si basa la scelta della lingua di implementazione?

    
posta Songo 20.11.2012 - 12:31
fonte

7 risposte

27

La maggior parte dei linguaggi di programmazione si divide in due categorie: lingue interpretate e compilate.

Una lingua compilata è tradotta da un compilatore in codice macchina , la lingua che la CPU esegue direttamente passo dopo passo. Un linguaggio interpretato, d'altra parte, utilizza un intermediario, un interprete , per eseguire il codice della lingua. L'interprete è di per sé un altro programma, solitamente compilato per codice macchina.

PHP è un linguaggio interpretato. È necessario un programma separato per eseguire codice PHP, il computer non esegue direttamente il programma. Quel programma separato, l'interprete PHP, è a sua volta scritto in C.

C # è un linguaggio compilato, ma non è compilato come codice macchina. Invece, è compilato in una lingua specialistica, codice byte, da eseguire su una macchina virtuale. Java è un altro esempio di tale impostazione. Lo si può vedere come un ibrido tra la compilazione e l'interpretazione, in cui la macchina virtuale è un interprete. La macchina virtuale per C # (la CLI, o Common Language Infrastructure ) è scritta in C ++.

Altri esempi sono:

  • Python: l'interprete Python compila il codice Python in bytecode Python, quindi interpreta il bytecode. L'interprete stesso è scritto in C. Da allora sono state aggiunte nuove implementazioni, inclusa una che compila python per l'esecuzione sulla stessa CLI utilizzata per C #, chiamato IronPython e uno che gira sulla macchina virtuale Java, Jython . Per completare la cerchia, c'è la versione di Python scritta in Python, PyPy .
  • Ruby: Ruby è iniziato come un puro linguaggio interpretato, ma la versione più recente è passata all'utilizzo di bytecode. Anche per Ruby esiste un progetto che viene compilato alla CLI, denominato IronRuby e uno per Java VM, JRuby .
risposta data 20.11.2012 - 12:40
fonte
34

Hai sostanzialmente ragione. Se si dice che Ruby è scritto in C, significa che l'interprete del linguaggio e le parti della libreria principale sono scritte in C.

Quindi l'interprete Ruby è un programma in C che prende un file di testo come input, lo elabora e poi chiama le funzioni che sono in un altro file di testo (se scritto in Ruby) o che sono compilati in codice C, come gran parte delle basi funzionalità che deve accedere direttamente alle risorse di sistema come la memoria, il file system e altro. E alcune funzioni che richiedono prestazioni molto elevate.

Quindi hai diverse parti di una lingua che possono o devono essere scritte in altre lingue. Nulla ti impedirebbe di scrivere l'interprete in C e le librerie in C ++ (anche se forse renderebbe alcune cose più difficili). Potresti anche avere più passaggi e usare un linguaggio che è molto bravo nell'elaborazione del testo per generare alcuni dati intermedi che poi vengono elaborati da un codice C.

I fattori per la decisione potrebbero essere uguali a quelli di altre applicazioni complesse. La prestazione è una. La possibilità di scrivere codice che può accedere direttamente alle risorse di sistema. Quindi nella maggior parte dei casi deve essere un linguaggio compilato (sebbene in teoria si possa scrivere un interprete Ruby in Python). La disponibilità su diversi sistemi è importante se vuoi che la tua lingua funzioni su Linux, Win, OS X e altri.

    
risposta data 20.11.2012 - 12:36
fonte
10

Significa semplicemente che la maggior parte del nucleo del linguaggio A è scritta nel linguaggio B. Quale "nucleo del linguaggio A" potrebbe differire da una lingua all'altra, ma in termini generali si può dire che è giusto, significa che è compilatore o interprete. Il fattore decisivo nel scegliere una lingua per scrivere un'altra lingua è, come in quasi tutti i progetti, con quali lingue gli sviluppatori hanno più familiarità.

Detto questo, "il linguaggio A è scritto nel linguaggio B" è una semplificazione eccessiva per la maggior parte delle lingue moderne. Se prendiamo Python come esempio, mentre l'implementazione di riferimento, CPython , è stata effettivamente scritta in C ci sono implementazioni scritte in altri lingue, come Jython (scritto in Java), IronPython (scritto in C #), PyPy (scritto in Python), CLPython (scritto in Common Lisp), Stackless Python (scritto in C e Python) e Unladen Swallow (scritto in C ++).

Un linguaggio di programmazione è una definizione e, come mostra l'esempio di Python, non ci sono davvero restrizioni su quali linguaggi possono essere scritti il compilatore, l'interprete e le librerie. E naturalmente è anche possibile scrivere una lingua di per sé, attraverso un processo chiamato bootstrap .

    
risposta data 20.11.2012 - 12:41
fonte
3

Dal punto di vista dell'uso di un linguaggio di programmazione, un linguaggio di programmazione è solo un programma. Potrebbe essere un compilatore o potrebbe essere un interprete o potrebbe essere una sorta di macchina virtuale. Tutte queste cose sono solo programmi per computer, e quindi possono essere scritte in qualsiasi lingua.

Quindi, se volessi creare la tua versione di PHP, potresti iniziare con qualsiasi lingua tu sia più fluente. Dovresti quindi scrivere un programma in grado di leggere il codice formattato in PHP e fare qualsiasi cosa specifichino le tue specifiche PHP programma dovrebbe fare. Stai quindi creando la lingua PHP nella lingua X.

    
risposta data 20.11.2012 - 12:59
fonte
3

Un fraseggio molto simile con un significato completamente diverso è "scrivere il linguaggio A nella lingua B", ad es. "scrivere C in Java".

Descrive il codice sintatticamente corretto in una lingua, ma utilizza strutture, idiomi e convenzioni da un'altra lingua. Nell'esempio "scrittura C in Java", i segni di questo sarebbero dichiarare tutte le variabili locali in cima a ciascun metodo, usando costanti intere invece di enumerazioni, usando identificatori_con_racconti_unders, ecc.

Tipicamente questo succede quando qualcuno ha lavorato con una lingua per un lungo periodo (specialmente quando ha lavorato solo con quella lingua) ed è molto nuovo alla lingua corrente (o non è interessato a scrivere pulito codice).

    
risposta data 20.11.2012 - 13:17
fonte
3

La tecnologia è un processo intrinsecamente iterativo. Iniziamo con strumenti semplici e poi usiamo questi strumenti per crearne di migliori. I primi linguaggi di assemblaggio erano praticamente le traduzioni 1: 1 dei bytecode di istruzione standardizzati per il chip; l'architettura 8086 e il suo assemblatore divennero dominanti su altre architetture come Z80, RISC, ecc. e così iniziammo a sviluppare linguaggi che potevano essere digeriti nell'assemblaggio 8086, come FORTRAN, COBOL, Pascal e C. Il programma che interpreta il codice sorgente di queste lingue devono essere scritte in qualcosa di più primitivo, altrimenti finisci in una discussione di gallina e uovo; se il codice sorgente per il primo compilatore C è stato scritto in C, allora cosa ha compilato il codice sorgente C e non sarebbe, per definizione, il primo compilatore C?

Fondamentalmente, "C # è scritto in C ++" dovrebbe essere inteso nel senso che il primo e / o il più popolare compilatore e le librerie runtime / core rispettano le specifiche del linguaggio C # (quelli di Microsoft .NET Framework e il comando -line programma di compilazione CSC.exe) sono scritti in C ++.

    
risposta data 20.11.2012 - 18:16
fonte
0

"La lingua A è scritta nel linguaggio B" significa che l'unica implementazione del linguaggio A (o l'unico ampiamente usato) è quello che è in realtà un progetto sviluppato nella lingua B e l'unico completo le specifiche aggiornate di A sono il codice sorgente B che lo implementa in modo tale che se la documentazione e il programma B non sono d'accordo, il programma B è generalmente ritenuto corretto.

    
risposta data 20.11.2012 - 17:32
fonte

Leggi altre domande sui tag