3df7d6e0ec
Finish converting into individual tests (mostly) - might need to split out and uncomment some should-fail tests
2023-02-13 00:42:54 -05:00
e9b8f636cf
Start splitting out the tests into multiples, with the library code at top level in once_cell's Lazy
2023-02-12 16:16:59 -05:00
5838cf0bdd
Added 'assert', and changed match_params to assert that when the param tree is nil so are the passed params, which should handle exact length for functions etc.
...
Added unwrap, lapply, array, the Y combinator, and rlambda. Y and rlambda were almost verbatim copies from old Kraken, with a change for how variadic functions are declared ( '( & args )' vs 'args' ) and a name change.
2023-02-12 13:30:45 -05:00
5512ab8804
Fix warnings, add destructuring let1
2023-02-12 12:19:56 -05:00
30964bf4ec
Better BVAU, which does full trees-of-symbols destructuring with varidic support!
2023-02-12 11:56:32 -05:00
c028e975d4
Add wrap, vfoldl, zipd, concat, bvau, and lambda! Need to add varidac handling to bvau, but getting tired
2023-02-11 00:34:24 -05:00
1b813e39fb
Fix vapply bug, write vmap, add debug
2023-02-10 23:05:08 -05:00
606972a38b
Implement vapply, got around the ever-growing environment
2023-02-10 22:34:04 -05:00
3c2dfbf8a7
Add tail call recursion - works, but if a datastructure is too deep (say, because env keeps growing on the heap) Rc::drop will end up overflowing the stack when trying to deallocate
2023-02-10 19:38:44 -05:00
ba67b8c67b
Add "!" syntatic form - a bit like the single quote, but !(a b c) d => !(a b c d). Useful for like !(let a 1) (+ a 3) or w/e. Break out some of the infinate nesting"
2023-02-10 01:01:04 -05:00
3b5cc2c506
Implement a new style of let1 based on direct env manipulation
2023-02-09 01:20:19 -05:00
02e359f42d
Finish out the basic primitives along with testing infra for both parsing and evalaution, with some slick Into<> impls to make Rust values Kraken values, which is esp useful for testing
2023-02-08 23:37:23 -05:00
d861d91397
Fix ', add if and = along with bools
2023-02-08 01:54:53 -05:00
c801f604c2
Add derived combiners and fix some bugs with eval, vau, quote, cons, car, cdr
2023-02-07 13:00:15 -05:00
60dad101f8
Speed sketch beginnings of a Rust implementation of new stripped-down Scheme-like Kraken
2023-02-07 02:07:53 -05:00
3807381ceb
Sketch out call-info, realized it and function-analysis needs pectx and also err threaded through it, since it can fail (which must be recoverable) and needs env and pectx for partial_eval inside
2023-02-02 01:18:17 -05:00
bea48eb18b
Reviewing and making notes about analysises, looking to see if they can be implemented with a generic traversal or something
2023-02-01 01:01:37 -05:00
a038a8cebf
Ensure proper env care during memo short circuiting
2023-01-31 22:54:53 -05:00
967ec0feb4
After too much procrastination trying a bunch of parentheses editing plugins (parinfer the most interesting), did a bit of actual work and refactoring where the compiled function is checked for and inserted using both the pre and post partial-eval hash, and the analysis functions are pulled out together into a single meta analysis
2023-01-31 00:59:16 -05:00
c20ba09179
clean up compile more, going straight to pulling out of memo, removing compile-body-part, removing now-unecessary recursion checking (for ping-pong between partial-eval and compile-inner because of how we now check memo and normalize), and finally add all tests to new_test.sh
2023-01-25 02:22:10 -05:00
7f9f419a23
Remove rest of comb rec_hash tracking
2023-01-22 00:41:29 -05:00
5a4cb4b40b
Cleanup, remove some of the rec_hashes
2023-01-22 00:07:39 -05:00
dff6730dd9
Got partial-eval during compile working
2023-01-21 17:55:55 -05:00
0ed097b5b0
mix old and unstable
2023-01-16 22:14:41 -05:00
95f6dd867c
Koka needs old emscripten sigh
2023-01-16 19:01:50 -05:00
94ae60f9d1
Merge branch 'master' of github.com:Limvot/kraken
2023-01-16 18:55:54 -05:00
b2f0b5f1dd
Notes on todo
2023-01-16 18:55:52 -05:00
18b901b2f1
Start version experiments to narrow down if Koka or Emscripten is the problem
2023-01-16 18:54:34 -05:00
54f1092a2a
Old sketches, start simpler benchmarks setup with Koka WASM
2023-01-16 15:32:45 -05:00
Sharjeel Khan
29a0266c67
Fixed deriv
2022-11-11 05:42:17 -05:00
Sharjeel Khan
d440260d1c
Fixed cfold
2022-11-11 04:01:08 -05:00
Sharjeel Khan
4eb42d48f9
New Newlisps cfold
2022-11-11 03:53:13 -05:00
Sharjeel Khan
85f46f0e8d
Test
2022-11-11 00:20:36 -05:00
Sharjeel Khan
2146ecd761
Commit current things
2022-11-11 00:20:05 -05:00
Sharjeel Khan
70f151222e
Picolisp two examples
2022-11-11 00:19:32 -05:00
Nathan Braswell
8638086480
Added ability to turn off 4 major optimizations, integrated into benchmarks now focused only on Kraken (and NewLisp)
2022-11-10 02:10:56 -05:00
Sharjeel Khan
a7248daca0
Added new benches and will add the rest of them
2022-11-08 22:49:43 -05:00
Nathan Braswell
7eb8465f64
First maybe working version of borrow?. Now need to figure out exactly how to integrate into compiler
2022-07-19 23:42:24 -04:00
Nathan Braswell
82f652b178
first paper data
2022-07-09 13:58:11 -04:00
Nathan Braswell
7145f8865e
benchmark improvements
2022-07-07 13:10:14 -04:00
Nathan Braswell
196b0865c4
Benchmark adjustments and plotting
2022-07-06 21:26:10 -04:00
Nathan Braswell
e95feb9309
tiny perceus fix, but mostly wrote match+rb-tree f-expr/macro for newLisp and benchmarked it. kraken 5-15x faster than newlisp-rbtree-macro, 137x faster than newlisp-rbtree-fexpr. I was suprised at first that the macro and fexpr versions were so close at 8.7x (while interpreted kraken rbtree is 50,000x slower), but after thinking about it it makes sense - the Kraken version has slowdown exponential in the multiple levels of f-exprs ('match' is an fexpr, but then so is 'let' and 'and' and 'lambda'), whereas the newLisp f-expr runtime expands to fast builtins ('let', 'and', etc). And all that exponential f-expr slowdown gets compiled away in Kraken!
2022-07-06 02:34:48 -04:00
Nathan Braswell
2cdfa4dbed
Mostly sketch out borrow?, just have to thread through perceus data and figure out if we want to output a combined version to the user with a common entry point. Fixed a pseudo-perceus cond ordering issue as well, and now makes pseudo-perceus store if a symbol access is an owning sink - but this has a bug somewhere in Pseudo-Perceus causing this to error for now
2022-07-05 02:51:48 -04:00
Nathan Braswell
131824b230
First impl of Pseudo-Perceus, added veval case to infer_types, modified how lookups work on s_env, now lookups into enclosing envs don't reify current environments by starting at the outer env after climbing out of the inlined functions + main function
2022-07-05 01:41:58 -04:00
Nathan Braswell
15bf38db2b
Implement the first scaffolding for pseudo_perceus, support operatives in lapply (but not yet applicates in compiled vapply). Means (foldl and true (array true true false)) actually works now, for the paper!
2022-07-04 00:47:17 -04:00
Nathan Braswell
a64c67571f
small refactor around parameter array creation, then used it to inline calls to 'array' (which are almost no-ops, just returning their parameter array)
2022-07-03 20:29:53 -04:00
Nathan Braswell
b1817dfdc3
Add newLisp, our second interpreted lisp implementation that supports f-exprs today, (not in NixOS, but pretty easy to build, so inlined deriviation right in flake.nix). Implemented simple fib/fib-let test.
2022-07-03 00:50:00 -04:00
Nathan Braswell
ace81e362e
Inline array? and len, add PicoLisp fib & fib-let benchmarks
2022-07-02 23:49:47 -04:00
Nathan Braswell
07a25c8c59
Infer types of full idx expressions now, fix bug with shadowed inlined parameters, inline calls to idx where the type of the indexed expression is fully inferred (array+len) and the idx is a constant. Strong speedups
2022-07-02 19:00:20 -04:00
Nathan Braswell
b70e317e75
Fixed it! Missed converting the inline call to the inline predicate to use id instead of env. Then exposed and fixed bugs with the inline part of infer types
2022-07-02 17:10:16 -04:00