/scriptorium

:scroll: Game Scripting Languages benchmarked

Primary LanguageCThe UnlicenseUnlicense

Scriptorium 📜

  • Game Scripting Languages benchmarked.
  • Using latest versions at the time of writing (Jul 2015)
  • Total solutions evaluated: 48

Results

Rank Language Flavor Time Relative Lua speed Score
1 C vc 0.074 s. 100% 1808 pt
2 Lua luajit 0.111 s. 100% 1203 pt
3 Terra terra 0.121 s. 100% 1107 pt
4 C c4-jit 0.136 s. 100% 986 pt
5 C libtcc 0.151 s. 100% 886 pt
6 Pawn pawn-asm 0.384 s. 100% 349 pt
7 Pawn pawn 0.719 s. 100% 186 pt
8 TinyVM tinyvm 0.786 s. 100% 170 pt
9 Scheme chibi 1.009 s. 100% 132 pt
10 Neko nekovm 1.104 s. 100% 121 pt
11 Lua lua 1.341 s. 100% 100 pt
12 Ruby tinyrb(ist) 1.441 s. 93.0103% 93 pt
13 GameMonkey gamemonkey 1.691 s. 79.2907% 79 pt
14 Angelscript angelscript-jit 1.859 s. 72.1132% 72 pt
15 Wren wren 1.997 s. 67.1361% 67 pt
16 Lily lily 2.005 s. 66.8582% 66 pt
17 Angelscript angelscript 2.039 s. 65.7295% 65 pt
18 Ruby mruby 2.098 s. 63.893% 63 pt
19 Squirrel squirrel 2.126 s. 63.0622% 63 pt
20 Scheme s7 2.136 s. 62.7708% 62 pt
21 C c4 2.538 s. 52.8101% 52 pt
22 Python micropython 2.842 s. 47.1675% 47 pt
23 Dao dao 2.876 s. 46.6166% 46 pt
24 QuakeC gmqcc 3.060 s. 43.806% 43 pt
25 ObjectScript objectscript 3.108 s. 43.1278% 43 pt
26 SGScript sgscript 4.620 s. 29.0163% 29 pt
27 Java Jog 4.675 s. 28.672% 28 pt
28 JetScript JetScript 4.810 s. 27.8671% 27 pt
29 Lisp minilisp 6.951 s. 19.2855% 19 pt
30 Lisp aria 8.010 s. 16.7366% 16 pt
31 JavaScript duktape 9.544 s. 14.0463% 14 pt
32 Tcl jim 12.280 s. 10.9162% 10 pt
33 GML gml 16.443 s. 8.15268% 8 pt
34 PSL psl 17.645 s. 7.59738% 7 pt
35 Python tinypy(panda) 21.799 s. 6.14937% 6 pt
36 Scheme s9 33.160 s. 4.04257% 4 pt
37 C picoC 36.625 s. 3.66016% 3 pt
38 JX9 jx9 43.598 s. 3.07476% 3 pt
39 PHP ph7 46.029 s. 2.91235% 2 pt
40 JTC jtc 47.021 s. 2.8509% 2 pt
41 JavaScript v7 51.940 s. 2.58089% 2 pt
42 Scheme tinyscheme 65.398 s. 2.04979% 2 pt
43 Lisp paren 72.901 s. 1.83883% 1 pt
44 Lisp lispy90 91.767 s. 1.46079% 1 pt
45 Tcl picol 151.527 s. 0.884674% 0 pt
46 ChaiScript chaiscript 175.038 s. 0.765845% 0 pt
47 JavaScript 42tiny-js 227.170 s. 0.590096% 0 pt
48 Tcl lil 555.976 s. 0.241111% 0 pt
  • AMD A10 3.8 GHz, 8 GiB, Windows 7 64bit.
  • Compiled on VS2015 RC if possible, VS2013 elsewhere.
  • Take it with a grain of salt.

Language requirements

  • must embed from C++.
  • must be self-contained (no BOOST, no LLVM backends).
  • must compile on vs2015 (or vs2013 at least).
  • must link statically.
  • must not require (heavy) makefiles/cygwin/build-systems to build.
  • must use jit/optimizations if available.

Test requirements

  • must compare fair between languages. for example:
    • must not use yield/coroutines on recursive fibonacci test.
    • must disable threading if possible (not all languages are thread-safe)
    • etc

Upcoming (soon)

  • creating a class to handle them all (relevant)
  • @todo {
  • add exe size
  • add iteration benchmarks
  • add string benchmarks
  • add script->native round trip
  • add native->script round trip
  • add memory consumption
  • add memory leaks
  • add time to set up
  • add final thoughts
  • also, create a score chart, based on:
    • small
    • clean
    • type (interpreted/bytecode/jit)
    • fast
    • containers
    • OO
    • closures
    • bindings
    • 32/64bit
    • threading
    • thread-safety
    • coroutines/greenlets
    • debug capabilities
    • zero-configuration based (drag-n-drop files on solution/project)
    • ...
  • }

To evaluate (someday... maybe)

License

  • initial tests by Lewis Van Winkle (2009) (Public Domain)
  • makefiles, bench code, compilation fixes & most tests put into public domain (@r-lyeh)