From 1790fcc301304e3242a855c4b3ca89c3c21597de Mon Sep 17 00:00:00 2001 From: mappu Date: Tue, 19 May 2020 17:10:45 +1200 Subject: [PATCH] initial commit --- README.md | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..539c461 --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +# 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'`