I decided to open this PR because it's been getting quite big. Compiled evaluation is not yet finished, there are a couple of things missing and a lot to be improved, but it's already very promising. Here are the fib benchmarks:
Interpreted:
fib-evaluation-100000 time: [3.7328 s 3.7407 s 3.7493 s]
fib-trace-generation-100000
time: [163.50 ms 165.03 ms 166.85 ms]
fib-e2e-100000 time: [24.614 s 24.861 s 25.100 s]
Compiled:
fib-evaluation-100000 time: [2.5909 s 2.6036 s 2.6155 s]
change: [-30.733% -30.397% -30.063%] (p = 0.00 < 0.05)
Performance has improved.
fib-trace-generation-100000
time: [149.43 ms 150.17 ms 151.40 ms]
change: [-11.073% -9.2432% -7.4556%] (p = 0.00 < 0.05)
Performance has improved.
fib-e2e-100000 time: [17.172 s 17.492 s 17.848 s]
change: [-31.162% -29.642% -27.954%] (p = 0.00 < 0.05)
Performance has improved.
Things that are missing:
1 - equality of functions/thunks etc
2 - type-eqq, eqq
3 - type eq is not converting t/nil tags to sym tag
4 - implicit begin on let/letrec bodies
5 - metadata on functions/thunks to make preimage unique
6 - coroutines
7 - apply
I decided to open this PR because it's been getting quite big. Compiled evaluation is not yet finished, there are a couple of things missing and a lot to be improved, but it's already very promising. Here are the fib benchmarks:
Interpreted:
Compiled:
Things that are missing: 1 - equality of functions/thunks etc 2 - type-eqq, eqq 3 - type eq is not converting t/nil tags to sym tag 4 - implicit begin on let/letrec bodies 5 - metadata on functions/thunks to make preimage unique 6 - coroutines 7 - apply