rapporto velocità / velocità [chiuso]

-1

In generale, il più conciso e amp; flessibile una lingua è il più lento è l'esecuzione di programmi scritti in questa lingua. dall'altra parte, i linguaggi veloci sono per lo più eccessivamente prolissi, richiedendo di scrivere diverse righe solo per produrre "ciao mondo", il che significa tempi di sviluppo più duri ed è più soggetto a errori.

quindi la domanda è, c'è qualche misura della concisione al rapporto di velocità ?. se sì, come si chiama e dove posso trovare alcune informazioni a riguardo. grazie.

nota: si può creare una lingua di token a lettera singola, p h stampa hello world, questa è la precisione. concisione significa -per il nostro scopo- come definito qui :

Giving a lot of information clearly and in a few words; brief but comprehensive

    
posta Philomath 12.07.2011 - 02:36
fonte

2 risposte

7

Potresti essere interessato a shootout.alioth.debian.org, in particolare codice / forme temporali . La pagina collegata traccia la velocità rispetto a loc per alcuni parametri di riferimento in vari linguaggi di programmazione.

From more-concise at page left to less-concise at the right, from slower at page top to faster at the bottom.

These scatter plots show the fastest programs contributed for each programming language implementation, measured on this computer -- so they don't show ↓ slower more-concise programs that still seem relatively fast.

These are not the only programs that could be written. These are not the only programming languages. These are not the only compilers and interpreters. These are not the only tasks that could be solved. These are just 10 tiny examples...

    
risposta data 12.07.2011 - 03:06
fonte
2

Sebbene non affrontino direttamente la domanda che hai posto, potresti trovare Benchmark di Stepanov alquanto interessante. Si occupa solo di una singola lingua (C ++) e della programmazione con diversi livelli di astrazione all'interno di quella lingua. Immagino che i livelli più alti di astrazione si adattino meglio alla tua idea di "praticamente espressivo".

Definisce i livelli da 0 a 12, a partire da un codice essenzialmente simile a C che utilizza loop scritti a mano che operano su puntatori e progredisce verso algoritmi pre-scritti che operano su iteratori, ecc.)

Un tempo, era comune vedere le penalità dell'ordine di 2: 1 (a volte anche di più) per i livelli più alti di astrazione, anche se era attentamente progettato in modo che un compilatore avrebbe dovuto essere in grado di produrre lo stesso output per tutti i casi.

Con la maggior parte dei compilatori moderni, è esattamente quello che ottieni. È necessario aumentare il numero di iterazioni per ottenere risultati significativi (ad esempio, cambiando ::iterations da 25000 a 500000). Con questo cambiamento e un moderno compilatore con l'ottimizzazione abilitata, puoi praticamente contare su un rapporto di 1.0 per ogni livello di astrazione che definisce. A seconda della fortuna, potresti persino vedere i livelli di astrazione più alti che eseguono minuziosamente più veloci di quelli inferiori (l'ho visto, anche se sono abbastanza sicuro che non fosse significativo). / p>

Anche se questo non affronta direttamente la questione di una lingua piuttosto che un'altra, fa intuire l'idea che l'espressività non ha per portare una penalità. Allo stesso tempo, probabilmente vale la pena di aggiungere che anche il codice più astratto in questo benchmark è abbastanza prolisso rispetto a, per esempio, Perl.

    
risposta data 12.07.2011 - 09:16
fonte

Leggi altre domande sui tag