Vash1986
15-09-2006, 17:53
Ho da mesi e mesi una sfrenata curiosità di sapere le differenze prestazionali tra i vari linguaggi.
Ogni giorno mi tempesto di domande: ma il C ha qualche vantaggio prestazionale sul C++? Ma il C# è lento come il Java oppure non è veramente semi-interpretato? Ma è davvero grande la diff tra C++ e C#? Ma Delphi e Free Pascal sono potenti come il C? Ma sarà vero che il fortran in applicazioni di puro calcolo inchiappetta il C?
E' tempo che queste domande abbiano una risposta concreta :D
Perciò volevo creare un programmino Benchmark con ognuno di questi linguaggi (personalmente conosco C/Cpp, C# e Java, e un pochino di Pascal).
Ovviamente un programma di puro calcolo sarebbe molto limitativo e non dimostrerebbe niente. Quindi volevo fare un programma console che ti chiede di scegliere tra vari test, e poi ti dice quanti secondi ha impiegato.
Ho pensato subito a questi primi test
1- Calcolare la milionesima cifra decimale di pi greco con la formula di Bailey.
2- Ricorsione: trovare tutte le uscite da un enorme labirinto disegnato con un editor di testo, e calcolare qual è la più breve a partire da un punto del labirinto. Chiaramente sarà un algoritmo esponenziale n^4.
3- Manipolazione stringhe (accetto suggerimenti su cosa farci... concatenarle? renderle tutte maiuscole o tutte minuscole?)
4- Gestione array: verrà creato un enorme array bidimensionale e riempito con random short. Poi verrà ordinato secondo un determinato criterio. Poi invertito. Poi duplicato.
Dunque vi chiedo consiglio: quali altri test potrebbero fornire risultati significativi per misurare le performance del linguaggio? Chessò, un test che metta a confronto l'utilizzo degli oggetti in C++ con le struct in C. Ad esempio tempo fa un tizio mi disse che se tenti di imitare "manualmente" in C l'ereditarietà e il polimorfismo, e il funzionamento degli oggetti, alla fine rischi di ottenere performance peggiori che utilizzando C++ con oggetti veri e propri.
Ma magari anche un test che metta a confronto la velocità di creazione e utilizzo degli oggetti (e consumo ram) di C++ e C# e Java magari.
Importante: questo benchmark serve a valutare le prestazioni in termini assoluti, non il rapporto tra fatica del programmatore e prestazioni.
Ogni giorno mi tempesto di domande: ma il C ha qualche vantaggio prestazionale sul C++? Ma il C# è lento come il Java oppure non è veramente semi-interpretato? Ma è davvero grande la diff tra C++ e C#? Ma Delphi e Free Pascal sono potenti come il C? Ma sarà vero che il fortran in applicazioni di puro calcolo inchiappetta il C?
E' tempo che queste domande abbiano una risposta concreta :D
Perciò volevo creare un programmino Benchmark con ognuno di questi linguaggi (personalmente conosco C/Cpp, C# e Java, e un pochino di Pascal).
Ovviamente un programma di puro calcolo sarebbe molto limitativo e non dimostrerebbe niente. Quindi volevo fare un programma console che ti chiede di scegliere tra vari test, e poi ti dice quanti secondi ha impiegato.
Ho pensato subito a questi primi test
1- Calcolare la milionesima cifra decimale di pi greco con la formula di Bailey.
2- Ricorsione: trovare tutte le uscite da un enorme labirinto disegnato con un editor di testo, e calcolare qual è la più breve a partire da un punto del labirinto. Chiaramente sarà un algoritmo esponenziale n^4.
3- Manipolazione stringhe (accetto suggerimenti su cosa farci... concatenarle? renderle tutte maiuscole o tutte minuscole?)
4- Gestione array: verrà creato un enorme array bidimensionale e riempito con random short. Poi verrà ordinato secondo un determinato criterio. Poi invertito. Poi duplicato.
Dunque vi chiedo consiglio: quali altri test potrebbero fornire risultati significativi per misurare le performance del linguaggio? Chessò, un test che metta a confronto l'utilizzo degli oggetti in C++ con le struct in C. Ad esempio tempo fa un tizio mi disse che se tenti di imitare "manualmente" in C l'ereditarietà e il polimorfismo, e il funzionamento degli oggetti, alla fine rischi di ottenere performance peggiori che utilizzando C++ con oggetti veri e propri.
Ma magari anche un test che metta a confronto la velocità di creazione e utilizzo degli oggetti (e consumo ram) di C++ e C# e Java magari.
Importante: questo benchmark serve a valutare le prestazioni in termini assoluti, non il rapporto tra fatica del programmatore e prestazioni.