[Linuxtrent] Re: Tutorial (2011-2013) che mette a confronto alcuni linguaggi di programmazione sulla manipolazione di stringhe

  • From: Guido Brugnara <gdo@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Tue, 18 Mar 2014 15:34:13 +0100

Il 18/03/2014 14:57, Daniele Nicolodi ha scritto:
On 18/03/2014 13:13, Guido Brugnara wrote:
Mi sono imbattuto in questo articolo:

http://raid6.com.au/~onlyjob/posts/arena/

che espone i risultati del confronto di codice scritto in alcuni
linguaggi valutando velocità e occupazione di memoria.
Uhm... Il metodo per la valutazione delle prestazioni dei vari linguaggi
è descritto in questo modo:

   Test code grows text string by adding another string in cycle until
   it grows up to 4 mb. Each iteration substitutes some text. Every time
   string becomes 256 KiB larger program prints number of seconds passed
   since beginning of test. App's output is being piped to script
   capturing memory usage (using memstat) for every line printed.

e già mi pare un caso molto limitato per valutare le prestazioni di un
linguaggio di programmazione.  Inoltre le implementazioni nei vari
linguaggi mi sembrano poco idiomatiche: il codice Python è scritto in un
modo in cui nessun programmatore con conoscenza del linguaggio lo
scriverebbe. Questa versione (che non è la più efficiente possibile) che
ho messo assieme velocemente è ~500 più veloce di quella usata per il
benchmark (e dunque più veloce della versione in C, solo per dire quanto
male quel C sia scritto):

   import re
   import time

   string = 'abcdefgh' + 'efghefgh'

   starttime = time.time();
   print "exec.tm.sec\tstr.length"

   for i in xrange(1, 17):
       s = ''.join(string for x in xrange(i * 256 * 1024 / len(string)))
       s = re.sub('efgh', '____', s)
       print time.time() - starttime, "sec\t\t", (len(s) / 1024), "kb"

Non mi sembra un granché come confronto. Confrontare linguaggi diversi è
interessante soprattutto per confrontarne l'espressività e per capire
come linguaggi con diverse peculiarità portino a risolvere i problemi in
modi diversi. Tradurre pari pari del codice originalmente pensato per un
linguaggio in un altro porta solo a codice scritto male...

Ciao,
Daniele

Certamente il confronto è limitato e i codici usati nei vari linguaggi criticabili.

Per come il codice è stato scritto si voleva proprio eseguire l'elaborazione alla stringa lunga in quella sequenza e con la sostituzione con l'espressione regolare applicata ad ogni ciclo, che era il confronto su quale misurare tempo e occupazione di memoria.

L'esempio che hai fatto è un algoritmo differente che anche negli altri linguaggi è possibile fare ottenendo miglioramenti equivalenti ma nulla hanno a che fare con quel confronto.

___
gdo





--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: