2026-04-23 11:42:02
from my link log —
Consistent overhead byte stuffing for binary logs.
https://www.pvk.ca/Blog/2021/01/11/stuff-your-logs/
saved 2021-03-19 https:/…
from my link log —
Consistent overhead byte stuffing for binary logs.
https://www.pvk.ca/Blog/2021/01/11/stuff-your-logs/
saved 2021-03-19 https:/…
Yet another blog post on #Lisp memory management. If you are not obsessively geeky, this one isn't for you.
https://www.journeyman.cc/blog/posts-output/2026-03-23-Page…
A novice was trying to fix a broken lisp machine by turning the
power off and on. Knight, seeing what the student was doing spoke sternly,
"You cannot fix a machine by just power-cycling it with no understanding
of what is going wrong." Knight turned the machine off and on. The
machine worked.
SBCL #CommonLisp
(nth 2 '(1 2 3 4 5 6))
3
#Clojure
(nth '(1 2 3 4 5 6) 2)
3
#Scheme
(list-ref '(1 2 3 4 5 6) 2)
;Value: 3
So, they differ on the…
I did ten hours on #PostScarcitySoftware yesterday, and then slept a bit, and then woke up with an intention to rapid prototype a '#Lisp structure editor in the browser' idea I've been thinking on for a while. I did about five hours on that, and it's looking promising.
I&…
It being an astonishingly beautiful afternoon here, instead of sitting indoors hacking #Lisp, I am out in the wood with my pussy cat hauling out timber for the sawmill.
It's a hard life.
#TheJoyOfCrofting (unironically, for once)
I've written another essay about my mad #PostScarcitySoftware #Lisp system.
"We don't need to know, or have known, these people to build on their work. We don't have to, and cannot in detail, fully understand their work. There is simply too much of it, its complexity wou…
from my link log —
A preview of Coalton 0.2, a statically-typed Lisp.
https://coalton-lang.github.io/20260312-coalton0p2/
saved 2026-03-14 https:/…
Oh, Jings, my own execution traces are REALLY hard to read. It's my own fault: these are my traces in my software, there's no-one else to blame, but...
#Lisp
from my link log —
Technical issues of separation in function cells and value cells: Lisp-1 vs Lisp-2.
https://www.nhplace.com/kent/Papers/Technical-Issues.html
saved 2026-02-12
Well,. the good news this morning is that i found a stupid bug in `cdr` which, once you've seen it, you can't unsee, so the seventh #PostScarcitySoftware #Lisp prototype is now completing initialisation and entering the REPL.
The bad news is that there's an unterminating recu…
Скучаю по тем временам, когда "ИИ" означал программирование на Lisp и Prolog
OK, if I have an environment pointer *in the stack frame*, then not only does it greatly simplify the #Lisp calling convention, it also means that the evaluation time environment is captured in any stack trace and can be inspected in any break.
Downside: it's one more inc_ref/dec_ref for every function call, which is a performance hit.
H'mmm...
from my link log —
Too much locality... for stores to forward.
https://www.pvk.ca/Blog/2020/02/01/too-much-locality-for-store-forwarding/
saved 2020-02-02
I have written another essay for my blog. This one is about where I'm up to with my mad #Lisp system, and is *really* obscure!
https://www.journeyman.cc/blog/posts-outpu
I've been hacking on Beowulf again, today; and I'm reminded how enchanted I am with the Beowulf logo, which sort-of designed itself.
I take no credit for it, really.
#Lisp 1.5
https://git.journeyman.cc/simon/beowulf
Modern #Lisp systems distinguish between several different types of string-like-things:
1. symbols
2. strings
3. keywords
By convention we typically use symbols as handles on things bound in the environment, keywords as handles on things bound in maps (hash tables), and strings as data.
However, in all the Lisp specifications I can find, and certainly in
OK, folks, I've written yet another incomprehensible essay on the intricacies of implementing a software environment for the hardware of the deep future.
Read this only if you're incurably geeky, and, ideally, interested in #Lisp.
#PostScarcitySoftware
OK, Beowulf bug. Both EVAL and APPLY in Beowulf are straight transcriptions of the mexprs on pages 70 and 71 of the #Lisp 1.5 Porgammer's Manual.
CONC is the only FEXPR I have implemented so far (and one of only three FEXPRs in the manual).
The unit test for CONC fails, because EVLIS is called on the argument list by EVAL (line 20 on page 71) before it reaches APPLY, and therefore b…
SO!
I can fix my code so that the arguments to FEXPRs are not evaluated, by deferring the call to EVLIS into APPLY; but this is not what the code given on pages 70-71 does, and so my code will then not directly follow the specification in the #Lisp 1.5 Programmer's Manual;
OR,
I can not do this, in which case FEXPRs will not work as specified on pages 18 and 19.
(Note that…
OK, so as I've decided my new #Lisp prototype should use read-tables and read-macros to read anything, I need to implement `eval` before I can implement `read`!
Still, progress is being made.
Right, problems for today. First. #Lisp problems. I think the bug in `cond` fires when a clause succeeds but returns `nil`.
First, write a unit test which checks for that, but run that test on my laptop where it physically cannot generate millions of stack frames.
Second, rewrite `cond` to call a separate helper function, `cond_clause`, which takes one arg and returns `nil` on failure, `…
Last night I discovered a huge 'new' bug in the integer arithmetic of my #Lisp system which I'd been unaware of because I don't have a unit test for it and it isn't something I'd been worried about and don't normally do.
Weirdly, it makes me feel hopeful. It is this:
:: (- 5 4)
1
:: (- 4 5)
4,294,967,295
What's happening here? Integer…
Woohoo! I just typed
`(mapcar (lambda (n) (:documentation (meta n))) (keys (oblist)))`
into the REPL of my frankenlisp, and printed out the documentation of every function it knows.
I am getting close to the point that other people can play with this...
#Lisp
In #CommonLisp, `=` takes arbitrary numbers of args, but `eq` takes exactly two.
In #Scheme `=` takes arbitrary numbers of args, and `eq?` also takes arbitrary numbers of args.
In #Logo, `equalp` …
David fucking Hilbert wrote 'after infinity, counting continues naturally, infinity plus one, infinity plus two, and so on' (I'm quoting from memory, so could be slightly wrong).
I consider this anathema. I'm proposing that any computation which adds any number to infinity, or multiplies any number by infinity, should return infinity.
This is, as I understand it, the intuitionist heresy.
Is there anyone prepared to argue I shouldn't do this?