View Code? Open in Web Editor
NEW
This project forked from r-lyeh-archived/scriptorium
:scroll: Game Scripting Languages benchmarked
License: The Unlicense
C++ 15.25%
Batchfile 0.05%
Makefile 0.77%
Brainfuck 0.01%
C 72.71%
CMake 0.20%
QMake 0.01%
Assembly 0.74%
HTML 7.49%
JavaScript 0.28%
CSS 0.08%
ActionScript 0.01%
Shell 0.62%
Perl 0.07%
PHP 0.01%
Vim Script 0.03%
Yacc 0.22%
Lex 0.01%
Python 1.39%
C# 0.07%
scriptorium's Introduction
- Game Scripting Languages benchmarked.
- Using latest versions at the time of writing (Jul 2015)
- Total solutions evaluated: 50
Rank |
Language |
Flavor |
Time |
Relative Lua speed |
Score |
1 |
C |
vc |
0.074 s. |
![100%](https://camo.githubusercontent.com/06ccf80bf8baada5dc4c62df6b1eb72d276449f78d4ca66d9844854aed1855ff/687474703a2f2f70726f677265737365642e696f2f6261722f3130303f7469746c653d7831382e30) |
1808 pt |
2 |
Lua |
luajit |
0.111 s. |
![100%](https://camo.githubusercontent.com/576d31a64a4a8c8625f7c77d20e775ec3a7bb2a1c8468c52934b2bc51c192300/687474703a2f2f70726f677265737365642e696f2f6261722f3130303f7469746c653d7831322e30) |
1203 pt |
3 |
Terra |
terra |
0.121 s. |
![100%](https://camo.githubusercontent.com/96a7eae3c075c14192e8bff68af41cc660a733595bc183ab57a88bb8748cda77/687474703a2f2f70726f677265737365642e696f2f6261722f3130303f7469746c653d7831312e30) |
1107 pt |
4 |
C |
c4-jit |
0.136 s. |
![100%](https://camo.githubusercontent.com/9d04e76eafc51474e56410ffd27c34d1de21e1040f2502bd2fe17ba6ed886dbe/687474703a2f2f70726f677265737365642e696f2f6261722f3130303f7469746c653d7830392e38) |
986 pt |
5 |
C |
libtcc |
0.151 s. |
![100%](https://camo.githubusercontent.com/74dbcb96b2ec9660b9d80d3a8a73df51f5872fbef6cef7064fdd7e797de1ae2e/687474703a2f2f70726f677265737365642e696f2f6261722f3130303f7469746c653d7830382e38) |
886 pt |
6 |
Pawn |
pawn-asm |
0.384 s. |
![100%](https://camo.githubusercontent.com/6bec8406fc7045437ce1bd58ad3083ef892fdea8a48b20087962bf3e08ee45c5/687474703a2f2f70726f677265737365642e696f2f6261722f3130303f7469746c653d7830332e34) |
349 pt |
7 |
Lua |
luajit-nojit |
0.521 s. |
![100%](https://camo.githubusercontent.com/6ce26bbbf3c29ab4a01fdd928bd499eb2303672a7106d34d0ebdaa45dcf5a002/687474703a2f2f70726f677265737365642e696f2f6261722f3130303f7469746c653d7830322e35) |
257 pt |
8 |
Pawn |
pawn |
0.719 s. |
![100%](https://camo.githubusercontent.com/5963712975b46d351cf70dd526f1ed5c971950ed10d0312fc25622e91d2f725e/687474703a2f2f70726f677265737365642e696f2f6261722f3130303f7469746c653d7830312e38) |
186 pt |
9 |
TinyVM |
tinyvm |
0.786 s. |
![100%](https://camo.githubusercontent.com/3f34325d83e8c134a8a5fd80a2faaa39ebcdf71e8172dc7404b165306f7b177d/687474703a2f2f70726f677265737365642e696f2f6261722f3130303f7469746c653d7830312e37) |
170 pt |
10 |
Scheme |
chibi |
1.009 s. |
![100%](https://camo.githubusercontent.com/3551306b7e0386d830f48f6e7f40daa9e4c78241e1c48e5c5410bfeda40a8cb4/687474703a2f2f70726f677265737365642e696f2f6261722f3130303f7469746c653d7830312e33) |
132 pt |
11 |
Neko |
nekovm |
1.104 s. |
![100%](https://camo.githubusercontent.com/c920e0713b1a998562e7fea0e04cfc502f6570f70949a475367e09f1e80410cf/687474703a2f2f70726f677265737365642e696f2f6261722f3130303f7469746c653d7830312e32) |
121 pt |
12 |
Lua |
lua |
1.341 s. |
![100%](https://camo.githubusercontent.com/eac6545fc719cfa8eb0759dadb9d2e4115266f9113460e5d23b046c20f733d4e/687474703a2f2f70726f677265737365642e696f2f6261722f313030) |
100 pt |
13 |
Ruby |
tinyrb(ist) |
1.441 s. |
![93.0103%](https://camo.githubusercontent.com/c4ea6217e24463ded3296c48fdb84dc5fa873b907cdbc914371ac525d324d1a6/687474703a2f2f70726f677265737365642e696f2f6261722f3933) |
93 pt |
14 |
GameMonkey |
gamemonkey |
1.691 s. |
![79.2907%](https://camo.githubusercontent.com/a1b36e994a790cdff20ff435827ad1a31d8c5d8d9b426a3571b2a4430f139954/687474703a2f2f70726f677265737365642e696f2f6261722f3739) |
79 pt |
15 |
Angelscript |
angelscript-jit |
1.859 s. |
![72.1132%](https://camo.githubusercontent.com/a5ddbed5c20c53d38e2a3db68aba2e65f6271ee51c006ad41a60c14bb4f92e52/687474703a2f2f70726f677265737365642e696f2f6261722f3732) |
72 pt |
16 |
Wren |
wren |
1.997 s. |
![67.1361%](https://camo.githubusercontent.com/7745e714951c590d21cd36854459ffefaf7bb99fc7d9f66fc855b79bd97ff84b/687474703a2f2f70726f677265737365642e696f2f6261722f3637) |
67 pt |
17 |
Lily |
lily |
2.005 s. |
![66.8582%](https://camo.githubusercontent.com/690be60ee30d0ada36991c051d0ff6153b72163fb9612fcef690ab1732261d4c/687474703a2f2f70726f677265737365642e696f2f6261722f3636) |
66 pt |
18 |
Angelscript |
angelscript |
2.039 s. |
![65.7295%](https://camo.githubusercontent.com/c811f3051d8710a249f965cb35e3e2955db1aba29e14da60bab70ee3551269f1/687474703a2f2f70726f677265737365642e696f2f6261722f3635) |
65 pt |
19 |
Ruby |
mruby |
2.098 s. |
![63.893%](https://camo.githubusercontent.com/60b23e57d4e0b0ac3526518e80aa45095a418019b0e0e78feb22249160f88196/687474703a2f2f70726f677265737365642e696f2f6261722f3633) |
63 pt |
20 |
Squirrel |
squirrel |
2.126 s. |
![63.0622%](https://camo.githubusercontent.com/60b23e57d4e0b0ac3526518e80aa45095a418019b0e0e78feb22249160f88196/687474703a2f2f70726f677265737365642e696f2f6261722f3633) |
63 pt |
21 |
Scheme |
s7 |
2.136 s. |
![62.7708%](https://camo.githubusercontent.com/e969255809b6560ddcd9b69be7963b13296c2a18f6e313d48293ae35476d7377/687474703a2f2f70726f677265737365642e696f2f6261722f3632) |
62 pt |
22 |
C |
c4 |
2.538 s. |
![52.8101%](https://camo.githubusercontent.com/cbb3cc1a6b0d18affba771f327acb143ba40d875627bf78dc59a721dfb765d03/687474703a2f2f70726f677265737365642e696f2f6261722f3532) |
52 pt |
23 |
Python |
micropython |
2.842 s. |
![47.1675%](https://camo.githubusercontent.com/9df9b5415447162090aef617962a2180a2a8fe59097641931728ee6d9eb761f9/687474703a2f2f70726f677265737365642e696f2f6261722f3437) |
47 pt |
24 |
Dao |
dao |
2.876 s. |
![46.6166%](https://camo.githubusercontent.com/089608d87e8a972c5f944c304e9f3f40f2e9e46e11f44269d1e4b9204912f5d0/687474703a2f2f70726f677265737365642e696f2f6261722f3436) |
46 pt |
25 |
QuakeC |
gmqcc |
3.060 s. |
![43.806%](https://camo.githubusercontent.com/05b03e5877a326b9c3fe9eb155e8c5a67ad8da9b2dba96283eb953f136089cd4/687474703a2f2f70726f677265737365642e696f2f6261722f3433) |
43 pt |
26 |
ObjectScript |
objectscript |
3.108 s. |
![43.1278%](https://camo.githubusercontent.com/05b03e5877a326b9c3fe9eb155e8c5a67ad8da9b2dba96283eb953f136089cd4/687474703a2f2f70726f677265737365642e696f2f6261722f3433) |
43 pt |
27 |
SGScript |
sgscript |
4.620 s. |
![29.0163%](https://camo.githubusercontent.com/9e9ef14dfae7964c43a756b038e7915730ebeaec49f4ea9d7f29cdd2dbd51634/687474703a2f2f70726f677265737365642e696f2f6261722f3239) |
29 pt |
28 |
Java |
Jog |
4.675 s. |
![28.672%](https://camo.githubusercontent.com/1c4247648908f83c585513120d329ea12f50f0e5bdbea0365858502a1574c502/687474703a2f2f70726f677265737365642e696f2f6261722f3238) |
28 pt |
29 |
JetScript |
JetScript |
4.810 s. |
![27.8671%](https://camo.githubusercontent.com/47d5f942916c1bcb0358940af5375b1c03acc984b7d475f10108996d13cd519a/687474703a2f2f70726f677265737365642e696f2f6261722f3237) |
27 pt |
30 |
Lisp |
minilisp |
6.951 s. |
![19.2855%](https://camo.githubusercontent.com/b9738ae15c2ef87ed5455cf289cbcfa89e9cadfff0c2740cdd13c401fdabf70e/687474703a2f2f70726f677265737365642e696f2f6261722f3139) |
19 pt |
31 |
Lisp |
aria |
8.010 s. |
![16.7366%](https://camo.githubusercontent.com/e31aea66c7a5c6e9f2c03cd5051b99e1bb6bcb12299ca98bd93ffecdf359a034/687474703a2f2f70726f677265737365642e696f2f6261722f3136) |
16 pt |
32 |
JavaScript |
duktape |
9.544 s. |
![14.0463%](https://camo.githubusercontent.com/13f260c08e18407742bd9cdb7cda36b96148ab4088a8725acea4de2eae34252b/687474703a2f2f70726f677265737365642e696f2f6261722f3134) |
14 pt |
33 |
Tcl |
jim |
12.280 s. |
![10.9162%](https://camo.githubusercontent.com/39d68f5fa9a7762dba50f1e0acab19bc270bb25b142341d1953d09ce3f78d8a5/687474703a2f2f70726f677265737365642e696f2f6261722f3130) |
10 pt |
34 |
GML |
gml |
16.443 s. |
![8.15268%](https://camo.githubusercontent.com/6e7b9f4f341dc22d4e0e8fb50e0aafb4ed488029b2dc51387a4edaf0be450e32/687474703a2f2f70726f677265737365642e696f2f6261722f38) |
8 pt |
35 |
MiniScheme |
MiniScheme |
17.345 s. |
![7.72839%](https://camo.githubusercontent.com/3b5cd40475e85723349f74805f0c03cbc7fb663806a211deb2fb7d7c07b2b1c4/687474703a2f2f70726f677265737365642e696f2f6261722f37) |
7 pt |
36 |
PSL |
psl |
17.645 s. |
![7.59738%](https://camo.githubusercontent.com/3b5cd40475e85723349f74805f0c03cbc7fb663806a211deb2fb7d7c07b2b1c4/687474703a2f2f70726f677265737365642e696f2f6261722f37) |
7 pt |
37 |
Python |
tinypy(panda) |
21.799 s. |
![6.14937%](https://camo.githubusercontent.com/d8c3a90ceff45e75fb1d6c07012fd7524ec7d7edf5e7b54f509754084a6d201f/687474703a2f2f70726f677265737365642e696f2f6261722f36) |
6 pt |
38 |
Scheme |
s9 |
33.160 s. |
![4.04257%](https://camo.githubusercontent.com/a8272d3e7a832208bc410ff48eef49b77565f4e6dcbc6918607987608428f438/687474703a2f2f70726f677265737365642e696f2f6261722f34) |
4 pt |
39 |
C |
picoC |
36.625 s. |
![3.66016%](https://camo.githubusercontent.com/37108a1f6732c88addce7c01e5d242dd41247db0be2537bf770c08d4113bfc31/687474703a2f2f70726f677265737365642e696f2f6261722f33) |
3 pt |
40 |
JX9 |
jx9 |
43.598 s. |
![3.07476%](https://camo.githubusercontent.com/37108a1f6732c88addce7c01e5d242dd41247db0be2537bf770c08d4113bfc31/687474703a2f2f70726f677265737365642e696f2f6261722f33) |
3 pt |
41 |
PHP |
ph7 |
46.029 s. |
![2.91235%](https://camo.githubusercontent.com/062a1aa66650cf9f71b15bee015857790e6ab8a0aa02b0eeebc24331592f3933/687474703a2f2f70726f677265737365642e696f2f6261722f32) |
2 pt |
42 |
JTC |
jtc |
47.021 s. |
![2.8509%](https://camo.githubusercontent.com/062a1aa66650cf9f71b15bee015857790e6ab8a0aa02b0eeebc24331592f3933/687474703a2f2f70726f677265737365642e696f2f6261722f32) |
2 pt |
43 |
JavaScript |
v7 |
51.940 s. |
![2.58089%](https://camo.githubusercontent.com/062a1aa66650cf9f71b15bee015857790e6ab8a0aa02b0eeebc24331592f3933/687474703a2f2f70726f677265737365642e696f2f6261722f32) |
2 pt |
44 |
Scheme |
tinyscheme |
65.398 s. |
![2.04979%](https://camo.githubusercontent.com/062a1aa66650cf9f71b15bee015857790e6ab8a0aa02b0eeebc24331592f3933/687474703a2f2f70726f677265737365642e696f2f6261722f32) |
2 pt |
45 |
Lisp |
paren |
72.901 s. |
![1.83883%](https://camo.githubusercontent.com/caf38ba7d498c7bb7649fd641af6a0afa9ec6843eb204965017002d34f88ea8d/687474703a2f2f70726f677265737365642e696f2f6261722f31) |
1 pt |
46 |
Lisp |
lispy90 |
91.767 s. |
![1.46079%](https://camo.githubusercontent.com/caf38ba7d498c7bb7649fd641af6a0afa9ec6843eb204965017002d34f88ea8d/687474703a2f2f70726f677265737365642e696f2f6261722f31) |
1 pt |
47 |
Tcl |
picol |
151.527 s. |
![0.884674%](https://camo.githubusercontent.com/b47a5710be90d4912f614d770fb4a59861f9292ff7a614eb2d469a2ba90ba90f/687474703a2f2f70726f677265737365642e696f2f6261722f30) |
0 pt |
48 |
ChaiScript |
chaiscript |
175.038 s. |
![0.765845%](https://camo.githubusercontent.com/b47a5710be90d4912f614d770fb4a59861f9292ff7a614eb2d469a2ba90ba90f/687474703a2f2f70726f677265737365642e696f2f6261722f30) |
0 pt |
49 |
JavaScript |
42tiny-js |
227.170 s. |
![0.590096%](https://camo.githubusercontent.com/b47a5710be90d4912f614d770fb4a59861f9292ff7a614eb2d469a2ba90ba90f/687474703a2f2f70726f677265737365642e696f2f6261722f30) |
0 pt |
50 |
Tcl |
lil |
555.976 s. |
![0.241111%](https://camo.githubusercontent.com/b47a5710be90d4912f614d770fb4a59861f9292ff7a614eb2d469a2ba90ba90f/687474703a2f2f70726f677265737365642e696f2f6261722f30) |
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.
- 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.
- 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
- 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)
- initial tests by Lewis Van Winkle (2009) (Public Domain)
- makefiles, bench code, compilation fixes & most tests put into public domain (@r-lyeh)