5 ms·
Very unscientific but hopefully interesting: $ time php -r 'echo "Hello, world!";' # smaller php binaries can be compiled real 0m0.555s $ time perl
by olliesaunders 16y ago
Very unscientific but hopefully interesting:
$ time php -r 'echo "Hello, world!";' # smaller php binaries can be compiled
real 0m0.555s
$ time perl -e 'print "Hello, world!";'
real 0m0.385s
$ time ruby -e 'puts "Hello, world!"' # mri
real 0m0.073s
$ time python -c 'print("Hello, world!")'
real 0m0.067s
$ time lua -e 'print "Hello, world!"'
real 0m0.013s
$ time js -e 'print("Hello, world!")' # spidermonkey
real 0m0.010s
$ time awk 'BEGIN { print("Hello, world!") }'
real 0m0.004s
- tl 16y agoYou forgot my favorite: $ time clojure -e '(println "Hello, world!")' real 0m0.781s Yeah, I know it's the JVM but still.
- avar 16y agoYou're right about one thing. That is very unscientific. You're mainly testing your file system cache, not these programming language implementations. E.g. perl(1) is faster than ruby(1) at printing "Hello, world!". But since you presumably had ruby hot in cache and not perl the latter seems to be almost 4 times as slow. Here's a better benchmark, which runs each of these 500 times and takes the average: http://gist.github.com/630868 http://gist.github.com/630868 Which yields these results: Rate clojure php emacs python ruby js perl awk lua shell C clojure 0.844/s -- -97% -97% -98% -99% -99% -99% -99% -99% -99% -100% php 24.6/s 2812% -- -2% -43% -75% -76% -78% -82% -82% -84% -89% emacs 25.2/s 2882% 2% -- -41% -74% -75% -78% -81% -82% -84% -88% python 43.0/s 4995% 75% 71% -- -56% -58% -62% -68% -69% -72% -80% ruby 96.7/s 11361% 294% 284% 125% -- -5% -15% -28% -29% -38% -55% js 101/s 11919% 313% 303% 136% 5% -- -11% -24% -26% -35% -53% perl 114/s 13397% 364% 353% 165% 18% 12% -- -15% -17% -27% -47% awk 134/s 15743% 444% 431% 211% 38% 32% 17% -- -2% -14% -38% lua 137/s 16134% 458% 444% 219% 42% 35% 20% 2% -- -12% -36% shell 156/s 18359% 534% 519% 262% 61% 54% 37% 17% 14% -- -28% C 216/s 25440% 777% 756% 401% 123% 113% 89% 61% 57% 38% -- Update: Added a C program and ran the shell program in a sub-shell (since perl's system function preloads a shell). Didn't add silentbicycle's SWI Prolog and OCaml since he didn't provide the source.
- deleted 16y ago[deleted]
- silentbicycle 16y agoWhat we're essentially measuring here is runtime startup and (in some cases) byte-compiling. Rate python swipl ruby perl lua luac bash ocaml awk subshell ocamlopt c py_pyc shell python 46.3/s -- -17% -56% -70% -76% -78% -78% -79% -83% -87% -88% -88% -90% -92% swipl 55.9/s 21% -- -46% -63% -70% -73% -73% -74% -80% -84% -85% -86% -88% -90% ruby 104/s 125% 86% -- -31% -45% -49% -51% -52% -62% -71% -72% -74% -79% -82% perl 152/s 229% 172% 46% -- -20% -26% -28% -30% -44% -57% -60% -61% -69% -74% lua 189/s 309% 239% 82% 25% -- -8% -10% -13% -31% -47% -50% -52% -61% -67% luac 206/s 345% 268% 98% 35% 9% -- -2% -6% -25% -42% -46% -48% -58% -64% bash 211/s 356% 277% 103% 39% 11% 3% -- -3% -23% -41% -44% -46% -57% -63% ocaml 218/s 372% 290% 110% 44% 15% 6% 3% -- -20% -39% -42% -45% -55% -62% awk 273/s 491% 389% 162% 80% 44% 33% 30% 25% -- -23% -28% -31% -44% -52% subshell 357/s 672% 539% 243% 135% 89% 74% 69% 64% 31% -- -6% -9% -26% -38% ocamlopt 379/s 719% 577% 264% 149% 100% 84% 80% 73% 39% 6% -- -4% -22% -34% c 394/s 751% 604% 278% 159% 108% 91% 87% 80% 44% 10% 4% -- -19% -31% py_pyc 485/s 950% 768% 366% 219% 156% 136% 130% 122% 78% 36% 28% 23% -- -16% shell 575/s 1143% 928% 452% 278% 203% 179% 172% 163% 110% 61% 52% 46% 18% -- I added hello world programs for C, SWI Prolog, and OCaml (byte and native compilers). Timings on OpenBSD/amd64. Edit: Since you can precompile Lua, I added that as 'luac'. It's not usually done, since Lua compiles VERY quickly, and the source is more portable. It's a data point, though. I also added a .pyc for Python - Python byte-compiles more slowly. There's little difference between lua and luac, but the difference between python and py_pyc is huge. I also added shell with a new subshell, both sh and bash. And, source, as requested. OCaml: let _ = print_string "Hello world.\n" Compile with "ocamlc -o ochello foo.ml" for bytecode, "ocamlopt -o ochello.opt foo.ml" for native. SWI Prolog: swipl => sub { system qq[swipl -g "write('Hello world.\n')." -t "halt."] }, luac: print "Hello, world." And then compile with "luac hellow.lua", run as "lua luac.out".
- nickik 16y agothe most senceless benchmark ever.
- haberman 16y agoAlso interesting is how much memory is allocated running the empty program (detected with Valgrind): Lua 5.1.4: 34k allocated, all memory freed. Perl 5.10: 195k allocated (140k leaked!) Ruby 1.8.7: 670k allocated (665kb still reachable at exit) OpenJDK 6: 1.5M allocated (1M in use at exit). Python 2.6.5: 3M allocated (1.2MB in use at exit)