Commit Graph

528 Commits

Author SHA1 Message Date
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 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 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
Simon Forman 77b1638d64 Check for minus before converting to int.
BigInts converts "-" to 0.  This happens in the parser before you get to
the evaluator.
2022-09-14 21:09:20 -07:00
Simon Forman 9d7a2a8fcb Minor cleanup, subtraction.
Testing with the joytest test suite revealed that I had forgotten to
implement subtraction.  This also unconvered a (maybe) bug in the
BigInts package where it converts "-" to zero.

https://git.sr.ht/~sforman/joytest

https://github.com/nim-lang/bigints/issues/116
2022-09-14 21:01:50 -07:00
Simon Forman 39008b351b Let simplejoy be joy.
Simple pleasures are the best.
2022-09-14 20:15:25 -07:00
Simon Forman f5265a2287 Remove old code. 2022-09-14 20:14:34 -07:00
Simon Forman 3f7adea56f Read defs.txt at compile-time.
I'd like to build the dict datastructure at compile-time too but I'm not
going to figure that out tonight.  It's enough that the defs are
embedded in the executable.  (You can see them with the strings utility.)
2022-09-14 20:08:40 -07:00
Simon Forman 30c57c180b basis complete 2022-09-14 18:51:58 -07:00
Simon Forman 0f79f089a6 dup, first, i, loop 2022-09-14 15:48:25 -07:00
Simon Forman f86e1b2e7c dip and cons 2022-09-14 15:04:07 -07:00
Simon Forman 129a5f776d Rewrite expression to use list instead of list node. 2022-09-14 14:36:29 -07:00
Simon Forman 9e5d699b0f Minor cleanup. 2022-09-14 13:31:44 -07:00
Simon Forman 3d199c1106 Reuse as_list(). 2022-09-14 11:24:56 -07:00
Simon Forman 9f04aa97e2 Cleaning up the code. 2022-09-14 10:49:13 -07:00
Simon Forman 6eb71b3c6e Nimpretty reformat. Two-space indentation. 2022-09-14 09:49:33 -07:00
Simon Forman 6b07d7d30b Minor cleanup 2022-09-14 09:46:31 -07:00
Simon Forman 94929e8520 Let's pile Nim code into one file too, why not? 2022-09-14 09:45:34 -07:00
Simon Forman aad2da35cf divmod
We don't need floor if we have only ints.

Id is too easy as a definition.

divmod is cool.
2022-09-12 16:38:14 -07:00
Simon Forman 1e3b2f76bb step, times 2022-09-12 16:07:21 -07:00
Simon Forman 8778f12b68 dipd, dipdd, cmp 2022-09-12 15:17:32 -07:00
Simon Forman f640f437f1 cond 2022-09-12 13:50:40 -07:00
Simon Forman 77bd7790f5 updated defs via make 2022-09-12 13:50:07 -07:00
Simon Forman 8ca20ec238 dunno what that was 2022-09-12 13:49:38 -07:00
Simon Forman a2cabe2189 Bringing over some of the "upgrades". 2 2022-09-11 14:07:55 -07:00
Simon Forman 4bd32f2c0b Bringing over some of the "upgrades". 2022-09-11 13:57:19 -07:00
Simon Forman cb553a1a65 id func 2022-09-11 11:46:10 -07:00
Simon Forman f7315291a9 clearing out cruft 2022-09-11 11:45:46 -07:00
Simon Forman a2cf184301 minor cleanup 2022-09-11 09:33:50 -07:00
Simon Forman 64946dc239 Put definitions in the docstring.
Why not? ¯\_(ツ)_/¯
2022-09-11 09:03:58 -07:00
Simon Forman aea619953d Model expr as stack-of-stacks, minor cleanup. 2022-09-11 08:57:45 -07:00
Simon Forman 16e6c77fa2 Don't bother to return the expression.
We mutate it instead of replacing it with new versions.
2022-09-10 17:42:38 -07:00
Simon Forman 4156da3511 Cleaner iteration of expression.
It's a destructive operation.  It breaks functional purity (but it could
be made functional by using a stack instead of a list for the stack.)

There's no point to returning the expression object now because it's
being mutated by the prepend() method (rather than being replaced by new
forms.)
2022-09-10 17:37:07 -07:00
Simon Forman 15c143e3d1 over
This slipped through the cracks, eh?  Should add a test to joytest.
2022-09-10 17:31:56 -07:00
Simon Forman 1032fc8e76 No point in a separate _parse() function. 2022-09-10 17:22:37 -07:00
Simon Forman 4fbe2ed4a0 Simpler tokenizer.
Once the syntax was simple enough the re.Scanner became overkill.

From
http://norvig.com/lispy.html
by way of
https://github.com/ckkashyap/s2c
2022-09-10 17:08:46 -07:00
Simon Forman 2ad303c247 A bit more docs. 2022-09-09 11:58:35 -07:00
Simon Forman f2791c02c3 Move ParseError to parser section; add a few type guards. 2022-09-08 20:59:12 -07:00
Simon Forman f08db94db1 Minor cleanup. 2022-09-08 14:25:02 -07:00
Simon Forman 359131f7b1 Expression objects.
This should be more efficient than concat().
2022-09-08 11:31:09 -07:00
Simon Forman eecc983b99 blacken 2022-09-08 10:37:46 -07:00
Simon Forman d7f047cee6 move stack code up under interp & minor edits 2022-09-08 09:06:26 -07:00
Simon Forman 20c4b90298 make type checks into Joy functions 2022-09-08 08:46:34 -07:00
Simon Forman ebdb8da03d move type checks and exceptions to bottom 2022-09-08 08:27:47 -07:00
Simon Forman ac326590db minor cleanup 2022-09-07 23:43:50 -07:00
Simon Forman e13a7b9f5c Remove debug session. 2022-09-07 22:23:23 -07:00
Simon Forman 69cb7febf6 That doesn't go there. 2022-09-07 21:15:09 -07:00
Simon Forman 9bb31cbc8a Minor cleanup. 2022-09-07 21:01:07 -07:00
Simon Forman 2c0a0aafcc halt and quit
halt captures the rest of the pending expression and stops evaluating,
but the interpreter loop keeps running.

quit ends the interpreter session and quits the Thun program.
2022-09-07 20:42:48 -07:00
Simon Forman 08f977324f Passes (updated) tests.
https://git.sr.ht/~sforman/joytest
2022-09-07 20:33:13 -07:00
Simon Forman 7594fb887f Harden up the types. 2022-09-07 19:39:00 -07:00
Simon Forman d7b445fdd4 Quiet mode for testing. Misc cleanup. 2022-09-07 17:27:36 -07:00
Simon Forman 660fdb0bef Just put ≡ inline. 2022-09-07 14:46:26 -07:00
Simon Forman 88f3cc4bbe Blacken the code. 2022-09-07 14:21:33 -07:00
Simon Forman 4f48ffbb5f Type-guard the ops. 2022-09-07 14:18:55 -07:00
Simon Forman 67fd88f68a Words and Help; use ≡ for definitions.
By using ≡ for definitions I can put docs in the DEFS string and easily
detect definitions by having them be each on their own line.
2022-09-07 13:13:46 -07:00
Simon Forman 29e6f160c6 It's a script. 2022-09-07 11:57:57 -07:00
Simon Forman 95366dde07 More docstrings. 2022-09-07 11:54:29 -07:00
Simon Forman 237f9bcfce Docstrings. 2022-09-07 11:46:59 -07:00
Simon Forman 51664c5856 Pylint is kind useless on this one. 2022-09-07 11:18:08 -07:00
Simon Forman acd0424287 Boolean literals. 2022-09-07 11:13:12 -07:00
Simon Forman 9fbcab6896 Docs (and strip trailing blanks.) 2022-09-07 10:42:20 -07:00
Simon Forman be13b72d93 Blacken the code (simplejoy.py)
I don't like it entirely but that's the point: nevermind your taste,
just use a simple and universal (Ha!) standard format(ter) and get on
with your life.
2022-09-07 09:41:08 -07:00
Simon Forman d6818620e3 Misc cruft. 2022-09-07 09:28:30 -07:00
Simon Forman 779ea5c7e5 Remove rust impl.
GitHub nagged me about some vuln in RE package or something?
https://github.com/calroc/Thun/security/dependabot/1
2022-09-07 09:24:20 -07:00
Simon Forman b386549226 Simple Joy 2022-09-07 09:23:02 -07:00
Simon Forman 4a5716d8b2 Rebuild HTML docs. 2022-08-16 15:26:07 -07:00
Simon Forman 3883cac99a Minor edits. 2022-08-15 16:20:59 -07:00
Simon Forman d0a253c503 Need to keep definition for ucons around
the Nim implementation has first and rest but not uncons.
2022-04-05 11:15:34 -07:00
Simon Forman 9fe565a929 uncons as basis
- clear deletes stack at once, not in a loop
- make uncons basis and define first and rest in tems of it
2022-04-05 10:06:40 -07:00
Simon Forman 2fb27971f1 Two wrappers
One for math ops, the other for Boolean.

Fixes: https://todo.sr.ht/~sforman/thun-der/13
2022-04-05 10:02:01 -07:00
Simon Forman a0374c5734 Start a per-project README for Python. 2022-04-04 08:01:51 -07:00
Simon Forman 1da997fbbf Expression? 2022-04-04 07:58:22 -07:00
Simon Forman a722f90072 T's and U's. 2022-03-29 12:57:41 -07:00
Simon Forman 81f8ade4be The rest of the S's. 2022-03-29 08:50:48 -07:00
Simon Forman 79fbe15f51 Make divmod work like the docs say it does. 2022-03-25 10:56:15 -07:00
Simon Forman 9057e3b347 Most of the C's. 2022-03-24 12:33:20 -07:00
Simon Forman 4827aa467e Minor cleanup. 2022-03-22 21:24:07 -07:00
Simon Forman 7dbb3c69ed Working to clean up docs. 2022-03-22 21:22:57 -07:00
Simon Forman ba6d09f956 Remove parse, no strings in base library.
References: https://todo.sr.ht/~sforman/Xerblin/10
2022-03-22 07:59:11 -07:00
Simon Forman 2cf49a2ad2 Bump version to tickle PyPI.
Tickle PyPI to make JOY_BOOL_LITERALS available to Xerblin.

Make JOY_BOOL_LITERALS available to Xerblin so ReadTheDocs can build the
Xerblin docs.
2022-03-09 17:40:57 -08:00
Simon Forman b190f8eca8 Export JOY_BOOL_LITERALS 2022-03-09 14:53:16 -08:00
Simon Forman 4d0754ffb9 long_description_content_type
shut up twine warning.

Hey PyPA where is the list of valid content types? Is it just MIME
types?
2022-03-09 13:15:49 -08:00
Simon Forman 4218d69abc Bump version to 0.5.0 2022-03-09 12:45:10 -08:00
Simon Forman 05f0346d0e Depend on the general def.txt file. 2022-03-09 12:40:02 -08:00
Simon Forman 87fe1d0b3c Snippets support.
Parse, print.
2022-03-01 19:13:44 -08:00
Simon Forman 142d6e53b0 Let's try out the "snippets" idea.
Represent strings (byte strings) as three-tuples of (git sha hash,
offset, length) immutable datastructures.
2022-03-01 14:13:07 -08:00
Simon Forman 61d18f8491 Common defs.txt file for all the implementations. 2022-03-01 14:12:34 -08:00
Simon Forman dab44e30b5 Update local defs.txt. 2022-02-22 13:49:44 -08:00
Simon Forman 737795acaa Simple makefile for Nim implementation. 2022-02-22 12:55:09 -08:00
Simon Forman cf56e31fbd Uppercase Nim. 2022-02-19 07:48:51 -08:00
Simon Forman 4ac8fd5f4c Sphinx confused by `•`.
When building the HTML docs with Sphinx v4.3.0 the bullet symbol in
backticks quotes causes this warning message:

    .../Joypy/implementations/Python/joy/utils/pretty_print.py:docstring of joy.utils.pretty_print:15: WARNING: Inline interpreted text or phrase reference start-string without end-string.
2022-02-19 07:39:07 -08:00
Simon Forman 05fff04fba Minor cleanup 2022-02-17 10:57:10 -08:00
Simon Forman d42a8dfc0c Move Python impl to impls dir. 2022-01-24 19:02:47 -08:00
Simon Forman 530deab19d Bring in the Rust implementation. 2022-01-15 17:28:31 -08:00
Simon Forman 839b376d73 Bring in the Prolog impl. 2022-01-15 17:23:11 -08:00
Simon Forman 564417c985 Bring in the Nim implementation. 2022-01-15 15:30:38 -08:00