argumentcomputer / lurk

Lurk is a Turing-complete programming language for zk-SNARKs. It is a statically scoped dialect of Lisp, influenced by Scheme and Common Lisp.
https://docs.argument.xyz
MIT License
46 stars 3 forks source link

Compiled Lurk #356

Closed gabriel-barrett closed 3 weeks ago

gabriel-barrett commented 3 weeks ago

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