Esiste uno studio comparativo sul consumo di memoria dei tempi di esecuzione dei linguaggi di programmazione, correlato con espressività e rapporti di bug di produzione? [chiuso]


10

Ci sono molti studi comparativi e disponibili online quando si tratta delle prestazioni di runtime di applicazioni costruite usando una lingua o un'altra. Alcuni guidati da società, alcuni accademici, altri solo rapporti di esperimenti personali.

Abbiamo anche una buona dose di studi comparativi sugli effetti collaterali di un linguaggio di programmazione e dei suoi strumenti, come:

  • tempi di costruzione,
  • probabilità di rilevamento di bug post-produzione,
  • potere espressivo,
  • eccetera...

Tuttavia, recentemente sono stato sempre più sconvolto dal consumo di memoria dei miei programmi più di ogni altra cosa. Ciò potrebbe derivare dal fatto che mentre la Legge di Moore è dalla nostra parte per le prestazioni allo stato puro, siamo arrivati ​​a renderci conto che gli altri colli di bottiglia contano di più. Questo, e non tendo ad aggiornare il mio hardware ogni tanto, e ho un po '"vecchio" (leggi Pentium 4 2005-2006 3,6 GHz con 4 GB di RAM) che al giorno d'oggi sono difficili da usare per applicazioni di grandi dimensioni senza richiedendomi di affrontare grossi problemi per spremerli ogni volta (scelta del sistema operativo, interfaccia utente, ottimizzazione dei servizi e dei demoni, scelta delle applicazioni da utilizzare per un'attività o per un altro ...). Onestamente, a volte accendo topo procexppiango alla vista della memoria usata dai programmi più innocenti.

Posso affrontarlo continuando a spingere nella direzione sopra elencata, e essenzialmente cercando di limitare me stesso e i programmi che uso (ho un caro amore per i programmi di cli per questo motivo, immagino), ma non posso fare a meno di pensare che forse stiamo sbagliando.

Strumenti moderni per esigenze moderne

Naturalmente, le lingue di livello superiore sono probabilmente migliori e giustificano il loro peso morto. Alcune scelte progettuali sono state fatte per buone (o presumibilmente ben intenzionate) ragioni al momento, in molte toolchain. Librerie condivise, modelli di memoria, pre-processori, sistemi di tipo, ecc ... Ma alcuni potrebbero essere più praticabili di altri con il nostro hardware moderno, e sarei curioso di leggere alcuni studi seri sull'argomento.

Quindi, la mia domanda è: esiste un ciondolo per il Benchmarks Game e altri che si concentrano su un confronto del consumo di memoria di runtime di base delle lingue?

E ancora di più, ci sono alcuni studi che fanno riferimento a questo parametro con altri parametri (simile a quello che ha fatto questo articolo , ad esempio, per altri criteri, basato anche sul gioco dei benchmark )?


3
Perché il gioco dei benchmark è insufficiente? È probabilmente la migliore risorsa che esista e copre già in dettaglio il consumo di memoria.
Robert Harvey,

@RobertHarvey: fornisce informazioni sulla memoria, ma non è per il runtime "base". Inoltre, trovo che l'estrazione di informazioni dal Benchmarks Game sia piuttosto arcana (tanto più credito per quell'articolo che fa un lavoro straordinario con i suoi dati, anche se non è quello che cerco).
haylem,

1
Potrebbe aiutare le persone che cercano di rispondere alla tua domanda se hai fornito alcune informazioni su quale problema stai cercando di risolvere, con alcuni dettagli come l'ambiente di esecuzione e il consumo di memoria desiderato. La risposta sarà diversa se stai scrivendo software per un ambiente incorporato (dove la quantità di memoria utilizzata è importante) rispetto a una macchina desktop all'avanguardia (in cui il consumo di memoria è essenzialmente insignificante, a meno che il sistema software non sia estremamente largo).
Robert Harvey,

2
How much memory consumption makes you weep?30 MB per una scheda Chrome inattiva senza estensioni, 100 MB per CCC di ATI, anche 11 MB per un plug-in googletalk inattivo o 23 MB per un driver di stampante inattivo. Queste cose e molte altre ancora. L'esempio di Chrome è un po 'fuori dal parco in quanto è un esempio più complesso, ma gli altri mi sorprendono già abbastanza.
Haylem,

Risposte:


7

Ho trovato alcune informazioni parziali, quindi inizierò a compilare i miei risultati nella mia risposta. Per favore, non lasciare che ciò ti impedisca di contribuire con le tue risposte (o di modificarle).

Letteratura esistente:

  • Un confronto empirico di 7 linguaggi di programmazione - Prechelt (2000) [ PDF ]

    Un po 'datato, ma copre parte del materiale che mi interessa e offre una visione dell'utilizzo della memoria di runtime ed espressività. I risultati possono ora differire notevolmente, ma è un inizio interessante.

  • Velocità, dimensioni e affidabilità dei linguaggi di programmazione - Marceau (2009) [ blog ]

  • Codice usato, forme usate nel tempo dal gioco Benchmarks [ u32 , u32q , u64 , u64q ]

    Sebbene non riguardi il consumo di memoria di runtime, il lavoro di Marceau è più o meno il tipo di riferimento o studio empirico che sarei disposto a trovare per quei criteri, in termini di contenuto e qualità. Un buon esempio di ciò che sto cercando, solo per metriche diverse. Il secondo articolo è un follow-up trovato sul sito di Benchmarks Game e che è stato pubblicato poco dopo (e che fa riferimento) al lavoro di Marceau, con schermate più recenti e più lingue, sebbene ancora senza dettagli sulla memoria di runtime. Ogni grafico su queste pagine porta poi a confronto la lingua a lingua che fanno fornire ad alto livello informazioni della memoria però.


Il lavoro di Marceau è un esercizio di narrazione, e alcune storie non hanno senso: "L'introduzione di funzionalità funzionali uccide le prestazioni?" ignora il semplice fatto che alcuni di questi programmi di "linguaggio funzionale" potrebbero non utilizzare le funzionalità funzionali. I dati sono stati presi da una precedente incarnazione del gioco dei benchmark; ed è stato inizialmente usato senza capire, quindi ci sono stati diversi cicli di correzione dopo la pubblicazione (controlla i commenti).
igouy,

Per il tuo "consumo di memoria di runtime di base", un semplice confronto tra i programmi "ciao mondo" potrebbe essere buono quanto ti serve.
igouy,

@igouy: si. Non ne dubito, ma speravo di non dover sperimentare e documentare / mantenerlo io stesso :) In effetti, anche meno di un mondo di ciao sarebbe OK, poiché in alcuni non ti sarebbe nemmeno richiesto di collegarti a (o caricamento) routine di stampa, ad esempio. (disabilitare anche le ottimizzazioni del compilatore e altre cose potrebbe essere consigliabile)
haylem,

@igouy: per quanto riguarda il lavoro di Marceau, lo so, ho letto la pagina, i commenti, le pagine di Benchmark Game aggiornate e sono stato in contatto con lui. L'articolo è ancora un buon riferimento a mio avviso. Il fatto che sia imperfetto non toglie il suo valore ed è ancora nella direzione di ciò che mi piacerebbe trovare (o ricreare me stesso).
haylem,

"ma speravo di non dover sperimentare e documentare / mantenerlo da solo" - guarda le misure in InternetArchive . Sfortunatamente per te ho deciso che le misurazioni della memoria per Hello World erano completamente fuorvianti e ho smesso di visualizzarle dopo il 2005.
igouy,

1

Questo non sta rispondendo alla domanda per dire, ma forse cambia un po 'la prospettiva. Sto tenendo presente la trascrizione della chat, per impostare il tono di questo commento-risposta che sarà sicuramente oggetto di molti voti negativi.

Ci sono persone, fornitori di hardware, fornitori di strumenti e programmatori che sono preoccupati per l'efficienza. Per il momento, sarà una preoccupazione crescente per loro e per tutti noi. Tali preoccupazioni sono radicate nei dispositivi mobili, in particolare i mostri che divorano batteria ad alta potenza con gli schermi più grandi e le radio più potenti.

Per fare un altro passo indietro, parte del motivo per cui ci troviamo nella situazione in cui ci troviamo oggi, con framework relativamente massicci e un leggero disprezzo per l'efficienza generale, oltre ai miglioramenti hardware è l'eredità. La compatibilità con i sistemi legacy ci rafforza con la compatibilità oltre alla compatibilità. Non è tanto colpa di un runtime di livello superiore, in quanto sono essenzialmente lo stesso runtime che agisce abbastanza efficiente e performante quando utilizzato in un ambiente operativo diverso (ad esempio Xbox, Windows Mobile pre 7/8 / superficie, micro framework Java , eccetera).

Confronta l'estensione della compatibilità di un desktop con il suo software legacy con la compatibilità di un dispositivo mobile.

Con i dispositivi mobili, i produttori di dispositivi fanno qualche sforzo per garantire una certa compatibilità, ma non hanno fatto della compatibilità un fondamento fondamentale. Quando la scelta è tra continuare a fornire compatibilità e spostare il design del sistema mobile in avanti, il sistema mobile avanza.

Per i desktop, è vero il contrario. Se un significativo cambiamento di rottura colpisce erroneamente i marketer o i primi utenti, spinge molte volte le funzionalità necessarie e la riprogettazione nella stanza sul retro. Ad un certo punto ricordo le voci secondo cui noi come utenti di Windows troveremmo un file system completamente e drammaticamente nuovo con Windows XP, poi in Vista, poi lo stesso per Seven, e infine di nuovo in Otto, ma no, appena migliorato in modo progressivo da l'abbiamo visto per la prima volta su Windows 2000? Il nuovo file system è rimasto in circolazione per molto tempo, è stato demolito, e comunque le voci decidono la storia dopo, non posso dire. Questo è probabilmente il più grande caso noto, ma sono sicuro che non è l'unico caso importante.

Anche con i tablet e i sistemi operativi mobili più recenti, Microsoft che una volta ha plasmato il mercato, ora è intrecciata in un incontro mortale con non solo i consumatori, ma un'ombra di se stessa dal reparto desktop. Il tablet doveva avere una notevole interoperabilità con la controparte desktop. No, non poteva giocare perfettamente con esso, a causa delle differenze di architettura, ma anche a causa della natura arcaica delle basi del desktop ha fatto sacrifici significativi.

Ora certamente, Windows è il bersaglio facile per qualsiasi tipo di critica per questa situazione, ma altre piattaforme sono tutt'altro che "senza peccato". Ci sono molte reliquie in agguato nell'ecosistema Linux che sono sicuro che causano grande costernazione per un miglioramento sistematico.

L'economia gioca un ruolo importante in questa equazione; il modo in cui finanziamo i nostri computer e le nostre applicazioni su uno e il modo in cui sono finanziati sull'altro seguono schemi sorprendentemente diversi. Laddove una volta Wintel ha fortemente influenzato l'obsolescenza, Apple e Google lo hanno trasformato in un programma quasi rigoroso. Questo è più lontano del previsto, quindi me ne andrò così com'è e lascio che i lettori lo prendano da lì.

Se e quando i grandi fornitori cambiano la loro obsolescenza e i loro modelli di prezzo, allora possono iniziare ad andare avanti con cambiamenti su larga scala a un tasso più uniforme. Quei quadri di livello superiore che sono guidati dalle lingue di ordine più elevato si ridurranno in un certo senso, in quanto saranno in grado di svolgere il loro compito di alto livello con un'efficienza più di basso livello perché l'inefficiente compatibilità intermedia e i livelli di basso livello si ridurranno essere drasticamente ridotto, se non eliminato.


In realtà non risponde davvero, è più come pensieri in forma libera che si aggiungono al campo della domanda :) Grazie e +1 per l'intuizione, però. (Inoltre, voglio chiarire che non ho mai avuto intenzione di individuare i sistemi Microsoft come parte dei colpevoli. Qualsiasi sistema operativo ha lo stesso problema, se il modello di memoria del sistema e il formato eseguibile lo consentono).
haylem,

Certamente non è mia intenzione curiosare con Microsoft, ma sono il caso più semplice per la maggior parte da vedere al riguardo. Altro grande nome, i fornitori tradizionali sono nella stessa barca, anche se forse in un aspetto forse leggermente diverso (ad esempio database di livello industriale e apparecchiature di rete; quanti compromessi portano avanti che altrimenti impediscono un miglioramento significativo dell'innovazione e del valore del prodotto sottostante) . Ancora più vicino a casa sui prodotti che ognuno di noi supporta, portiamo quella proverbiale croce in un modo o nell'altro.
Giustino
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.