Introduction Languages Documentation News Implementations Scorecard Recent Changes Mailing List Wiki Alioth

Which languages is best? Here's the Shootout Scorecard!

Warning! This page is just for fun :-)

Please bear in mind that this is a work in progress, if you come back tomorrow, everything may be different.

Some people have suggested that the results be summarized, or that a winner be declared. In order to satisfy this request, we have come up with a unique and subtle quantification system to score languages on their overall performance, termed the Completely Random and Arbitrary Point System!, or CRAPS! [TM], for short. (See bottom of page for a brief description of this analytical marvel).

The scores in the Scores table can reflect CPU, Memory and/or Lines of Code (LOC). The lower a language's measured CPU, Memory, or LOC is for a test, the more points it gets. But the language doesn't get any points if it is missing an entry for a test (an incentive to complete all tests :-). You can choose a multiplier for any of CPU, Memory and LOC scores below. By default, we just show the CPU score alone. Also, each test is weighted, because some tests are more important than others (the default weights in the table below reflect my personal preferences). But you can change the weights and the multipliers however you like, because after all, benchmark results should reflect the priorities of the person viewing them.

Once you have selected the weights and multipliers to your satisfaction, you can recalulate the scores and use the resulting URL on your language advocacy page as the final proof of your favorite language's supremacy! Think of the glory.

Of course, it's also possible that my results are flawed, and playing with this silly CGI is just a waste of time.


Patented CRAPS Calculator

CPU Score Multiplier:
Memory Score Multiplier:
Lines of Code Multiplier:

WEIGHTS

TestWeightTestWeight
Ackermann's Function Array Access
Echo Client/Server Exceptions
Fibonacci Numbers Hash (Associative Array) Access
Hashes Part II Heapsort
Hello World List Processing
Matrix Multiplication Method Calls
Statistical Moments Nested Loops
Object Instantiation Producer/Consumer Threads
Random Number Generator Regular Expression Matching
Reverse a File Sieve of Eratosthenes
Spell Checker String Concatenation
Sum a File of Numbers Count Lines/Words/Chars
Word Frequency   

SCORES

Language Implementation Score Missing
Cgcc59.11870
C++g++45.08450
SMLmlton44.31190
Ocamlocaml41.95350
Eiffelse40.28824
Cleanclean39.68463
Schemebigloo29.50881
Oberon-2oberon229.06933
Common Lispsbcl21.97830
Javagcj21.61511
Common Lispcmucl21.31710
SMLsmlnj21.15150
Javajava20.09901
Nicenice19.86780
Haskellghc18.40202
Javakaffe18.15281
Ocamlocamlb16.23880
Perlperl16.16860
Pythonpython15.91280
Forthgforth15.90482
Adagnat15.58486
Javagij15.34441
Pikepike14.57060
C#csharp14.49454
S-Langslang14.39343
Lualua14.37741
Pythonpsyco13.88411
Dylangwydion13.23993
Javasablevm12.43591
Rubyruby12.21670
Awkgawk11.71276
Schemestalin10.176914
Awkmawk 9.91526
Mercurymercury 9.87877
Tcltcl 9.59213
Smalltalkgst 9.50702
Erlanghipe 9.35322
Iconicon 8.88837
Erlangerlang 8.60622
Lisprep 7.93854
Schemeguile 7.38220
Bashbash 7.024112
Schememzc 5.91126
Emacs Lispxemacs 5.80889
PHPphp 5.713610
Schememzscheme 5.52716
Mozart/Ozoz 5.38096
ElastiCelastic 1.487516
Prologgprolog 0.425521
Ciao Prologciao 0.310921
Haskellcurry 0.136224

Languages that compile to native code are in Bold Italics.


The CRAPS! point system works as follows:

  • For each test, the "best score" is determined by locating the lowest non-zero score. (Thi is done for CPU, Memory, and LOC scores.)
  • For each language, compute its score in logarithmic space:
    score(x) = 1 / (1 + log2(x / b))

    where:
    x = Current test's score
    b = Best score for this test
    This yields a non-zero value from 0 to 1, which 1 being the "best score".
    Each such score is then multiplied by the weight of the test (a number between 0 and 5), yielding the language's score for that test. If a language does not have an entry for a test its score is zero. (Again we do the same for Memory and LOC).
  • Then the CPU/Memory/LOC scores are multiplied by their respective Mulipliers and the resulting scores are added together to the get final score.
  • Add up all the scores for each language for each test, and put them on this nice web page.
  • And the result is CRAPS!.