Buon Natale! Merry Christmas! メリークリスマス!Etc.
Dal momento che il titolo dice già tutto ciò che avevo intenzione di dirvi, sarò molto breve e non farò altro che ripetermi augurando a tutti voi di passare delle buone feste. Ciao!
Dal momento che il titolo dice già tutto ciò che avevo intenzione di dirvi, sarò molto breve e non farò altro che ripetermi augurando a tutti voi di passare delle buone feste. Ciao!
Il conto alla rovescia è ormai cominciato: tra meno di una dozzina di ore farà capolino la nuova major release di Ruby. Il rilascio di questa nuova versione, salvo imprevisti dell’ultimo minuto, è programmato per le 15.00 JST (le 7.00 di mattina ora italiana) e, come sottolineato da Matz, quella che verrà distribuita sarà appunto la versione 1.9.0 e non la 1.9.1 come da roadmap. Il motivo di questa variazione di programma rispetto ai piani è semplicemente legato al fatto che, pur avendo completato e implementato tutti i cambiamenti previsti per questa release, la stabilità nel suo insieme risulta essere inferiore rispetto alle aspettative e ci sono già alcuni bug conosciuti che verranno indicati nelle note di rilascio. Si tratterà comunque della prima vera occasione per iniziare il porting dei propri script e applicazioni dal momento che è stata introdotta una nutrita quantità di cambiamenti, tantissimi piccoli e alcuni grossi, che rendono questa versione deliberatamente incompatibile, pertanto la 1.8 rimarrà ancora per un po’ di mesi la versione di riferimento in ambito di produzione. Tre delle più importanti novità di Ruby 1.9 sono la nuova VM (ex YARV), il supporto per unicode e il passaggio da green-thread a thread nativi (seppur con qualche limitazione volutamente imposta, il nuovo modello di threading arriverà nella sua completezza solo con Ruby 2.0), il tutto seguito a ruota da una vasta lista di cambiamenti più o meno piccoli che potete trovare elencati in maniera piuttosto completa in questa pagina. Preparatevi…
In attesa di poter tornare con un po’ di attività degna di nota per questo blog (le ultime tre settimane sono state un bagno di sangue di impegni lavorativi) vorrei segnalarvi la nascita di Stacktrace, un progetto tutto italiano dedicato all’informazione nel mondo dell’IT con news di vario genere e articoli tecnici ad ampio respiro, il tutto senza scimmiottare o limitarsi a riprendere banalmente notizie già pubblicate altrove. Nonostante abbia appena aperto i battenti Stacktrace sta già producendo contenuti estremamente interessanti ma del resto non poteva che essere altrimenti visti i professionisti e grandi appassionati che compongono lo staff di redattori e autori. Vi consiglio vivamente di dare un’occhiata al materiale già pubblicato, perché ci sono alcune chicche come questa che secondo me valgono la sottoscrizione al feed ad occhi chiusi.
Una divertentissima parodia, tra l’altro azzeccatissima, del uebb due punto zero segnalata da Scott Hanselman sul suo blog. Ho riso talmente tanto che non potevo non riportarvela
Il rilascio di Ruby 1.9 è previsto intorno a Natale e con il passare dei giorni la curiosità dei rubyisti si fa sempre più intensa. Stuzzicato da un microbenchmark pubblicato da Antonio Cangiano sul suo blog in cui ha messo a confronto la velocità di esecuzione di Ruby 1.8.6, Ruby 1.9.0 e Python 2.5.1 usando volutamente una funzione ricorsiva che calcolasse i primi 35 numeri della successione di Fibonacci, ho pensato che sarebbe stato interessante fare lo stesso test con i suoi script ma con condizioni diverse. A differenza di Antonio, che ha eseguito il suddetto microbenchmark sul suo MacBook Pro con OS X 10.5, ho pensato di effettuare i miei test su Windows chiamando in causa a questo punto anche IronRuby e, tanto per fare, anche PHP e Lua. Mi sarebbe piaciuto provare anche JRuby, ma purtroppo non ho nessuna esperienza e non saprei nemmeno da dove cominciare.
Le build di Ruby 1.9 e IronRuby sono state effettuate direttamente da me allineandomi questa mattina con i trunk nei rispettivi repository SVN, nel primo caso senza badare a ottimizzazioni particolari e nel secondo caso usando la modalità release. Per le versioni di sviluppo di PHP ho prelevato questa mattina da snaps.php.net i binari ufficiali e ho effettuato i test con la configurazione (php.ini) di default, così come per la versione stabile 5.2.5. Lo script per Python è stato leggermente modificato per la versione 3.0 dal momento che print è diventata una funzione e funziona diversamente dalla versione 2.5.
Gli script usati per Ruby, IronRuby e Python sono gli stessi di Antonio, aggiungo solo le mie varianti Lua e PHP (occhio, si tratta solamente di un becero port ai rispettivi linguaggi). Ecco come si presenta la versione in Lua:
function fib(n) if n == 0 or n == 1 then return n end return fib(n - 1) + fib(n - 2) end for n = 0, 35 do print("n=" .. n .. " => " .. fib(n)) end
Ed ecco invece la versione in PHP:
function fib($n) { if ($n == 0 || $n == 1) return $n; return fib($n - 1) + fib($n - 2); } for ($i = 0; $i <= 35; $i++) echo "n=", $i, " => ", fib($i), "\n";
I tempi riportati di seguito rappresentano la media calcolata sui risultati di 6 esecuzioni scartando la prima. Ecco i risultati ottenuti:
| Ruby 1.9.0 | : 21,123s | 2° |
| Ruby 1.8.6 | : 94,736s | 9° |
| IronRuby | : 26,123s | 3° |
| Python 2.5.1 | : 33,827s | 4° |
| Python 3.0a1 | : 48,718s | 5° |
| PHP 5.2.5 | : 91,672s | 8° |
| PHP 5.3.0 | : 77,813s | 7° |
| PHP 6.0.0 | : 73,969s | 6° |
| Lua 5.1.2 | : 14,912s | 1° |
Ora un po’ di considerazioni:
Ovviamente un singolo microbenchmark di questo tipo non può essere assolutamente considerato come un valido indicatore delle prestazioni offerte da un linguaggio in situazioni reali, però i risultati sono comunque curiosi. A quanto pare i rubyisti avranno già un bel regalo assicurato per questo Natale
PS: noto al termine della scrittura che Antonio ha scritto un altro articolo, aggiungendo Lisp e Haskell.