initial commit

This commit is contained in:
mappu 2020-05-19 17:10:45 +12:00
commit 1790fcc301
1 changed files with 64 additions and 0 deletions

64
README.md Normal file
View File

@ -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'`