Brief performance testing of binary/decimal conversion functions in different scripting interpreters
Go to file
2020-05-19 17:10:45 +12:00
README.md initial commit 2020-05-19 17:10:45 +12:00

interpreter-binary-perf

Brief performance testing of binary/decimal conversion functions in different scripting interpreters.

Test conditions

Performed under bit noisy conditions (web browser + media player open, etc).

Each test was run 3x, reporting the best time

All tests are single-threaded.

cat /proc/cpuinfo | grep bogo | head -1
bogomips        : 6618.86

All packages are from Debian Buster except where indicated.

  • Perl v5.28.1
  • Python2 v2.7.16
  • Python3 v3.7.3
  • PHP v7.3.14-1
  • Node.js v10.20.1 (nodesource.com distribution)
  • Ruby v2.5.5p157

Raw loop performance

Language Time(real) Command
Perl5 0m0.308s time perl -e 'for($i = 0; $i < 10000000; ++$i) {}'
Python2 0m0.502s time python2 -c 'for i in range(10000000): pass'
Python3 0m0.302s time python3 -c 'for i in range(10000000): pass'
PHP 0m0.249s time php -r 'for($i = 0; $i < 10000000; ++$i);'
Node.js 0m0.075s time node -e 'for(let i = 0; i < 10000000; ++i);'
Ruby 0m0.409s time ruby -e 'for i in 0..10000000 ; end'

Binary to decimal

  • Use 511 as sample value to bypass 8-bit interning
Language Time(real) Command
Perl5 0m4.745s time perl -e 'for($i = 0; $i < 10000000; ++$i) { oct("0b" + "111111111") }'
Python2 0m1.794s time python2 -c 'for i in range(10000000): int("111111111", 2)'
Python3 0m1.953s time python3 -c 'for i in range(10000000): int("111111111", 2)'
PHP 0m13.146s time php -r 'for($i = 0; $i < 10000000; ++$i) bindec("111111111");'
Node.js 0m0.709s time node -e 'for(let i = 0; i < 10000000; ++i) { parseInt("111111111", 2) }'
Ruby 0m1.313s time ruby -e 'for i in 0..10000000 ; "111111111".to_i(2) ; end'

Decimal to binary

  • Use 257 as sample value to bypass small-integer interning
Language Time(real) Command
Perl5 0m0.367s time perl -e 'for($i = 0; $i < 10000000; ++$i) { sprintf("%b", 257) }'
Python2 0m1.519s time python2 -c 'for i in range(10000000): bin(257)[2:]'
Python2 (alt) 0m2.697s time python2 -c 'for i in range(10000000): "{:b}".format(257)'
Python3 0m1.988s time python3 -c 'for i in range(10000000): bin(257)[2:]'
Python3 (alt) 0m2.196s time python3 -c 'for i in range(10000000): "{:b}".format(257)'
PHP 0m14.038s time php -r 'for($i = 0; $i < 10000000; ++$i) decbin(257);'
Node.js 0m1.594s time node -e 'for(let i = 0; i < 10000000; ++i) { (257).toString(2) }'
Ruby 0m1.706s time ruby -e 'for i in 0..10000000 ; 257.to_s(2) ; end'