IRC channel logs

2024-05-01.log

back to list of logs

<nanomonkey>Out of curiousity, is there a persistent database that folks find meshes well with Guile Scheme? Or that folks are excited about?
<nanomonkey>When I was doing Python development I mostly used Postgres, with Clojure, diatomic seemed to be well meshed, although I made use of Secure Scuttlebutt...
<nanomonkey>Just curious what folks would suggest for a backend database for transactions...what will Goblins be using besides the serializer?
<cwebber>nanomonkey: in the future we'll probably use a simple sqlite store
<Zarutian_iPad>h'lo!
<nanomonkey>nice, that's what I've been leaning towards
<Zarutian_iPad>I had a glance at the persistence mechanism and I am not understanding how it is different from E's __uncall miranda method or if there is an uncaller mechanism
<cwebber>Zarutian_iPad: it's similar to that idea
<cwebber>except that in the Goblins kernel the self-portrait function is kept within the unexposed datastructure
<Zarutian_iPad>so anything can invoke the equiv of __uncall on an object?
<cwebber>representing the state of the actor
<cwebber>so nothing can invoke it but the kernel
<cwebber>Zarutian_iPad: no, only the kernel (syscaller) can access it
<cwebber>it can't be accessed through $ or <-
<cwebber>the "original" urie had a design closer to E's
<cwebber>*aurie
<Zarutian_iPad>so no __sealedDispatch or such?
<cwebber>which is where it used rights amplification
<cwebber>that's correct
<cwebber>no miranda methods
<cwebber>instead what you can think of is that instead of *just* being able to return a lambda representing the current actor behavior
<Zarutian_iPad>so, what is the equiv of E's serialization surgeon?
<cwebber>you can return a special wrapped datastructure that says "here's the behavior procedure, and here's the self-portrait procedure"
<cwebber>and then only the kernel gets access to that
<cwebber>Zarutian_iPad: it's been a while since I read it, but if I remember correctly, the surgeon is the mechanism... the "reverse metacircular evaluator", effectively?
<Zarutian_iPad>the self-portrait procedure returns a portrait when called?
<cwebber>yes but you can't call it by reference to the actor
<cwebber>you need both the low-level utilities and a reference to either the vat controller or the actormap datastructure
<cwebber>both of which typically for most use are encapsulated away from the user
<cwebber>for the "unevaluator", see actormap-take-portrait and actormap-restore!
<cwebber>Zarutian_iPad: the original Aurie was effectively E's design, except instead of using miranda methods it used energetic secrets a-la Joule
<cwebber>(called warding/incanting in Goblins)
<Zarutian_iPad>what goes into the portrait? in E it was a truple of [constructor, method_selector, args] where args is an array. Effectively like <constructor>.<method selector>(...<args>)
<cwebber>that was removed in tsyesika's refactor
<cwebber>Zarutian_iPad: that's close to how original-Aurie worked
<cwebber>the new one that ships with Goblins now, the Jessica-Aurie version shall we say
<cwebber>there's an environment that describes how to serialize
<cwebber>when an actor is spawned, the datastructure remembers what its constructor was
<cwebber>the environment has a mapping of constructors <=> names and names <=> restore procedures
<cwebber>in a sense it's like a toplevel environment in a metacircular evaluator... except it describes both uneval and re-eval
<cwebber>so it's inspired by E's, but it has some major changes for the sake of ergonomics
<Zarutian_iPad>the uncallers and builders in E iirc
<cwebber>yes, except the environment doesn't store the uncallers
<cwebber>the actor itself specifies that at the same time it specifies its behavior
<cwebber>only the name associated with the constructor
<cwebber>and then that name is also used to map to the reconstructor
<Zarutian_iPad>and the reconstructor just gets the portrait or?
<cwebber>that's right. it's literally just a procedure that's applied with the arguments the self-portrait gave.
<cwebber>like in E's, everything is saved into a graph
<cwebber>and is restored with promises that settle during reconstruction.
<Zarutian_iPad>so the serializer iterates over the stuff in the portrait?
<cwebber>yes
<cwebber>recursively
<Zarutian_iPad>to see if a datum is an actor reference?
<cwebber>yep
<Zarutian_iPad>what I like about E's system is that you had a way to delinate the sub graph by giving an graph exit to name and vice versa mapping
<cwebber>I think there may be some things we still ought to do regarding entrance/exit that the E version did nicely
<cwebber>it's all possible with the Goblins version but
<cwebber>we still don't have the sandboxed module stuff and in a way I think the right solution composes with that
<Zarutian_iPad>hmm... and I do not see how I can implement the crypto-brand with this
<cwebber>hm?
<cwebber>what's the problem
<Zarutian_iPad>lesse if I can dig it up
<cwebber>crypto(graphy) sealers / trademarks are something we've been meaning to do fwiw
<Zarutian_iPad> https://gist.github.com/zarutian/e5d311f55ae13c6a17656ecfa65d9a92
<Zarutian_iPad>it was an attempt to write just such a thing
<cwebber>I'll suggest to tsyesika to look at this tomorrow ;)
<cwebber>time for dinner
<cwebber>ttyl!
<dthompson>👋