77c7a05a28Hopefully fixed the new exponential behavior by piggybacking on a now more accurate needed-for-eval tracking (that hopefully didn't introduce it's own exponential behavior but might have), and other fixes. We still have the same weird problem though
Nathan Braswell
2022-01-23 14:16:07 -05:00
94e2d62a10Ok, finished fixing check_for_env_id_in_result, now works up to before. Weirdly, we're now just back to the previous error, and I think I might have reintroduced exponential behavior with the env_id searching
Nathan Braswell
2022-01-22 00:56:02 -05:00
99926cdb7ccheck_for_env_id_in_result fixed, I had accidentally left it unimplemented. Bug with envs escaping when they weren't real fixed, and most everything works, but compiling lapply fails now
Nathan Braswell
2022-01-22 00:19:10 -05:00
8a1e92cd70Make partial_eval_helper fail gracefully as well, as per previous explanation of why it's required (called from compiler to opt eval side of maybe only vau calls). Gets farther than before, but has a new error now for compiling Y that I don't have time to debug tonight
Nathan Braswell
2022-01-20 00:32:15 -05:00
6602ff3151The refactor has either caught up, or is close, and is much faster. Need to make partial_eval_helper able to fail though, so that it can fail in the now fallible compiler.
Nathan Braswell
2022-01-18 00:36:42 -05:00
49c5e9da2fAdded the lazy eval function thing.
Nathan Braswell
2022-01-10 01:26:56 -05:00
74a7cb8a20Don't repeatedly evaluate params in different cases - I thought this would be a larger optimization, but it seemed more like 1%...
Nathan Braswell
2022-01-09 00:45:16 -05:00
025b149c28Implemented each marked node carrying the de Bruijn indicies that it needs to continue evauluating, but now it takes the exact same amount of time that it used to And I think I've realized why - it's being too conservative about what it actually needs to be a value and includes the entire environment chain, which pretty much means anytime it would have been re-evaluated because a parent function was called or re-evaluated it will also be re-evaluated, and none of this changes anything I think I can change it to more intelligently pull what's necessary based on what's used in the body of the function instead and get the optimization to work as I expected - fingers crossed
Nathan Braswell
2022-01-09 00:17:57 -05:00
6ef60c4cc6I belive I fixed the bug revealed by the let definition - it was a similar thing where <comb>s were counted as values even if there were fake envs inside, and then thouse fake envs could be moved inside another env_stack and then later resolve to a wrong env, or at lest I think that's what was happening. The let test takes too long to run now - I killed it at 20 minutes and 48GB of RAM taken. Given that, it's now time to move on towards optimization
Nathan Braswell
2022-01-07 22:08:29 -05:00
b559bfdf90Add note about compiling params meant for Vau & additional partial eval for that case to help in cases where it's legitimate. Eventually it should handle errors gracefully, but non-gracefully can be good enough for now.
Nathan Braswell
2022-01-05 22:58:26 -05:00
1aa9ca972aFix & and error checking for compiling environments as code & value, add a todo for things deferred
Nathan Braswell
2022-01-05 01:05:16 -05:00
d1fc4e5d66Fix another bug where things like (<comb0> <somecomb fake env>) wasn't reevaluating somecomb and fixing up the fake env on calls because comb0 has wrap level 0. In fact, it should still be partially evaluated again, just not stripped. This only comes up in slightly nontrivial examples because there's a good bit of nesting
Nathan Braswell
2022-01-04 23:37:57 -05:00
48cab3cbdfFound the partial eval bug - a comb with a non-real environment doesn't count as later? which means that array values with them get skipped and not partial evaled further, which means they don't get further refined. I need to think through exactly which definition of later? is correct, or if it should be two concepts, because one of the two uses or the definition must change. For now just commented out the array value return and has it always re-traverse
Nathan Braswell
2022-01-04 01:19:41 -05:00
d2d4b15afaFound it - print was dropping it's parameter even though the comment above it *clearly* said that it didn't
Nathan Braswell
2022-01-03 22:22:34 -05:00
321157c311Added symbol parsing and ' syntax sugar parsing, but found a ref counting problem (unrelated to parsing, though that did expose it). Tracking down the bug now
Nathan Braswell
2022-01-03 22:03:32 -05:00
98bdf32ad8Not a lot of error checking for mixed or confusing bases, but did add negative, hex, and binary integers
Nathan Braswell
2022-01-03 19:03:36 -05:00
f8d2e17c90Started working on parser, can now parse true and false. Also, I realized that most of the array functions have to be adapted to work with strings too (idx, concat, slice - maybe len already works?)
Nathan Braswell
2022-01-02 23:37:45 -05:00
6831e76bf3Add bxor and bnot (rename band bor), remove and and or, add wrap, unwrap, get-text, str-to-symbol
Nathan Braswell
2022-01-01 16:42:57 -05:00
2b08daccd1Implemented the missing array methods (and some fixes) concat, len, idx, slice
Nathan Braswell
2022-01-01 15:14:47 -05:00
c530405376Added << and >>
Nathan Braswell
2022-01-01 12:38:49 -05:00
08e3292d92Added all of the predicate functions
Nathan Braswell
2021-12-31 14:08:29 -05:00
f1d2e0dce2Add rough version of log, error, str, ptr-equality-rough versions of = and !=, and actual versions for + - * / % & |
Nathan Braswell
2021-12-31 01:28:31 -05:00
ad38628915Add inlining of cond, which sould be the only non-wrapped vau left in normal programs currently. Started implementation of = to test cond (just ptr equality for now) and it works!
Nathan Braswell
2021-12-30 17:23:15 -05:00
7b7bccb5ddImplemented unoptimized and naive version of what will become Perceus reference counting (functions hold the env till the end, and the env means everything is borrowed, so all params are dup'd into function calls etc.), along with a very unoptimzied and naive malloc&free (single singlely linked list of blocks that are wasm page sized (4k))
Nathan Braswell
2021-12-30 01:04:07 -05:00
accad76fa9Add place to handle (calls unreachable for now) for non wrap-1 combiners
Nathan Braswell
2021-12-29 14:38:36 -05:00
6e5a372f07Add compilation of closures as code
Nathan Braswell
2021-12-28 19:14:02 -05:00
a4a033a72eImplemented function calls!
Nathan Braswell
2021-12-28 14:24:54 -05:00
78ba54879aError checking for monads and number of parameters. Implemented fully variadic, partially variadic deserves a bit more thought to see if it can be implemented efficiently
Nathan Braswell
2021-12-28 00:20:13 -05:00
481cac5070Add block length to memory header (joining the refcount), add read & write monand impls. Big todo: typechecks in monad impl, length checks for compiled functions, compiling calls, then all the stdlib.
Nathan Braswell
2021-12-27 01:35:15 -05:00
4d41c0b535print monad execution impl with first function call!
Nathan Braswell
2021-12-25 23:39:25 -05:00
8dadf07759Add missing funcs, add offset support to wasm load/store, start in on monad impl
Nathan Braswell
2021-12-25 21:01:58 -05:00
f376a75f4cStubs for compiling function body
Nathan Braswell
2021-12-25 01:38:49 -05:00
5097a11bb6More work on compiling comb, adding wrap level to comb, placeholders for all builtins, memoization
Nathan Braswell
2021-12-24 17:26:41 -05:00
c4c2d73469Compilation and pretty-printing of environments. Still need to look at exactly why the additive length constant for the upper-env is 5 when I'm less tired
Nathan Braswell
2021-12-14 00:50:48 -05:00
3538de9498Add in compiling and printing of array values
Nathan Braswell
2021-12-12 15:32:52 -05:00
f865bccddaAdd support for negative integers
Nathan Braswell
2021-12-08 22:35:44 -05:00
b724493926Add support for (positive) integer printing, not just a single digit!
Nathan Braswell
2021-12-08 01:22:18 -05:00
7dfe4e0d7cAdd symbol emitting, rearrange encoding to make things nicer, implement more sophisticated to string setup with length etc
Nathan Braswell
2021-12-06 01:58:38 -05:00
b3dfd577cdString constants working, which involved more work than expected. Lots of fixes for strings, LEB128, etc, and making the top level section func return arrays so that I can programatically generate a concatted array of them and insert it no problem. Technically, you can now compile Hello, World! for Kraken, since it prints the string constant you compile :D
Nathan Braswell
2021-12-04 01:11:55 -05:00
025239947fAdd i32 and i64 condition operations, hex escapes to data strings, and add ability to print out true and false to generated code
Nathan Braswell
2021-12-02 00:24:40 -05:00
25615815b2bugfixes func type splitter, add more ins, trivial malloc and free, start working on print.
Nathan Braswell
2021-11-29 01:51:54 -05:00
f7f425b32fUltra tiny skeleton starting compiler - will read, trivially partially evaluate, then near trivally generate wasm that prints a single digit literal
Nathan Braswell
2021-11-28 01:25:46 -05:00
505dc46998Add an extra level of lambda and pass around name dict in order to get around not having vau (+ quotation on symbols when referenced)
Nathan Braswell
2021-11-28 00:57:35 -05:00
de8073d1fcActually make the demo runnable
Nathan Braswell
2021-11-27 22:13:07 -05:00
4956596f30Port (slightly hackilly) the rest of wasm.kp
Nathan Braswell
2021-11-27 21:49:41 -05:00
65c9d0b486Port basic (non vau syntax coolness) WASM emiting code, can output empty file at least (haven't tested more complex yet, but the code is there)
Nathan Braswell
2021-11-26 23:28:06 -05:00
8ab15fff41Add hashing (interestingly, arbitrary long hashes with Scheme's infinite precision)
Nathan Braswell
2021-11-25 23:57:23 -05:00
a036936e3bIt all works! I belive all test cases from the prior partial_eval.kp work in partial_eval.csc now :D
Nathan Braswell
2021-11-24 00:45:44 -05:00
f3525def87Fix, some more tests. Need to figure out the prim comb things
Nathan Braswell
2021-11-23 22:49:54 -05:00
96ea2fad8dPort over most of the rest, some left commented out. Need to figure out how we actually want to handle prim_combs putting themselves in the output. This comes up a lot with give_up_eval_params. Also, '() = nil counts as true for if in Scheme, need to figure that out :/
Nathan Braswell
2021-11-23 01:54:20 -05:00
b3261f3db0Bunch more ported, including all of the actual partial_eval function
Nathan Braswell
2021-11-20 01:13:22 -05:00
551e60cfe1Destructuring lambda, fix for compiling
Nathan Braswell
2021-11-19 01:08:27 -05:00
d4ff61ade5Some work from previously, and also now an implementation of destructuring let
Nathan Braswell
2021-11-16 00:15:53 -05:00
627ccb4aa0Begin port of partial_eval to Chicken Scheme, with a bunch of stuff to define a vaguely kraken-like environment in scheme
Nathan Braswell
2021-11-09 00:35:58 -05:00
437c2c7166Some bugfixes, a small recursive test (that currently loops forever), and the sierpinski triangle from a while back I forgot to commit
Nathan Braswell
2021-11-07 00:44:18 -04:00
e0c4366771With some bugfixes, sucessfully got let4.7 working, which is like let5 but written in macro style! Stiil need to finish up strip for the cases like let5 that we can't finish for now.
Nathan Braswell
2021-10-19 02:26:19 -04:00
92ac879c6dFinally fixed let_test4. Let_test5 will require more thinking to see if it's even possible, and what macro like means etc
Nathan Braswell
2021-10-18 00:46:39 -04:00
923c4565fbprep for useing de bruijn
Nathan Braswell
2021-10-17 17:39:38 -04:00
e322fc7cd7Finally correct again, but with the latest safety fixes no longer even evaluates the easier lets. The issue is that we're not executing combiners that use de if we don't have a real de (normally the enclosing function's se) because that's subject to the alpha-renaming problem. de is essentially a parameter, which is subtle and easy to miss when looking at the safety conditions, and indeed I did miss it earlier
Nathan Braswell
2021-10-15 23:10:58 -04:00
64c793d9f4Flesh out the closes over test. Still doesnt' partial eval like we want, need to investigate why - have idea for specalizing function but do have to be careful with actual_function
Nathan Braswell
2021-09-14 02:01:31 -04:00
ec9083a958Fixed bug with y, but still not partially evaluating the lets with later :/
Nathan Braswell
2021-09-12 01:37:07 -04:00
f89b21420aOk, figured out why let5 is failing and wrote down a plan of attack
Nathan Braswell
2021-09-07 00:06:19 -04:00
12271ff27cBug fixed and back to state before refactor/rewrite. Need to get that darn let5 working now! That's why we did this
Nathan Braswell
2021-09-06 23:00:04 -04:00
873e7c4244Working through the bugs, got the first few working
Nathan Braswell
2021-09-06 12:29:05 -04:00
6a47375d28Ok, refactored the whole thing! It's now always operating on marked values with a mark step at the beginning, which should solve our stripping problems. It parses, but crashes, but it's 3am, so I'm saving and going to bed
Nathan Braswell
2021-09-06 03:00:33 -04:00
49d5a196aa2 steps forward, 1 step back - I have arrays (and I think varargs) working, but let5_test is now not partial evaling as far as it should because of my fix. Detailed explanation in the comments, but it looks like we are going to have to insert that eval_strip hack, or somesuch
Nathan Braswell
2021-09-05 00:25:33 -04:00
b44ff104fbImplement variadic paremters, found additional bug for array, still need to handle recursion too
Nathan Braswell
2021-08-26 01:03:36 -04:00
26e9c5a41fFix a bug in eval strip not actually stripping in the proper eval way - f there's a later anywhere in there, it has to desist, which is now implemented. Added do tests - we have to add support for & params, which I had forgotten, and I belive it now loops infinately because it tries to partially evaluate a recursive function!
Nathan Braswell
2021-08-25 01:32:24 -04:00
649e0107d4And lambda is working nicely too, once I added support for val to the function call evaluaator (just looking it up in comb_to_mark_map)
Nathan Braswell
2021-08-24 00:33:29 -04:00
634812cea4Got it working!
Nathan Braswell
2021-08-23 23:43:47 -04:00
2cd85a552dSome more tests and cleanup, looks like we're going to have to do either a try-eval thing or CPS-style partial evaluator, which I'm reading up on
Nathan Braswell
2021-08-22 20:27:48 -04:00
7700f0b709FIXED THE BUG!
Nathan Braswell
2021-08-22 13:03:33 -04:00
c9e2e4659bCompletely untested, but added partial eval for all array methods and and/or - this is pretty much everything! We don't bother with meta or error/recover right now though
Nathan Braswell
2021-08-17 23:09:42 -04:00
04f1c76bd7Factored out parameter eval for some combinators and then added combiner? and env?
Nathan Braswell
2021-08-17 20:31:07 -04:00
b3c02c82b3Create and pass through comb_to_mark_map to allow us to re-mark stripped expressions so we can evaluate them mutliple times, etc, etc
Nathan Braswell
2021-08-11 23:30:49 -04:00
95b37da44eOk, I think this is a correct? skeleton, implemented as much as I did yesterday
Nathan Braswell
2021-08-10 22:56:12 -04:00
e1fa65deafStarting work on a partial evaluator - just sketching for now, needs a bunch of work and likely some foundational changes
Nathan Braswell
2021-08-09 23:58:40 -04:00