reverse-complement First a few simple programs. Then optimisations, multicore parallelism, [pdf] vector parallelism. Last hand-written vector instructions and "unsafe" programs. source secs mem gz C gcc #6 0.97 696,664 828 Perl #3 6.77 1,495,228 295 Dart jit #5 5.18 2,147,352 942 × source secs mem gz cpu secs cpu load 1.0 C gcc #8 0.49 499,868 1551 0.81 24% 22% 22% 100% 1.7 C gcc #6 0.97 696,664 828 1.39 25% 100% 17% 1% 1.9 C gcc #5 1.52 994,176 654 1.52 0% 0% 1% 100% 1.9 C gcc #2 1.05 994,560 757 1.57 96% 22% 18% 14% 2.0 Rust #2 0.96 995,072 1332 1.59 57% 44% 43% 21% 2.1 Rust #3 0.98 995,200 1105 1.70 44% 46% 57% 24% 2.1 Julia #8 1.61 1,041,624 531 1.73 8% 90% 8% 1% 2.4 Julia #9 1.85 1,040,076 456 1.98 99% 8% 1% 0% 2.9 Go #2 2.24 800,512 614 2.34 17% 1% 86% 0% 3.2 Go #3 2.50 800,128 609 2.60 86% 2% 14% 0% 3.3 Ada 2012 GNAT #2 2.32 822,332 3285 2.64 40% 75% 0% 0% 3.4 Chapel #8 0.95 1,057,024 1260 2.75 100% 65% 63% 63% 3.9 C# .NET 2.97 798,004 1130 3.15 86% 2% 15% 4% 4.2 Go #6 1.93 1,246,404 1340 3.43 41% 35% 46% 54% 4.3 Chapel #3 1.87 2,133,504 709 3.46 94% 28% 29% 34% 4.4 Chapel #5 2.00 2,133,504 554 3.55 94% 27% 26% 31% 4.5 C# .NET #5 2.64 1,026,620 1620 3.67 11% 20% 13% 96% 4.7 Free Pascal #2 3.81 525,052 773 3.81 0% 0% 0% 100% 4.9 C# .NET #6 1.64 1,027,256 1627 3.95 70% 92% 57% 22% 5.0 Java #6 3.40 2,031,576 760 4.06 38% 80% 0% 1% 5.2 Classic Fortran 4.22 986,300 1026 4.22 100% 1% 0% 0% 5.2 C# .NET #7 1.56 941,012 1312 4.23 54% 95% 90% 33% 5.3 C++ g++ #6 3.26 1,517,580 1827 4.32 71% 30% 20% 12% 6.0 Python 3 #3 4.82 508,760 803 4.82 0% 100% 0% 0% 6.1 Java #5 4.78 1,096,264 1115 4.92 7% 62% 1% 34% 6.7 Lisp SBCL 5.44 1,494,656 911 5.44 100% 0% 0% 0% 7.0 Java #4 5.59 1,890,020 656 5.71 1% 56% 4% 40% 7.1 Perl #4 5.76 998,608 268 5.76 100% 0% 0% 0% 7.2 OCaml #3 2.29 20,616 1361 5.83 60% 61% 67% 65% 7.7 Java #7 23.61 1,036,152 1654 6.24 5% 11% 5% 4% 8.0 C++ g++ 6.50 979,912 599 6.50 0% 100% 0% 0% 8.3 Perl #3 6.77 1,495,228 295 6.76 1% 1% 99% 0% 9.0 Python 3 #5 4.03 1,500,508 960 7.30 0% 89% 38% 54% 12 OCaml #2 9.49 1,067,776 426 9.49 0% 0% 100% 0% 12 Ruby yjit #5 9.94 1,624,104 301 9.94 0% 0% 100% 0% 12 PHP 9.96 1,489,428 323 9.96 0% 0% 100% 0% 12 Python 3 #2 10.13 1,788,624 440 10.12 100% 0% 0% 0% 13 Python 3 10.36 1,986,924 484 10.36 100% 0% 0% 0% 14 Python 3 #6 7.71 2,484,208 821 11.18 27% 71% 44% 3% 14 C# .NET #3 7.31 1,571,904 934 11.48 29% 43% 66% 19% 14 Ruby yjit #4 5.89 2,511,208 608 11.52 12% 53% 97% 34% 15 Dart #5 8.64 1,994,492 942 11.81 13% 31% 51% 41% 15 PHP #2 11.83 1,787,272 288 11.82 0% 0% 100% 0% 15 PHP #3 7.75 536,792 452 12.06 30% 5% 50% 69% 16 Ada 2012 GNAT 12.59 528,492 943 12.58 0% 0% 0% 100% 17 Python 3 #4 13.85 4,003,072 343 13.85 99% 0% 0% 0% 21 Ruby yjit #3 9.05 3,935,068 490 17.39 10% 93% 39% 51% 22 Dart 16.73 1,000,656 651 17.64 1% 1% 2% 99% 22 Matz's Ruby #3 9.49 3,467,256 490 17.96 76% 50% 33% 30% 29 Matz's Ruby #2 23.61 688,216 272 23.61 58% 41% 0% 0% 30 Ruby yjit #2 24.38 1,001,932 272 24.37 0% 0% 100% 0% 45 C++ g++ #5 36.24 771,432 704 36.24 0% 0% 100% 0% 45 Ruby yjit 18.71 5,147,824 521 36.50 94% 7% 58% 36% 45 Julia #2 36.22 1,720,448 464 36.57 0% 0% 99% 1% 47 F# .NET 36.47 1,960,916 603 37.87 1% 1% 99% 1% 50 Racket 40.52 2,047,132 560 40.51 0% 0% 0% 100% 51 Lua #2 41.12 2,654,652 560 41.10 0% 100% 0% 0% 52 Lua #5 41.96 2,169,636 758 41.96 100% 0% 0% 0% 52 Classic Fortran #2 42.39 769,748 778 42.38 100% 0% 0% 0% 61 Lua #4 49.35 1,030,016 600 49.33 0% 100% 0% 0% 78 Dart #3 60.48 6,379,856 571 63.33 3% 95% 1% 3% 126 Dart #2 97.74 6,335,548 575 102.00 3% 97% 2% 3% Erlang 26 min 2,180,832 1309 30 min 41% 21% 15% 35% C++ g++ #3 Bad Output Dart #4 Bad Output Erlang #4 Timed Out Erlang #3 Timed Out F# .NET #4 Timed Out F# .NET #5 Timed Out Go #5 Bad Output Go Failed Java #3 Bad Output Java #8 Bad Output Node.js #7 Bad Output Lisp SBCL #2 Timed Out Matz's Ruby Failed Matz's Ruby #5 Failed Matz's Ruby #4 Failed VW Smalltalk Bad Output hand-written vector instructions | "unsafe" × source secs mem gz cpu secs cpu load 0.7 C gcc #7 0.43 499,928 1899 0.59 55% 14% 11% 56% 0.9 C++ g++ #2 0.71 499,712 2099 0.71 59% 1% 0% 41% 1.0 Rust 0.53 498,816 2762 0.83 20% 19% 21% 100% 1.7 C# .NET #8 0.56 736,084 2641 1.35 87% 78% 7% 71% 2.9 Swift 1.95 796,836 1293 2.38 41% 0% 77% 4% 4.5 C gcc #4 3.68 500,480 716 3.68 0% 1% 100% 0% 4.7 Haskell GHC #4 3.73 505,344 1047 3.81 85% 8% 7% 1% 6.3 OCaml 2.23 20,552 1372 5.07 54% 60% 53% 58% 9.2 Haskell GHC #2 7.33 3,814,400 998 7.45 30% 1% 69% 0% 11 Racket #2 9.10 851,780 1038 9.10 0% 0% 0% 100% 20 Node.js #2 15.95 727,052 1228 16.59 78% 3% 20% 2% by secs by mem by gz by cpu secs