Commit Graph

735 Commits

Author SHA1 Message Date
Simon Forman cdec813b24 I had to model it in Python
before writing it in OCaml.
2022-09-28 18:21:13 -07:00
Simon Forman 4200c6708e Improve compiling of step combinator. 2022-09-28 18:18:20 -07:00
Simon Forman 263ed2ee87 Initial outline for a talk on Joy. 2022-09-28 18:16:45 -07:00
Simon Forman 8159e102d3 coms, swap 2022-09-24 21:19:35 -07:00
Simon Forman d94153583c Comparison operations. 2022-09-24 21:00:45 -07:00
Simon Forman c591bf4138 branch, dip, i, loop
The core combinators (except fork).
2022-09-24 20:45:06 -07:00
Simon Forman 3ecd7ab595 Minor cleanup. 2022-09-24 19:39:10 -07:00
Simon Forman 5e786db63f Simple REPL.
Still very crude, and exceptions are not caught, but it works.
2022-09-24 19:33:29 -07:00
Simon Forman 10cdba844b Minor cleanup. 2022-09-24 14:54:07 -07:00
Simon Forman d99d9ee8aa concat
Ocaml's match is very powerful, respect, but if I want more precise
error messages (that conform to the joytest suite) then the extra
utility functions must be implemented and employed.

After that it's definition loading and the main REPL loop and I think
that's it, eh?
2022-09-24 14:29:03 -07:00
Simon Forman 07f47a3b7a autoformat 2022-09-24 14:16:44 -07:00
Simon Forman 0905cdc0da clear 2022-09-24 14:16:20 -07:00
Simon Forman 813502532b Autoformat. 2022-09-24 13:13:44 -07:00
Simon Forman 977928362c Evaluation is working.
It's all downhill from here, like in skiing!
2022-09-24 13:13:03 -07:00
Simon Forman 5db538cc5c Eval symbols... 2022-09-24 12:54:46 -07:00
Simon Forman c7966f7ac8 Working towards interpretation. 2022-09-24 12:44:20 -07:00
Simon Forman 754fd1d1dc Nice and clean.
I wonder what Ocaml programmers would think of this code?
2022-09-24 12:02:00 -07:00
Simon Forman 9e2d148fbf Parser.
Mighty battle.
2022-09-24 11:00:19 -07:00
Simon Forman 0d88895ead Order is preserved. 2022-09-24 09:01:16 -07:00
Simon Forman c96cd6e296 A couple of little comments. 2022-09-24 08:59:38 -07:00
Simon Forman 4ff78dd65c Parse tokens into joy_list.
That seemed a lot harder than it should have been...
2022-09-24 08:54:04 -07:00
Simon Forman 54d287bc32 A start of parsing tokens. 2022-09-23 19:35:15 -07:00
Simon Forman 97f715a10d Formatting. 2022-09-23 17:47:31 -07:00
Simon Forman f45d070856 I think I got the tokenizer right. 2022-09-23 17:31:16 -07:00
Simon Forman 4d7ed83238 So that's mutual recursion in Ocaml?
I like it.  Just change "let" to "and" and you're good-to-go.
2022-09-23 08:59:06 -07:00
Simon Forman d717b594c4 Ignoring _build. 2022-09-23 08:54:37 -07:00
Simon Forman d0477eb516 Ignore _build dirs. 2022-09-23 08:53:39 -07:00
Simon Forman 64d4a42978 autoformat 2022-09-23 08:38:17 -07:00
Simon Forman c76ae9979d Ocaml FTW! 2022-09-23 08:37:04 -07:00
Simon Forman 8cb04fc72d At this point...
...I'm just relearning C semantics.  (And they are garbage, as is widely
known.)

I don't think there's much point to this (at the moment) because I don't
want to relearn C (at the moment) and Nim is available (at the moment.)

Really, I'm trying to do away with the entire relationship of C et. al.
to the underlying machine.  (For instance, Nim gives you a much nicer
relationship, without the vast distance that, say, Python imposes.)  I
should really look at other compiled languages, like Ocaml or Julia.
2022-09-22 20:43:25 -07:00
Simon Forman ae864909ee Create an int and add ints. 2022-09-22 20:08:24 -07:00
Simon Forman 5caa685bab Try using GC_register_finalizer? 2022-09-22 19:34:57 -07:00
Simon Forman 5ceab61ca1 Maybe this is the right thing to do?
https://stackoverflow.com/questions/59489221/using-the-gmp-library-with-boehms-garbage-collector
2022-09-22 19:00:40 -07:00
Simon Forman 813c5c0a23 What would a little C Joy look like?
Let's use GMP for ints and Boehm GC.
2022-09-22 17:26:28 -07:00
Simon Forman 92338037e7 Wait for both results together.
If one causes an error before the other is finished SIGKILL the other
job.  (I do not know if this will kill the sub-tasks if any.  The Python
docs say that with terminate() "descendant processes of the process will
not be terminated – they will simply become orphaned." but it doesn't
say whether that's true with kill().
2022-09-22 13:20:30 -07:00
Simon Forman 0904bad81b Capture and fwd exceptions in subforks.
(Should there be only one subtask?  Do the other quote in the main
proc?)
2022-09-22 11:41:16 -07:00
Simon Forman 50293908d9 Let's play with more cores. 2022-09-22 09:13:11 -07:00
Simon Forman caa4461217 Basic system, incomplete.
Still needs the rest of the core functions and defs.
Could read defs from a file at compile-time?
Integer math?  Boolean ops?  Just type inference and maybe compiling?
2022-09-20 17:56:18 -07:00
Simon Forman b49e7458c2 Parse the tokens into a Joy expression. 2022-09-20 17:14:41 -07:00
Simon Forman c8f67f02f9 Parser in GNU Prolog.
Wonky handling of UTF_8 blankspace.
2022-09-20 16:29:35 -07:00
Simon Forman 3f4e9d9fe2 The whole thing is kind of a mess. 2022-09-20 14:22:47 -07:00
Simon Forman d080cd20c7 Let simple joy be joy.
Still to do: clear away the rest of the old cruft.
2022-09-20 11:12:59 -07:00
Simon Forman 2367191918 Remove cruft. 2022-09-20 11:12:28 -07:00
Simon Forman 283832c649 Minor cleanup. 2022-09-20 10:20:58 -07:00
Simon Forman a6ff9857d2 Add trace word back in.
Remove pretty_print module.

Still to do: update Nim implementation with a trace function. ;)
2022-09-20 10:19:45 -07:00
Simon Forman 36a9967e6c Fix typo in hyperlink in README. 2022-09-19 19:43:34 -07:00
Simon Forman fab172daf4 Minor cleanup. 2022-09-19 13:25:09 -07:00
Simon Forman 668040f6c6 Add a flowchart for the interpreter.
Using PlantUML.
2022-09-19 13:22:31 -07:00
Simon Forman b2a1f40155 Fixed bug in appN
while updating some Jupyter notebooks with the Joypy kernel.
2022-09-16 20:49:46 -07:00
Simon Forman 3d1dc6232e Remove old docs. 2022-09-16 17:54:42 -07:00