Another benchmark to compare some recent versions of ruby with the latest releases of Python. Two simple scripts to compare the syntax and performance of these modern languages.
The system on which I performed the test is a Dell Inspiron 9400 with Centrino Duo, Intel T7200 4Mb Cache, 2GHz, 2GB RAM 667Mhz. Windows XP Pro SP3.
This is the result of the first test, used to warming up for the VM:
| Version | Builder | Seconds |
|---|---|---|
| Python 2.6.4 | 7,5 | |
| Ruby 1.9.1 p129 | i386-mingw32 | 8,2 |
| JRuby 1.4.0 | Client VM 1.6.0_15 [x86-java] | 9,0 |
| Python 3.1.1 | 9,1 | |
| Ruby 1.9.1 p243 | i386-mingw32 | 9,6 |
| IronRuby 0.9.3.0 | .NET 2.0.0.0 | 20,3 |
| Ruby 1.9.1 p376 | i386-mswin32 | 20,9 |
| Ruby 1.8.6 p368 | i386-mingw32 | 22,9 |
| IronPython 2.6 | .NET 2.0.0.0 | 225,4 |
| Jython 2.5.1 | Client VM 1.6.0_15 [x86-java] | Timeout |
The result below instead, refers to the average of three readings after the warm up. JRuby’s performance improves by 23%:
| Version | Builder | Seconds |
|---|---|---|
| JRuby 1.4.0 | Client VM 1.6.0_15 [x86-java] | 6,9 |
| Python 2.6.4 | 7,5 | |
| Ruby 1.9.1 p129 | i386-mingw32 | 8,2 |
| Python 3.1.1 | 9,0 | |
| Ruby 1.9.1 p243 | i386-mingw32 | 10,0 |
| IronRuby 0.9.3.0 | .NET 2.0.0.0 | 18,9 |
| Ruby 1.9.1 p376 | i386-mswin32 | 20,6 |
| Ruby 1.8.6 p368 | i386-mingw32 | 23,2 |
| IronPython 2.6 | .NET 2.0.0.0 | 256,5 |
| Jython 2.5.1 | Client VM 1.6.0_15 [x86-java] | Timeout |
And here is the scripts. I tried to optimize every versions and to do that, I had to create two variations for each language.
Ruby 1.8.6:
def strings_test(ntest) r1 = r2 = r3 = 0 xstr = "" ntest.times do #Create a string, add 'abcde1234_' until getting a str size 1000 xstr = 'abcde1234_' * 10000 #Make letters upcase xstr.upcase! #Change '1234_' with '67890 ' (space at last position) #Now the repeated string should be 'ABCDE67890 ' xstr.gsub! '1234_', '67890 ' #Cast numbers from 29 upto size/2 to string and add it to xstr variable, ciclying for every number (not add all numbers one time) 29.upto(xstr.size/2) {|n| xstr << n.to_s} #Check 1: Count 'A' char #Check 2: Count '9' char 0.upto(xstr.size-1) do |n| if xstr[n].chr() == 'A' r1+=1 elsif xstr[n].chr() == '9' r2+=1 end end #Create an array from xstr using space to split r3 += xstr.split.size end return r1, r2, r3, xstr end def arrays_test(ntest, xstr) r1 = r2 = r3 = r4 = r5 = 0 ntest.times do #Clear ar then add 5000 times this element: "I", "am", "great", null, "or", "number", 1 ar = [] 5000.times do ['I', 'am', 'great', nil, 'or', 'number', 1].each {|a| ar << a} end #...then reverse elements to obtain this order: 1, "number", "or", null, "great", "am", "I" ar.reverse! #...then, count the element with value "great" using two separate cicle #the first starting from 31 until 2955 (bounty inclused) 31.upto(2955) do |n| r1 += 1 if ar[n] == 'great' end #the second looping all the array elements ar.each {|n| r2+=1 if n == 'great'} #Loop inside and build a temporary string with index and value, without put it into a variable and only for elements <> null ar.each_index{|i| ar[i] ? "#{i} #{ar[i]}" : r3+=1 } #delete null value elements and take its size ar.compact! r4 += ar.size #then join elements with space and take its size r5 += ar.join(' ').size end return r1, r2, r3, r4, r5 end def nums_test(ntest) r1 = r2 = 0 ntest.times do #Find all prime numbers from 8 to 95 step by 3 and sum all primes got, to check the result #51.upto(307) do |n| (8..95).step(3) do |n| primes(n).each {|a| r1 += a} end #Calculate factorial numbers start from 2 to 42 r2 = 0 for n in 2..42 r2 += fac(n) end end return r1, r2 end #Primes must return an array of prime numbers def primes(n) ar = [] for x in (2..n) prime = true for y in (2..x-1) if x%y == 0 prime = false break end end ar << x if prime end return ar end def fac(n) (1..n).inject{|total, current| total * current} end # --- START --- puts "\nWarming up..." t1=t2=t3=0 time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Check3: #{r3}" puts "Check4: #{xstr.size}" time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Check3: #{r3}" puts "Check4: #{r4}" puts "Check5: #{r5}" time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) puts "\n1. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "\n2. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "\n3. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "-------------------------------------" puts "Average Strings test - Elapsed %.3f" % (t1/3) puts "Average Arrays test - Elapsed %.3f" % (t2/3) puts "Average Numeric test - Elapsed %.3f" % (t3/3) puts "\nRuby Average elapsed time %.3f" % (t1/3+t2/3+t3/3)
Ruby 1.9.1:
def strings_test(ntest) r1 = r2 = r3 = 0 xstr = "" ntest.times do #Create a string, add 'abcde1234_' until getting a str size 1000 xstr = 'abcde1234_' * 10000 #Make letters upcase xstr.upcase! #Change '1234_' with '67890 ' (space at last position) #Now the repeated string should be 'ABCDE67890 ' xstr.gsub! '1234_', '67890 ' #Cast numbers to string, from 29 up to size/2. Add it to xstr variable as well, ciclying for every number (not adding all numbers once) 29.upto(xstr.size/2) {|n| xstr << n.to_s} #Check 1: Count 'A' char #Check 2: Count '9' char 0.upto(xstr.size-1) do |n| if xstr[n] == 'A' r1+=1 elsif xstr[n] == '9' r2+=1 end end #Create an array from xstr using space to split, its size is the third check r3 += xstr.split.size end return r1, r2, r3, xstr end def arrays_test(ntest, xstr) r1 = r2 = r3 = r4 = r5 = 0 ntest.times do #Clear ar then add 5000 times this element: "I", "am", "great", null, "or", "number", 1 ar = [] 5000.times do ['I', 'am', 'great', nil, 'or', 'number', 1].each {|a| ar << a} end #...then reverse elements to obtain this order: 1, "number", "or", null, "great", "am", "I" ar.reverse! #...then, count the element with value "great" using two separate cicle #the first starting from 31 until 2955 (bounty inclused) 31.upto(2955) do |n| r1 += 1 if ar[n] == 'great' end #the second looping all the array elements ar.each {|n| r2+=1 if n == 'great'} #Loop inside and build a temporary string with index and value, without put it into a variable and only for elements <> null ar.each_index{|i| ar[i] ? "#{i} #{ar[i]}" : r3+=1 } #delete null value elements and take its size ar.compact! r4 += ar.size #then join elements with space and take its size r5 += ar.join(' ').size end return r1, r2, r3, r4, r5 end def nums_test(ntest) r1 = r2 = 0 ntest.times do #Find all prime numbers from 8 to 95 step by 3 (bounds included) and sum all primes got, to check the result #51.upto(307) do |n| (8..95).step(3) do |n| primes(n).each {|a| r1 += a} end #Calculate factorial numbers start from 2 to 42 r2 = 0 for n in 2..42 r2 += fac(n) end end return r1, r2 end #Primes must return an array of prime numbers def primes(n) ar = [] for x in (2..n) prime = true for y in (2..x-1) if x%y == 0 prime = false break end end ar << x if prime end return ar end def fac(n) (1..n).inject{|total, current| total * current} end # --- START --- puts "\nWarming up..." t1=t2=t3=0 time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Check3: #{r3}" puts "Check4: #{xstr.size}" time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Check3: #{r3}" puts "Check4: #{r4}" puts "Check5: #{r5}" time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Check1: #{r1}" puts "Check2: #{r2}" puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) puts "\n1. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "\n2. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "\n3. Starting Ruby tests..." time = Time.now r1, r2, r3, xstr = strings_test(5) puts "Strings test - Elapsed %.3f" % (p1=Time.now - time) time = Time.now r1, r2, r3, r4, r5 = arrays_test(50, xstr) puts "Arrays test - Elapsed %.3f" % (p2=Time.now - time) time = Time.now r1, r2 = nums_test(500) puts "Numeric test - Elapsed %.3f" % (p3=Time.now - time) puts "Ruby Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 puts "-------------------------------------" puts "Average Strings test - Elapsed %.3f" % (t1/3) puts "Average Arrays test - Elapsed %.3f" % (t2/3) puts "Average Numeric test - Elapsed %.3f" % (t3/3) puts "\nRuby Average elapsed time %.3f" % (t1/3+t2/3+t3/3)
Python 2.6:
from time import time #import psyco #psyco.full() #psyco.full(memory=100) #psyco.profile(0.05, memory=100) #psyco.profile(0.2) def strings_test(ntest): r1 = r2 = r3 = 0 xstr = "" for x in xrange(ntest): #Create a string, add 'abcde1234_' until getting a xstr size 1000 xstr = 'abcde1234_' * 10000 #Make letters upcase xstr = xstr.upper() #Change '1234_' with '67890 ' (space at last position) #Now the repeated string should be 'ABCDE67890 ' xstr = xstr.replace('1234_', '67890 ') #Cast numbers to string, from 29 up to size/2. Add it to xstr variable as well, ciclying for every number (not adding all numbers once) for y in xrange(29,int(len(xstr)/2) + 1): xstr += "%s" %y #Result 1: Count 'A' char #Result 2: Count '9' char for y in xrange(0, len(xstr)): if xstr[y] == 'A': r1+=1 elif xstr[y] == '9': r2+=1 #Create an array from xstr using space to split r3 += len(xstr.split()) return r1, r2, r3, xstr #Slower than other version def multiremove(ar, what): i = 0 for el in ar: if el == what: del ar[i] i+=1 #Ugly but a bit faster def multiremove2(ar, what): todel = [] for y in xrange(0,len(ar)): if ar[y] == what: todel.append(y) todel.reverse() for y in todel: ar.pop(y) def arrays_test(ntest, xstr): r1 = r2 = r3 = r4 = r5 = 0 for x in xrange(ntest): #Clear ar then add 5000 times this element: "I", "am", "great", null, "or", "number", 1 ar = [] for y in xrange(0, 5000): ar.extend(["I", "am", "great", None, "or", "number", 1]) #...then reverse elements to obtain this order: 1, "number", "or", null, "great", "am", "I" ar.reverse() #...then, count the element with value "great" using two separate cicle #the first starting from 31 until 2955 (bounty included) for y in xrange(31,2955): if ar[y] == "great": r1 +=1 #the second looping all the array elements for y in xrange(0, len(ar)): if ar[y] == "great": r2+=1 #Loop inside and build a temporary string with index and value, without put it into a variable and only for elements <> null for y in xrange(0, len(ar)): if ar[y]: "%s %s" %(y, ar[y]) else: r3+=1 #delete null value elements and take its size multiremove2(ar, None) r4 += len(ar) #then join elements with space and take its size r5 += len(" ".join(str(n) for n in ar)) return r1, r2, r3, r4, r5 def nums_test(ntest): r1 = r2 = 0 for x in xrange(ntest): #Find all prime numbers from 8 to 95 step by 3 (bounds included) and sum all primes got, to check the result for n in xrange(8, 96, 3): for prime in primes(n): r1 += prime fac = lambda n:[1,0][n>0] or fac(n-1)*n #Calculate factorial numbers start from 2 to 42 (bounds included) r2 = 0 for n in xrange(2, 43): r2 += fac(n) return r1, r2 #Primes must return an array of prime numbers def primes(n): ar = [] for x in xrange(2, n+1): prime = True for y in xrange(2, x): if x%y == 0: prime = False break if prime: ar.append(x) return ar # --- START --- print "\nWarming up..." t1=t2=t3=0 stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print "Strings test - Elapsed %.3f" % (p1) print "Check1: %s" %r1 print "Check2: %s" %r2 print "Check3: %s" %r3 print "Check4: %d" %(len(xstr)) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print "Arrays test - Elapsed %.3f" % (p2) print "Check1: %s" %r1 print "Check2: %s" %r2 print "Check3: %s" %r3 print "Check4: %s" %r4 print "Check5: %s" %r5 stime = time() r1, r2 = nums_test(500) p3=time() - stime print "Numeric test - Elapsed %.3f" % (p3) print "Check1: %s" %r1 print "Check2: %s" %r2 print "Python Partial elapsed time %.3f" % (p1+p2+p3) print "\n1. Starting Python tests..." stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print "Strings test - Elapsed %.3f" % (p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print "Arrays test - Elapsed %.3f" % (p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print "Numeric test - Elapsed %.3f" % (p3) print "Python Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 print "\n2. Starting Python tests..." stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print "Strings test - Elapsed %.3f" % (p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print "Arrays test - Elapsed %.3f" % (p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print "Numeric test - Elapsed %.3f" % (p3) print "Python Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 print "\n3. Starting Python tests..." stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print "Strings test - Elapsed %.3f" % (p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print "Arrays test - Elapsed %.3f" % (p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print "Numeric test - Elapsed %.3f" % (p3) print "Python Partial elapsed time %.3f" % (p1+p2+p3) t1+=p1;t2+=p2;t3+=p3 print "-------------------------------------" print "Average Strings test - Elapsed %.3f" % (t1/3) print "Average Arrays test - Elapsed %.3f" % (t2/3) print "Average Numeric test - Elapsed %.3f" % (t3/3) print "Python Average elapsed time %.3f" % (t1/3+t2/3+t3/3)
Python 3.1:
from time import time #import psyco #psyco.full() #psyco.full(memory=100) #psyco.profile(0.05, memory=100) #psyco.profile(0.2) def strings_test(ntest): r1 = r2 = r3 = 0 xstr = "" for x in range(ntest): #Create a string, add 'abcde1234_' until getting a xstr size 1000 xstr = 'abcde1234_' * 10000 #Make letters upcase xstr = xstr.upper() #Change '1234_' with '67890 ' (space at last position) #Now the repeated string should be 'ABCDE67890 ' xstr = xstr.replace('1234_', '67890 ') #Cast numbers from 29 upto 1028 to string and add it to xstr variable, ciclying for every number (not add all numbers one time) for y in range(29,int(len(xstr)/2) + 1): xstr += "%s" %y #Result 1: Count 'A' char #Result 2: Count '9' char for y in range(0, len(xstr)): if xstr[y] == 'A': r1+=1 elif xstr[y] == '9': r2+=1 #Create an array from xstr using space to split r3 += len(xstr.split()) return r1, r2, r3, xstr #Slower than other version def multiremove(ar, what): i = 0 for el in ar: if el == what: del ar[i] i+=1 #Ugly but a bit faster def multiremove2(ar, what): todel = [] for y in range(0,len(ar)): if ar[y] == what: todel.append(y) todel.reverse() for y in todel: ar.pop(y) def arrays_test(ntest, xstr): r1 = r2 = r3 = r4 = r5 = 0 for x in range(ntest): #Clear ar then add 5000 times this element: "I", "am", "great", null, "or", "number", 1 ar = [] for y in range(0, 5000): ar.extend(["I", "am", "great", None, "or", "number", 1]) #...then reverse elements to obtain this order: 1, "number", "or", null, "great", "am", "I" ar.reverse() #...then, count the element with value "great" using two separate cicle #the first starting from 31 until 2955 (bounty included) for y in range(31,2955): if ar[y] == "great": r1 +=1 #the second looping all the array elements for y in range(0, len(ar)): if ar[y] == "great": r2+=1 #Loop inside and build a temporary string with index and value, without put it into a variable and only for elements <> null for y in range(0, len(ar)): if ar[y]: "%s %s" %(y, ar[y]) else: r3+=1 #delete null value elements and take its size multiremove2(ar, None) r4 += len(ar) #then join elements with space and take its size r5 += len(" ".join(str(n) for n in ar)) return r1, r2, r3, r4, r5 def nums_test(ntest): r1 = r2 = 0 for x in range(ntest): #Find all prime numbers from 8 to 95 step by 3 (bounds included) and sum all primes got, to check the result for n in range(8, 96, 3): for prime in primes(n): r1 += prime fac = lambda n:[1,0][n>0] or fac(n-1)*n #Calculate factorial numbers start from 2 to 42 (bounds included) r2 = 0 for n in range(2, 43): r2 += fac(n) return r1, r2 #Primes must return an array of prime numbers def primes(n): ar = [] for x in range(2, n+1): prime = True for y in range(2, x): if x%y == 0: prime = False break if prime: ar.append(x) return ar # --- START --- print("\nWarming up...") t1=t2=t3=0 stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print("Strings test - Elapsed %.3f" % p1) print("Check1: %s" % r1) print("Check2: %s" % r2) print("Check3: %s" % r3) print("Check4: %d" % len(xstr)) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print("Arrays test - Elapsed %.3f" % p2) print("Check1: %s" % r1) print("Check2: %s" % r2) print("Check3: %s" % r3) print("Check4: %s" % r4) print("Check5: %s" % r5) stime = time() r1, r2 = nums_test(500) p3=time() - stime print("Numeric test - Elapsed %.3f" % p3) print("Check1: %s" % r1) print("Check2: %s" % r2) print( "Python Partial elapsed time %.3f" % (p1+p2+p3)) print("\n1. Starting Python tests...") stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print("Strings test - Elapsed %.3f" % p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print( "Arrays test - Elapsed %.3f" % p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print("Numeric test - Elapsed %.3f" % p3) print( "Python Partial elapsed time %.3f" % (p1+p2+p3)) t1+=p1;t2+=p2;t3+=p3 print("\n2. Starting Python tests...") stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print("Strings test - Elapsed %.3f" % p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print( "Arrays test - Elapsed %.3f" % p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print("Numeric test - Elapsed %.3f" % p3) print( "Python Partial elapsed time %.3f" % (p1+p2+p3)) t1+=p1;t2+=p2;t3+=p3 print("\n3. Starting Python tests...") stime = time() r1, r2, r3, xstr = strings_test(5) p1=time() - stime print("Strings test - Elapsed %.3f" % p1) stime = time() r1, r2, r3, r4, r5 = arrays_test(50, xstr) p2=time() - stime print( "Arrays test - Elapsed %.3f" % p2) stime = time() r1, r2 = nums_test(500) p3=time() - stime print("Numeric test - Elapsed %.3f" % p3) print( "Python Partial elapsed time %.3f" % (p1+p2+p3)) t1+=p1;t2+=p2;t3+=p3 print("-------------------------------------") print("Average Strings test - Elapsed %.3f" % (t1/3)) print("Average Arrays test - Elapsed %.3f" % (t2/3)) print("Average Numeric test - Elapsed %.3f" % (t3/3)) print("Python Average elapsed time %.3f" % (t1/3+t2/3+t3/3))
English
Italiano
roger
25 January 2010 at 19:51
did you try jruby –fast –server (and give it plenty of warm up time?)
(also a linux test would be interesting)
Marco Mastrodonato
26 January 2010 at 09:17
Hi roger,
damn, i forgot to warm up the jvm. I see jruby slightly increase the performance, i will have to repeat the compares!
I only used –server, however also adding –fast, there’s no difference on my system.
I have ubuntu in that notebook, nextly i could do another bench though i think on linux there will be less difference. Usually, on linux you make the binary by yourself, on windows instead, people are lazier and they downloads the binary.
Marco Mastrodonato
26 January 2010 at 22:53
Added a warm up test then i took the three readings shown in the second chart. I updated the scripts as well.