Quali sono i vantaggi di un linguaggio interpretato ha più di un linguaggio compilato? [duplicare]

StackOverflow https://stackoverflow.com/questions/1654156

  •  11-09-2019
  •  | 
  •  

Domanda

  

Eventuali duplicati:
   Che cosa è con l'amore di linguaggi dinamici

ho già letto questo , ma io non capisco.

A che sta facendo il proprio interprete. Inoltre, si dice indipendenza dalla piattaforma. Dopo tutto il grado di indipendenza dalla piattaforma è limitata da ciò che tutte le piattaforme vostro interprete può essere eseguito su. Quindi, non vedo alcun vantaggio.

Inoltre, non so nemmeno un buon uso di dinamica digitazione . È inutile che mi sento. Naturalmente, mi sbaglio, perché ci sono così tante lingue dinamicamente tipizzati là fuori.

Qualcuno può aiutarmi qui? grazie.

È stato utile?

Soluzione

I linguaggi dinamici sono molto molto conveniente per le cose semplici. Diciamo che si desidera scrivere un piccolo programma che si diff tra due file. In Python ciò che si fa è:

file1 = open(<filename>)
file1.read()
file1.split('\n')
#same for file2
for line in file1:
    if line not in file2:
         print line

in modo file1 partirà come FD. Poi si trasforma in una stringa. E infine un elenco. Lo stesso programma 9-codice vorranno almeno il doppio dei file su Java.

Il problema inizia quando si vuole scrivere programmi molto grandi e lavorare in una squadra. Gestire API e interfacce è molto più facile in Java.

Altri suggerimenti

  

A che sta facendo il proprio interprete. Inoltre, si dice indipendenza dalla piattaforma. Dopo tutto il grado di indipendenza dalla piattaforma è limitata da ciò che tutte le piattaforme vostro interprete può essere eseguito su. Quindi, non vedo alcun vantaggio.

Bene, si scrive l'interprete utilizzando un linguaggio che già esiste. Quindi, se si sceglie uno che gira su piattaforme potrebbero (come, per esempio, Python), poi su una di queste piattaforme qualcuno può ottenere il vostro interprete e usarlo. Così, per esempio, se si scrive l'interprete su Windows posso fare funzionare lo stesso interprete su Linux e continuerà a lavorare.

Tuttavia, se tu avessi scritto un compilatore, lei stesso avrebbe dovuto scrivere il generatore di codice per ogni piattaforma. Così, per esempio, se hai scritto il compilatore in modo che ha funzionato bene per voi su Windows, quando provo a farlo funzionare su Linux genera il codice per Windows, non Linux, quindi non funzionerà. Si avrebbe bisogno di fare lavoro extra, l'aggiunta di un generatore di codice per Linux, prima che potessi usarlo.

  

Inoltre, non so nemmeno un buon uso della tipizzazione dinamica. È inutile che mi sento. Naturalmente, mi sbaglio, perché ci sono così tante lingue dinamicamente tipizzati là fuori.

Credo che i linguaggi dinamici sono popolari per due motivi.

In primo luogo, sono più facili da scrivere. sistemi di tipo richiedono un lavoro supplementare per ottenere destra.

In secondo luogo, perché gli utenti linguaggio dinamico non hanno bisogno di capire un (statica) sistema di tipo, molte persone trovano linguaggi dinamici più facile da usare. Così tante persone li preferiscono.

Inoltre, la teoria dietro lingue tipizzati è molto migliorato negli ultimi dieci anni. Sono molto più flessibile e potente. Quindi più vecchio tipizzato lingue sono meno flessibili e digitato lingue in generale, hanno ancora la reputazione di essere rigidi.

Per quanto mi riguarda, la sua prototipazione rapida. Anche se mi sono state le immersioni più in 'gravi' Python in questi giorni, ho principalmente usato solo per martello fuori concetti che avrei poi ri-scrittura in C. Credo che sia stato l'autore di Minix, che predicava che la maggior parte dei programmi C di solito sono nati (no pun intended) come script di shell.

Io uso PHP per applicazioni web, così come i servizi di prototipazione che fanno affari seri con un database che sono anche ri-fatto in C una volta che ho un concetto Sono contento.

Come ho detto, sto cominciando a fidarsi di Python di più (e la mia abilità a usarlo), quindi un po 'di roba nata in Python sarà solo rimanere in quel modo. Ma questo è connessi al mio punto, ho detto semplicemente in modo da non infastidire gli appassionati di Python:)

Un altro punto è, in realtà dipende dalla lingua. Dinamicamente tipizzati lingue offrono una promessa molto allettante di rapido sviluppo, che è fondamentale per molte persone che hanno bisogno di ottenere applicazioni complesse basate su web attivo e funzionante.

Con poche eccezioni, vorrei scegliere C o C ++ se stavo scrivendo qualcosa di assolutamente mission critical, in particolare dove il tempo / cronometro è stato fondamentale.

E 'semplicemente più facile scrivere un interprete di un compilatore. Non v'è (di solito) meno codice da scrivere.

Per eseguire un programma in un linguaggio, è necessario (1) leggere il codice sorgente in modo da poter rappresentare in qualche formato interno (di solito un albero), ed è necessario (2) un sistema di run-time. Quelle cose sono necessari se si utilizza un compilatore o un interprete.

Se si scrive un interprete per la lingua, è abbastanza facile per aggiungere la fase di effettiva esecuzione. Se hai appena esegue la rappresentazione ad albero del programma, non richiede molto codice. (Ma è essere molto più lento rispetto ad altri approcci.)

Per un compilatore, è necessario tradurre in (di solito) una lingua completamente diversa, e anche (di solito) di inserire l'infrastruttura per la gestione del flusso e le risorse del programma. Questo è molto più lavoro.

Una shell interattiva è uno dei vantaggi di un linguaggio interpretato. In questo modo il codice per essere valutato e testato come è scritto. E 'molto più veloce da "solo scrivere del codice" che in una lingua che si aspetta di scrivere un intero programma e quindi compilare prima. Nelle linee di codice la differenza potrebbe non essere molto grande, ma il processo di sviluppo è diverso.

Non necessariamente deve scegliere tra interpretato e compilato. Alcune lingue hanno sia un'implementazione interpretato e le implementazioni compilati per esempio Python / Jython / IronPython. In questo modo i vantaggi di sviluppo del interprete e le prestazioni e portabilità vantaggi di una macchina virtuale (JRE / CLR).

I vantaggi di Wikipedia parla sono vantaggi per implementor lingua , non l'utente lingua . Per l'utente linguaggio lo svantaggio più importante è più lenta velocità di esecuzione di codice interpretato. Un vantaggio è che il codice può essere eseguito immediatamente: non c'è bisogno di aspettare per la compilazione per terminare. Questo non è davvero un vantaggio se si dispone di un compilatore veloce e incrementale (ad esempio compilatori Lisp, F # interattivo). Compilazione e quindi l'esecuzione è più veloce di interpretare il codice che viene eseguito più di pochi millisecondi. Se il codice richiede meno tempo di quello che ci si sente istante in entrambi i modi.

E 'perfettamente possibile avere la tipizzazione dinamica, un REPL, scoping dinamico, eval e la gestione automatica della memoria in un linguaggio compilato. Ad esempio C # ha tipizzazione dinamica e gestione automatica della memoria, F # e OCaml avere un REPL, gestione automatica della memoria e Lisp ha tutto quanto sopra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top