Qual è il significato della frase "volevamo che fosse compilato in modo che non stia bruciando la CPU facendo le cose sbagliate".

10

Leggevo questo articolo. Ha il seguente paragrafo.

And did Scala turn out to be fast? Well, what’s your definition of fast? About as fast as Java. It doesn’t have to be as fast as C or Assembly. Python is not significantly faster than Ruby. We wanted to do more with fewer machines, taking better advantage of concurrency; we wanted it to be compiled so it’s not burning CPU doing the wrong stuff.

Sto cercando il significato dell'ultima frase. In che modo il linguaggio interpretato farà sì che la CPU faccia cose "sbagliate"?

    
posta user2434 12.06.2012 - 09:55
fonte

4 risposte

47

Se il codice dice

A = A + 1

codice compilato fa questo

add A, 1

codice interpretato fa questo (o qualche variazione)

look up the location of A in the symbol table
find the value of A
see that 1 is a constant
get its value
add the value of A and the value of 1
look up the location of A in the symbol table
store the new value of A

ottieni l'idea?

    
risposta data 12.06.2012 - 10:15
fonte
13

we wanted it to be compiled so it’s not burning CPU doing the wrong stuff.

Sembra che si riferiscano a compilati vs interpretati. Molto probabilmente fino a tutta la storia di Twitter che sposta le attività di elaborazione in background su Scala (compilato) dopo lo sviluppo iniziale in Ruby On Rails (interpretato).

Una spiegazione del codice compilato vs interpretato qui .

With a compiled language, code you enter is reduced to a set of machine-specific instructions before being saved as an executable file. With interpreted languages, the code is saved in the same format that you entered. Compiled programs generally run faster than interpreted ones because interpreted programs must be reduced to machine instructions at runtime.

    
risposta data 12.06.2012 - 10:05
fonte
9

"Cose sbagliate" qui significa il sovraccarico necessario all'interprete per analizzare ed elaborare il codice. È collegato alla nozione di linguaggi interpretati e compilati. Esistono diversi modelli di traduzione del codice in uso, che ricadono approssimativamente in una delle seguenti categorie:

  • Compilazione nativa: il codice sorgente viene compilato direttamente nel codice macchina. Le migliori prestazioni a scapito della portabilità. Comunemente associato a C e C ++,
  • Compilazione intermedia - il codice sorgente è compilato in un linguaggio intermedio semplificato (bytecode), che viene successivamente interpretato o compilato (compilazione just-in-time) in codice macchina durante l'esecuzione. Portabilità migliore rispetto al codice nativo, prestazioni migliori rispetto alla pura interpretazione pur mantenendo alcuni dei lati positivi dell'interpretazione (come l'associazione tardiva). Gli esempi includono C #, Java e altri linguaggi che hanno come target JVM e .NET CLR,
  • Interpretazione - il codice sorgente non viene tradotto direttamente in codice macchina, ma è interpretato ed eseguito da un programma interprete dedicato. Gli interpreti variano in termini di sofisticazione, nell'implementazione ingenua, tuttavia si riduce all'analisi, all'analisi e all'esecuzione del codice sorgente riga per riga. L'interpretazione consente una maggiore flessibilità rispetto alla compilazione, quindi i linguaggi interpretati fanno un uso più ampio della tipizzazione dinamica o della riflessione, ad esempio. I linguaggi interpretati sono spesso visti come un aumento della produttività degli sviluppatori, in quanto richiedono un numero inferiore di codice e si prestano bene alla prototipazione rapida. Il lato negativo è una prestazione ridotta. Comunemente associato a JavaScript, Ruby o Python.

Quindi la scelta tra linguaggio interpretato e compilato si riduce alla domanda, cosa apprezziamo di più, produttività degli sviluppatori o prestazioni? La migrazione descritta nell'articolo sembra seguire la stessa linea di pensiero, con un linguaggio di prototipazione strong che Ruby viene sostituito da Scala basato su JVM a causa di considerazioni sulle prestazioni.

    
risposta data 12.06.2012 - 10:04
fonte
-3

In questo caso ho preso the wrong stuff per indicare la mancanza di sicurezza del tipo nel codice non compilato.

Quindi, non solo il codice interpretato è più lento, ma è anche più buggato ...

    
risposta data 12.06.2012 - 11:04
fonte

Leggi altre domande sui tag