OSDN Git Service
Simon Forman [Tue, 28 Apr 2020 22:46:32 +0000 (15:46 -0700)]
Closes Ticket #40371 Bump version number to 0.3.0
Simon Forman [Tue, 28 Apr 2020 22:37:49 +0000 (15:37 -0700)]
Rebuild docs with Python 3 and Sphinx 3.0.2.
Simon Forman [Tue, 28 Apr 2020 22:28:58 +0000 (15:28 -0700)]
Indent with tabs.
Simon Forman [Tue, 28 Apr 2020 22:28:43 +0000 (15:28 -0700)]
Trace command.
Don't print trace by default, instead a new `trace` combinator wirks like `i` and prints a trace.
Simon Forman [Tue, 28 Apr 2020 18:05:19 +0000 (11:05 -0700)]
Rename primrec to tailrec.
Simon Forman [Tue, 28 Apr 2020 17:42:09 +0000 (10:42 -0700)]
Fixes #38237 Sort out stack/unstack/enstacken/disenstacken
Simon Forman [Tue, 28 Apr 2020 17:28:30 +0000 (10:28 -0700)]
Switch the names of unstack and disenstacken.
Part of Ticket #38237
Still need to update the docs.
Simon Forman [Sun, 26 Apr 2020 02:12:25 +0000 (19:12 -0700)]
Make it easy to install the tools to build the docs.
Simon Forman [Sun, 26 Apr 2020 01:41:26 +0000 (18:41 -0700)]
Minor cleanup.
Simon Forman [Sun, 26 Apr 2020 01:24:14 +0000 (18:24 -0700)]
Some comments in gui.main.
Simon Forman [Sat, 25 Apr 2020 22:59:31 +0000 (15:59 -0700)]
Finally remove all mentions of the old polytypes module.
It was merged with types long ago.
Simon Forman [Sat, 25 Apr 2020 22:08:58 +0000 (15:08 -0700)]
Fixes #40358 Help output could be better.
For now. Add a header and footer. Later on when I have per-function docs
it can look those up and print them (or open a viewer in the GUI.)
Simon Forman [Sat, 25 Apr 2020 21:14:35 +0000 (14:14 -0700)]
Minor docs update.
Simon Forman [Sat, 25 Apr 2020 21:13:52 +0000 (14:13 -0700)]
Fixes #40345 automate publication of docs
With the help of a little tar script on the server and rsync.
Simon Forman [Sat, 25 Apr 2020 04:27:26 +0000 (21:27 -0700)]
Don't automodule non-existent joy.utils.polytypes module.
Simon Forman [Sat, 25 Apr 2020 00:53:46 +0000 (17:53 -0700)]
Make all the docs.
Simon Forman [Sat, 25 Apr 2020 00:21:08 +0000 (17:21 -0700)]
Rebuilt some sphinx docs.
Simon Forman [Sat, 25 Apr 2020 00:12:46 +0000 (17:12 -0700)]
Fixes: #38238 rename pushback to concat.
Simon Forman [Sat, 25 Apr 2020 00:11:24 +0000 (17:11 -0700)]
Depend on dulwich and future.
Simon Forman [Fri, 24 Apr 2020 23:13:05 +0000 (16:13 -0700)]
Sort the definitions in the library.
Simon Forman [Fri, 24 Apr 2020 23:10:28 +0000 (16:10 -0700)]
Rebuilt some docs. Minor edits.
Simon Forman [Fri, 24 Apr 2020 23:09:32 +0000 (16:09 -0700)]
Somehow swoncat fell through the cracks.
Simon Forman [Fri, 24 Apr 2020 20:27:13 +0000 (13:27 -0700)]
Minor edits.
Simon Forman [Fri, 24 Apr 2020 19:48:15 +0000 (12:48 -0700)]
Switch to tabs for indentation.
Instead of a mix of 2- and 4-space tabs just use actual tabs. ;-P
Simon Forman [Fri, 24 Apr 2020 19:28:59 +0000 (12:28 -0700)]
Fixes: #40354 Don't hardcode my own name and email as autosave committer.
Simon Forman [Fri, 24 Apr 2020 19:05:39 +0000 (12:05 -0700)]
Fixes: #40355 Lookup bytes no good.
Simon Forman [Fri, 24 Apr 2020 18:58:43 +0000 (11:58 -0700)]
Pickle protocol 2.
Simon Forman [Fri, 24 Apr 2020 18:57:11 +0000 (11:57 -0700)]
Dulwich expects bytes not str.
Simon Forman [Fri, 24 Apr 2020 18:45:16 +0000 (11:45 -0700)]
Fixes #40353 TypeError: must be str or None, not bytes
Simon Forman [Fri, 24 Apr 2020 18:24:56 +0000 (11:24 -0700)]
Fixes #40352 write() argument must be str, not bytes
Simon Forman [Fri, 24 Apr 2020 17:47:23 +0000 (10:47 -0700)]
Make sure joy.gui.main.__doc__ is at the top of the module.
Simon Forman [Fri, 24 Apr 2020 17:32:48 +0000 (10:32 -0700)]
Remove `__next__`.
Simon Forman [Fri, 24 Apr 2020 17:10:50 +0000 (10:10 -0700)]
AttributeError: 'itertools.count' object has no attribute '__next__'
Simon Forman [Fri, 24 Apr 2020 17:10:30 +0000 (10:10 -0700)]
Open stack pickle file in binary mode.
Simon Forman [Fri, 24 Apr 2020 07:03:32 +0000 (00:03 -0700)]
read text from REPL, don't eval
Simon Forman [Fri, 24 Apr 2020 07:00:59 +0000 (00:00 -0700)]
PEP 518
Simon Forman [Fri, 24 Apr 2020 07:00:41 +0000 (00:00 -0700)]
Fake brutal_hackery on Py3.
Because I'm not about to try to figure it out tonight.
Simon Forman [Fri, 24 Apr 2020 06:44:29 +0000 (23:44 -0700)]
futurize stage2 vui
Simon Forman [Fri, 24 Apr 2020 06:38:10 +0000 (23:38 -0700)]
futurize stage2 gui
Simon Forman [Fri, 24 Apr 2020 06:33:23 +0000 (23:33 -0700)]
futurize stage2 core
Simon Forman [Fri, 24 Apr 2020 06:28:24 +0000 (23:28 -0700)]
futurize stage2 core
Simon Forman [Fri, 24 Apr 2020 06:22:45 +0000 (23:22 -0700)]
futurize stage1 vui
Simon Forman [Fri, 24 Apr 2020 06:19:29 +0000 (23:19 -0700)]
futurize stage1 gui
Simon Forman [Fri, 24 Apr 2020 06:16:45 +0000 (23:16 -0700)]
futurize stage1 core
Simon Forman [Fri, 24 Apr 2020 04:39:29 +0000 (21:39 -0700)]
Fixes #38239 rename parameter of stack.pick()
Simon Forman [Fri, 24 Apr 2020 01:59:12 +0000 (18:59 -0700)]
Ignore build and virtual env ("venv").
Simon Forman [Fri, 24 Apr 2020 01:53:32 +0000 (18:53 -0700)]
Better instuctions for running docs notebooks.
Simon Forman [Thu, 23 Apr 2020 22:58:38 +0000 (15:58 -0700)]
Hacked up the Prolog compiler code.
Simon Forman [Thu, 23 Apr 2020 22:25:54 +0000 (15:25 -0700)]
Delete a pyc file.
Simon Forman [Thu, 23 Apr 2020 22:18:11 +0000 (15:18 -0700)]
Crap, and stuff.
Simon Forman [Thu, 23 Apr 2020 22:15:36 +0000 (15:15 -0700)]
Shortcircuit Boolean combinators.
Simon Forman [Thu, 23 Apr 2020 22:14:36 +0000 (15:14 -0700)]
Some comments.
Simon Forman [Fri, 31 Jan 2020 20:06:31 +0000 (12:06 -0800)]
Minor edits.
Simon Forman [Fri, 31 Jan 2020 20:01:13 +0000 (12:01 -0800)]
Minor edits.
Simon Forman [Fri, 31 Jan 2020 16:30:10 +0000 (08:30 -0800)]
Remove unused predicates appears_only_once/2 and reg_used_once/2.
Simon Forman [Fri, 31 Jan 2020 16:26:10 +0000 (08:26 -0800)]
Freeing registers before using them is simpler.
https://todo.sr.ht/~sforman/thun-der/3
Simon Forman [Thu, 30 Jan 2020 18:25:12 +0000 (10:25 -0800)]
Partial reduction for combinator rule works after all.
It just looked weird to me and I didn't think it through.
Once I checked it I realized it was okay.
Simon Forman [Wed, 29 Jan 2020 19:04:22 +0000 (11:04 -0800)]
Uncovered and fixed a subtle bug in free_reg//3.
non_alloc/1 for words that don't change the ref count of registers and can be delegated to their semantic relation.
Simon Forman [Wed, 29 Jan 2020 17:48:08 +0000 (09:48 -0800)]
Cons. I should research Lisp compilers...
I think I should emit high-level code and reduce it to actual
machine code later under whatever model (cons cell heap, etc.)
Simon Forman [Wed, 29 Jan 2020 02:04:51 +0000 (18:04 -0800)]
Add assoc to kinda sorta track the values in the registers.
But it doesn't update e.g. if you add two numbers, the value int(N) stays the same.
It could be modified to track the value as it computes? But then why keep them in registers at all? Sometimes a value must arrive at runtime, eh?
Simon Forman [Wed, 29 Jan 2020 01:16:17 +0000 (17:16 -0800)]
swap, pop, and +
compiling is tricky
Simon Forman [Tue, 28 Jan 2020 20:44:19 +0000 (12:44 -0800)]
dup, add_ref/3.
Simon Forman [Tue, 28 Jan 2020 20:24:04 +0000 (12:24 -0800)]
THread through a context to track registers.
It seems to work to allocate and free registers with a kind of reference counting
by membership in an auxilliary list.
Simon Forman [Tue, 28 Jan 2020 19:01:28 +0000 (11:01 -0800)]
Sort of compile '+'.
Simon Forman [Tue, 28 Jan 2020 18:46:38 +0000 (10:46 -0800)]
Move immediate to register for int literal.
Simon Forman [Tue, 28 Jan 2020 18:37:13 +0000 (10:37 -0800)]
blep.
Simon Forman [Tue, 28 Jan 2020 18:21:37 +0000 (10:21 -0800)]
A start on machine code generation.
Just the initial messing around...
Simon Forman [Mon, 27 Jan 2020 20:56:26 +0000 (12:56 -0800)]
Fix a bug in step.
You think it would be easy to find all the places where the type tags are needed.
Simon Forman [Mon, 27 Jan 2020 19:54:24 +0000 (11:54 -0800)]
docs, formatter
Simon Forman [Mon, 27 Jan 2020 01:06:21 +0000 (17:06 -0800)]
Fix a bug in rest.
It didn't tag the tail list as a list.
Also, spell out bool for true cases.
Simon Forman [Mon, 27 Jan 2020 00:50:49 +0000 (16:50 -0800)]
Minor cleanup.
I feel like I should keep the un-partially-reduced thun/4 but
you can still read it, and the reduced forms are more efficient.
(And not too much more wordy.)
Simon Forman [Sun, 26 Jan 2020 21:21:47 +0000 (13:21 -0800)]
Experiments with partial reduction are very promising.
Functions become clauses like these:
thun(symbol(rolldown), [], [C, A, B|D], [A, B, C|D]).
thun(symbol(rolldown), [A|B], [E, C, D|F], G) :-
thun(A, B, [C, D, E|F], G).
thun(symbol(dupd), [], [A, B|C], [A, B, B|C]).
thun(symbol(dupd), [A|B], [C, D|E], F) :-
thun(A, B, [C, D, D|E], F).
thun(symbol(over), [], [B, A|C], [A, B, A|C]).7
thun(symbol(over), [A|B], [D, C|E], F) :-
thun(A, B, [C, D, C|E], F).
Definitions become
thun(symbol(of), A, D, E) :-
append([symbol(swap), symbol(at)], A, [B|C]),
thun(B, C, D, E).
thun(symbol(pam), A, D, E) :-
append([list([symbol(i)]), symbol(map)], A, [B|C]),
thun(B, C, D, E).
thun(symbol(popd), A, D, E) :-
append([list([symbol(pop)]), symbol(dip)], A, [B|C]),
thun(B, C, D, E).
These are tail-recursive and allow for better indexing so I would expect
them to be more efficient than the originals.
Notice the difference between the original thun/4 rule for definitions
and this other one that actually works.
thun(symbol(Def), E, Si, So) :- def(Def, Body), append(Body, E, E o), thun(Eo, Si, So).
thun(symbol(Def), E, Si, So) :- def(Def, Body), append(Body, E, [T|Eo]), thun(T, Eo, Si, So)
The latter reduces to:
thun(symbol(A), C, F, G) :-
def(A, B),
append(B, C, [D|E]),
thun(D, E, F, G).
We want something like...
thun(symbol(B), [], A, D) :- def(B, [H|C]), thun(H, C, A, D).
thun(symbol(A), [H|E0], Si, So) :-
def(A, [DH|DE]),
append(DE, [H|E0], E),
thun(DH, E, Si, So).
But it's good enough. The earlier version doesn't transform into
correct code:
thun(symbol(B), D, A, A) :- def(B, C), append(C, D, []).
thun(symbol(A), C, F, G) :- def(A, B), append(B, C, [D|E]), thun(D, E, F, G).
It would probably be good to investigate what goes wrong there.)
It doesn't seem to work right for thun/4 combinator rules either. Dunno what's
up there.
Simon Forman [Sun, 26 Jan 2020 20:48:38 +0000 (12:48 -0800)]
Partial reduction of thun/3 in the thun/4 relation.
It mostly works.
Simon Forman [Sun, 26 Jan 2020 18:15:32 +0000 (10:15 -0800)]
Map combinator works with types.
Simon Forman [Sun, 26 Jan 2020 17:48:30 +0000 (09:48 -0800)]
Remove '==' from definitions. (Bools)
I decided that the conceptual simplicity of omitting '==' is more useful
than the cosmetic value of keeping it. The defs.txt file is now just one
definition per line with the first symbol giving the name.
Also, bools are literals.
Simon Forman [Sun, 26 Jan 2020 16:44:57 +0000 (08:44 -0800)]
Definition for 'not' in terms of 'branch'.
Simon Forman [Sun, 26 Jan 2020 16:43:52 +0000 (08:43 -0800)]
Proper types, checking, inference.
When I first translated Joy into Prolog I was so blown away by the Prolog
unification over list structures and Triska's CLP(FD) semantics for math
(both in the sense that he wrote CLP(FD) for SWI Prolog and he suggested
it for Joy-in-Prolog specifically) that I didn't realize that it wasn't
quite type inference.
It's kind of like type inference, in that lists are handled correctly and
the CLP(FD) library creates and maintains a kind of context for
constraints, which are sort-of like "dependent types" if you squint a
little. But you can still do things like 'cons' a number to a number and
get (a Prolog term) like [2|3] which is almost certainly a bug.
So I went through and added type "tags" as Prolog terms: int/1, list/1,
and symbol/1. The parser assigns them and all the primitive functions
and combinators use them (and so all the definitions do too.) With this
information Prolog can e.g. prevent attempts to add numbers and lists, and
so on.
This also allows for the thun/3 relation to be implemented a little more
efficiently (without much loss of beauty) by looking ahead one term in
the pending expression and dispatching on structural "type" in a thun/4
relation. I miss the elegance of the previous version, but this lets
Prolog index on the structural type tags that the parser produces.
(This might mess up tail recursion because now we have a loop between
thun/3 and thun/4 but we can eliminate that problem by partial reduction
on thun/3. TODO.)
Now that literals are tagged by the parser there's no need for literal/1.
Simon Forman [Sun, 26 Jan 2020 00:13:06 +0000 (16:13 -0800)]
Don't assert defs twice.
Each definition is getting parsed with the name of the next one as part
of its body, then the next one fails to parse and the thing backtracks.
So each definition (but the last) gets asserted twice.
def(--,[1,-,?])
def(--,[1,-])
def(?,[dup,bool,++])
def(?,[dup,bool])
def(++,[1,+,anamorphism])
def(++,[1,+])
def(anamorphism,[[pop,[]],swap,[dip,swons],genrec,app1])
def(anamorphism,[[pop,[]],swap,[dip,swons],genrec])
def(app1,[grba,infrst,app2])
def(app1,[grba,infrst])
def(app2,[[grba,swap,grba,swap],dip,[infrst],cons,ii,app3])
def(app2,[[grba,swap,grba,swap],dip,[infrst],cons,ii])
...and so on.
Simon Forman [Sat, 25 Jan 2020 23:50:50 +0000 (15:50 -0800)]
Change back to CLP(FD) semantics.
Minor changes to parser to make it less logical but a little firmer.
(E.g. ints can't be backtracked into becoming symbols!)
Simon Forman [Sat, 25 Jan 2020 22:35:44 +0000 (14:35 -0800)]
Docs and minor cleanup to the grammar.
Simon Forman [Tue, 3 Dec 2019 16:41:42 +0000 (08:41 -0800)]
Minor cleanup.
Simon Forman [Mon, 2 Dec 2019 22:26:07 +0000 (14:26 -0800)]
Make parser REs into module-level "constants".
Simon Forman [Mon, 2 Dec 2019 22:14:38 +0000 (14:14 -0800)]
Some helper scripts for windows.
Simon Forman [Mon, 2 Dec 2019 22:13:50 +0000 (14:13 -0800)]
Minor docs update.
Simon Forman [Thu, 28 Nov 2019 15:58:42 +0000 (07:58 -0800)]
Debugging this sucks.
Even with the RISC emu GUI.
Redesign vm? Add more tooling? Use MetaII?
Happy Thanksgiving!
Simon Forman [Thu, 14 Nov 2019 05:15:33 +0000 (21:15 -0800)]
Emit a sort of symbol table.
Simon Forman [Wed, 13 Nov 2019 23:07:27 +0000 (15:07 -0800)]
4 is already an offset
Simon Forman [Wed, 13 Nov 2019 19:41:41 +0000 (11:41 -0800)]
Definitions.
Simon Forman [Wed, 13 Nov 2019 00:09:13 +0000 (16:09 -0800)]
"swap" word.
Simon Forman [Tue, 12 Nov 2019 23:47:33 +0000 (15:47 -0800)]
"new" word.
Simon Forman [Tue, 12 Nov 2019 19:42:24 +0000 (11:42 -0800)]
Refactor sub_base_merge_and_store.
Simon Forman [Tue, 12 Nov 2019 17:23:31 +0000 (09:23 -0800)]
dup cons i
Simon Forman [Tue, 12 Nov 2019 17:18:58 +0000 (09:18 -0800)]
Forgot to "return" from i combinator.
Simon Forman [Tue, 12 Nov 2019 17:06:22 +0000 (09:06 -0800)]
Even "nicer".
Simon Forman [Tue, 12 Nov 2019 17:03:54 +0000 (09:03 -0800)]
Charming.
Simon Forman [Tue, 12 Nov 2019 17:02:19 +0000 (09:02 -0800)]
dexpr//1
Simon Forman [Tue, 12 Nov 2019 16:37:20 +0000 (08:37 -0800)]
The i combinator.
Simon Forman [Mon, 11 Nov 2019 15:51:58 +0000 (07:51 -0800)]
head_addr
Simon Forman [Mon, 11 Nov 2019 15:45:22 +0000 (07:45 -0800)]
Simple push of empty list.
Simon Forman [Sun, 10 Nov 2019 22:35:57 +0000 (14:35 -0800)]
Dup.
ANd portray_clause to stablize output logical variable names.