Commit Graph

  • 77c7a05a28 Hopefully 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
  • 94e2d62a10 Ok, 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
  • 99926cdb7c check_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
  • 8a1e92cd70 Make 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
  • 6602ff3151 The 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
  • 49c5e9da2f Added the lazy eval function thing. Nathan Braswell 2022-01-10 01:26:56 -05:00
  • 74a7cb8a20 Don'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
  • 025b149c28 Implemented 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
  • 6ef60c4cc6 I 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
  • b559bfdf90 Add 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
  • 1aa9ca972a Fix & 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
  • d1fc4e5d66 Fix 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
  • 48cab3cbdf Found 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
  • 6816742fd6 Parse comments Nathan Braswell 2022-01-04 00:14:26 -05:00
  • d2d4b15afa Found 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
  • 321157c311 Added 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
  • 98bdf32ad8 Not 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
  • cf72232282 Implement string escapes Nathan Braswell 2022-01-03 16:15:30 -05:00
  • 6f73be4777 Add ['open parent_fd path <comb(new_fd error_code)>] monad Nathan Braswell 2022-01-03 14:02:07 -05:00
  • e633a43f2e Parsing strings, but naively without escapes yet Nathan Braswell 2022-01-03 02:17:52 -05:00
  • 26e9a92f74 Can parse arrays! Nathan Braswell 2022-01-03 01:44:14 -05:00
  • f8d2e17c90 Started 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
  • a3ee9291c6 Implement comparison operators = != < <= >= > Nathan Braswell 2022-01-02 00:16:12 -05:00
  • 6831e76bf3 Add 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
  • 2b08daccd1 Implemented the missing array methods (and some fixes) concat, len, idx, slice Nathan Braswell 2022-01-01 15:14:47 -05:00
  • c530405376 Added << and >> Nathan Braswell 2022-01-01 12:38:49 -05:00
  • 08e3292d92 Added all of the predicate functions Nathan Braswell 2021-12-31 14:08:29 -05:00
  • f1d2e0dce2 Add 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
  • ad38628915 Add 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
  • 7b7bccb5dd Implemented 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
  • accad76fa9 Add place to handle (calls unreachable for now) for non wrap-1 combiners Nathan Braswell 2021-12-29 14:38:36 -05:00
  • 6e5a372f07 Add compilation of closures as code Nathan Braswell 2021-12-28 19:14:02 -05:00
  • 2318b958e8 Implemented partially variadic functions! Remaining: functions in code, refcounting, stdlib Nathan Braswell 2021-12-28 17:34:17 -05:00
  • a4a033a72e Implemented function calls! Nathan Braswell 2021-12-28 14:24:54 -05:00
  • 78ba54879a Error 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
  • 481cac5070 Add 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
  • 021cae4eea Implemented Env creation & symbol lookup Nathan Braswell 2021-12-26 22:25:53 -05:00
  • 4d41c0b535 print monad execution impl with first function call! Nathan Braswell 2021-12-25 23:39:25 -05:00
  • 8dadf07759 Add missing funcs, add offset support to wasm load/store, start in on monad impl Nathan Braswell 2021-12-25 21:01:58 -05:00
  • f376a75f4c Stubs for compiling function body Nathan Braswell 2021-12-25 01:38:49 -05:00
  • 5097a11bb6 More work on compiling comb, adding wrap level to comb, placeholders for all builtins, memoization Nathan Braswell 2021-12-24 17:26:41 -05:00
  • 69b87cbe72 Started sketching functions, swaped env's representation around Nathan Braswell 2021-12-22 23:42:25 -05:00
  • eade335e86 off by one, of course Nathan Braswell 2021-12-18 14:57:52 -05:00
  • 75536f6fb9 Starting compilation / printing of builtin combiners Nathan Braswell 2021-12-18 14:55:54 -05:00
  • c4c2d73469 Compilation 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
  • 3538de9498 Add in compiling and printing of array values Nathan Braswell 2021-12-12 15:32:52 -05:00
  • f865bccdda Add support for negative integers Nathan Braswell 2021-12-08 22:35:44 -05:00
  • b724493926 Add support for (positive) integer printing, not just a single digit! Nathan Braswell 2021-12-08 01:22:18 -05:00
  • 7dfe4e0d7c Add 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
  • b3dfd577cd String 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
  • 025239947f Add 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
  • 25615815b2 bugfixes func type splitter, add more ins, trivial malloc and free, start working on print. Nathan Braswell 2021-11-29 01:51:54 -05:00
  • f7f425b32f Ultra 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
  • 505dc46998 Add 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
  • de8073d1fc Actually make the demo runnable Nathan Braswell 2021-11-27 22:13:07 -05:00
  • 4956596f30 Port (slightly hackilly) the rest of wasm.kp Nathan Braswell 2021-11-27 21:49:41 -05:00
  • 65c9d0b486 Port 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
  • e0244d0489 Hay recursion works! Nathan Braswell 2021-11-26 12:31:39 -05:00
  • 8ab15fff41 Add hashing (interestingly, arbitrary long hashes with Scheme's infinite precision) Nathan Braswell 2021-11-25 23:57:23 -05:00
  • a036936e3b It 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
  • f3525def87 Fix, some more tests. Need to figure out the prim comb things Nathan Braswell 2021-11-23 22:49:54 -05:00
  • 60cd7b1ffa First Vau call working! Nathan Braswell 2021-11-23 22:16:24 -05:00
  • 96ea2fad8d Port 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
  • 7c32c3811a Fix indexing bug, first partial eval! Nathan Braswell 2021-11-22 01:46:59 -05:00
  • d26fcee9b6 Port more, start fixing bugs. Something weird with slice/drop/take Nathan Braswell 2021-11-22 01:28:05 -05:00
  • b3261f3db0 Bunch more ported, including all of the actual partial_eval function Nathan Braswell 2021-11-20 01:13:22 -05:00
  • 551e60cfe1 Destructuring lambda, fix for compiling Nathan Braswell 2021-11-19 01:08:27 -05:00
  • d4ff61ade5 Some work from previously, and also now an implementation of destructuring let Nathan Braswell 2021-11-16 00:15:53 -05:00
  • 627ccb4aa0 Begin 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
  • 437c2c7166 Some 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
  • c0a07b54ce Fixed up! Nathan Braswell 2021-10-19 02:45:56 -04:00
  • e0c4366771 With 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
  • 92ac879c6d Finally 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
  • 923c4565fb prep for useing de bruijn Nathan Braswell 2021-10-17 17:39:38 -04:00
  • e322fc7cd7 Finally 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
  • 64c793d9f4 Flesh 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
  • ec9083a958 Fixed bug with y, but still not partially evaluating the lets with later :/ Nathan Braswell 2021-09-12 01:37:07 -04:00
  • f89b21420a Ok, figured out why let5 is failing and wrote down a plan of attack Nathan Braswell 2021-09-07 00:06:19 -04:00
  • 12271ff27c Bug 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
  • 873e7c4244 Working through the bugs, got the first few working Nathan Braswell 2021-09-06 12:29:05 -04:00
  • 6a47375d28 Ok, 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
  • 49d5a196aa 2 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
  • b44ff104fb Implement variadic paremters, found additional bug for array, still need to handle recursion too Nathan Braswell 2021-08-26 01:03:36 -04:00
  • 26e9c5a41f Fix 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
  • 649e0107d4 And 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
  • 634812cea4 Got it working! Nathan Braswell 2021-08-23 23:43:47 -04:00
  • 2cd85a552d Some 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
  • 7700f0b709 FIXED THE BUG! Nathan Braswell 2021-08-22 13:03:33 -04:00
  • c9e2e4659b Completely 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
  • 04f1c76bd7 Factored out parameter eval for some combinators and then added combiner? and env? Nathan Braswell 2021-08-17 20:31:07 -04:00
  • 47d5149400 Implement smart cond partial-eval Nathan Braswell 2021-08-17 18:17:42 -04:00
  • 772b984de0 Ok, more bugfixes & comments, and got eval working! Nathan Braswell 2021-08-17 01:19:38 -04:00
  • e8747ef899 Bugfix and improvment, eval one works even though eval isn't implemented yet! Nathan Braswell 2021-08-16 11:54:05 -04:00
  • 62a238e041 Added wrap/unwrap and a vau test that uses wrap! Nathan Braswell 2021-08-16 01:20:10 -04:00
  • 550565a235 More vau usage working Nathan Braswell 2021-08-16 00:37:56 -04:00
  • 05092cba76 First vau-involved partial evals working! Nathan Braswell 2021-08-15 01:27:53 -04:00
  • b3c02c82b3 Create 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
  • f09962ddc4 Add 2 parameter vau that discards dynamic env Nathan Braswell 2021-08-10 23:26:22 -04:00
  • 95b37da44e Ok, I think this is a correct? skeleton, implemented as much as I did yesterday Nathan Braswell 2021-08-10 22:56:12 -04:00
  • e1fa65deaf Starting 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