<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marco Mastrodonato &#187; jRuby</title>
	<atom:link href="http://mastrodonato.info/index.php/tag/jruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://mastrodonato.info</link>
	<description>Non c&#039;e&#039; prezzo per la miticita&#039;</description>
	<lastBuildDate>Mon, 06 Sep 2010 21:05:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Ruby 1.9.2 prestazioni al top</title>
		<link>http://mastrodonato.info/index.php/2010/09/ruby-1-9-2-prestazioni-al-top/</link>
		<comments>http://mastrodonato.info/index.php/2010/09/ruby-1-9-2-prestazioni-al-top/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 20:29:32 +0000</pubDate>
		<dc:creator>Marco Mastrodonato</dc:creator>
				<category><![CDATA[JRuby]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[jRuby]]></category>
		<category><![CDATA[RVM]]></category>

		<guid isPermaLink="false">http://mastrodonato.info/?p=595</guid>
		<description><![CDATA[Con un precedente test, avevo riscontrato che JRuby era la massima espressione per quanto riguardava la velocità nell&#8217;eseguire codice ruby, surclassando non solo gli altri interpreti C++ e .Net ma azzardando prepotenti confronti con le ultime due incarnazioni di python. Gli script erano questi e li ho rispolverati anche per questo nuovo confronto. Ora che [...]]]></description>
			<content:encoded><![CDATA[<p>Con un <a href="http://mastrodonato.info/index.php/2010/03/ruby-vs-python-vs-windows-vs-linux/">precedente test</a>, avevo riscontrato che JRuby era la massima espressione per quanto riguardava la velocità nell&#8217;eseguire codice ruby, surclassando non solo gli altri interpreti C++ e .Net ma azzardando prepotenti confronti con le ultime due incarnazioni di python. Gli <a href="http://mastrodonato.info/index.php/2010/01/ruby-vs-ruby-vs-python-vs-python/">script</a> erano questi e li ho rispolverati anche per questo nuovo confronto.</p>
<p>Ora che Rails 3 è stato rilasciato ed uno degli interpreti consigliati è il nuovo 1.9.2, ero curioso di osservare come si comporta la release ufficiale: direi davvero niente male!<br />
Questa volta ho ristretto il numero dei partecipanti alle sole versioni installate con <a href="http://rvm.beginrescueend.com/">RVM</a> più un paio di versioni windows: JRuby 1.4.0 ed il più usato 1.8.7 mingw32, giusto per avere un metro di paragone.</p>
<p>Distribuzione Linux: Ubuntu 10.4 64bit<br />
Windows XP 32Bit SP3</p>
<p><center></p>
<table>
<th>Versione</th>
<th>Compilatore/Sistema</th>
<th>Secondi</th>
<tbody>
<tr>
<td>Ruby 1.9.2 p0 RVM</td>
<td>x86_64-linux</td>
<td><strong>6,6</strong></td>
</tr>
<tr>
<td>JRuby 1.4.0 RVM</td>
<td>OpenJDK 64-Bit Server VM 1.6.0_18 [amd64-java]</td>
<td>6,8</td>
</tr>
<tr>
<td>JRuby 1.5.2 RVM</td>
<td>OpenJDK 64-Bit Server VM 1.6.0_18 [amd64-java]</td>
<td>7,0</td>
</tr>
<tr>
<td>JRuby 1.4.0 </td>
<td>Windows Client VM 1.6.0_15 [x86-java]</td>
<td>7,0</td>
</tr>
<tr>
<td>Ruby 1.9.1 p378 RVM</td>
<td>x86_64-linux</td>
<td>8,9</td>
</tr>
<tr>
<td>Ruby 1.8.7 p249 RVM</td>
<td>x86_64-linux</td>
<td>12,2</td>
</tr>
<tr>
<td>Ruby 1.8.7 p249</td>
<td>i386-mingw32</td>
<td>23,9</td>
</tr>
</tbody>
</table>
<p></center></p>
<p><a href="http://mastrodonato.info/wp-content/uploads/2010/09/BenchMM1_20100906.png"><img src="http://mastrodonato.info/wp-content/uploads/2010/09/BenchMM1_20100906-300x150.png" alt="" title="BenchMM1 06/09/2010" width="300" height="150" class="aligncenter size-medium wp-image-596" /></a></p>
<p>Questo il log completo dell&#8217;esecuzione:</p>
<p><code><br />
marco@d9400:~$ rvm list</p>
<p>rvm rubies</p>
<p>=> jruby-1.4.0 [ amd64-java ]<br />
   jruby-1.5.2 [ amd64-java ]<br />
   ruby-1.8.7-p249 [ x86_64 ]<br />
   ruby-1.9.1-p378 [ x86_64 ]<br />
   ruby-1.9.2-p0 [ x86_64 ]</p>
<p>marco@d9400:~$ java -version<br />
java version "1.6.0_18"<br />
OpenJDK Runtime Environment (IcedTea6 1.8.1) (6b18-1.8.1-0ubuntu1)<br />
OpenJDK 64-Bit Server VM (build 16.0-b13, mixed mode)</p>
<p>marco@d9400:~$ ruby -v<br />
jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2009-11-02 69fbfa3) (OpenJDK 64-Bit Server VM 1.6.0_18) [amd64-java]<br />
marco@d9400:~$ ruby RubyMM186_3.rb --server --fast</p>
<p>Warming up...<br />
Strings test - Elapsed 2.096<br />
Check1: 50000<br />
Check2: 157490<br />
Check3: 50005<br />
Check4: 373847<br />
Arrays test  - Elapsed 3.508<br />
Check1: 20900<br />
Check2: 250000<br />
Check3: 250000<br />
Check4: 1500000<br />
Check5: 5749950<br />
Numeric test - Elapsed 2.856<br />
Check1: 6252500<br />
Check2: 1439295494700374021157505910939096377494040420940312<br />
Ruby Partial elapsed time 8.460</p>
<p>1. Starting Ruby tests...<br />
Strings test - Elapsed 1.501<br />
Arrays test  - Elapsed 3.054<br />
Numeric test - Elapsed 2.280<br />
Ruby Partial elapsed time 6.835</p>
<p>2. Starting Ruby tests...<br />
Strings test - Elapsed 1.431<br />
Arrays test  - Elapsed 3.091<br />
Numeric test - Elapsed 2.249<br />
Ruby Partial elapsed time 6.771</p>
<p>3. Starting Ruby tests...<br />
Strings test - Elapsed 1.505<br />
Arrays test  - Elapsed 2.999<br />
Numeric test - Elapsed 2.261<br />
Ruby Partial elapsed time 6.765<br />
-------------------------------------<br />
Average Strings test - Elapsed 1.479<br />
Average Arrays test  - Elapsed 3.048<br />
Average Numeric test - Elapsed 2.263</p>
<p>Ruby Average elapsed time 6.790</p>
<p>marco@d9400:~$ rvm use jruby-1.5.2<br />
marco@d9400:~$ ruby -v<br />
jruby 1.5.2 (ruby 1.8.7 patchlevel 249) (2010-08-20 1c5e29d) (OpenJDK 64-Bit Server VM 1.6.0_18) [amd64-java]<br />
marco@d9400:~$ ruby RubyMM186_3.rb --server --fast</p>
<p>Warming up...<br />
Strings test - Elapsed 2.383<br />
Check1: 50000<br />
Check2: 157490<br />
Check3: 50005<br />
Check4: 373847<br />
Arrays test  - Elapsed 3.561<br />
Check1: 20900<br />
Check2: 250000<br />
Check3: 250000<br />
Check4: 1500000<br />
Check5: 5749950<br />
Numeric test - Elapsed 3.210<br />
Check1: 6252500<br />
Check2: 1439295494700374021157505910939096377494040420940312<br />
Ruby Partial elapsed time 9.154</p>
<p>1. Starting Ruby tests...<br />
Strings test - Elapsed 1.479<br />
Arrays test  - Elapsed 3.092<br />
Numeric test - Elapsed 2.516<br />
Ruby Partial elapsed time 7.087</p>
<p>2. Starting Ruby tests...<br />
Strings test - Elapsed 1.431<br />
Arrays test  - Elapsed 3.056<br />
Numeric test - Elapsed 2.508<br />
Ruby Partial elapsed time 6.995</p>
<p>3. Starting Ruby tests...<br />
Strings test - Elapsed 1.423<br />
Arrays test  - Elapsed 3.053<br />
Numeric test - Elapsed 2.524<br />
Ruby Partial elapsed time 7.000<br />
-------------------------------------<br />
Average Strings test - Elapsed 1.444<br />
Average Arrays test  - Elapsed 3.067<br />
Average Numeric test - Elapsed 2.516</p>
<p>Ruby Average elapsed time 7.027</p>
<p>marco@d9400:~$ rvm use ruby-1.8.7-p249<br />
marco@d9400:~$ ruby -v<br />
ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]<br />
marco@d9400:~$ ruby RubyMM186_3.rb</p>
<p>Warming up...<br />
Strings test - Elapsed 3.135<br />
Check1: 50000<br />
Check2: 157490<br />
Check3: 50005<br />
Check4: 373847<br />
Arrays test  - Elapsed 4.386<br />
Check1: 20900<br />
Check2: 250000<br />
Check3: 250000<br />
Check4: 1500000<br />
Check5: 5749950<br />
Numeric test - Elapsed 4.629<br />
Check1: 6252500<br />
Check2: 1439295494700374021157505910939096377494040420940312<br />
Ruby Partial elapsed time 12.149</p>
<p>1. Starting Ruby tests...<br />
Strings test - Elapsed 3.181<br />
Arrays test  - Elapsed 4.402<br />
Numeric test - Elapsed 4.598<br />
Ruby Partial elapsed time 12.180</p>
<p>2. Starting Ruby tests...<br />
Strings test - Elapsed 3.153<br />
Arrays test  - Elapsed 4.387<br />
Numeric test - Elapsed 4.572<br />
Ruby Partial elapsed time 12.113</p>
<p>3. Starting Ruby tests...<br />
Strings test - Elapsed 3.210<br />
Arrays test  - Elapsed 4.395<br />
Numeric test - Elapsed 4.583<br />
Ruby Partial elapsed time 12.189<br />
-------------------------------------<br />
Average Strings test - Elapsed 3.181<br />
Average Arrays test  - Elapsed 4.395<br />
Average Numeric test - Elapsed 4.584</p>
<p>Ruby Average elapsed time 12.160</p>
<p>marco@d9400:~$ rvm use ruby-1.9.1<br />
marco@d9400:~$ ruby -v<br />
ruby 1.9.1p378 (2010-01-10 revision 26273) [x86_64-linux]<br />
marco@d9400:~$ ruby RubyMM191_3.rb</p>
<p>Warming up...<br />
Strings test - Elapsed 2.452<br />
Check1: 50000<br />
Check2: 157490<br />
Check3: 50005<br />
Check4: 373847<br />
Arrays test  - Elapsed 4.488<br />
Check1: 20900<br />
Check2: 250000<br />
Check3: 250000<br />
Check4: 1500000<br />
Check5: 5749950<br />
Numeric test - Elapsed 1.840<br />
Check1: 6252500<br />
Check2: 1439295494700374021157505910939096377494040420940312<br />
Ruby Partial elapsed time 8.780</p>
<p>1. Starting Ruby tests...<br />
Strings test - Elapsed 2.314<br />
Arrays test  - Elapsed 4.679<br />
Numeric test - Elapsed 1.843<br />
Ruby Partial elapsed time 8.836</p>
<p>2. Starting Ruby tests...<br />
Strings test - Elapsed 2.319<br />
Arrays test  - Elapsed 4.691<br />
Numeric test - Elapsed 1.843<br />
Ruby Partial elapsed time 8.853</p>
<p>3. Starting Ruby tests...<br />
Strings test - Elapsed 2.318<br />
Arrays test  - Elapsed 4.705<br />
Numeric test - Elapsed 1.847<br />
Ruby Partial elapsed time 8.870<br />
-------------------------------------<br />
Average Strings test - Elapsed 2.317<br />
Average Arrays test  - Elapsed 4.692<br />
Average Numeric test - Elapsed 1.844</p>
<p>Ruby Average elapsed time 8.853</p>
<p>marco@d9400:~$ rvm use ruby-1.9.2<br />
marco@d9400:~$ ruby -v<br />
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]<br />
marco@d9400:~$ ruby RubyMM191_3.rb</p>
<p>Warming up...<br />
Strings test - Elapsed 1.680<br />
Check1: 50000<br />
Check2: 157490<br />
Check3: 50005<br />
Check4: 373847<br />
Arrays test  - Elapsed 4.192<br />
Check1: 20900<br />
Check2: 250000<br />
Check3: 250000<br />
Check4: 1500000<br />
Check5: 5749950<br />
Numeric test - Elapsed 1.708<br />
Check1: 6252500<br />
Check2: 1439295494700374021157505910939096377494040420940312<br />
Ruby Partial elapsed time 7.579</p>
<p>1. Starting Ruby tests...<br />
Strings test - Elapsed 1.654<br />
Arrays test  - Elapsed 3.178<br />
Numeric test - Elapsed 1.704<br />
Ruby Partial elapsed time 6.536</p>
<p>2. Starting Ruby tests...<br />
Strings test - Elapsed 1.746<br />
Arrays test  - Elapsed 3.388<br />
Numeric test - Elapsed 1.699<br />
Ruby Partial elapsed time 6.833</p>
<p>3. Starting Ruby tests...<br />
Strings test - Elapsed 1.644<br />
Arrays test  - Elapsed 3.227<br />
Numeric test - Elapsed 1.706<br />
Ruby Partial elapsed time 6.577<br />
-------------------------------------<br />
Average Strings test - Elapsed 1.681<br />
Average Arrays test  - Elapsed 3.264<br />
Average Numeric test - Elapsed 1.703</p>
<p>Ruby Average elapsed time 6.649<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://mastrodonato.info/index.php/2010/09/ruby-1-9-2-prestazioni-al-top/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quattro interpreti ruby a confronto</title>
		<link>http://mastrodonato.info/index.php/2009/08/quattro-interpreti-ruby-a-confronto/</link>
		<comments>http://mastrodonato.info/index.php/2009/08/quattro-interpreti-ruby-a-confronto/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 21:59:56 +0000</pubDate>
		<dc:creator>Marco Mastrodonato</dc:creator>
				<category><![CDATA[IronRuby .NET]]></category>
		<category><![CDATA[JRuby]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[IronRuby]]></category>
		<category><![CDATA[jRuby]]></category>

		<guid isPermaLink="false">http://mastrodonato.info/?p=103</guid>
		<description><![CDATA[Non si può negare che la versatilità sia una delle sue caratteristiche; un vero multipiattaforma. Ci sono interpreti per molti sistemi operativi e oltre alla versione classica in C++ abbiamo la valida alternativa di JRuby per il mondo java e infine Ironruby per il framework .NET di Microsoft, arrivato in questi ultimi giorni ad una [...]]]></description>
			<content:encoded><![CDATA[<p>Non si può negare che la versatilità sia una delle sue caratteristiche; un vero multipiattaforma. Ci sono interpreti per molti sistemi operativi e oltre alla versione classica in C++ abbiamo la valida alternativa di JRuby per il mondo java e infine Ironruby per il framework .NET di Microsoft, arrivato in questi ultimi giorni ad una versione abbastanza matura.<br />
Niente male, pensiamo ai benefici che un&#8217;azienda potrebbe avere: un linguaggio semplice da imparare ma molto potente, ha un ottimo framework (uno su tutti, Rails) per sviluppare rapidamente applicazioni disponibili per esempio nella intranet e in aggiunta a tutto questo, la possibilità di usare le librerie java o .net.</p>
<p>In questo articolo vedremo come si comportano questi quattro interpreti:</p>
<ol>
<li>Ruby 1.8.6 patch 368 aggiornato al 2009-03-31</li>
<li>Ruby 1.9.1 patch 129 aggiornato al 2009-05-12 revisione 23412</li>
<li>jRuby 1.3.1 (ruby 1.8.6p287) 2009-06-15 Client VM 1.6.0 update 14</li>
<li>IronRuby 0.9.0.0 on .NET 2.0.0.0</li>
</ol>
<p>Lo <strong>scopo</strong>: per scoprire le differenze prestazionali principalmente nell&#8217;ambito del singolo interprete. Ci sono metodi e tecniche che portano allo stesso risultato e senza simili test difficilmente si può stabilire qual&#8217;è la pratica migliore.<br />
Nei test che vedremo, mi sono concentrato sulla velocità di elaborazione controllando solo grossolanamente la quantità di memoria utilizzata.</p>
<p>Il <strong>sistema</strong>: La macchina fisica è un Windows XP Professional SP3 32bit con un Intel E7300 dual core con 3Mb di cache e 3,25Gb di ram. </p>
<div id="attachment_111" class="wp-caption aligncenter" style="width: 429px"><img src="http://mastrodonato.info/wp-content/uploads/2009/08/FXP1.PNG" alt="Sistema fisico" title="FXP" width="419" height="534" class="size-full wp-image-111" /><p class="wp-caption-text">Sistema fisico</p></div>
<p>I test giravano su un sistema virtualizzato con MS Virtual PC 2007, os sempre XP Pro, Java SDK 6.14, Framework .NET 3.5 SP1, processore singolo core, memoria 768Mb. Solo il test più pesante sugli hash l&#8217;ho ripetuto con 2Gb.</p>
<p>I <strong>benchmarks</strong> sono divisi in quattro categorie:</p>
<ul>
<li>Stringhe</li>
<li>Numeri</li>
<li>Array</li>
<li>Hash</li>
</ul>
<p>Li ho creati io e si limitano ad eseguire operazioni molto semplici. Alla fine c&#8217;è un totale ma non deve essere inteso come un indice sull&#8217;effettiva prestazione dell&#8217;interprete perchè questa cambia molto in base ai test scelti e quelli che ho utilizzati io non è detto che siano condizioni riscontrate nell&#8217;uso reale.</p>
<h3>Le stringhe</h3>
<p>Questo è il primo script:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;benchmark&quot;</span>
<span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#CC00FF; font-weight:bold;">Benchmark</span>
&nbsp;
<span style="color:#CC00FF; font-weight:bold;">Benchmark</span>.<span style="color:#9900CC;">bm</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">21</span>, <span style="color:#996600;">&quot;--- Total:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span><span style="color:#006600; font-weight:bold;">|</span>b<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Concat 1.000.000:&quot;</span>
  n=<span style="color:#006666;">1</span>_000_000
  t1 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;+&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;a &quot;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#996600;">&quot;b &quot;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#996600;">&quot;c &quot;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#996600;">&quot;d &quot;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#996600;">&quot;e &quot;</span>; <span style="color:#996600;">&quot;f &quot;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#996600;">&quot;g&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;&lt;&lt;&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;a &quot;</span><span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;b &quot;</span><span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;c &quot;</span><span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;d &quot;</span><span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;e &quot;</span>; <span style="color:#996600;">&quot;f &quot;</span><span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;g&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#{}&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    sa=<span style="color:#996600;">&quot;a&quot;</span>; sb=<span style="color:#996600;">&quot;b&quot;</span>; sc=<span style="color:#996600;">&quot;c&quot;</span>; sd=<span style="color:#996600;">&quot;d&quot;</span>; se=<span style="color:#996600;">&quot;e&quot;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;#{sa} #{sb} #{sc} #{sd} #{se}&quot;</span>; <span style="color:#996600;">&quot;#{sb} #{sc}&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Add 100.000:&quot;</span>
  n=<span style="color:#006666;">100</span>_000
  t2 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;+=&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#996600;">&quot;&quot;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#996600;">&quot;.&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;&lt;&lt;&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#996600;">&quot;&quot;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot;.&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;a = a + '.'&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#996600;">&quot;&quot;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a = a <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">&quot;.&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#{}&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#996600;">&quot;&quot;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a = <span style="color:#996600;">&quot;#{a}.&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Other 100.000:&quot;</span>
  n=<span style="color:#006666;">100</span>_000
  str=<span style="color:#996600;">&quot;&quot;</span>
  t3 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;* 100:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str = <span style="color:#996600;">&quot; abc def ghi rn&quot;</span> <span style="color:#006600; font-weight:bold;">*</span> <span style="color:#006666;">100</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;capitalize:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str.<span style="color:#9900CC;">capitalize</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;upcase:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str.<span style="color:#9900CC;">upcase</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;chomp:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str.<span style="color:#CC0066; font-weight:bold;">chomp</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;include:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str.<span style="color:#9966CC; font-weight:bold;">include</span>?<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;ghi&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;str.<span style="color:#9966CC; font-weight:bold;">include</span>?<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;qwertyuiopasdfghjkl&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;index:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str.<span style="color:#9900CC;">index</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;ghi&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;str.<span style="color:#9900CC;">index</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;qwertyuiopasdfghjkl&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;sub:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str.<span style="color:#CC0066; font-weight:bold;">sub</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;ghi&quot;</span>, <span style="color:#996600;">&quot;GGHHII&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;gsub:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str.<span style="color:#CC0066; font-weight:bold;">gsub</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;ghi&quot;</span>, <span style="color:#996600;">&quot;GGHHII&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[x..y]:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> str<span style="color:#006600; font-weight:bold;">&#91;</span>0..2<span style="color:#006600; font-weight:bold;">&#93;</span>;str<span style="color:#006600; font-weight:bold;">&#91;</span>5..15<span style="color:#006600; font-weight:bold;">&#93;</span>;str<span style="color:#006600; font-weight:bold;">&#91;</span>6..26<span style="color:#006600; font-weight:bold;">&#93;</span>;str<span style="color:#006600; font-weight:bold;">&#91;</span>10..50<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;slice:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> str.<span style="color:#9900CC;">slice</span><span style="color:#006600; font-weight:bold;">&#40;</span>0..2<span style="color:#006600; font-weight:bold;">&#41;</span>;str.<span style="color:#9900CC;">slice</span><span style="color:#006600; font-weight:bold;">&#40;</span>5..15<span style="color:#006600; font-weight:bold;">&#41;</span>;str.<span style="color:#9900CC;">slice</span><span style="color:#006600; font-weight:bold;">&#40;</span>6..26<span style="color:#006600; font-weight:bold;">&#41;</span>;str.<span style="color:#9900CC;">slice</span><span style="color:#006600; font-weight:bold;">&#40;</span>10..50<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;strip:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#996600;">&quot;  1 2 3 4 5  &quot;</span>.<span style="color:#9900CC;">strip</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Each:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str.<span style="color:#9900CC;">each_line</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> x <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Cast 1.000.000:&quot;</span>
  n=<span style="color:#006666;">1</span>_000_000
  str=<span style="color:#996600;">&quot;abcd1234&quot;</span>
  t4 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;.to_i:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str.<span style="color:#9900CC;">to_i</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t4 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;.to_sym:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str.<span style="color:#9900CC;">to_sym</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  n=<span style="color:#006666;">100</span>_000
  str=<span style="color:#996600;">&quot;abc123 &quot;</span> <span style="color:#006600; font-weight:bold;">*</span> <span style="color:#006666;">100</span>
  t4 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;split:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> str.<span style="color:#CC0066; font-weight:bold;">split</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#006600; font-weight:bold;">&#91;</span>t1<span style="color:#006600; font-weight:bold;">+</span>t2<span style="color:#006600; font-weight:bold;">+</span>t3<span style="color:#006600; font-weight:bold;">+</span>t4<span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Questi sono i risultati in ordine di interprete, dal primo al quarto:</p>
<p><strong>Ruby 1.8.6</strong></p>
<pre>
C:ProgettiRubybench>ruby bench_str.rb
                           user     system      total        real
Concat 1.000.000:
+                      3.525000   0.000000   3.525000 (  3.555325)
<<                     2.864000   0.000000   2.864000 (  2.884320)
#{}                    3.565000   0.010000   3.575000 (  3.615415)
Add 100.000:
+=                     5.257000   4.306000   9.563000 (  9.724565)
<<                     0.030000   0.010000   0.040000 (  0.040060)
a = a + '.'            5.398000   4.376000   9.774000 (  9.884805)
#{}                    5.328000   2.474000   7.802000 (  7.901835)
Other 100.000:
* 100:                 0.551000   0.380000   0.931000 (  0.981470)
capitalize:            0.951000   0.361000   1.312000 (  1.311965)
upcase:                2.844000   0.490000   3.334000 (  3.365040)
chomp:                 0.491000   0.301000   0.792000 (  0.861290)
include:               0.631000   0.000000   0.631000 (  0.630945)
index:                 0.611000   0.000000   0.611000 (  0.610915)
sub:                   1.181000   0.410000   1.591000 (  1.602400)
gsub:                 19.989000   1.623000  21.612000 ( 21.842715)
[x..y]:                0.351000   0.000000   0.351000 (  0.360540)
slice:                 0.350000   0.000000   0.350000 (  0.350525)
strip:                 0.090000   0.000000   0.090000 (  0.090135)
Each:                  7.711000   0.000000   7.711000 (  7.761625)
Cast 1.000.000:
.to_i:                 0.221000   0.000000   0.221000 (  0.220330)
.to_sym:               0.240000   0.000000   0.240000 (  0.240360)
split:                 6.229000   0.010000   6.239000 (  6.269390)
--- Total:            68.408000  14.751000  83.159000 ( 84.105970)
</pre>
<p><strong>Ruby 1.9.1</strong></p>
<pre>
C:ProgettiRubybench>ruby bench_str.rb
                           user     system      total        real
Concat 1.000.000:
+                      1.932000   0.000000   1.932000 (  1.992985)
<<                     1.633000   0.000000   1.633000 (  1.672505)
#{}                    2.183000   0.000000   2.183000 (  2.213315)
Add 100.000:
+=                     5.538000   4.136000   9.674000 (  9.884805)
<<                     0.030000   0.000000   0.030000 (  0.030045)
a = a + '.'            5.368000   4.346000   9.714000 (  9.884805)
#{}                    6.529000   4.246000  10.775000 ( 11.096620)
Other 100.000:
* 100:                 0.491000   0.400000   0.891000 (  0.891335)
capitalize:            4.406000   0.501000   4.907000 (  4.977455)
upcase:                0.671000   0.501000   1.172000 (  1.171755)
chomp:                 0.541000   0.340000   0.881000 (  0.911365)
include:               0.110000   0.000000   0.110000 (  0.110165)
index:                 0.120000   0.000000   0.120000 (  0.120180)
sub:                   0.731000   0.371000   1.102000 (  1.111665)
gsub:                  7.361000   0.991000   8.352000 (  8.512750)
[x..y]:                0.200000   0.010000   0.210000 (  0.210315)
slice:                 0.170000   0.000000   0.170000 (  0.170255)
strip:                 0.090000   0.000000   0.090000 (  0.090135)
Each:                  6.359000   0.020000   6.379000 (  6.419615)
Cast 1.000.000:
.to_i:                 0.171000   0.000000   0.171000 (  0.170255)
.to_sym:               0.290000   0.000000   0.290000 (  0.330495)
split:                 3.575000   0.000000   3.575000 (  3.595385)
--- Total:            48.499000  15.862000  64.361000 ( 65.568205)
</pre>
<p><strong>JRuby</strong></p>
<pre>
C:ProgettiRubybench>jruby bench_str.rb
                           user     system      total        real
Concat 1.000.000:
+                      1.142000   0.000000   1.142000 (  1.101000)
<<                     0.932000   0.000000   0.932000 (  0.942000)
#{}                    0.430000   0.000000   0.430000 (  0.430000)
Add 100.000:
+=                     7.962000   0.000000   7.962000 (  7.962000)
<<                     0.020000   0.000000   0.020000 (  0.020000)
a = a + '.'            7.542000   0.000000   7.542000 (  7.542000)
#{}                   16.324000   0.000000  16.324000 ( 16.324000)
Other 100.000:
* 100:                 0.140000   0.000000   0.140000 (  0.140000)
capitalize:            0.781000   0.000000   0.781000 (  0.781000)
upcase:                1.382000   0.000000   1.382000 (  1.382000)
chomp:                 0.051000   0.000000   0.051000 (  0.051000)
include:               0.240000   0.000000   0.240000 (  0.240000)
index:                 0.230000   0.000000   0.230000 (  0.230000)
sub:                   0.381000   0.000000   0.381000 (  0.391000)
gsub:                  3.816000   0.000000   3.816000 (  3.816000)
[x..y]:                0.100000   0.000000   0.100000 (  0.100000)
slice:                 0.120000   0.000000   0.120000 (  0.120000)
strip:                 0.040000   0.000000   0.040000 (  0.040000)
Each:                  2.333000   0.000000   2.333000 (  2.333000)
Cast 1.000.000:
.to_i:                 0.470000   0.000000   0.470000 (  0.470000)
.to_sym:               0.191000   0.000000   0.191000 (  0.191000)
split:                 1.622000   0.000000   1.622000 (  1.622000)
--- Total:            46.249000   0.000000  46.249000 ( 46.227999)
</pre>
<p><strong>IronRuby</strong></p>
<pre>
C:ProgettiRubybench>ir bench_str.rb
                           user     system      total        real
Concat 1.000.000:
+                      2.804032   0.070101   2.874133 (  2.954425)
<<                     1.101584   0.000000   1.101584 (  1.101650)
#{}                    1.331915   0.000000   1.331915 (  1.342010)
Add 100.000:
+=                    50.502619   4.836955  55.339574 ( 56.043940)
<<                     0.040058   0.000000   0.040058 (  0.040060)
a = a + '.'           50.662850   4.616638  55.279488 ( 56.013895)
#{}                   51.173584   4.666710  55.840294 ( 56.634825)
Other 100.000:
* 100:                 0.500720   0.000000   0.500720 (  0.500750)
capitalize:            2.503600   0.010014   2.513614 (  2.583870)
upcase:                6.078741   0.000000   6.078741 (  6.199285)
chomp:                 0.200288   0.000000   0.200288 (  0.200300)
include:               4.216062   0.000000   4.216062 (  4.246360)
index:                 4.135947   0.000000   4.135947 (  4.206300)
sub:                   1.462102   0.000000   1.462102 (  1.492235)
gsub:                  8.692499   0.020029   8.712528 (  8.773140)
[x..y]:                0.290418   0.000000   0.290418 (  0.290435)
slice:                 0.230331   0.010014   0.240346 (  0.260390)
strip:                 0.070101   0.000000   0.070101 (  0.070105)
Each:                 25.015971   0.050072  25.066043 ( 25.357980)
Cast 1.000.000:
.to_i:                 0.220317   0.000000   0.220317 (  0.220330)
.to_sym:               0.280403   0.000000   0.280403 (  0.280420)
split:                 4.446394   0.010014   4.456408 (  4.516765)
--- Total:           215.960536  14.290549 230.251085 (233.329469)
</pre>
<p>Questo è il <strong>riepilogo dei totali</strong>:<br />
<code><br />
Ruby 1.8.6<br />
--- Total:            68.408000  14.751000  83.159000 ( 84.105970)<br />
Ruby 1.9.1<br />
--- Total:            48.499000  15.862000  64.361000 ( 65.568205)<br />
Jruby<br />
--- Total:            46.249000   0.000000  46.249000 <strong>( 46.227999)</strong><br />
Ironruby<br />
--- Total:           215.960536  14.290549 230.251085 (233.329469)<br />
</code></p>
<p><strong>Commento</strong>: Per la concatenazione, in tutti i casi prevale l'operatore << mentre includere le variabili nelle stringhe con #{}, sarà forse efficiente come uso di memoria ma in quanto a prestazioni è in coda agli altri. Ironruby fatica con le stringhe, è alto infatti il divario con particolari operatori anche se basterebbe usare << per quasi annullare il divario. Un pò di fatica anche sul ciclo delle righe se confrontato con gli altri tre. Molto bene ruby 1.9.1 con prestazioni simili a Jruby ma un consumo di memoria di soli 5Mb contro 30 della versione java. Anche la versione 1.8.6 non è niente male, ha perso tempo con gsub (soprattutto rispetto a jruby!).</p>
<h3>I numeri</h3>
<p>Lo script:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;benchmark&quot;</span>
<span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#CC00FF; font-weight:bold;">Benchmark</span>
&nbsp;
<span style="color:#CC00FF; font-weight:bold;">Benchmark</span>.<span style="color:#9900CC;">bm</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">21</span>, <span style="color:#996600;">&quot;--- Total:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span><span style="color:#006600; font-weight:bold;">|</span>b<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Integer&quot;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Arithmetic operations 10.000.000:&quot;</span>
  n=<span style="color:#006666;">10</span>_000_000
  t1 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;x + 2&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006666;">0</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a = x <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006666;">2</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;x - 1&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a = x <span style="color:#006600; font-weight:bold;">-</span> <span style="color:#006666;">1</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;x * 3&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a = x <span style="color:#006600; font-weight:bold;">*</span> <span style="color:#006666;">3</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;x / 2&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a = x <span style="color:#006600; font-weight:bold;">/</span> <span style="color:#006666;">2</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;x ** 2&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a = x <span style="color:#006600; font-weight:bold;">**</span> <span style="color:#006666;">2</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;x % 360&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> x <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#006666;">360</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Cast&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> x.<span style="color:#9900CC;">to_s</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> x.<span style="color:#9900CC;">to_f</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Add 10.000.000:&quot;</span>
  n=<span style="color:#006666;">10</span>_000_000
  t2 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;+=&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006666;">0</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#006666;">1</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;a = a + 1&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006666;">0</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a = a <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006666;">1</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;&lt;&lt;&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006666;">0</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#006666;">1</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;.next&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006666;">0</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a = a.<span style="color:#9966CC; font-weight:bold;">next</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Float&quot;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Arithmetic operations 10.000.000:&quot;</span>
  n=<span style="color:#006666;">10</span>_000_000
  t3 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;x + 1.234567&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006666;">0</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a = x <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006666;">1.234567</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;x - 0.135799&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006666;">0</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a = x <span style="color:#006600; font-weight:bold;">-</span> <span style="color:#006666;">0.135799</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;x * 0.987654&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006666;">0</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a = x <span style="color:#006600; font-weight:bold;">*</span> <span style="color:#006666;">0.987654</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;x / 1.975313&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006666;">0</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a = x <span style="color:#006600; font-weight:bold;">/</span> <span style="color:#006666;">1.975313</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;x ** 1.987654&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006666;">0</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a = x <span style="color:#006600; font-weight:bold;">**</span> <span style="color:#006666;">1.987654</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Cast&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> x.<span style="color:#9900CC;">to_s</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> x.<span style="color:#9900CC;">to_i</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#006600; font-weight:bold;">&#91;</span>t1<span style="color:#006600; font-weight:bold;">+</span>t2<span style="color:#006600; font-weight:bold;">+</span>t3<span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p><strong>Ruby 1.8.6</strong></p>
<pre>
C:ProgettiRubybench>ruby bench_num.rb
                           user     system      total        real
Integer
Arithmetic operations 10.000.000:
x + 2                  3.154000   0.000000   3.154000 (  3.194785)
x - 1                  3.365000   0.000000   3.365000 (  3.415115)
x * 3                  3.415000   0.000000   3.415000 (  3.495235)
x / 2                  3.475000   0.000000   3.475000 (  3.495235)
x ** 2                14.771000   0.010000  14.781000 ( 14.952395)
x % 360                2.914000   0.000000   2.914000 (  3.004500)
Cast                  11.847000   0.000000  11.847000 ( 11.987955)
Add 10.000.000:
+=                     2.544000   0.000000   2.544000 (  2.583870)
a = a + 1              2.524000   0.000000   2.524000 (  2.533795)
<<                     2.233000   0.000000   2.233000 (  2.253375)
.next                  1.963000   0.000000   1.963000 (  1.982970)
Float
Arithmetic operations 10.000.000:
x + 1.234567           3.885000   0.000000   3.885000 (  3.985970)
x - 0.135799           3.886000   0.000000   3.886000 (  3.945910)
x * 0.987654           3.895000   0.000000   3.895000 (  3.945910)
x / 1.975313          12.378000   0.010000  12.388000 ( 12.588855)
x ** 1.987654          5.057000   0.000000   5.057000 (  5.147710)
Cast                  11.106000   0.030000  11.136000 ( 11.286905)
--- Total:            92.412000   0.050000  92.462000 ( 93.800490)
</pre>
<p><strong>Ruby 1.9.1</strong></p>
<pre>
C:ProgettiRubybench>ruby bench_num.rb
                           user     system      total        real
Integer
Arithmetic operations 10.000.000:
x + 2                  0.981000   0.000000   0.981000 (  0.991485)
x - 1                  0.901000   0.000000   0.901000 (  0.911365)
x * 3                  0.962000   0.000000   0.962000 (  0.961440)
x / 2                  0.911000   0.000000   0.911000 (  0.921380)
x ** 2                 4.316000   0.000000   4.316000 (  4.366540)
x % 360                0.881000   0.000000   0.881000 (  0.961440)
Cast                   4.727000   0.020000   4.747000 (  5.217815)
Add 10.000.000:
+=                     0.952000   0.000000   0.952000 (  0.951425)
a = a + 1              0.901000   0.010000   0.911000 (  0.951425)
<<                     1.312000   0.000000   1.312000 (  1.342010)
.next                  1.312000   0.020000   1.332000 (  1.402100)
Float
Arithmetic operations 10.000.000:
x + 1.234567           2.103000   0.000000   2.103000 (  2.233345)
x - 0.135799           1.983000   0.000000   1.983000 (  2.013015)
x * 0.987654           2.042000   0.000000   2.042000 (  2.053075)
x / 1.975313           2.183000   0.000000   2.183000 (  2.243360)
x ** 1.987654          3.174000   0.000000   3.174000 (  3.184770)
Cast                   4.106000   0.000000   4.106000 (  4.146210)
--- Total:            33.747000   0.050000  33.797000 ( 34.852200)
</pre>
<p><strong>JRuby</strong></p>
<pre>
C:ProgettiRubybench>jruby bench_num.rb
                           user     system      total        real
Integer
Arithmetic operations 10.000.000:
x + 2                  2.043000   0.000000   2.043000 (  1.863000)
x - 1                  1.803000   0.000000   1.803000 (  1.803000)
x * 3                  1.923000   0.000000   1.923000 (  1.923000)
x / 2                  2.153000   0.000000   2.153000 (  2.153000)
x ** 2                 5.899000   0.000000   5.899000 (  5.899000)
x % 360                1.803000   0.000000   1.803000 (  1.803000)
Cast                   4.527000   0.000000   4.527000 (  4.527000)
Add 10.000.000:
+=                     1.682000   0.000000   1.682000 (  1.682000)
a = a + 1              1.602000   0.000000   1.602000 (  1.602000)
<<                     1.302000   0.000000   1.302000 (  1.302000)
.next                  1.433000   0.000000   1.433000 (  1.433000)
Float
Arithmetic operations 10.000.000:
x + 1.234567           2.363000   0.000000   2.363000 (  2.363000)
x - 0.135799           2.404000   0.000000   2.404000 (  2.404000)
x * 0.987654           2.153000   0.000000   2.153000 (  2.153000)
x / 1.975313           4.487000   0.000000   4.487000 (  4.487000)
x ** 1.987654          5.829000   0.000000   5.829000 (  5.839000)
Cast                   4.146000   0.000000   4.146000 (  4.156000)
--- Total:            47.552000   0.000000  47.552000 ( 47.392000)
</pre>
<p><strong>IronRuby</strong></p>
<pre>
C:ProgettiRubybench>ir bench_num.rb
                           user     system      total        real
Integer
Arithmetic operations 10.000.000:
x + 2                  3.925645   0.060086   3.985731 (  4.056075)
x - 1                  1.652376   0.000000   1.652376 (  1.662490)
x * 3                  1.912750   0.000000   1.912750 (  1.972955)
x / 2                  1.982851   0.010014   1.992866 (  2.013015)
x ** 2                 3.895602   0.010014   3.905616 (  3.975955)
x % 360                1.672405   0.010014   1.682419 (  1.692535)
Cast                   6.248986   0.010014   6.259000 (  6.389570)
Add 10.000.000:
+=                     1.672405   0.010014   1.682419 (  1.712565)
a = a + 1              1.742506   0.000000   1.742506 (  1.792685)
<<                     1.472117   0.040058   1.512174 (  1.532295)
.next                  1.672405   0.000000   1.672405 (  1.672505)
Float
Arithmetic operations 10.000.000:
x + 1.234567           1.932779   0.000000   1.932779 (  1.932895)
x - 0.135799           1.952808   0.010014   1.962822 (  2.033045)
x * 0.987654           1.992866   0.000000   1.992866 (  1.992985)
x / 1.975313           3.825501   0.030043   3.855544 (  3.925880)
x ** 1.987654          3.014334   0.000000   3.014334 (  3.034545)
Cast                   5.878453   0.000000   5.878453 (  5.928880)
--- Total:            46.446787   0.190274  46.637061 ( 47.320875)
</pre>
<p><strong>Riepilogo totali</strong>:<br />
<code><br />
Ruby 1.8.6<br />
--- Total:            92.412000   0.050000  92.462000 ( 93.800490)<br />
Ruby 1.9.1<br />
--- Total:            33.747000   0.050000  33.797000 <strong>( 34.852200)</strong><br />
Jruby<br />
--- Total:            47.552000   0.000000  47.552000 ( 47.392000)<br />
Ironruby<br />
--- Total:            46.446787   0.190274  46.637061 ( 47.320875)<br />
</code></p>
<p><strong>Commento</strong>: Netto miglioramento della versione 1.9.1 che, con i numeri, è tre volte più veloce della 1.8.6. Anche gli altri due non sono male.<br />
<em><strong>16/08/2009</strong>: Mi sono accorto di aver inserito erroneamente il metodo shift (<<) tra gli add.</em><br />
<em><strong>24/08/2009</strong>: Avevo invertito i risultati della 1.8.6 con quelli della 1.9.1... in effetti mi sembravano un pò strani :-p</em></p>
<h3>Gli array</h3>
<p>Lo script:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;benchmark&quot;</span>
<span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#CC00FF; font-weight:bold;">Benchmark</span>
&nbsp;
<span style="color:#CC00FF; font-weight:bold;">Benchmark</span>.<span style="color:#9900CC;">bm</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">21</span>, <span style="color:#996600;">&quot;Total:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span><span style="color:#006600; font-weight:bold;">|</span>b<span style="color:#006600; font-weight:bold;">|</span>
  n=<span style="color:#006666;">100</span>_000
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Create 100.000:&quot;</span>
  t1 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%w()&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">%</span>w<span style="color:#006600; font-weight:bold;">&#40;</span>a b c d f e g h j k i l m n o <span style="color:#CC0066; font-weight:bold;">p</span> q r s t u v w y z <span style="color:#006666;">0</span> <span style="color:#006666;">1</span> <span style="color:#006666;">2</span> <span style="color:#006666;">3</span> <span style="color:#006666;">4</span> <span style="color:#006666;">5</span> <span style="color:#006666;">6</span> <span style="color:#006666;">7</span> <span style="color:#006666;">8</span> <span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%w''&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">%</span>w<span style="color:#996600;">&quot;a b c d f e g h j k i l m n o p q r s t u v w y z 0 1 2 3 4 5 6 7 8 9&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;split&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;a b c d f e g h j k i l m n o p q r s t u v w y z 0 1 2 3 4 5 6 7 8 9&quot;</span>.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">' '</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[str]&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;a&quot;</span>,<span style="color:#996600;">&quot;b&quot;</span>,<span style="color:#996600;">&quot;c&quot;</span>,<span style="color:#996600;">&quot;d&quot;</span>,<span style="color:#996600;">&quot;f&quot;</span>,<span style="color:#996600;">&quot;e&quot;</span>,<span style="color:#996600;">&quot;g&quot;</span>,<span style="color:#996600;">&quot;h&quot;</span>,<span style="color:#996600;">&quot;j&quot;</span>,<span style="color:#996600;">&quot;k&quot;</span>,<span style="color:#996600;">&quot;i&quot;</span>,<span style="color:#996600;">&quot;l&quot;</span>,<span style="color:#996600;">&quot;m&quot;</span>,<span style="color:#996600;">&quot;n&quot;</span>,<span style="color:#996600;">&quot;o&quot;</span>,<span style="color:#996600;">&quot;p&quot;</span>,<span style="color:#996600;">&quot;q&quot;</span>,<span style="color:#996600;">&quot;r&quot;</span>,<span style="color:#996600;">&quot;s&quot;</span>,<span style="color:#996600;">&quot;t&quot;</span>,<span style="color:#996600;">&quot;u&quot;</span>,<span style="color:#996600;">&quot;v&quot;</span>,<span style="color:#996600;">&quot;w&quot;</span>,<span style="color:#996600;">&quot;y&quot;</span>,<span style="color:#996600;">&quot;z&quot;</span>,<span style="color:#996600;">&quot;0&quot;</span>,<span style="color:#996600;">&quot;1&quot;</span>,<span style="color:#996600;">&quot;2&quot;</span>,<span style="color:#996600;">&quot;3&quot;</span>,<span style="color:#996600;">&quot;4&quot;</span>,<span style="color:#996600;">&quot;5&quot;</span>,<span style="color:#996600;">&quot;6&quot;</span>,<span style="color:#996600;">&quot;7&quot;</span>,<span style="color:#996600;">&quot;8&quot;</span>,<span style="color:#996600;">&quot;9&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[num]&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span>,<span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span>,<span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span>,<span style="color:#006666;">0</span>,<span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span>,<span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span>,<span style="color:#006666;">0</span>,<span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span>,<span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span>,<span style="color:#006666;">0</span>,<span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Array.new(str)&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#CC0066; font-weight:bold;">Array</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">35</span>, <span style="color:#996600;">&quot;a&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Array.new(num)&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#CC0066; font-weight:bold;">Array</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">35</span>, <span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Array.new(hash)&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#CC0066; font-weight:bold;">Array</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">35</span>, <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  n=<span style="color:#006666;">100</span>_000
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Add 100.000:&quot;</span>
  t2 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;+= ['.']&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;.&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;+= [0]&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;&lt;&lt; ['.']&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;.&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;&lt;&lt; [0]&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;a = a+['.']&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a = a <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;.&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;a = a+[0]&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    a = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a = a <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  n=<span style="color:#006666;">100</span>_000
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Concatenate 100.000:&quot;</span>
  t3 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[num]+&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span>,<span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span>,<span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span>,<span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[str]+&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;a&quot;</span>,<span style="color:#996600;">&quot;b&quot;</span>,<span style="color:#996600;">&quot;c&quot;</span>,<span style="color:#996600;">&quot;d&quot;</span>,<span style="color:#996600;">&quot;f&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;e&quot;</span>,<span style="color:#996600;">&quot;g&quot;</span>,<span style="color:#996600;">&quot;h&quot;</span>,<span style="color:#996600;">&quot;j&quot;</span>,<span style="color:#996600;">&quot;k&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;i&quot;</span>,<span style="color:#996600;">&quot;l&quot;</span>,<span style="color:#996600;">&quot;m&quot;</span>,<span style="color:#996600;">&quot;n&quot;</span>,<span style="color:#996600;">&quot;o&quot;</span>,<span style="color:#996600;">&quot;p&quot;</span>,<span style="color:#996600;">&quot;q&quot;</span>,<span style="color:#996600;">&quot;r&quot;</span>,<span style="color:#996600;">&quot;s&quot;</span>,<span style="color:#996600;">&quot;t&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[mix]+&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;a&quot;</span>,<span style="color:#996600;">&quot;b&quot;</span>,<span style="color:#996600;">&quot;c&quot;</span>,<span style="color:#996600;">&quot;d&quot;</span>,<span style="color:#996600;">&quot;f&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;i&quot;</span>,<span style="color:#006666;">0</span>,<span style="color:#996600;">&quot;m&quot;</span>,<span style="color:#006666;">1</span>,<span style="color:#996600;">&quot;o&quot;</span>,<span style="color:#006666;">2</span>,<span style="color:#996600;">&quot;q&quot;</span>,<span style="color:#006666;">3</span>,<span style="color:#996600;">&quot;s&quot;</span>,<span style="color:#006666;">4</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[num]&lt;&lt;&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span>,<span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span>,<span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span>,<span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[str]&lt;&lt;&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;a&quot;</span>,<span style="color:#996600;">&quot;b&quot;</span>,<span style="color:#996600;">&quot;c&quot;</span>,<span style="color:#996600;">&quot;d&quot;</span>,<span style="color:#996600;">&quot;f&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;e&quot;</span>,<span style="color:#996600;">&quot;g&quot;</span>,<span style="color:#996600;">&quot;h&quot;</span>,<span style="color:#996600;">&quot;j&quot;</span>,<span style="color:#996600;">&quot;k&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;i&quot;</span>,<span style="color:#996600;">&quot;l&quot;</span>,<span style="color:#996600;">&quot;m&quot;</span>,<span style="color:#996600;">&quot;n&quot;</span>,<span style="color:#996600;">&quot;o&quot;</span>,<span style="color:#996600;">&quot;p&quot;</span>,<span style="color:#996600;">&quot;q&quot;</span>,<span style="color:#996600;">&quot;r&quot;</span>,<span style="color:#996600;">&quot;s&quot;</span>,<span style="color:#996600;">&quot;t&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[mix]&lt;&lt;&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;a&quot;</span>,<span style="color:#996600;">&quot;b&quot;</span>,<span style="color:#996600;">&quot;c&quot;</span>,<span style="color:#996600;">&quot;d&quot;</span>,<span style="color:#996600;">&quot;f&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;i&quot;</span>,<span style="color:#006666;">0</span>,<span style="color:#996600;">&quot;m&quot;</span>,<span style="color:#006666;">1</span>,<span style="color:#996600;">&quot;o&quot;</span>,<span style="color:#006666;">2</span>,<span style="color:#996600;">&quot;q&quot;</span>,<span style="color:#006666;">3</span>,<span style="color:#996600;">&quot;s&quot;</span>,<span style="color:#006666;">4</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
   t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[num].concat&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span>,<span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">concat</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">concat</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span>,<span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span>,<span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[str].concat&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;a&quot;</span>,<span style="color:#996600;">&quot;b&quot;</span>,<span style="color:#996600;">&quot;c&quot;</span>,<span style="color:#996600;">&quot;d&quot;</span>,<span style="color:#996600;">&quot;f&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">concat</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;e&quot;</span>,<span style="color:#996600;">&quot;g&quot;</span>,<span style="color:#996600;">&quot;h&quot;</span>,<span style="color:#996600;">&quot;j&quot;</span>,<span style="color:#996600;">&quot;k&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">concat</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;i&quot;</span>,<span style="color:#996600;">&quot;l&quot;</span>,<span style="color:#996600;">&quot;m&quot;</span>,<span style="color:#996600;">&quot;n&quot;</span>,<span style="color:#996600;">&quot;o&quot;</span>,<span style="color:#996600;">&quot;p&quot;</span>,<span style="color:#996600;">&quot;q&quot;</span>,<span style="color:#996600;">&quot;r&quot;</span>,<span style="color:#996600;">&quot;s&quot;</span>,<span style="color:#996600;">&quot;t&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;[mix].concat&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;a&quot;</span>,<span style="color:#996600;">&quot;b&quot;</span>,<span style="color:#996600;">&quot;c&quot;</span>,<span style="color:#996600;">&quot;d&quot;</span>,<span style="color:#996600;">&quot;f&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">concat</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">5</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">8</span>,<span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">concat</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;i&quot;</span>,<span style="color:#006666;">0</span>,<span style="color:#996600;">&quot;m&quot;</span>,<span style="color:#006666;">1</span>,<span style="color:#996600;">&quot;o&quot;</span>,<span style="color:#006666;">2</span>,<span style="color:#996600;">&quot;q&quot;</span>,<span style="color:#006666;">3</span>,<span style="color:#996600;">&quot;s&quot;</span>,<span style="color:#006666;">4</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;union [num]&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span>,<span style="color:#006666;">14</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span>,<span style="color:#006666;">53</span>,<span style="color:#006666;">682</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">3</span>,<span style="color:#006666;">4</span>,<span style="color:#006666;">53</span>,<span style="color:#006666;">6</span>,<span style="color:#006666;">7</span>,<span style="color:#006666;">84</span>,<span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;union [str]&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;a&quot;</span>,<span style="color:#996600;">&quot;b&quot;</span>,<span style="color:#996600;">&quot;c&quot;</span>,<span style="color:#996600;">&quot;d&quot;</span>,<span style="color:#996600;">&quot;f&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;b&quot;</span>,<span style="color:#996600;">&quot;d&quot;</span>,<span style="color:#996600;">&quot;h&quot;</span>,<span style="color:#996600;">&quot;j&quot;</span>,<span style="color:#996600;">&quot;k&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  a=<span style="color:#CC0066; font-weight:bold;">Array</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">100</span>, <span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  n=<span style="color:#006666;">1</span>_000_000
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Read 1.000.000:&quot;</span>
  t4 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;each:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a.<span style="color:#9900CC;">each</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> x<span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t4 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;map:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a.<span style="color:#9900CC;">map</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> x<span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Other 10.000:&quot;</span>
  n=<span style="color:#006666;">10</span>_000
  a=<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;a&quot;</span>,<span style="color:#0000FF; font-weight:bold;">nil</span>,<span style="color:#006666;">0</span>,<span style="color:#996600;">&quot;b&quot;</span>,<span style="color:#006666;">1</span>,<span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">*</span> <span style="color:#006666;">500</span>
  t5 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;.compact:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a.<span style="color:#9900CC;">compact</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t5 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;.delete(nil):&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> a.<span style="color:#9900CC;">delete</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  a=<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> x <span style="color:#006600; font-weight:bold;">&#125;</span>
  t5 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;delete:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> a.<span style="color:#9900CC;">delete</span><span style="color:#006600; font-weight:bold;">&#40;</span>x<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;-&quot;</span><span style="color:#006600; font-weight:bold;">*</span><span style="color:#006666;">20</span>
  <span style="color:#006600; font-weight:bold;">&#91;</span>t1<span style="color:#006600; font-weight:bold;">+</span>t2<span style="color:#006600; font-weight:bold;">+</span>t3<span style="color:#006600; font-weight:bold;">+</span>t4<span style="color:#006600; font-weight:bold;">+</span>t5<span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p><strong>Ruby 1.8.6</strong></p>
<pre>
C:ProgettiRubybench>ruby bench_arr.rb
                           user     system      total        real
Create 100.000:
%w()                   0.300000   0.010000   0.310000 (  0.320480)
%w''                   0.300000   0.000000   0.300000 (  0.310465)
split                  2.164000   0.010000   2.174000 (  2.213315)
[str]                  0.310000   0.000000   0.310000 (  0.310465)
[num]                  0.160000   0.030000   0.190000 (  0.220330)
Array.new(str)         0.180000   0.010000   0.190000 (  0.190285)
Array.new(num)         0.151000   0.030000   0.181000 (  0.180270)
Array.new(hash)        0.270000   0.040000   0.310000 (  0.310465)
Add 100.000:
+= ['.']              22.472000   8.272000  30.744000 ( 31.487160)
+= [0]                20.800000   8.602000  29.402000 ( 30.004940)
<< ['.']               0.070000   0.010000   0.080000 (  0.090135)
<< [0]                 0.070000   0.000000   0.070000 (  0.070105)
a = a+['.']           28.321000   7.351000  35.672000 ( 36.514690)
a = a+[0]             25.226000   7.480000  32.706000 ( 33.520205)
Concatenate 100.000:
[num]+                 0.451000   0.030000   0.481000 (  0.490735)
[str]+                 0.581000   0.030000   0.611000 (  0.640960)
[mix]+                 0.521000   0.030000   0.551000 (  0.550825)
[num]<<                0.350000   0.020000   0.370000 (  0.370555)
[str]<<                0.421000   0.031000   0.452000 (  0.450675)
[mix]<<                0.420000   0.010000   0.430000 (  0.430645)
[num].concat           0.341000   0.030000   0.371000 (  0.380570)
[str].concat           0.491000   0.020000   0.511000 (  0.510765)
[mix].concat           0.400000   0.020000   0.420000 (  0.430645)
union [num]            1.032000   0.020000   1.052000 (  1.051575)
union [str]            0.761000   0.080000   0.841000 (  0.881320)
Read 1.000.000:
each:                 16.934000   0.000000  16.934000 ( 17.145680)
map:                  20.750000   1.181000  21.931000 ( 22.243315)
Other 10.000:
.compact:              0.401000   0.131000   0.532000 (  0.530795)
.delete(nil):          4.246000   0.000000   4.246000 (  4.316465)
delete:                4.937000   0.000000   4.937000 (  5.017515)
--------------------
Total:               153.831000  33.478000 187.309000 (191.186350)
</pre>
<p><strong>Ruby 1.9.1</strong></p>
<pre>
C:ProgettiRubybench>ruby bench_arr.rb
                           user     system      total        real
Create 100.000:
%w()                   0.520000   0.000000   0.520000 (  0.520780)
%w''                   0.541000   0.000000   0.541000 (  0.550825)
split                  0.781000   0.000000   0.781000 (  0.791185)
[str]                  0.511000   0.000000   0.511000 (  0.520780)
[num]                  0.020000   0.000000   0.020000 (  0.020030)
Array.new(str)         0.170000   0.010000   0.180000 (  0.190285)
Array.new(num)         0.140000   0.000000   0.140000 (  0.140210)
Array.new(hash)        0.141000   0.030000   0.171000 (  0.200300)
Add 100.000:
+= ['.']              22.131000   9.553000  31.684000 ( 32.268330)
+= [0]                16.514000   8.422000  24.936000 ( 25.478160)
<< ['.']               0.010000   0.020000   0.030000 (  0.030045)
<< [0]                 0.030000   0.000000   0.030000 (  0.030045)
a = a+['.']           17.856000   3.946000  21.802000 ( 22.323435)
a = a+[0]             17.024000   8.172000  25.196000 ( 25.788625)
Concatenate 100.000:
[num]+                 0.211000   0.020000   0.231000 (  0.230345)
[str]+                 0.490000   0.000000   0.490000 (  0.500750)
[mix]+                 0.341000   0.000000   0.341000 (  0.340510)
[num]<<                0.140000   0.000000   0.140000 (  0.140210)
[str]<<                0.421000   0.010000   0.431000 (  0.460690)
[mix]<<                0.260000   0.000000   0.260000 (  0.260390)
[num].concat           0.160000   0.000000   0.160000 (  0.160240)
[str].concat           0.471000   0.000000   0.471000 (  0.470705)
[mix].concat           0.320000   0.000000   0.320000 (  0.320480)
union [num]            0.691000   0.020000   0.711000 (  0.721080)
union [str]            0.952000   0.000000   0.952000 (  0.961440)
Read 1.000.000:
each:                  7.861000   0.000000   7.861000 (  7.991970)
map:                  13.169000   1.482000  14.651000 ( 14.822200)
Other 10.000:
.compact:              0.250000   0.130000   0.380000 (  0.380570)
.delete(nil):          2.684000   0.000000   2.684000 (  2.704050)
delete:                4.907000   0.000000   4.907000 (  4.987470)
--------------------
Total:               109.717000  31.815000 141.532000 (144.306135)
</pre>
<p><strong>JRuby</strong></p>
<pre>
C:ProgettiRubybench>jruby bench_arr.rb
                           user     system      total        real
Create 100.000:
%w()                   0.251000   0.000000   0.251000 (  0.211000)
%w''                   0.190000   0.000000   0.190000 (  0.190000)
split                  0.370000   0.000000   0.370000 (  0.370000)
[str]                  0.191000   0.000000   0.191000 (  0.191000)
[num]                  0.030000   0.000000   0.030000 (  0.030000)
Array.new(str)         0.080000   0.000000   0.080000 (  0.080000)
Array.new(num)         0.060000   0.000000   0.060000 (  0.060000)
Array.new(hash)        0.100000   0.000000   0.100000 (  0.100000)
Add 100.000:
+= ['.']             143.074000   0.000000 143.074000 (143.074000)
+= [0]               126.099000   0.000000 126.099000 (126.099000)
<< ['.']               0.211000   0.000000   0.211000 (  0.211000)
<< [0]                 0.090000   0.000000   0.090000 (  0.090000)
a = a+['.']          124.536000   0.000000 124.536000 (124.536000)
a = a+[0]            127.672000   0.000000 127.672000 (127.672000)
Concatenate 100.000:
[num]+                 0.120000   0.000000   0.120000 (  0.120000)
[str]+                 0.180000   0.000000   0.180000 (  0.180000)
[mix]+                 0.120000   0.000000   0.120000 (  0.120000)
[num]<<                0.070000   0.000000   0.070000 (  0.070000)
[str]<<                0.211000   0.000000   0.211000 (  0.211000)
[mix]<<                0.110000   0.000000   0.110000 (  0.110000)
[num].concat           0.100000   0.000000   0.100000 (  0.100000)
[str].concat           0.160000   0.000000   0.160000 (  0.160000)
[mix].concat           0.131000   0.000000   0.131000 (  0.131000)
union [num]            0.280000   0.000000   0.280000 (  0.280000)
union [str]            0.300000   0.000000   0.300000 (  0.300000)
Read 1.000.000:
each:                  9.364000   0.000000   9.364000 (  9.364000)
map:                  11.007000   0.000000  11.007000 ( 11.007000)
Other 10.000:
.compact:              0.411000   0.000000   0.411000 (  0.411000)
.delete(nil):          2.904000   0.000000   2.904000 (  2.904000)
delete:                4.687000   0.000000   4.687000 (  4.687000)
--------------------
Total:               553.109000   0.000000 553.109000 (553.069000)
</pre>
<p><strong>IronRuby</strong></p>
<pre>
C:ProgettiRubybench>ir bench_arr.rb
                           user     system      total        real
Create 100.000:
%w()                   0.721037   0.000000   0.721037 (  0.721080)
%w''                   0.230331   0.000000   0.230331 (  0.250375)
split                  1.482131   0.000000   1.482131 (  1.482220)
[str]                  0.240346   0.000000   0.240346 (  0.240360)
[num]                  0.100144   0.000000   0.100144 (  0.100150)
Array.new(str)         0.150216   0.000000   0.150216 (  0.150225)
Array.new(num)         0.130187   0.000000   0.130187 (  0.130195)
Array.new(hash)        0.110158   0.000000   0.110158 (  0.120180)
Add 100.000:
+= ['.']              93.234064   9.723982 102.958046 (105.808475)
+= [0]                44.143475   3.294738  47.438213 ( 48.092030)
<< ['.']               0.160230   0.000000   0.160230 (  0.160240)
<< [0]                 0.090130   0.010014   0.100144 (  0.100150)
a = a+['.']           96.779162   9.483637 106.262798 (109.644220)
a = a+[0]             43.823014   3.545098  47.368112 ( 47.921775)
Concatenate 100.000:
[num]+                 0.160230   0.000000   0.160230 (  0.160240)
[str]+                 0.230331   0.000000   0.230331 (  0.240360)
[mix]+                 0.180259   0.000000   0.180259 (  0.180270)
[num]<<                0.090130   0.000000   0.090130 (  0.090135)
[str]<<                0.180259   0.010014   0.190274 (  0.190285)
[mix]<<                0.150216   0.000000   0.150216 (  0.150225)
[num].concat           0.110158   0.010014   0.120173 (  0.120180)
[str].concat           0.220317   0.000000   0.220317 (  0.220330)
[mix].concat           0.180259   0.000000   0.180259 (  0.180270)
union [num]            0.330475   0.000000   0.330475 (  0.340510)
union [str]            0.410590   0.000000   0.410590 (  0.410615)
Read 1.000.000:
each:                 14.040189   0.010014  14.050203 ( 14.181240)
map:                  19.848541   0.020029  19.868570 ( 20.120135)
Other 10.000:
.compact:              1.161670   0.000000   1.161670 (  1.171755)
.delete(nil):         15.462234   0.030043  15.492277 ( 15.833715)
delete:                1.422045   0.000000   1.422045 (  1.472205)
--------------------
Total:               335.572530  26.137584 361.710114 (369.984144)
</pre>
<p><strong>Riepilogo totali</strong>:<br />
<code><br />
Ruby 1.8.6<br />
Total:               153.831000  33.478000 187.309000 (191.186350)<br />
Ruby 1.9.1<br />
Total:               109.717000  31.815000 141.532000 <strong>(144.306135)</strong><br />
Jruby<br />
Total:               553.109000   0.000000 553.109000 (553.069000)<br />
Ironruby<br />
Total:               335.572530  26.137584 361.710114 (369.984144)<br />
</code></p>
<p><strong>Commento</strong>: Dunque, in questo terzo test è importante spendere qualche parola. Il tempo alto di jruby ed ironruby è dovuto anche al fatto che ho voluto comparare la concatenazione <strong>+=</strong> ed una versione simile, entrambi MOLTO sconvenienti per questi due interpreti, i tempi sono infatti altissimi, basterebbe utilizzare solo l'operatore <strong><<</strong> per avere risultati molto diversi, in ordine: 1.8.6=61 1.9.1=40 jruby=33 e ironruby=60 ...jruby risulterebbe il più veloce.<br />
Un altra curiosità è l'utilizzo del metodo compact, oltre ad essere più elegante è anche più prestazionale del sistema analogo delete(nil) è anche più prestazionale con sensibili differenze in Ironruby.</p>
<h3>Gli Hash</h3>
<p>Lo script per testare gli Hash è il più pesante nell'utilizzo della memoria, sinceramente non era nelle mie intenzioni ma poi ho pensato di tenerlo così per esaminarne gli esiti:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;benchmark&quot;</span>
<span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#CC00FF; font-weight:bold;">Benchmark</span>
&nbsp;
n=<span style="color:#006666;">1</span>_000_000
<span style="color:#CC00FF; font-weight:bold;">Benchmark</span>.<span style="color:#9900CC;">bm</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">21</span>, <span style="color:#996600;">&quot;Total:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span><span style="color:#006600; font-weight:bold;">|</span>b<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Write 1.000.000:&quot;</span>
  h = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
  t1 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;int =&gt; str:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> h<span style="color:#006600; font-weight:bold;">&#91;</span>x<span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;.&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  h = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;int =&gt; int:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> h<span style="color:#006600; font-weight:bold;">&#91;</span>x<span style="color:#006600; font-weight:bold;">&#93;</span> = x <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;int =&gt; [int]:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> h<span style="color:#006600; font-weight:bold;">&#91;</span>x<span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#006600; font-weight:bold;">&#91;</span>x<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  t1 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;.to_sym =&gt; .to_s:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    n.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> h<span style="color:#006600; font-weight:bold;">&#91;</span>x.<span style="color:#9900CC;">to_s</span>.<span style="color:#9900CC;">to_sym</span><span style="color:#006600; font-weight:bold;">&#93;</span> = x.<span style="color:#9900CC;">to_s</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;:sym =&gt; str 1.000.000:&quot;</span>
  t2 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Each:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    h.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>k,v<span style="color:#006600; font-weight:bold;">|</span> k; v<span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;each_key:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    h.<span style="color:#9900CC;">each_key</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>k<span style="color:#006600; font-weight:bold;">|</span> k<span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;each_value:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    h.<span style="color:#9900CC;">each_value</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>v<span style="color:#006600; font-weight:bold;">|</span> v<span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  t2 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;read by key:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    h.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>k,v<span style="color:#006600; font-weight:bold;">|</span> h<span style="color:#006600; font-weight:bold;">&#91;</span>k<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  h1=h
&nbsp;
  t3 = b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;5 invert:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    5.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> h.<span style="color:#9900CC;">invert</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  h=h1
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;1000 shift:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    1000.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> h.<span style="color:#9900CC;">shift</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  h=h1
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;1000 delete:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    1000.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> h.<span style="color:#9900CC;">delete</span><span style="color:#006600; font-weight:bold;">&#40;</span>x<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  h=h1
  t3 <span style="color:#006600; font-weight:bold;">+</span>= b.<span style="color:#9900CC;">report</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;all delete:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    h.<span style="color:#9900CC;">each_key</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>k<span style="color:#006600; font-weight:bold;">|</span> h.<span style="color:#9900CC;">delete</span><span style="color:#006600; font-weight:bold;">&#40;</span>k<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#006600; font-weight:bold;">&#91;</span>t1<span style="color:#006600; font-weight:bold;">+</span>t2<span style="color:#006600; font-weight:bold;">+</span>t3<span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p><strong>Ruby 1.8.6</strong></p>
<pre>
C:ProgettiRubybench>ruby bench_hsh.rb
                           user     system      total        real
Write 1.000.000:
int => str:            0.851000   0.030000   0.881000 (  0.881320)
int => int:            1.021000   0.090000   1.111000 (  1.141710)
int => [int]:          0.791000   0.030000   0.821000 (  0.841260)
.to_sym => .to_s:      6.400000   0.080000   6.480000 (  6.509750)
:sym => str 1.000.000:
Each:                  2.553000   0.090000   2.643000 (  2.684020)
each_key:              0.481000   0.000000   0.481000 (  0.490735)
each_value:            0.491000   0.000000   0.491000 (  0.490735)
read by key:           2.854000   0.040000   2.894000 (  2.904350)
5 invert:             31.185000   0.791000  31.976000 ( 32.438585)
1000 shift:           37.604000   0.010000  37.614000 ( 38.177180)
1000 delete:           0.000000   0.000000   0.000000 (  0.000000)
all delete:            1.442000   0.010000   1.452000 (  1.452175)
Total:                85.673000   1.171000  86.844000 ( 88.011820)
</pre>
<p><strong>Ruby 1.9.1</strong></p>
<pre>
C:ProgettiRubybench>ruby bench_hsh.rb
                           user     system      total        real
Write 1.000.000:
int => str:            0.721000   0.100000   0.821000 (  0.841260)
int => int:            0.590000   0.140000   0.730000 (  0.731095)
int => [int]:          0.391000   0.020000   0.411000 (  0.440660)
.to_sym => .to_s:      4.957000   0.320000   5.277000 (  5.327980)
:sym => str 1.000.000:
Each:                  0.691000   0.050000   0.741000 (  0.801200)
each_key:              0.461000   0.000000   0.461000 (  0.470705)
each_value:            0.500000   0.000000   0.500000 (  0.520780)
read by key:           1.022000   0.011000   1.033000 (  1.051575)
5 invert:             33.939000   1.071000  35.010000 ( 35.603325)
1000 shift:           48.800000   0.020000  48.820000 ( 49.474100)
1000 delete:           0.000000   0.000000   0.000000 (  0.000000)
all delete:            1.432000   0.010000   1.442000 (  1.472205)
Total:                93.504000   1.742000  95.246000 ( 96.734885)
</pre>
<p><strong>JRuby</strong></p>
<pre>
C:ProgettiRubybench>jruby bench_hsh.rb
                           user     system      total        real
Write 1.000.000:
int => str:            2.113000   0.000000   2.113000 (  1.933000)
int => int:            0.721000   0.000000   0.721000 (  0.721000)
int => [int]:          1.022000   0.000000   1.022000 (  1.022000)
.to_sym => .to_s:     34.641000   0.000000  34.641000 ( 34.641000)
:sym => str 1.000.000:
Each:                  0.541000   0.000000   0.541000 (  0.541000)
each_key:              0.191000   0.000000   0.191000 (  0.191000)
each_value:            0.240000   0.000000   0.240000 (  0.240000)
read by key:           0.761000   0.000000   0.761000 (  0.761000)
5 invert:            Error: Your application used more memory than the safety cap.
</pre>
<p><strong>IronRuby</strong></p>
<pre>
C:ProgettiRubybench>ir bench_hsh.rb
                           user     system      total        real
Write 1.000.000:
int => str:            2.183139   0.030043   2.213182 (  2.213315)
int => int:            1.211742   0.030043   1.241786 (  1.291935)
int => [int]:          1.712462   0.010014   1.722477 (  1.732595)
.to_sym => .to_s:      7.460728   0.120173   7.580901 (  7.781655)
:sym => str 1.000.000:
Each:                  1.111598   0.000000   1.111598 (  1.131695)
each_key:              0.340490   0.000000   0.340490 (  0.350525)
each_value:            0.330475   0.010014   0.340490 (  0.350525)
read by key:           1.021469   0.000000   1.021469 (  1.031545)
5 invert:              5.588035   0.350504   5.938539 (  7.381055)
1000 shift:            0.020029   0.000000   0.020029 (  0.190285)
1000 delete:           0.020029   0.000000   0.020029 (  0.080120)
all delete:            1.031483   0.020029   1.051512 (  1.061590)
Total:                22.031680   0.570821  22.602501 ( 24.596839)
</pre>
<p><strong>Riepilogo totali</strong>:<br />
<code><br />
Ruby 1.8.6<br />
Total:                85.673000   1.171000  86.844000 ( 88.011820)<br />
Ruby 1.9.1<br />
Total:                93.504000   1.742000  95.246000 ( 96.734885)<br />
Jruby<br />
*** Out of memory ***<br />
Ironruby<br />
Total:                22.031680   0.570821  22.602501 <strong>( 24.596839)</strong><br />
</code></p>
<p><strong>Commento</strong>: JRuby non ha concluso per un errore di out of memory, il processo java è arrivato ad occupare 600Mb nel test dove si effettua un'inversione degli hash, raggiungendo il limite della JVM. Il meno ingordo di memoria è stato ruby 1.8.6 con "soli" 300Mb mentre la 1.9.1 era quasi fisso su 530Mb, non aumentava, come se ci fosse un muro. Non c'era invece per Ironruby che ha superato la barriera dei 600Mb ma con risultati soprendenti, il test dell'inversione in 5 secondi, contro 33 della 1.9.1!</p>
<h3>Rieseguengo il test con 2Gb di ram:</h3>
<p><strong>Ruby 1.8.6</strong></p>
<pre>
C:ProgettiRubybench>ruby bench_hsh.rb
                           user     system      total        real
Write 1.000.000:
int => str:            0.811000   0.060000   0.871000 (  0.871252)
int => int:            1.081000   0.050000   1.131000 (  1.141642)
int => [int]:          0.751000   0.030000   0.781000 (  0.801152)
.to_sym => .to_s:      6.299000   0.130000   6.429000 (  6.469302)
:sym => str 1.000.000:
Each:                  2.474000   0.060000   2.534000 (  2.553672)
each_key:              0.491000   0.000000   0.491000 (  0.490706)
each_value:            0.500000   0.000000   0.500000 (  0.500720)
read by key:           2.834000   0.080000   2.914000 (  2.964263)
5 invert:             30.454000   0.992000  31.446000 ( 31.885849)
1000 shift:           38.285000   0.020000  38.305000 ( 38.765743)
1000 delete:           0.000000   0.000000   0.000000 (  0.000000)
all delete:            1.472000   0.010000   1.482000 (  1.512174)
Total:                85.452000   1.432000  86.884000 ( 87.956475)
</pre>
<p><strong>Ruby 1.9.1</strong></p>
<pre>
C:ProgettiRubybench>ruby bench_hsh.rb
                           user     system      total        real
Write 1.000.000:
int => str:            0.701000   0.090000   0.791000 (  0.790640)
int => int:            0.661000   0.100000   0.761000 (  0.780631)
int => [int]:          0.360000   0.020000   0.380000 (  0.390316)
.to_sym => .to_s:      4.947000   0.380000   5.327000 (  5.524472)
:sym => str 1.000.000:
Each:                  0.631000   0.041000   0.672000 (  0.690558)
each_key:              0.451000   0.000000   0.451000 (  0.450365)
each_value:            0.490000   0.000000   0.490000 (  0.490397)
read by key:           0.892000   0.030000   0.922000 (  0.940761)
5 invert:             27.760000   6.299000  34.059000 ( 34.547961)
1000 shift:           48.289000   0.020000  48.309000 ( 48.789488)
1000 delete:           0.000000   0.000000   0.000000 (  0.000000)
all delete:            1.072000   0.370000   1.442000 (  1.441166)
Total:                86.254000   7.350000  93.604000 ( 94.836755)
</pre>
<p><strong>JRuby</strong></p>
<pre>
C:ProgettiRubybench>jruby bench_hsh.rb
                           user     system      total        real
Write 1.000.000:
int => str:            2.261000   0.000000   2.261000 (  2.081000)
int => int:            0.760000   0.000000   0.760000 (  0.760000)
int => [int]:          1.051000   0.000000   1.051000 (  1.051000)
.to_sym => .to_s:     35.694000   0.000000  35.694000 ( 35.694000)
:sym => str 1.000.000:
Each:                  0.481000   0.000000   0.481000 (  0.481000)
each_key:              0.190000   0.000000   0.190000 (  0.190000)
each_value:            0.190000   0.000000   0.190000 (  0.190000)
read by key:           0.701000   0.000000   0.701000 (  0.701000)
5 invert:            Error: Your application used more memory than the safety cap.

C:ProgettiRubybench>jruby bench_hsh.rb -J-Xmx1500m
                           user     system      total        real
Write 1.000.000:
int => str:            1.612000   0.000000   1.612000 (  1.562000)
int => int:            0.842000   0.000000   0.842000 (  0.842000)
int => [int]:          1.101000   0.000000   1.101000 (  1.101000)
.to_sym => .to_s:     35.341000   0.000000  35.341000 ( 35.341000)
:sym => str 1.000.000:
Each:                  0.431000   0.000000   0.431000 (  0.431000)
each_key:              0.180000   0.000000   0.180000 (  0.180000)
each_value:            0.190000   0.000000   0.190000 (  0.200000)
read by key:           0.701000   0.000000   0.701000 (  0.691000)
5 invert:             11.076000   0.000000  11.076000 ( 11.076000)
1000 shift:            0.000000   0.000000   0.000000 (  0.000000)
1000 delete:           0.000000   0.000000   0.000000 (  0.000000)
all delete:            0.912000   0.000000   0.912000 (  0.912000)
Total:                52.385999   0.000000  52.385999 ( 52.335999)
</pre>
<p><strong>IronRuby</strong></p>
<pre>
C:ProgettiRubybench>ir bench_hsh.rb
                           user     system      total        real
Write 1.000.000:
int => str:            2.283283   0.090130   2.373413 (  2.363398)
int => int:            1.201728   0.030043   1.231771 (  1.241786)
int => [int]:          1.792578   0.020029   1.812606 (  1.862678)
.to_sym => .to_s:      7.340555   0.120173   7.460728 (  7.590915)
:sym => str 1.000.000:
Each:                  1.091570   0.000000   1.091570 (  1.141642)
each_key:              0.310446   0.000000   0.310446 (  0.310447)
each_value:            0.360518   0.000000   0.360518 (  0.360518)
read by key:           1.001440   0.000000   1.001440 (  1.001440)
5 invert:              4.816926   0.070101   4.887027 (  4.917070)
1000 shift:            0.010014   0.000000   0.010014 (  0.010014)
1000 delete:           0.010014   0.000000   0.010014 (  0.010015)
all delete:            1.061526   0.000000   1.061526 (  1.071541)
Total:                21.280600   0.330475  21.611075 ( 21.881464)
</pre>
<p><strong>Riepilogo totali</strong>:<br />
<code><br />
Ruby 1.8.6<br />
Total:                85.452000   1.432000  86.884000 ( 87.956475)<br />
Ruby 1.9.1<br />
Total:                86.254000   7.350000  93.604000 ( 94.836755)<br />
Jruby<br />
Total:                52.385999   0.000000  52.385999 ( 52.335999)<br />
Ironruby<br />
Total:                21.280600   0.330475  21.611075 <strong>( 21.881464)</strong><br />
</code></p>
<p><strong>Commento</strong>: JRuby si blocca al solito test e sempre con un processo di 600Mb, ho quindi alzato il cap di memoria a 1,5Gb e gli ha permesso di concludere ed anche con un buon tempo ma il processo ha raggiunto dimensioni mostruose, ha di poco superato il giga. Ruby 1.8.6 sempre il meno esoso con 300Mb e la 1.9.1 sempre 530Mb. Entrambi hanno tempi alti con l'inversione ed in particolare con il metodo shift al contrario degli altri due. Ironruby ancora il più veloce con un processo che si accorge della maggiore quantità di memoria e ne usa un altro pò arrivando ad allocare quasi 700Mb.<br />
Le delete degli elementi è sempre stata velocissima anche se aumentavo il numero, forse non ho controllato bene che non venisse effettuata in un unica chiamata, comunque mi accontento di questo risultato.</p>
<h3>Conclusioni:</h3>
<p>Ogni interprete ha i propri ambiti dove eccelle, Ironruby quando lo fa, lo fa bene distanziando gli altri. Anche JRuby si è preso i suoi trionfi, forse avevo un pò più aspettative dalla versione 1.9.1 anche se credo non sia un suo demerito bensì sono stati gli altri a migliorare molto negli ultimi mesi. La versione 1.8.6 mi ha ben impressionato in questa sua nuova versione o meglio patch 368, è migliorata molto accorciando le distanze prestazionali con la nuova 1.9, pur non avendo una VM. Inoltre è la versione più equilibrata senza alti nè bassi e c'è da considerare che è ancora la versione più usata, più compatibile e con il maggior numero di gemme.</p>
<p>Spero che questo articolo sia risultato interessante, nel prossimo includerò un confronto con python 2.6.2 e la nuova versione 3.1.1 che mi risulta essere velocissima, hola!</p>
]]></content:encoded>
			<wfw:commentRss>http://mastrodonato.info/index.php/2009/08/quattro-interpreti-ruby-a-confronto/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FreeTTS, una libreria java in jRuby on Rails</title>
		<link>http://mastrodonato.info/index.php/2009/08/freetts-una-libreria-java-in-jruby-on-rails/</link>
		<comments>http://mastrodonato.info/index.php/2009/08/freetts-una-libreria-java-in-jruby-on-rails/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 15:08:19 +0000</pubDate>
		<dc:creator>Marco Mastrodonato</dc:creator>
				<category><![CDATA[JRuby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[FreeTTS]]></category>
		<category><![CDATA[jar]]></category>
		<category><![CDATA[jRuby]]></category>
		<category><![CDATA[Text to speech]]></category>

		<guid isPermaLink="false">http://mastrodonato.info/?p=75</guid>
		<description><![CDATA[In questo articolo vedremo come utilizzare le classi java contenute in un file JAR Per questo scopo andremo ad utilizzare una simpatica libreria opensource sviluppata dalla Carnegie Mellon University: FreeTTS. L&#8217;acronimo TTS significa Text To speech tradotto: &#8220;da testo a voce&#8221;, permette infatti di trasformare un testo in formato audio. Noi la utilizzeremo in un [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo vedremo come utilizzare le classi java contenute in un file JAR<br />
Per questo scopo andremo ad utilizzare una simpatica libreria opensource sviluppata dalla Carnegie Mellon University: <a href="http://freetts.sourceforge.net/">FreeTTS</a>.<br />
L&#8217;acronimo TTS significa Text To speech tradotto: &#8220;da testo a voce&#8221;, permette infatti di trasformare un testo in formato audio. Noi la utilizzeremo in un progetto jRuby on Rails per farci leggere il testo che inseriremo nel db.</p>
<p>Nel <a href="http://mastrodonato.info/index.php/2009/07/configurare-un-ambiente-per-jruby-on-rails/">precedente articolo</a>, abbiamo visto come configurare l&#8217;ambiente, partiamo quindi creando la nuova applicazione:</p>
<p><code><br />
C:>rails ProvaFreeTTS<br />
</code></p>
<p>Nella cartella lib (dalla root) creiamo una sotto cartella freetts, scarichiamo il file <a href="http://sourceforge.net/projects/freetts/files/">freetts-1.2.2-bin.zip</a>, scompattiamo il contenuto in una cartella temporanea, copiamo solamente il contenuto della cartella lib (files jar e jsapi) nella cartella appena creata: tua_applicazionelibfreetts.</p>
<p>Ora creiamo l&#8217;interfaccia per il jar:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#libfreetts.rb</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'freetts/freetts.jar'</span>
&nbsp;
import com.<span style="color:#9900CC;">sun</span>.<span style="color:#9900CC;">speech</span>.<span style="color:#9900CC;">freetts</span>.<span style="color:#9900CC;">Voice</span>
import com.<span style="color:#9900CC;">sun</span>.<span style="color:#9900CC;">speech</span>.<span style="color:#9900CC;">freetts</span>.<span style="color:#9900CC;">VoiceManager</span>
import com.<span style="color:#9900CC;">sun</span>.<span style="color:#9900CC;">speech</span>.<span style="color:#9900CC;">freetts</span>.<span style="color:#9900CC;">util</span>.<span style="color:#9900CC;">Utilities</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> FreeTTS
  <span style="color:#9966CC; font-weight:bold;">def</span> initialize
    <span style="color:#0066ff; font-weight:bold;">@voice</span> = VoiceManager.<span style="color:#9900CC;">getInstance</span>.<span style="color:#9900CC;">getVoice</span><span style="color:#006600; font-weight:bold;">&#40;</span>Utilities.<span style="color:#9900CC;">getProperty</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;voice16kName&quot;</span>,<span style="color:#996600;">&quot;kevin16&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@voice</span>.<span style="color:#9900CC;">allocate</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> speak<span style="color:#006600; font-weight:bold;">&#40;</span>txt=<span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#9966CC; font-weight:bold;">unless</span> txt
    <span style="color:#0066ff; font-weight:bold;">@voice</span>.<span style="color:#9900CC;">speak</span> txt
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Creiamo una semplicissima risorsa &#8220;<em>sentence</em>&#8221; con un solo campo &#8220;<em>body</em>&#8221;</p>
<p><code><br />
C:ProvaFreeTTS>jruby script/generate scaffold sentence body:text<br />
</code></p>
<p>Ora creiamo due nuove operazioni, come ho spiegato approfonditamente in un <a href="http://mastrodonato.info/index.php/2009/06/aggiungere-un-operazione-ad-una-risorsa-in-un-sistema-restful/">precedente articolo</a>.</p>
<p>Iniziamo dal controller aggiungendo in coda:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  <span style="color:#008000; font-style:italic;">#appcontrollerssentences_controller.rb</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> speak
    <span style="color:#0066ff; font-weight:bold;">@sentence</span> = Sentence.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:sentence</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'freetts'</span>
    tts = FreeTTS.<span style="color:#9900CC;">new</span>
    tts.<span style="color:#9900CC;">speak</span> <span style="color:#0066ff; font-weight:bold;">@sentence</span>.<span style="color:#9900CC;">body</span>
    render <span style="color:#006600; font-weight:bold;">&#40;</span>@sentence.<span style="color:#9900CC;">new_record</span>? ? <span style="color:#ff3333; font-weight:bold;">:new</span> : <span style="color:#ff3333; font-weight:bold;">:edit</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> read
    <span style="color:#0066ff; font-weight:bold;">@sentence</span> = Sentence.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:id</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'freetts'</span>
    tts = FreeTTS.<span style="color:#9900CC;">new</span>
    tts.<span style="color:#9900CC;">speak</span> <span style="color:#0066ff; font-weight:bold;">@sentence</span>.<span style="color:#9900CC;">body</span>
    redirect_to <span style="color:#ff3333; font-weight:bold;">:back</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Ora andiamo a modificare le viste.<br />
Creiamo un nuovo file, più precisamente un partial dove inseriremo il form dati per la nostra risorsa, in questo modo utilizzeremo lo stesso codice per tutte le operazioni:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">#appviewssentence_sentence.html.erb
&nbsp;
<span style="color:#006600; font-weight:bold;">&lt;%</span> form_for<span style="color:#006600; font-weight:bold;">&#40;</span>@sentence<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">error_messages</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
&nbsp;
  &lt;p&gt;
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">label</span> <span style="color:#ff3333; font-weight:bold;">:body</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>&lt;br /&gt;
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">text_area</span> <span style="color:#ff3333; font-weight:bold;">:body</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  &lt;/p&gt;
  &lt;p&gt;
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">submit</span> <span style="color:#996600;">'Update'</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  &lt;/p&gt;
<span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
&nbsp;
&lt;h2&gt;Preview&lt;/h2&gt;
<span style="color:#006600; font-weight:bold;">&lt;%</span> form_for <span style="color:#0066ff; font-weight:bold;">@sentence</span>, <span style="color:#ff3333; font-weight:bold;">:url</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> speak_sentences_path, <span style="color:#ff3333; font-weight:bold;">:method</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:put</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">error_messages</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
&nbsp;
  &lt;p&gt;
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">label</span> <span style="color:#ff3333; font-weight:bold;">:body</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>&lt;br /&gt;
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">text_area</span> <span style="color:#ff3333; font-weight:bold;">:body</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  &lt;/p&gt;
  &lt;p&gt;
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">submit</span> <span style="color:#996600;">'Speak'</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  &lt;/p&gt;
<span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>Aggiungiamo un form clone di quello creato dallo scaffold ma con l&#8217;action diversa, per richiamare l&#8217;operazione speak.</p>
<p>Ora modifichiamo le viste create in automatico:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">#appviewssentencenew.html.erb
&nbsp;
&lt;h1&gt;New sentence&lt;/h1&gt;
&nbsp;
<span style="color:#006600; font-weight:bold;">&lt;%</span>= render <span style="color:#0066ff; font-weight:bold;">@sentence</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
&nbsp;
<span style="color:#006600; font-weight:bold;">&lt;%</span>= link_to <span style="color:#996600;">'Back'</span>, sentences_path <span style="color:#006600; font-weight:bold;">%&gt;</span>
&nbsp;
#appviewssentenceedit.html.erb
&nbsp;
&lt;h1&gt;Editing sentence&lt;/h1&gt;
&nbsp;
<span style="color:#006600; font-weight:bold;">&lt;%</span>= render <span style="color:#0066ff; font-weight:bold;">@sentence</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
&nbsp;
<span style="color:#006600; font-weight:bold;">&lt;%</span>= link_to <span style="color:#996600;">'Show'</span>, <span style="color:#0066ff; font-weight:bold;">@sentence</span> <span style="color:#006600; font-weight:bold;">%&gt;</span> |
<span style="color:#006600; font-weight:bold;">&lt;%</span>= link_to <span style="color:#996600;">'Back'</span>, sentences_path <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>Infine modifichiamo la lista per richiamare la seconda delle operazioni implementate, read. Sostanzialmente cliccando sulla riga corrispondente leggerà il testo precedentemente memorizzato nel db.</p>
<p>Dobbiamo solamente aggiungere una riga ottenendo questa view:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">#appviewssentenceindex.html.erb
&lt;h1&gt;Listing sentences&lt;/h1&gt;
&nbsp;
&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Body&lt;/th&gt;
  &lt;/tr&gt;
&nbsp;
<span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#0066ff; font-weight:bold;">@sentences</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>sentence<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  &lt;tr&gt;
    &lt;td&gt;<span style="color:#006600; font-weight:bold;">&lt;%</span>=h sentence.<span style="color:#9900CC;">body</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>&lt;/td&gt;
    &lt;td&gt;<span style="color:#006600; font-weight:bold;">&lt;%</span>= link_to <span style="color:#996600;">'Read'</span>, read_sentence_path<span style="color:#006600; font-weight:bold;">&#40;</span>sentence<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>&lt;/td&gt;
    &lt;td&gt;<span style="color:#006600; font-weight:bold;">&lt;%</span>= link_to <span style="color:#996600;">'Show'</span>, sentence <span style="color:#006600; font-weight:bold;">%&gt;</span>&lt;/td&gt;
    &lt;td&gt;<span style="color:#006600; font-weight:bold;">&lt;%</span>= link_to <span style="color:#996600;">'Edit'</span>, edit_sentence_path<span style="color:#006600; font-weight:bold;">&#40;</span>sentence<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>&lt;/td&gt;
    &lt;td&gt;<span style="color:#006600; font-weight:bold;">&lt;%</span>= link_to <span style="color:#996600;">'Destroy'</span>, sentence, <span style="color:#ff3333; font-weight:bold;">:confirm</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'Are you sure?'</span>, <span style="color:#ff3333; font-weight:bold;">:method</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:delete</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>&lt;/td&gt;
  &lt;/tr&gt;
<span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
&lt;/table&gt;
&nbsp;
&lt;br /&gt;
&nbsp;
<span style="color:#006600; font-weight:bold;">&lt;%</span>= link_to <span style="color:#996600;">'New sentence'</span>, new_sentence_path <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>Infine andiamo a modificare il routing:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#configroutes.rb</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#sostituiamo map.resources :sentences con</span>
map.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:sentences</span>, <span style="color:#ff3333; font-weight:bold;">:member</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:read</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:get</span> <span style="color:#006600; font-weight:bold;">&#125;</span>, <span style="color:#ff3333; font-weight:bold;">:collection</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:speak</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:put</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#aggiungiamo</span>
map.<span style="color:#9900CC;">root</span> <span style="color:#ff3333; font-weight:bold;">:controller</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;sentences&quot;</span></pre></div></div>

<p>Configuriamo il file database.yml, creiamo il db e le tabelle con rake e facciamo partire glassfish come spiegato <a href="http://mastrodonato.info/index.php/2009/07/configurare-un-ambiente-per-jruby-on-rails/">qua</a> (cerca database.yml)</p>
<p>Come abbiamo visto, utilizzare librerie java con jruby on rails è semplicissimo, siamo pronti per far pronunciare al nostro server tutte le frasi più sporcaccione!</p>
<p>Il <strong>progetto completo</strong> potete scaricarlo <a href="http://www.gigasize.com/get.php?d=p4wsyz5z29c">qua</a>.</p>
<p>Per ulteriori approfondimenti c&#8217;è anche questo <a href="http://ruby.html.it/articoli/leggi/3110/jruby-java-e-ruby-insieme/1/">articolo</a>, mentre <a href="http://java.html.it/articoli/leggi/3098/text-to-speech-con-java-e-freetts/1/">questo </a>tratta la libreria FreeTTS in un progetto Java.</p>
<p>Buona continuazione.</p>
]]></content:encoded>
			<wfw:commentRss>http://mastrodonato.info/index.php/2009/08/freetts-una-libreria-java-in-jruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurare un ambiente per jRuby on Rails</title>
		<link>http://mastrodonato.info/index.php/2009/07/configurare-un-ambiente-per-jruby-on-rails/</link>
		<comments>http://mastrodonato.info/index.php/2009/07/configurare-un-ambiente-per-jruby-on-rails/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 16:52:31 +0000</pubDate>
		<dc:creator>Marco Mastrodonato</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Glassfish]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[jRuby]]></category>

		<guid isPermaLink="false">http://mastrodonato.info/?p=54</guid>
		<description><![CDATA[Nei prossimi articoli utilizzerò jruby 1.3.1 con Rails 2.3.3 e ne approfitto per scrivere due righe su come configurare il sistema. A proposito, il sistema utilizzato è un windows xp virtualizzato, java sdk 6, glassfish come application server e javadb. Scarichiamo e installiamo l&#8217;sdk java, siamo alla versione 6 update 14. C&#8217;è anche il download [...]]]></description>
			<content:encoded><![CDATA[<p>Nei prossimi articoli utilizzerò jruby 1.3.1 con Rails 2.3.3 e ne approfitto per scrivere due righe su come configurare il sistema.<br />
A proposito, il sistema utilizzato è un windows xp virtualizzato, java sdk 6, glassfish come application server e javadb.</p>
<p>Scarichiamo e installiamo l&#8217;<a href="http://java.sun.com/javase/downloads/index.jsp" target="_blank">sdk java</a>, siamo alla versione 6 update 14.</p>
<p>C&#8217;è anche il download dell&#8217;sdk con netbeans, un ottimo IDE per gestire progetti ruby on rails. Potrebbe essere un occasione per provarlo. Il pacchetto comprende anche l&#8217;application server glassfish V3.</p>
<p>Ora scarichiamo e installiamo <a href="http://www.jruby.org/" target="_blank">jRuby</a>, siamo alla versione 1.3.1.</p>
<p>L&#8217;installazione è semplicissima: scompattiamo lo zip in un percorso del tipo C:\ruby\jruby-131</p>
<p>Andiamo ad impostare le variabili d&#8217;ambiente, tasto destro su &#8220;Risorse del computer&#8221; sul desktop -> &#8220;Proprietà&#8221; -> seleziona il tab &#8220;Avanzate&#8221; -> click su &#8220;variabili d&#8217;ambiente&#8221;.</p>
<ul>
<li>Aggiungiamo alla variabile <strong>PATH</strong> il percorso della cartella bin dove abbiamo installato jruby, per esempio C:\ruby\jruby-131\bin.</li>
<li>Impostiamo la variabile d&#8217;ambiente <strong>JAVA_HOME</strong>.  Nella zona &#8220;variabili di sistema&#8221; -> &#8220;nuovo&#8221; -> come nome &#8220;JAVA_HOME&#8221; come valore il percorso di installazione dell&#8217;sdk per esempio C:\Programmi\Java\jdk1.6.0_14</li>
</ul>
<p>Non è necessario riavviare il sistema operativo, testiamo il risultato:<br />
<code><br />
C:\><strong>jruby -v</strong><br />
jruby 1.3.1 (ruby 1.8.6p287) (2009-06-15 2fd6c3d) (Java HotSpot(TM) Client VM 1.6.0_14) [x86-java]<br />
</code></p>
<p>Eureka! Ora abbiamo jruby, jirb ed il solito gem. <strong>Se nel sistema è presente anche ruby classico è necessario specificare jruby -S</strong> per richiamare gem, utilizziamolo subito per installare rails 2.3.3:<br />
<code><br />
C:\><strong>jruby -S gem install rails</strong><br />
Successfully installed activesupport-2.3.3<br />
Successfully installed activerecord-2.3.3<br />
Successfully installed actionpack-2.3.3<br />
Successfully installed actionmailer-2.3.3<br />
Successfully installed activeresource-2.3.3<br />
Successfully installed rails-2.3.3<br />
6 gems installed<br />
Installing ri documentation for activesupport-2.3.3...<br />
Installing ri documentation for activerecord-2.3.3...<br />
Installing ri documentation for actionpack-2.3.3...<br />
Installing ri documentation for actionmailer-2.3.3...<br />
Installing ri documentation for activeresource-2.3.3...<br />
Installing ri documentation for rails-2.3.3...<br />
Installing RDoc documentation for activesupport-2.3.3...<br />
Installing RDoc documentation for activerecord-2.3.3...<br />
Installing RDoc documentation for actionpack-2.3.3...<br />
Installing RDoc documentation for actionmailer-2.3.3...<br />
Installing RDoc documentation for activeresource-2.3.3...<br />
Installing RDoc documentation for rails-2.3.3...<br />
</code></p>
<p>Installiamo l&#8217;adapter jdbc per collegarci a java DB (da ora ometto jruby -S, nel mio sistema non è necessario):<br />
<code><br />
C:\><strong>gem install activerecord-jdbcderby-adapter</strong><br />
Successfully installed activerecord-jdbc-adapter-0.9.1<br />
Successfully installed jdbc-derby-10.4.2.0<br />
Successfully installed activerecord-jdbcderby-adapter-0.9.1<br />
3 gems installed<br />
Installing ri documentation for activerecord-jdbc-adapter-0.9.1...<br />
Installing ri documentation for jdbc-derby-10.4.2.0...<br />
Installing ri documentation for activerecord-jdbcderby-adapter-0.9.1...<br />
Installing RDoc documentation for activerecord-jdbc-adapter-0.9.1...<br />
Installing RDoc documentation for jdbc-derby-10.4.2.0...<br />
Installing RDoc documentation for activerecord-jdbcderby-adapter-0.9.1...<br />
</code></p>
<p>Poi installiamo la gemma per glassfish:<br />
<code><br />
C:\><strong>gem install glassfish</strong><br />
Successfully installed rack-1.0.0<br />
Successfully installed glassfish-0.9.5-universal-java<br />
2 gems installed<br />
Installing ri documentation for rack-1.0.0...<br />
Installing ri documentation for glassfish-0.9.5-universal-java...<br />
Installing RDoc documentation for rack-1.0.0...<br />
Installing RDoc documentation for glassfish-0.9.5-universal-java...<br />
</code></p>
<p>Siamo pronti, creiamo un nuovo progetto:<br />
<code><br />
C:\>rails ProvaArticolo<br />
</code></p>
<p>&#8230;nel file di configurazione dei db utilizziamo:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># config/database.yml</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># JavaDB Setup</span>
<span style="color:#008000; font-style:italic;">#</span>
<span style="color:#008000; font-style:italic;"># You may need to copy derby.jar into</span>
<span style="color:#008000; font-style:italic;">#  TODO: location C:\ruby\jruby-131\lib</span>
<span style="color:#008000; font-style:italic;"># With Java SE 6 and later this is not necessary.</span>
development:
  adapter: derby
  database: db<span style="color:#006600; font-weight:bold;">/</span>development.<span style="color:#9900CC;">db</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Warning: The database defined as 'test' will be erased and</span>
<span style="color:#008000; font-style:italic;"># re-generated from your development database when you run 'rake'.</span>
<span style="color:#008000; font-style:italic;"># Do not set this db to the same as development or production.</span>
test:
  adapter: derby
  database: db<span style="color:#006600; font-weight:bold;">/</span>test.<span style="color:#9900CC;">db</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Warning: The database defined as 'test' will be erased and</span>
<span style="color:#008000; font-style:italic;"># re-generated from your development database when you run 'rake'.</span>
<span style="color:#008000; font-style:italic;"># Do not set this db to the same as development or production.</span>
production:
  adapter: derby
  database: db<span style="color:#006600; font-weight:bold;">/</span>production.<span style="color:#9900CC;">db</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Warning: The database defined as 'test' will be erased and</span>
<span style="color:#008000; font-style:italic;"># re-generated from your development database when you run 'rake'.</span>
<span style="color:#008000; font-style:italic;"># Do not set this db to the same as development or production.</span></pre></div></div>

<p>Facciamo partire il server, dal prompt dentro la nostra applicazione:<br />
<code><br />
C:\ProvaArticolo><strong>glassfish</strong><br />
Starting GlassFish server at: 127.0.0.1:3000 in development environment...<br />
Writing log messages to: C:/ProvaArticolo/log/development.log.<br />
Press Ctrl+C to stop.<br />
</code></p>
<p>All&#8217;indirizzo http://localhost:3000/ dovremmo vedere la pagina di benvenuto.<br />
Ora fermiamo il server con Ctrl+C e creiamo il db in ambiente sviluppo:</p>
<p><code>C:\ProvaArticolo><strong>rake db:create</strong><br />
(in C:/ProvaArticolo)<br />
db/development.db already exists</code></p>
<p>Creiamo qualcosa all&#8217;interno del database, iniziamo con la risorsa di rails:<br />
<code><br />
C:\ProvaArticolo>jruby script/generate scaffold article name:string body:text<br />
      create  app/models/<br />
      exists  app/controllers/<br />
      exists  app/helpers/<br />
      exists  app/views/articles<br />
      create  app/views/layouts/<br />
      create  test/functional/<br />
      create  test/unit/<br />
      create  test/unit/helpers/<br />
      create  public/stylesheets/<br />
      create  app/views/articles/index.html.erb<br />
      create  app/views/articles/show.html.erb<br />
      create  app/views/articles/new.html.erb<br />
      create  app/views/articles/edit.html.erb<br />
      create  app/views/layouts/articles.html.erb<br />
      create  public/stylesheets/scaffold.css<br />
      create  app/controllers/articles_controller.rb<br />
      create  test/functional/articles_controller_test.rb<br />
      create  app/helpers/articles_helper.rb<br />
      create  test/unit/helpers/articles_helper_test.rb<br />
       route  map.resources :articles<br />
  dependency  model<br />
      exists    app/models/<br />
      exists    test/unit/<br />
      create    test/fixtures/<br />
      create    app/models/article.rb<br />
      create    test/unit/article_test.rb<br />
      create    test/fixtures/articles.yml<br />
      exists    db/migrate<br />
      create    db/migrate/20090729171105_create_articles.rb<br />
</code></p>
<p>e creiamo la tabella nel db con la migrate:<br />
<code><br />
<strong>C:\ProvaArticolo>rake db:migrate</strong><br />
(in C:/ProvaArticolo)<br />
==  CreateArticles: migrating =================================================<br />
-- create_table(:articles)<br />
   -> 0.0700s<br />
   -> 0 rows<br />
==  CreateArticles: migrated (0.0700s) ========================================<br />
</code></p>
<p>Infine eliminiamo il file index.html da dentro la cartella public e creiamo la route iniziale:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#config\routes.rb</span>
map.<span style="color:#9900CC;">root</span> <span style="color:#ff3333; font-weight:bold;">:controller</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;articles&quot;</span></pre></div></div>

<p>Riavviamo il server e sempre all&#8217;indirizzo http://localhost:3000/ questa volta dovremmo vedere la lista degli articoli.</p>
<p>Se non mi sono dimenticato qualcosa, jruby on rails è pronto, buon divertimento!</p>
]]></content:encoded>
			<wfw:commentRss>http://mastrodonato.info/index.php/2009/07/configurare-un-ambiente-per-jruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
