Hello everyone, again, this time not in Basque! I ...
# share-your-work
h
Hello everyone, again, this time not in Basque! I recorded a short (by my standards) video showing some examples from the Wirewright repo. I hope you find it interesting. I doubt I actually explained anything in the video, but hey, at least the video looks smooth. But now the audio is slightly... off. My "S"es are horrendous...

youtu.be/…

👀 1
❤️ 2
w
I'm loving this. I've recently found myself solving a lot of problems by writing ASTs directly so I find this very compelling.
h
Thanks 🙂 Yes, I'm sticking with the thing for such a long time (for me) because I feel there's a lot of potential in the area. Obviously right now the thing is heavily experimental and slow. But believe me, it's much better than it was before. The realist in me complains quite often, though, about there being no general "point". It's hard to compete or even enter competition today. It's hard even to think about it or plan it. We're well past the Self and Smalltalk times, well past the Clojure times. If you don't have an ecosystem, you're doomed, because everyone expects you to have one, and to have one in 2026 means at least a few years of community work, not just one guy doing stuff for whatever "philosophical" reasons they have. And of course people have more interesting things to do than doing free community work for no point whatsoever. And yet, here I am. I'm just afraid we'll trap ourselves in a local minimum, especially with everything that's going on right now in the tech world. My direction might be the wrongest of them all, but I am trying anyway 🙂 I feel like I am that penguin going toward the mountains while everyone else is rushing toward the sea. I'm sorry about the digression. I think another interesting way to talk about the thing comes from that randomish "Blender cube" analogy I mentioned in the video. Basically there's an abstract object (which we can call an "AST", although here it's probably stripped of most of its original meaning; in particular, it's not about syntax anymore, not really; it's still a tree and it still is abstract, though). And then we have evolution of this abstract object (through rewriting or by other means). And then we have projections of it. Like a 3D cube is, in a sense, an abstract object, which can be manipulated and seen through "projections": the various Blender panels, the 2D views "from the left", "from above", etc. (sorry, I don't think I know the actual terms used for these). In a sense, the code you see on the right is a particular view of the abstract object. Similarly, the UI you see on the left is, too, a projection of the abstract object. In the future, hopefully, audio output would be such a projection, too; as are "file watch handles", "database connections", "websocket servers", and so on. These are all different ways of looking at the same underlying thing. As a consequence, everything can interact, observe, and edit everything else (all words used in a certain "cybernetic" sense)! Another wall of text, my gosh... I hope I'm not scaring anyone with these 😆
❤️ 3
🤔 1
w
I think its a lot easier for me to solve problems appropriately (especially with LLMs) if I figure out the right DSL or AST combination. So I am excited to see what you find from your explorations
👍 1
w
It's okay @homonoidian. #CCL5VVBAN is a safe space for half-baked ideas. This is super interesting. I feel like you and I got some of the same notes from the muse about to what to work on this summer. I like how you're taking "object oriented" more seriously than most with the inside/outside distinction and sensation.
Wirewright has made it on my short list of things to dive into. Stepping back a little, @homonoidian are you familiar with Blaise Aguera y Arcas's work on BFF and also Michael Levin's recent stuff on emergent behavior in sorting algorithms?
h
I hope I'll be able to finish the doctool and write the important docs before you have a serious look at the project 🙂 Right now, it's quite daunting, I guess. I can't even imagine how the thing looks from the outside. I can only say that there are a lot more features in the thing than one could think, it's just that they're all undocumented, and I don't remember most of them, either... On the first one, no, I'll have to look into it, currently I can't even guess what "BFF" means 🙂 The second one, I listen to stuff from Levin as an inspiration occasionally (not that I remember anything in particular, other than his points about intelligence -- simplifying a little -- not being in the brain; which I totally agree with even if I have no competence to; in fact, I'm ready to go a lot further as I do in some of my speculative writing). On sorting algorithms in particular, I know the paper exists (or is it papers? I'm not sure). I remember I've looked at it, but only as a "curious curiosity". In fact, my browsing history contains it: a paper on self-sorting arrays. I think this is actually an instance of what I'm trying to do, too. That is, we're all talking about the same object, so to speak -- or process, or whatever else. Just from different sides. Sorting, after all, is one kind of "law" among many, isn't it? The law of two adjacent things being in order. Or two adjacent chunks being in order, perhaps based on some pivot. And then you iterate, and what we call "sorting" occurs. I remember doing this in one of the examples in Wirewright. In fact, writing the sorting examples made sorting look less boring to me! It's funny now that I think of it, I think that was the first time I implemented one of the "serious" sorting algorithms (merge sort). Quite a long way to get to merge sort, isn't it? 🙂
w
From the outside, it's just slightly confusing which parts of a program are going to automatically update and which parts will stay fixed. That takes me to... The tl;dr on Arcas's work is that he happened to discover that random Brainfuck programs repeatedly stuck together allowed to self-modify don't do much for millions of iterations and then suddenly do become self-replicating and intrinsically naturally selecting. Later they find there's nothing special about Brainfuck. You mostly just need a programming language that can self-modify. Then natural selection reliably emerges with enough time. Now Levin's sorting work is trying to strip some his biological morphogenesis ideas to their bare minimum: that you can observe the same behaviors in basic sorting algorithms when examined from the right point of view. It feeds into his bigger sense that may important biological activities are formally emergent rather than things that need to be carefully selected for. Random chance attracts systems to real patterns that are load-bearing with respect to the emergence of complex behavior. He dares use the word "Platonic" but only provisionally. It's an ongoing project whether this sort of stuff is aptly understood as a kind of self-ordering formal influence.
👍 1
m
I like how you talk about programs existing within "worlds". Honestly it's the same way I like to think about them. Worlds could include various kinds of computers, virtual machines, abstract formal systems, fuzzy mental models within our heads. Not sure what's the name of this worlds-oriented view... I'm pretty sure somebody already gave this a name.
h
I haven't found anything exactly like this yet; I'm also sure it exists somewhere out there, though, it's not that these ideas are really hard to find. But another way to put it is to replace "worlds" with "complex systems". And "suddenly" we have a lot of related work. About interacting complex systems, that is. Programs, in this case, are a bit like "vortices": complex, organized patterns "floating" and interacting in the "soup" that is a complex system, following its rules. Programs are then nothing special, really; just one kind of pattern. We can then say some complex systems ("worlds") are in some sense "disjoint": unaware of each other; in a sense, the two (or more) systems "speak different, mutually incomprehensible languages", for whatever reason. We then say there's what I call entanglement; I think in Varela and Maturana's work (but probably not in just their work) the related terms are "perturbations" and "structural coupling" between systems. That is, roughly speaking, some things in one world represent other things in another world; all while both worlds "run" in parallel. In a sense, "entanglement" is the continuous or periodic "rendezvous" between two things in two worlds. Neither world can contain things the other one can, and yet, there is a coupling between some of them. It's like a thought or an emotion isn't a physical object; yet they can be coupled to one. Nor is a physical chair, the one made up of atoms, a "thought" or a "percept". All this is a long way of saying that I think we're talking about a kind of "systemic view" here. The relevant fields seem to be systems philosophy, complex systems, dynamical systems, systems biology (of course!), cybernetics. That I call what is in effect complex systems "worlds" is just a byproduct of the way I think; because for me it makes sense to say a system is "matter under law"; which is, if you think about it, very much like a "world" in the most general sense. Maybe someone else has another way to conceptualize this. But I guess what this view really is is some sort of an "interacting complex systems" view. In this regard, personally, I am currently a "believer" in a kind of "radical holism" when it comes to the design of complex entities (such as the brain and other kinds of biological machinery, etc.). I'm not sure I can come up with a better, more serious name; "radical holism" sounds quite funny. The point is that our understanding of complex entities may well depend on the understanding of the entire world they inhabit, as a whole, an indivisible unit. In other words, it makes no sense to talk about, or simulate, a brain (for example) in a vacuum; but only -- and indivisibly -- as a part of an organism, as a part of an environment/niche, as a part of a world following a particular kind of physics, subject to a particular geometry, etc. We end up treating the world as one single thing that must be understood or simulated, in its "unity", to understand complex entities inside it, such as the brain; and anything less than that does not suffice. That's kind of depressing. And that's also why it's "radical". Although of course I understand how impractical such an approach is. It's just that philosophically it makes sense for me. And when we say worlds can nest (through simulation) and interact (through structural coupling / entanglement), things become interesting, because now, you can study a world-as-a-whole (even if it's not our world; even if it's a much simpler world). Another point is that simulating a world makes sense, because you can make things, rather than the agent simulating the world, compute. In a sense, you're changing the point of view. A useful analogy I like to make is to say that instead of designing smart cars that drive dumb roads, we design smart roads (i.e., environment) that drives dumb cars. The road always knows where to go, where the jams are, where pedestrians are, etc. Again, this is impractical if read literally; but as a design principle I find it useful, especially with simulation. No one prevents you from simulating a custom world coupled to a local pocket of the reality you live in; from designing environments, fields, etc. in it. "The self" is then not a smart thing with a huge "brain" but a "dust particle" blown by the forces of the simulated world. That is, in a sense, the simulated world becomes a function which computes the behavior of the agent. As perceptions change, this "function" gets rewritten, and the behavior of the agent changes as well. I'll attach a video of one of my experiments on the topic, if anyone is interested. There's a simulated world (the one with a wall with a hole in it). The red cube is the agent's "self-symbol" inside the simulated world. The red sphere floating outside represents the agent's "physical body". It's controlled by transitions inside the simulated world: when the agent's self-symbol moves left in the simulated world, the agent's "physical body" (the circle) moves left as well. It's supposed to act like a drone but since I'm no game dev it's buggy so it can float out of the way; nor is there "sensory coupling". In a way, the agent hallucinates the world and the targets). The blue things are "targets". The point is that the agent must chase and eat targets. The targets move. Air cells in the simulated world host the red-green field. This field is the thing responsible for the behavior of the agent (i.e., for the chasing and eating), not the agent, nor the targets. Air near the targets gets "greener" (attractive); air near walls gets "redder". Generally, we do
max(neighbor) - 1
, if I remember correctly. The agent is very dumb: it just goes to the
greenest(neighboring air)
cell. And targets move randomly (which makes them quite stupid and easy to chase down; but if you implement evasion using the same red-green field, then the chases get really long and sometimes oscillate indefinitely unless you add a chance for a mistake since both parties can "predict" each other perfectly). Now, I did the thing with a couple of bitmaps. But you can implement it as well with the good old float array and get (probably) much more interesting behavior. Another wall of text. I'm not sure I'm supposed to write messages this long here, I'm sorry if I'm not! It's just that if I start I find it really hard to stop 😆