bouncer
← Back

System Crafters · 878 views · 27 likes

Analysis Summary

20% Minimal Influence
mildmoderatesevere

“Be aware that the casual, 'friend-to-friend' atmosphere is a standard community-building technique that makes promotional asks for courses and newsletters feel like supporting a peer rather than a business.”

Ask yourself: “Did I notice what this video wanted from me, and did I decide freely to say yes?”

Transparency Transparent
Human Detected
100%

Signals

The video is a raw live stream featuring a known creator (David Wilson) who exhibits natural, unscripted speech patterns, personal anecdotes, and real-time interaction with his audience. Although the project discussed involved AI assistance, the video presentation layer is entirely human-created.

Natural Speech Patterns The transcript contains numerous filler words ('uh', 'um'), self-corrections, and verbal stumbles ('I totally screwed up the intro').
Personal Anecdotes The speaker shares a specific story about his kids being home due to a rainstorm and the government shutting down schools.
Live Interaction and Context The speaker interacts with a live IRC chat, reacts to specific usernames (Dave), and struggles with live technical issues like 'gamma step' brightness.
Subject Matter Context While the video is about using AI (Claude Code) to write a compiler, the presentation itself is a raw, unscripted live stream.

Worth Noting

Positive elements

  • This video provides a real-world look at using LLMs (Claude Code) to accelerate the development of complex systems like compilers within the Lisp ecosystem.

Be Aware

Cautionary elements

  • The parasocial 'live-stream' format naturally blends personal life updates with product sales, making commercial pitches feel like personal recommendations.

Influence Dimensions

How are these scored?
About this analysis

Knowing about these techniques makes them visible, not powerless. The ones that work best on you are the ones that match beliefs you already hold.

This analysis is a tool for your own thinking — what you do with it is up to you.

Analyzed March 13, 2026 at 16:07 UTC Model google/gemini-3-flash-preview-20251217
Transcript

Hey. Hey. Hey. What's up everybody? Welcome to System Peppers Live. I'm David Wilson. We're back again with another live stream where I screw up my greeting in the IRC chat as you can see on the live chat buffer on the side here. Uh and uh get together on Fridays and talk about whatever topic I've come up with with for the weekend. This week is no exception. Yes, it's what happened. I totally screwed up the intro because I screwed up the chat. That's okay, though. Uh let's see. Wait for some folks to filter in here. Uh, and while we're doing that, I'll go ahead and uh try to get some show notes started. I need to kill the stupid uh what is it? Gamma step. Gamma step. Kill gamma step. Terminate. There we go. Now I can actually see my screen. Great. You can't see that, but on my screen like the color temperature or the brightness was way down. I couldn't tell what I was looking at. So, hello. Nice to see everyone. Uh, let's see if I can get some show notes going in this thing. So, systemcrafters.net. Uh, find directory live streams. There we go. So, November. What year is it? I know it's not November. You don't have to tell me that. I'm just looking for the last stream notes. Seven Days of Schemer, a horror genre graphic adventure game. That sounds about right. Okay. So, uh, December 5th. This year is almost over. Can you believe that? It's insane. It's uh after midnight in China. Well, thank you for being here. I mean, that's kind of late. Want to see if I can hear the music a little bit better. All right. Uh let's get this in here. So, what is this? A list? No, it's not a lisp. A scheme in seven days. Is that what I called it? Speedrunning a scheme of seven days. Okay. December 5th. It's nice when you get to watch somebody just typing something they should have typed before the stream uh while you're just sitting here patiently waiting for me to stop uh being disorganized. But I appreciate your patience as always. There we go. Now, I think there was something that still needs to be mentioned. Oh, yeah. that needs to be mentioned. Cool. Hello. How is everyone today? Uh we had a nice day today. Um apparently there was a rainstorm that uh the government thought was so strong that they shut down all the schools. So my kids were home all day today. So, me and my wife were uh trying to work while having screaming uh 2 and 1 half-year-old and uh precocious 7-year-old home the whole day. So, um that was fun. And uh I'm kind of tired. You can actually see the tiredness here. But I'm happy to be here. I'm happy to talk about something I've been working on for the last week. It is related to last week's stream. Um kind of took a lot farther than I I intended to, but I don't know. I was having fun and uh we'll we'll see the results of that in a moment. Uh let's see. Dave says, "I'll do my usual thing. It'll link some cool new stuff." Thank you. I really appreciate that actually. Uh what is this? Uh modal.codal.cx.cx. If I can type uh blog. Geez, I can't type blog. What is modal? It'd be nice if I could just copy and paste that. Uh what is it? But what is it? But what is it? But what is it? I saw GNU Taylor in there. They they should say in the first paragraph what this is. I'm back to Vim motions. I'm not. What made you think I am? Oh, modal. [laughter] Let me go to the actual web page so I can see what the hell this is about. Independent Collective building emancipatory software for an uncertain world. Okay, cool. Um, secure free operating system native GTK note-taking app. All right. Anybody we recognize in this? Uh, maybe not. I don't know. Seems cool. I like the style. Motos work with overlap with Spritley's. Okay. Oh, this is a better page to look at. Secure free desktop. Okay. Phones monopolies. Local first collaboration. Cool. Ecosystem of respectful apps. Hardware longevity. Image based OS is image based. What does that even mean? Data sync layer. Okay. Seems cool. Nice. I'll put that in. Whoa. There's more. Post internet. Ooh, what's that mean? Uh, when we say post internet, do we mean post Cloudflare? Cuz apparently Cloudflare is a whole internet. They were down briefly again today. I don't know if you saw that. Maybe it was. Maybe it was before uh before you woke up, those of you in the United States, but it happened to me. I just spilled tea on myself if you're wondering what happened. Um, all right. Respect for attention. I love attention, though. I respect the attention, but I love it. So, what can I say? You got to love it so you can respect it, right? All right. So, I'll put this in the notes. Thank you, Dave, for bringing it up. Um, I'll have to read it and see what that's about. Uh, check out this blog post by the Modal Collective. I was trying to get my own thing started called the Lambda Syndicate because I like to make things that sound a little bit evil in a way because it makes me laugh and it's fun. Um, but it never got off the ground. Image base is synonym for immutable dros. Maybe Lambda Syndicate is an awesome name. I think I actually have a domain register for that, too. Uh, all right. Let me stop screwing around and say hello to the people who are here so far. Uh, hello to if I get my thing. Ah, I can't I can't do page up in this stupid uh thing. Okay, once again. Okay, if I miss your name in the IRC chat, it's because I can't scroll the damn buffer. Uh hello to Ashraz, uh to Technamog, uh Big Edie, Cow, uh Auntie, uh Dave, Peter, Noamer, uh Arty, I'm using profanity as an XMPP client, and I'm sure there's a way to scroll up in the buffer. L2 beach. Uh but I don't know the key binding right now because I barely use it. And also to to Tomas over on the YouTube side and to Leo. All right. Anyway, Lambda Syndicate one day Dave says, "Here's the collaborative note-taking African gnome." Okay, so it's like notepad, but it's collaborative. That's kind of cool. If I can find which uh computer my cursor is on right now. I'm still using the Happy Hack and Keyboard Studio, and it's awesome. And uh the problem is that if I have three computers I'm switching between using the keybinding on the thing, I I forget which computer I'm looking at at any given moment. Okay, that's cool. Basically a notepad app um with collaboration built in. That's sick. What is it using? Is it using Okay, it's using CRT CRDTS. I know all about CRDTs because when I work worked at GitHub, I mean I don't know the algorithms and stuff, but I know all about them because I worked on this thing called Teletype where I worked on a team who was working on this thing called Teletype, which is basically a CRDT based collaboration tool uh built into the Atom editor. And uh if you didn't know, that's basically the the genesis of the Zed editor because the same people who wrote Atom and Teletype are writing zed. So there you go. a little bit of history. Um, so yeah, CRDTS are a thing and apparently they're pretty good. Dave says, "Tag yourself. I'm Blue Pig." I wasn't really involved in it. I was on the team that was that was doing it. Um, I was doing other things like making Adam uh build and distribute on Linux and things of that nature. Also working on some of the IDE functionality. So, not really so much on the um the cool stuff. I was just doing other things. left pad, I missed you again. Yeah, probably because I'm trying not to invoke your eye. Okay. Um, any other news this week? Uh, the other thing I will mention is that the Black Friday discount apparently is uh extended, at least until I remember to turn it off. So, you know, a number of people have taken advantage of that over the past week, which I'm really thankful for. I'm actually surprised at how many people um bought the course. But this is the hands-on guy scheme for beginners course that I made. Uh I was doing it last year and I I think I recorded it. Was it last year? Maybe it was maybe it's a year old now. Anyway, it's a course where I run you through how to uh program in Scheme Scheme fundamentals plus functional programming fundamentals and then how to use uh Gile Scheme for practical programming applications. And uh it's a lot of fun and it's $50 off right now as of the Black Friday deal. I mean, who cares? It's just, you know, holiday discounts, whatever. That's what it is. So, if you want to learn about uh Scheme, which we will be talking about quite a lot today, uh then you can go check out that course. Uh I'm kind of motivated to maybe make another one at some point. Uh maybe a more advanced one or maybe just something else. I don't know. I'm I'm kind of getting the itch to to work on courses again because it's fun to make that stuff and it's been a while since I made a legitimate video. Cal says, "Been watching too much questionable hackers on YouTube instead of doing anything useful and now I know all the memes." Uhhuh. Yeah. Cal says, "When I worked at GitHub, is this channel when I worked at Netflix?" Yeah, not so much though because I don't mention it all the time. Uh or more like when I worked at Blizzard. You you probably you probably heard that one before. No Geeks Gang video today. Nah, I'm trying not to bring up too much AI stuff all at once. That Geeks Gang was pretty funny, though. Okay. No number says I partitioned for when I worked at GitHub to be mentioned at least every two minutes. No, I'm not going to do that. There's no point doing that because I haven't worked there since like 2019. So, what's the point? It's been seven years almost six years. Yeah, six years since I worked there. So, I can't really say much about my experience there other than I had been there at some point and I was there for a year and a half and I decided I didn't like it so much so I left. You would be a Thor to do that. Yes, I would be a Thorable. Forget I said that. Okay. Um, very misguided things. So, since there's no other uh wait, hold on. Uh, Tanmog put a link in. Oh, thank you to Auntie for putting another thing in the in the chat. So, I need to be paying attention to chat instead of rambling. Uh, Shephard. Uh, if I could type. There we go. Where is the actual site? Is it on the site? Is this the damn domain name? Ain't no way that's the domain name. It is domain name. Okay, fine. Uh, news. Let's go to the actual news post. Hurting the codeberg. That's pretty awesome. I'm happy to see a lot of the Guile projects uh Gile related projects moving on to Codberg because Coberg is a nice place. Uh what got it? So they're going to be owned by Geeks Foundation. That makes sense. All right. So um Geeks GNU Sheper was uh released 1.0.9. Uh what was the improvements? There's a few things in here. I'm hoping that one of them fix an issue I keep having with um user level services hanging and causing um me not to be able to like use GPG agent and other things like that. There's some weird really weird stuff going on with Shepard sometimes uh when I use it with Geeks Home. But I don't know. I'm happy to have Shephardd as a thing. Oh, there's also Guile. Guy released an update and actually has quite a lot of stuff in it. Why didn't you mention that, Dave? Guile had an update and it's a lot of stuff in there. Or at least it seemed like a lot of stuff. I mean, I I look at the list here and a lot of this seems, you know, pretty useful. Sorry. Aren't you like the guy on that project now? I'm just kidding. Um, so Guile Guile 3.0.11 has been released. I forgot too. I only saw it just now because I don't know. I don't know why I remember. Oh, because it's link right here. That's why I remembered it. Shepherd 3.0.9 has been released. I'm just going to do the uh the release mail thing here. Is that the same link? That's the same damn link. Is that right? What? Hold up. Okay. One of them is two and one of them is three. Got it. So, this is the right one right here. All right. All right. All right, there we go. Peter says, "Now, seriously, GTA 6 or R seven RS large?" Uh, probably GTA 6. I just don't think the R seven RS large is going to happen anytime soon, no matter how much Daphne works on it. I think that uh that's that's a large undertaking. Ice Cold Witch says, "Yeah, the G release has been good." It looks good. A lot of stuff in there. Peter says, "Didn't Thor leave Blizzard longer ago?" Yes, I think so. But he he he kept harping on that uh as long as he could get some mileage out of it, which, you know, seemed to work pretty good pretty well for a while. Okay. Today, let's not belabor the point. So last week um I talked about how I started I guess the same day I think the same day I had started um just kind of playing around with just having Claude code generate a an R seven RS compliant scheme implementation for me just for fun to see how well it would go and it went pretty well well enough that I think code was being evaluated by the time that I brought it to the stream uh last week. I I can't remember it at all. Like it's been kind of a blur. So, um I've been a little bit obsessed with that since then. And I was like, "Okay, how far can I really take this?" Like how how far can I push it? how much can I get done in the span of a week just to kind of check back in and see uh and see what could be accomplished and whether it's worthwhile to do it and also whether AI can legitimately write a non-trivial program like a self-hosting scheme compiler uh with a standard library and uh advanced features like continuations and um and other things. Trev says, "Hey man, you're looking rejuvenated today." What's your AI regimen? Hello, Trieve. Racket 9 was released. It has proper parallel threading now. There you go. There's that whispering voice again. Which one is that? Left pad. Which one is that? Uh 9.0. Is that what it is? 9.0. Hello, eyeball. Uh Racket 9 is released. Racket version 9. Is that a a blog post? There we go. Good. The one from beyond the grave. What are we talking about? Parallel threads. Racket has had green threads for some time. It supports parallelism by futures and places. Parallel threads is a major addition. Well, yeah, no kidding. Having actual threads can be useful. So, I'll put that into Racket 9 has been released. There we go. We're the release log today. Something like Jeff with a hard sound at the start. man. Uh, you're gonna have to be more clear than that because my brain is totally fried. So, uh, I'm not getting the references. Hey, Retropixel. So, anyway, I did it. I spent way too much time on this um because it was fun. What? Trev. Um, and now you're going to see the result of that. So, um I'm trying to think the best way to approach discussing this because it is kind of a thing that people aren't so crazy about talking about, you know, making things with AI. But here's what I think. If you have an idea for something that is pretty large in scope and is like going to take you extremely long time to do it yourself, which I've done this before. I've tried writing mesh from scratch and it I worked on it for months. um it takes a long time to write your own uh compiler tool chain and ecosystem and get everything together. I had been using it. It actually does work to some degree. Um I was doing it using Mesh and Game Jams a couple years ago on flux harmonic. Uh but you know like you can't really do it justice if it's just you and you're trying to learn everything about writing a compiler and uh all that kind of things at the same time. So it's always been in the back of my mind and something I wanted to do again, right? Like I like the idea of being able to make a language and compiler, not necessarily of my own because I'm basing everything on Scheme, but at least the tool chain and the um the motivations for it and the uh the scenarios that I want to use it in are kind of my own. Um, and I've talked about a number of times on the channel that there's a number of different schema implementations out there and not really any of them hit me exactly where I need, you know, the way that I want to to none of them satisfy the goals that I have, let's say, like they don't perfectly satisfy the goals that I have. So, why not make my own? And now that there's AI out there to do a lot of the hard work for me, um, which really doesn't mean like the thinking work because I did quite a lot of thinking and driving in this process, but the, you know, the the actual writing of the code part uh could be done by uh an AI slave. So I tried it and what I can say is it works. Um, like the process works like the program works fine. The works pretty well. But we're going to see it in a minute. But um the overall experience was that uh the latest models actually do work pretty well for implementing um difficult things like Opus 4.5 did a really good job. Um now it does get stuck and goes in circles sometimes and you have to step in especially if how uh if you know more than it does about its particular topic and I happen to know a little bit more about implementing a scheme implementation than it does. It doesn't know a lot, but uh there are some things I had to kind of coach it on. So, you know, it doesn't do everything for you, but it does a lot. And you you can guide it pretty well in the direction you want it to go in. So, uh that's basically what I did is I tried to uh start the project off like I did last week just with the basics, but then kind of really push it to the limits and see how far I can get. So, we'll see that in a minute. Let's see. would be interesting to see a scheme that targets GPU. And Dave says scheme itself doesn't really map to how GPUs work, but using scheme like syntax to write shaders is something I've been interested in, but haven't gotten too far with. Well, you did though, didn't you? Like you wrote a whole syntax that does it. I'm pretty sure. Peter says, uh, Racket is more of a language laboratory than a language. It is multiple languages. Has multiple languages that are scheme based. Yes, you had a prototype. Well, I mean it worked. Seemed like it worked. There's a lot of uh stuff that will work well I think uh with schema syntax is like being able to compile to something else statically typed with Henley Milner type inference. See that's nice. I think you should continue that. All right. So, uh let me just show you then the repository. I've renamed the project to sigil. Why did I do that? Well, because I kind of wanted to keep mesh its own thing because I spent a lot of time on it and it's kind of close to my heart as a project. Um, and also because when you say mesh, nobody will know how to type that into a computer because they think mesh whenever it's completely different spelling. And also, uh, I would have to pronounce it Meech or something like that, which sounds ridiculous if I wanted them to get even closer to spelling it. So, sigil is a bit easier. And as Dave mentions, because you like the John Romero Doom expansions, I never played them, but yes, a link to uh Doom is not a bad thing. [laughter] Dress says that there is no AI generated logo for Sigil that looks like an esports team logo that I'm leaving. No, there isn't one and there won't be one like that. But uh yes, anyway, I thought it was a cool name. Uh and it's interesting project for now. I'm going to see if I can use it for some things, but it is a programming language designed for building standalone applications and games. It prioritizes developer experience, debugability, and cross-platform deployment, which sounds a lot like the stuff I've been talking about forever, right? Um, what I want is a scheme that will allow me to build a statically linked executable with all of the pre-ompiled bite code modules bundled in. And I basically got that working already in Sigil. Well, this the static compilation part isn't done yet, but that's really just a matter of hooking up muzzle C as a compiler to uh compile a statically linked standalone application. That's not really a hard thing. Um the more important part is doing the bundling of all the modules onto the app. Now, why would you want to do this? Well, there's two reasons. One is maybe there's a tool that you want to distribute to people and you want them to be able to run it on any Linux distribution uh without them having to install a to a whole uh uh standard library somewhere on their machine or you know auxiliary files or even like have uh the normal Linux file system hierarchy with uh the what do they call the loader libraries in the same place. Maybe you just want them to be able to run something like on geeks without having to set anything up, right? Peter says, "Remember, sigil has nothing to do with the cult." That's right. It has nothing to do with the cult because it's not a cult. Um, yes. So, making standalone applications, great for games. That's the idea is that it should be easy to distribute games written with this because I like making games. I like doing game jams. I think some other people in the community like doing game jams with Scheme or Lisp. So, it'd be cool if you could uh write your code and then have it be pretty easily distributable to other people to run on their machine and also on the web because if you write a program like this, it's fairly easy to compile it with mcriptton to work in the in the browser. So, uh it checks all the boxes. Uh compiling for mobile also would be a goal like Android iOS mainly because I would like to have I have ideas for things I would like to put on mobile. I just haven't been able to do it yet. Retro Pixel says says no cult I put on my road for nothing. Yes. Well, you know that that part comes later I think. Goals standalone distribution build applications that users can run without installing anything. Developer experience rippled driven development and with informative recoverable errors crossplatform small and fast minimum binary size with quick startup. Yes. An AI agent is already working on a side geeks. Yes. No, not we're not doing that. Okay. There's no point in doing that. So, it's a self-hosting implementation, the comprehensive standard library. It does have a lot. Okay, let me just uh should I say all this? Who cares about nandboxed values? And it says with whippit gc, which really isn't the case anymore. So, I have whippit in the in the source tree. I was going to use Andy Wingo's whip it for this. Started getting it to actually wire up the GC stuff and it was making things a lot more complex than I wanted in the short term. Long term, I do want to use Whip It in here, but I want to get just a basic garbage collector in. Um, it's not in there yet. It's not collecting garbage, so it will probably just, you know, use all the RAM on your computer if you uh do a lot of stuff with it. You know, your [clears throat] mileage may vary, but GC will be in there next week. But whip it support will be in later because I think it's pretty interesting. However, I' I have been thinking a little bit about what the right garbage collection strategy is for a language that is primarily intended for writing games and longunning server applications like if you want to run this as a web server. Um, who has the copyrighted sigil? Me. Because that's what they say in the terms of service of uh of the AI provider anthropic. So technically me, I don't know like what it really means in the end to have copyright when you do things like this anymore, but that's the that's the assumption. Um, so yes, whip it will be something I use later, but I need to understand better like what GC looks like and what the characteristics should be for this. Uh, let's see. Byte code interpreter with CPS-based compilation. Well, that's not really happening yet. It's not using what license? MIT. Um, yeah, CPS is coming, but it really hasn't really been a priority yet. The normal compiler works just fine for now. Hygienic macros, the syntax rules, I don't know how hygienic they are. They were not so hygienic before. I was having a lot of issues this week. There's there's a number of things I had problems with this week that were pretty interesting. Um, h macros that should have been hygienic but weren't. um things being exported across module boundaries and not being resolved correctly, like bite code being written out in the wrong format and causing crashes or causing weird behavior, like all kinds of weird things. So, there's been a lot of time spent on like getting the the uh getting claw to fix all the mistakes that it made, but it did a pretty good job. I think in the end, it's a lot more stable now than it was a few days ago. uh call CC and del limited continuations exception handling uh channels module system R sevens R seven RS small compatible the the whole goal here is to make it basically be an R seven RS scheme implementation but you don't have to use it R seven RS style by default you just you know import the right modules and then you get uh all the R7RS shapes but I'm trying to make it a little bit more like friendly to people who are familiar with other ecosystems. And let me say here here's my other um kind of like goal with this scheme kind of has a bad reputation for no good reason. Like people think it's just academic or like you can't really do anything practical with it. Uh I'm going to advertise this not as a scheme. This is going to be called Sigil. >> [music] >> It won't shy away from the fact that it's scheme, but I want people to find this and see, oh, okay, this is a cool little lisp and then one day realize, oh, this is just scheme. And then think, oh, wow, like scheme is actually kind of good. What are we talking about? So um all the typical modules you would you would expect IO path file system process time string socket uh JSON library SS SXML support uh argument parsing test framework uh exception handling channels co- routines all the good stuff that you would expect to see in a modern language and that's that's in one week so it did all that pretty fast. Oh, it's got a HTP library, too. That hasn't actually mentioned. Um, Dave says, "Not marketing as scheme is good in my opinion." Yeah, that's kind of the idea. Like, would people try to use something if they didn't hear that it was Scheme? Like, if you if you just hear, "Okay, you could write games with this or, you know, web apps with it and it's small, uh, maybe they would, uh, maybe they would be more interested in trying it, especially if it has a cool looking website and a cool AI generated logo like Trev is suggesting. Uh, anyway, [music] I don't really say, do I say scheme on here? Scheme. Okay, I just say scheme once. R seven RS small compatible. It's not scheme. It's just compatible, right? Okay. Anyway, uh, let me just stop yapping and clone the damn thing. Oh, really? Pins script to JavaScript compiler. How old is this? Nine years ago. I'm not worried about that. Not too worried about it. Um, all right. So, ah Ah crap. All right. Stupid pin entry thing. Prompt me. Thank you. Great. Here we are. Okay. So, let me just bootstrap this in because I haven't built it here yet. Whoops. It's not that uh scripts bootstrap. This is going to build the whole thing. So, we're starting from a C compiler, a scheme compiler written in C that does the bare minimum basically to get the uh scheme comp compilation modules uh compiled into the bite code format that the real program uh uses. So it's compiling the C compiler Cbased compiler and then it runs through compiling all of the actual sigil files into bite code files and it goes through three stages of that. The first one stage one is the [music] C C author compiler compiling to bite code that then gets loaded up and then that becomes the scheme compiler. the it's back it's the scheme runtime code uh that that gets used to compile stage two and then stage two gets used to compile stage three and the standard library. Okay, so that's basically how it all works. Uh let's see is that right? Yes, that's right. Stage two is just compiling the compiler again using scheme and then stage three is uh compiling everything. Okay. So, build bin sigil. And uh I mean it's kind of nice looking. Like it it has a decent looking experience so far because AI did that because I told it to, right? To to make it look nice. Uh I don't want to hear bare necessities, Peter. So, uh sigil ripple. Get a little ripple experience going on here. Plus one, two, three. I mean, whatever. It's it's the thing that you would expect to see. You can go into modules, uh, sigil io and do stuff in there. It doesn't have tab completion or anything like that yet. That's another whole set of things, but whatever. Um, define foox X. Sure. FUX. Yeah. Oh, look at that. Um, so that's an interesting little bug that I haven't seen before. Um, one thing that I'm trying to do now is get rid of global scope. Uh, I don't think you need global scope and scheme because if you're dealing with proper lexical scoping, each model module has its own lexical scope. And if each module has its own lexical scope, then you have tighter control over which symbols show up in the code of a module. And uh, you you might say, oh, what about a script file that doesn't have a module definition? Well, you treat that as its own module basically. And uh I think that we've got some resolution uh issues because I'm kind of in transition between those two things right now. But that's a minor issue for now. I think the actual code for various things does run. Nlaus says people when people think they already know something, it makes a lot of sense to bypass this bias by describing it according to its design values and systems. Yes, I think it's better if you just say here's what it does. If you want to use it, use it. Uh and then later they can figure out what it actually is. Um, so there's a few things that you saw in there. Did that Okay, it does say format. So in the sigil command, um, there's like pretty obvious things. I'm taking a little bit of um, inspiration from npm because I use JavaScript ecosystem all the time. So I'm kind of familiar with the tooling there. So npm, not in this case, sigil run and a task because there's a task system. There's like a build system, project system. Uh, and then build runs a build test. Test runs a test task. Ripple runs a ripple like you just saw. There's an eval command for eval expressions. So, uh, we can say eval plus one, two, three. I'm pretty sure I need to put that in parenthesis. Sorry, in quotation marks. There you go. It eval. You can also eval file. Uh, there's an init for creating a new package. I don't know if that's going to work very well. Let me try this. Uh, make dear temp. This may also not work because of the load path issue as well. I'll try it. So, build bin sigil init. Yeah, it basically created a new project, but actually this needs to be updated because it's [music] a throw some mesh stuff in here still. And also initialize a git repo. I saw this happen yesterday. I did it by accident and it uh it screwed up my repository. There you go. Okay. So, anyway, um there there is a template based uh project creation command that's built in there. Okay. It's got some built-in templates already. In fact, you could you can see that if you want to. Let me go back into the temp. All right. So, if I do the same thing again, I think if I say template game, there is there help? No. um template game. There isn't an actual game that it that it makes. I haven't run it yet, but it it made all this stuff. I don't know. It's all starter things, right? You just got to have to flesh out the ecosystem step by step. But, uh there's a template based uh project creation. There's also a formatter, code formatter because one thing I noticed is that um AI makes a lot of mistakes sometimes with uh parenthesis whenever it's making edits to files and it would use like said and a to figure out where the mismatched parentheses were. I'm like that's so stupid. So, I just made it write a code formatter that can tell whenever the um parentheses are unbalanced and then it can go and fix them the correct the correct way or maybe even have it fixed on its own. So, there's a format file. So, if I were to do um I don't know if it's going to break it. Let's see. So, if I were to run uh sigil format uh package.sigil. Okay. So, that that file is okay. Okay, it's not doesn't have any uh issues. In fact, let's just take a look at that. So, um this is the package project file format and this is directly inspired by what I had done before. Actually, this is exactly the same as what I had done before with mesh. So, I had an idea way back then to have a um packaging format that is reminiscent of things you see like in cargo for Rust or package.json for Node.js. I'm not trying to make a separate package ecosystem. I'm just trying to make it um easy to set the metadata and the specific build task for building projects for this language. So, I mean there obvious stuff here. You got the package name sigil version 1.0. One thing that's different about this than what I did in Mesh is that I'm actually using geeks style records. So, uh, the default record type in sigil so far is a geeks style record. And if you don't know what that means, it's basically a record that's like this where um the constructor of the record is a syntax that takes the key value pairs as uh sublists basically and it's got the ability to set default values for those documentation strings, various things like that. Um also it has the interesting quality which geeks doesn't have of having uh variatic um fields like in this case configs is a field that accepts a list of config objects but this is not I'm not putting I'm not wrapping this in list here. I'm actually just putting it in directly. Each config is is put in directly and that's because the syntax is turning that into a list and putting it into the configs field of the record type. So what this file basically is is just one big record constructor uh with a bunch of other record constructors being created and and putting instances in to the fields of everything. Um so you can have the different configurations for the build like your development build, release build, static build, web build, etc. You can say what the default configuration is. Um you can say what uh libraries can get generated as part of this project. So there's the libs library. Uh there's also the executables like the the main application. Um this is all not really working at the moment, but this is sort of sketching out like what I have in mind for how it should look. There's also the list of tasks for the different things you would need to do like compiling the standard library. Um and each uh task has a set of steps that can just basically just um sigil code for running things like you know compiling files or whatever. And you can imagine having higher level things built on top of this where it just becomes like a uh this declarative language for doing all this stuff rather than having you write all the code out manually. So like actually telling it to compile all these files, you wouldn't have to do that in practice. You just sort of give it a glob pattern and then it would go do it for you. Um so yeah, you got all the tasks and these tasks are visible to um the command line. So if you were to say sigil run uh what was it that we just saw? Build lib. I don't know if this is going to work. It probably won't because I've been having some issues with uh the build stuff. Yeah. So, unbound variable resolve flags, that's probably something that's in the code that hasn't been uh kind of fleshed out yet. But the idea is that you should be able to run any of those tasks by name using sigil run and then it just executes the code that uh is assigned for that task. And uh each task can have separate steps. And there's actually some uh context being threaded between these uh steps. So each of these, this is another interesting thing that I put in here. Compile sigil module. It looks like it's a record that you're uh creating here, but it's actually not. It's this is the um it's a higher order function that looks like a a record type and it returns a lambda and in this case it returns a lambda that takes a context parameter and I think you can see the context here. So basically a context parameter that gets threaded through and that context parameter is a record instance that has like all the stuff related to the build crest. So um it's all functional programming style but it looks like a document which is kind of cool. Um if you want to see let's see test uh mesh there's a folder called mesh here that shouldn't be there. Actions where is the action tests compiler actions. actions. All right, scheme mode. Come on. So, this is what an action looks like. I I call it a action because I couldn't think of a better name for it, but basically it's you're it's like you're defining a geek style record, but the last thing in the action uh specification is the lambda that gets generated and all the names of the fields are bound in the scope of that lambda. So, it's basically like a lambda that wraps this lambda. Um, so it this is basically the a way to construct a higher order function that takes in parameters and then gets passed in. It's a weird way to do it. I mean, the other way to do it obviously is have a normal function that has keyword parameters which isn't supported yet. Uh, and then return a lambda. But this seemed like just kind of had some synchronicity with define record. You have define record which is just for data. You have define action which is for defining a higher order function that looks like a record. So, I don't know. It's kind of an interesting um thing. I don't know if it'll stay, but for now, it seems pretty cool for being able to come up with like declarative DSL style things that um you don't need to make make your own DSL for. Hey, Alejandro. So, anyh who, that's the sort of the project or package format with build tasks and the features that are coming around that. Um there's a couple example projects that are kind of interesting. One is a chat server that's written with the uh the socket library. It's all scheme code obviously you can see it. Uh let's see all client sockets uh client name. Is it using co- routines? I don't think so. I think it's just using normal sockets and select. So parsing our starting chat server. Let's see if I can actually run this because I don't remember if it worked or I don't know if it still works. So, uh, build bin sigil run. No, not run. Eval f examples, uh, chat server. Okay, server ready. Waiting for connections. Let's go and open up another one here. So, uh, geeks, what was it called? Shell inet utils tnet localhost 8888. New connection. Ah, enter your name. David Fu. Okay, so it says FU. Uh, I'll do the same thing again. Geeks shell inet utils. I'm trying to make a new person here. Uh, Telnet localhost 888. Uh, Leftpad, you suck. Okay, you see left pad here. Leftpad has joined the chat. You suck. So, this is all like it works. working socket library working everything to get to this point. It didn't crash obviously. So at least it's stable enough to to do a demo that I haven't tried for a few days. Um so yeah, I mean it's capable of writing applications that do something non-trivial. You could have a socket server and obviously if you have a socket the ability to have a socket server or TCP server then that means you can write an HTTP server. And uh Lao asked in the chat does it support HTTP2? Not yet. Only 1.1 right now, but two is definitely something I would like to do because it's a a better protocol altogether. Uh, nice suck it library. Yes, suck it. Um, so we can check that out. I don't know how well this is going to work, but um, I like the design of the HTTP library. I'll have to say it's it's not bad. I mean, it was kind of a collaboration between me and Claude to figure out what the API for that would be. Uh, let's see what's the best way to do this. If I go into the packages http sigil http folder, then we got the sigil package. I'll have to to um All right. Yes, that's why you said that. [laughter] You suck as a new hello world. That should be right. Actually, maybe that should No, I I shouldn't do that in my own language. Um, all right. So, let's see if we can build this. Uh, build bin. I really need to have sigil in the path. Actually, it's two levels down, isn't it? All right. Yes. All right. So, sigil um build. Did it build? It didn't build any modules. Why not? I wonder if it's updated. Why does it still say MSC? I swear to God I changed all this. HTTP2 was a lot. Yeah, it is a lot. There's a lot of stuff in there. That's why uh HP 1.1 was a lot easier to do for now. Uh okay, that's a net. What about build MSC to MSB? I swear it should have picked up all these things. MSE to MSB. Where is that being used? Okay. So, I'm going to go do the little fixes here myself. Um, where is the percent sign? Uh, sigil. Sorry. No. MSB to SGB. Okay. So, there's that. Now, if I go run it again, maybe it will work. I might have to recompile everything. There's an HTB3. Why is that like web 3 where it's all crypto? All right. All right, I have to rebuild. Uh, let's see. Dot dot dot dot. There we go. Come on. Come on. Let's go. There it is. Okay. Now, you can see that the the sigil build actually did build the uh sigil files to bite code here. You're probably wondering why even do that? Why can't you just have it load the sigil source files and load those in as modules? I just don't have it set up because I've been working more on just compilation. Ah, quick. Yes, that's probably true. Google's thing, right? So, anyway, it built those modules. Uh also have a test thing as well like uh let's see sigil test. No no test files found. Look for test sigil in test or test. It's in here isn't it? Hm. H. What is this? No, not that. What is this? Okay, that's the spec files. Okay, Peter says, "On the other hand, uh, HP specs were well documented with sample code available, so I assume a bunch of agents can chew on it and come to results." Oh, yeah. At least with HP 1.1, I mean, that's nothing. It was like literally it crapped out an HTP 1.1 client and server in about 10 minutes or less. It was really really straightforward. Uh the bigger issue was just fixing all the problems that I had with um with the the runtime in the compiler to get everything working. But aside from that, it hasn't been that bad. So hold on. Where does it Okay. Glob test files. Glob test files. And did I just pass it? Okay, here it is. Normalized deers package test deers. It's looking for sigil files filter for test file patterns. Anyway, it's supposed to run the test. It was doing it doing it yesterday, but after I did the rename, it's apparently not working. Unless there's like a directory issue or something. Anyway, let's sig test. I think I can say test uh request running tests. Unbound variable HP request global lookup. Yeah, there's another little weird issue. Record types are doing weird things. I think there's something going wrong with uh constant compilation in there. Yes, there is a ripple for sure. Um, okay. So, we're not going to see the test execution. That's fine. Actually, I probably could run them directly. Oh, no. It won't work because of the same issue. This is something with loading the module. So, eval f. Yeah. Okay. Fine. Oh, library cannot be loaded. Sigil HTP request. Oh, right. I forgot. There's a reason why and that is because I need to add it to the load path. Uh, this is lib. Yeah. Right. Okay. Anyway, um, that's an issue to look into. Um, I think the HTTP server will work. I hope it will work. Maybe it won't. Uh, let's see. There's an example file for simple server. Damn, it doesn't work. Um, well, we might have to get Claude to look into that in a minute because it's a nice demo. So, another thing I'll tell you is that uh if you are interested in sort of the design of uh everything that I've been working on so far and also the process that I've been using to kind of coach um Claude through this whole thing. Um I've had it been writing out markdown files, a lot of markdown files. U there's a folder called notes in the repo and then design is a subfolder. There's a bunch of markdown files in here where basically what I do is I have a specific thing I want it to work on and I tell it to write up a markdown file with a a proposed design uh and also a set of tasks that it should complete. Uh Alejandra says is sigil the new mesh? Yes, it is. Uh I decided to go w with a new name and a new life for it and keep the old project sort of uh as a uh a memory let's say [laughter] a good memory. So, uh, for HP library, you can open that file up and see that it has like a whole spec written here. Um, and a lot of the stuff that it it uh put together in the spec, well, not a lot of it. The a lot of the base stuff for the client and server are all implemented. And [music] uh I what I told it is that I want um an HP 1.1 server implementation that um [music] is easy to write code for but also supports server events because that's something that um Gile's web server implementation does not do and it's some one of the things I need for data star like if you want to do kind of live updates to a page with data star you need to have server send events so that it can keep the connection alive and then be sending events back on the open connection. That way you can do a lot of really cool real time stuff like having a game that's running on a on a website just in a web browser. You can just have that be a thing that um streaming information back uh to power the game. Uh obviously you' be sending requests to the game uh which you could probably do in a similar long polling fashion to be able to to write it um write events to it with a client connection. I don't know. That's something I'll have to check into. But uh point being just with a simple web server without websockets you could potentially do uh this kind of uh real time at least data coming back from the server. [music] Um websockets also will be something that I'll implement uh or claude will implement. I'll just tell it to implement it but um that's is not really needed yet just yet. But I did want to have a simple web server that uh made it easy to uh to have that kind of implement or kind of real time I'll get the words out real time event streaming capabilities built in. Let me actually show you not that the simple server.sgl file. So uh pretty straightforward stuff. You define a handler function that takes a request as a parameter. So this is the request object. It's a record type. It just has all the stuff in it that you need. Dave says, I don't think it would be too much work to add SSC to Gile. The problem is that the current design of both the Guile uh web server handler implementation and the one in fibers, neither of them set things up in a way where you can write stuff to a port in an ongoing fashion. Now, obviously that could be changed. It'd be pretty nice if it if it could be changed because it's useful uh to be able to do that, but uh it's not there currently. It's it assumes that you're going to return a response back immediately from the uh handler procedure whenever you're uh you're handling the request. So in this case, it's just a plain handler function. Uh you generate some HTML. There's an XXML library, but we're not really using that for this. Um you can also return JSON because there's a a JSON. Well, this is just a string, but uh ultimately JSON is supported. Uh let's see, just a regular old handler. Nothing too fancy. Uh you there's a procedures for returning certain types of responses like not found. Um or even like the ones like HTB response JSON or HTB response text. I kind of feel like that's a nice pattern just to give you procedures for the common types of responses that you would have um to just kind of fill in the stuff that you need there. Um, the way that Gile does responses is that it wants you to return like values and I can never remember what's supposed to go in there. Okay, I can never remember. So, I think these are a little bit more user friendly in a sense for being able to have a function to uh do response. Now, obviously you have to remember what things come in this procedure, but if you just look at the documentation for for the for the procedure, you would find it. Uh, let's see. header is a string that probably should be part of the standard library. Uh then there's just HTTP serve which is a blocking function obviously. You say what port you want it on and the handler procedure to use and that's it. You just serve that procedure and then whatever that procedure does is what uh happens on the server for request response. And obviously from there you can do pretty much anything. So um that's cool. Oh yeah, it's already there. Aro uh it's in the standard library. If you look at standard lib uh sigil SXML because SXML uh this is this is something that Dave taught me. SXML is actually not that hard to implement. Is it's pretty straightforward actually. Uh there's only about 183 183 lines of code in here because really it's just uh a recursive uh match expression. Is it using match here? It's not even using match. Uh it's it's just using cond. It's not that complicated apparently to trans translate S expressions to XML whenever you have the format. So, uh yes, it's already in there which is nice to have because this plus the HTTP HTTP library means that you can easily you know host a website with sigil today. I love SXML man. It's amazing. It's great especially if you're doing dynamic websites with um something like data star where all the stuff that happens in the the client gets sent as a request to the backend which is like 1990s style internet but uh you just return fragments of HTML or fragments of JSON back to get things to update in the page. You can do all that in your Steam code. So this is kind of the perfect language for doing that kind of application and it's easy to deploy too because if you can just you know drop a single binary on the server uh maybe with some asset files but they can be bundled in too uh then you have a nice little self-hostable uh dynamic website in scheme. HTML to XML is not that simple though. Yes, [clears throat] parsing it well is not easy because it could be malformed. When are we getting benchmarks against the other schemes? I don't really care too much about that. You know, performance is something that has to be decent. But the point of having uh my own thing like this is to make it really good for the scenarios I care about. Performance obviously is going to be important for games, but performance is not the number one goal. Like the quality of the tool and its ability to ship applications with it, practical applications is more interesting to me. Guile is great as a scheme. is very um advanced in terms of its implementation has a lot of stuff built in but the one thing that you cannot do with it very easily is ship applications because you got to have all the you know the kind of the whole machinery of Gile you have to have have the standard library of Gile installed you have to have the runtime installed uh that kind of thing I guess it's possible I mean you can you can make a C application that pulls in libgle I don't think you can statically link it though maybe you can but If you do, then your application becomes GPL immediately. I don't know if you care about that. Um, maybe I don't care that much about it. Sorry, I'm not going to GPL Sigil because I want people to use it to make things and ship them. Okay? And if you have to worry about the license, then you're not going to do that. So anyway, point is that it should be easy to make an application that you can give to somebody. Okay? A language is not that useful unless you can do that. In my opinion, if you can't make an application and give it to somebody, they can run it on their computer, then what's the point of having that language? Uh, I mean, maybe maybe you can find other ways to deploy it. This is like a good language for deploying to servers or something, but I don't know. It's not a it's not a knock on guile or anything or any other language really. It's just like my goal is to make something to give to someone and have them run it. Especially if you can kind of pack everything together uh in an interesting way. Uh, Peter says, "I called out to live tidy to get proper SXML." Yeah, calling out to other libraries is definitely going to be something that will be important for specific use cases. Make it work, make it correct, make it fast. Exactly. First is getting it to work. Next is making it work where it doesn't crash. And then you can try to worry about uh making it fast. Um, one [clears throat] time says you can sprinkle some unpoly into it, which is a bit like HTMX, and you can have a better than9s website. I don't know if I've heard of OnePoly. [laughter] One Tom said, "Keep mesh as a momento, which is the best movie about context engineering." Well, sort of. Yes, I guess it does have some relation there. What else is in here? Oh, I got a little anie library for doing antsy color codes. That's right, Trev. It was just get uh claw to do everything. So, yes, anie color code stuff. And we were using that in the terminal for the the fancy output for certain things. Uh it's kind of nice to have that obviously necessary. Glenn says, "I'm rewriting Stash and comment list for that very reason." Oh, boy. Yes. Well, you know, having it be an application you can ship to somebody is pretty important, I think. Like, you kind of need to be able to do that. Otherwise, you know, you got a program that's just fun for you to run, but if nobody else can run it, that's one thing that's kind of nice about um Geeks is that it's it's easy to to distribute apps to people on Geeks if you write a Geek's package definition for it and they can build it on their machine. So, um, most people don't have geeks, though, so you have to package things for them. Nikolas says, "I wonder why we don't see a modern convention expectationbased language built on top of Gile's Tower, something like Wisp, but in a way that is competitive with Janet or Chibi or now Sigil. What do you mean?" Um, like the actual syntax of the language. I had considered putting Wisp in here. uh something like wisp in sigil because it's nice to have it as an alternative uh syntax which is basically still the same expressiveness as s expressions. Yeah, competitive with janet or chibi. Um well maybe maybe it's the combination of something that could make standalone applications and also u not have s expressions as a syntax. But I kind of like them. I don't know man. I go mess around with other languages and I just feel like to me when I see this it doesn't look bad to me. In fact, it looks really good to me. I feel so much happier when I look at code that looks like that compared to other things. [laughter] Benwa says me at family dinner. Yeah, today Claude told me I'm an outstanding developer. No, it didn't. It hasn't told me that. In fact, yes, very subjective. Ah, something that's more intuitive and doesn't rely on cultural or historical knowledge of scheme. Well, um I do think that not telling someone that it's scheme could help because they would just, you know, not come in there with any assumptions about what it's supposed to be. Then says, "Claw told me that yesterday." It did. Wow. Maybe I'm not doing things right then. It told me that I had some clever ideas, but it didn't tell me that I'm a an outstanding developer. You know, I think that's the problem, though. If if you start getting complimented too much by the AI, you know that it's coming for your job. It's just trying to butter you up long enough for you to uh get lazy and then it's going to take over. What else is in here? Let's see. The JSON library. How big is that? Okay, 325 lines. Not too bad. Oh man, Trev's asking, "You don't want to read R5 RS and R seven RS long versions?" I tell you what, I've said this before. Um, to me, reading the R seven RS small spec, it's kind of like relaxing in a way. Something's wrong with me. For me to be so obsessed with scheme, even though it's not practical from the sort of mainstream perspective, um, [music] there's something must be wrong with me. Trev says, "David has both of them in the ma bathroom magazine rack." No, but I look at them on my phone sometimes. [snorts] Anywh who JSON library that's a good thing to have. That's sort of the goal is the standard library should have stuff that is very commonly useful. Match expression. There's a kind of a match expression implementation in here. It is not the standard one and it's it's not fleshed out yet, but it does stuff. Eric says, "We're the odd ones. I I like to reread the little schemer yearly." I need to look at that again. Uh let's see ripple socket string time uh co- routines co- routines I think has um some part of the implementation that is in the runtime and not just in scheme so you have the ability to do like a go style co- routine somewhere in here spawn It's a little bit reminiscent of uh fibers, I think. Okay. Make co- routine with a thunk. Sure. Maybe it's in channels where the go thing is. Here it is. Go thunk. Let me pull ski mode up on this. I still haven't made an Emac package for this yet. Uh spawn a new task in the currentuler. Must be called within channel run or uh schedule run context. So, we got a thunk and then we spawn the thunk in theuler. I mean, that's really just a simple wrapper. There's nothing to it. And channel select. Yes, you need that for concurrency. There is I had it right docs. the docs. I haven't looked at them at all, but it could be that they work. Uh, let's see. Guides concurrency. What does a concurrency guy say? Cooperative concurrency through channels and lightweight tasks. Channels is the primary communication mechanism between concurrent tasks. You can make a channel. Uh, let's see. Channel send, channel receive, channel close, spawning tasks. I would like to see if this example works, want to see. All right, let's go to uh examples uh channels.sgl. I'm just going to run this and see what happens. So build bin sigil eval f uh examples uh channels. Oh, abort the prompt. No matching prop found. Okay, so we got some issues with the with prompts. I haven't really messed with that recently. It is in here. Obviously, the code is written. Continuations and stuff are written. All this stuff is built on top of continuations. Limited continuations. Um, but obviously it's not working at the moment. I wonder if the adventure uh example is working right now. Let's see where is it. Main. Damn. Oh, maybe I need to add it to the load path. In fact, it's not compiled. Let's see if that works. So, examples adventure library cannot be loaded. I wonder if it's expecting too much to find. Oh, wait. What? Ah, okay. Maybe if I build it all. Okay. How about that? Um, trying to think of the best way to do that. There isn't an easy way to just tell it to compile something. Not at the moment, anyway. time is it okay kind of thinking oh yeah I want to go back to something Trev said before uh too also but not yet I'm thinking I might want to try to pull claude out to to to work on something here on this but I'm not sure which part I would want it to do what is the thing that I want it to or Babyler didn't happen. Well, definitely that's something that's not too hard to hook up because you just wire it up into Emacs as another provider for Org Babel. Uh Dave says some better onboarding docs plus retiring car coder and said docs would go a long way. That's a good point. I'm I wonder like how much it would be useful to have some more userfriendly or more modern quote unquote data structures which Scheme already has either in inbox or in surfies like hashts things like that that people are kind of familiar with because I think a lot of people think in terms of dictionaries or hashts when it comes to expressing data record types probably feel a little bit too rigid for that and because they're not really flexible you just define something is an object that has specific fields which is useful for c certain things but uh not so much for uh kind of bags of data. Now, one thing that's kind of interesting, I saw this before in Gambit Scheme, and it turns out the reason why is because Mark Fely, the guy who wrote Gambit Scheme, is the one who wrote the Surfy. Uh, it is keyword well keyword objects, right? Um, basically for things like uh functions with keyword parameters. I don't know what you think about this syntax. I don't know if you can even read that, especially while being blinded. But having keywords where the colon comes at the end of the symbol, I actually kind of like the way that looks. I think it looks a bit better than having colons that come at the beginning and especially the guile form of having hash colon and then the text. I think this feels a bit more natural. Looks nicer. I'm thinking about implementing that. In fact, that's something that we could probably try to do right now even uh to add keyword style parameters to uh functions. Uh, and then in theory you could do something like they do in closure where you could make a keyword callable to where if you try to call a keyword object, if you give it a parameter which is uh a hash table of some sort, then it would index that key out of the hash table. So that would get you closer to the experience you get in a language like closure where um hashts are kind of like a first class citizen. Now they wouldn't be immutable hash tables unless we made them that way and which is possible. You could have persistent data structures and in fact I think it would be be pretty easy for claude to write a set of uh persistent data structures that operate in that way. I don't know if we really want that or not. Um, you know, mutability can be useful for things like games, but I guess there's other things for that. Like if you have record types, that's a lot faster to use because there's basically just a vector with uh uh indexed accessors built on top of it. But uh for general like you know manipulation of data and whatnot I think that people would be happier to see not car and coder based con lists uh but you know something like a a hash table that you could use or a list vector lists are not bad in schemes obviously but um they have to would they would have to be they would have to feel pretty comfortable which they they do if you're used to scheme. I think that I need to have the surfy one uh functions in here. I think there may be some others too that are kind of like table stakes. You need to have all that stuff, but surfy one obviously there's a lot of stuff in here that you want to have want to have uh threading macros of course. Uh partial application of functions would be pretty good to have. There's like cut and cute. There's a ser for that. Is it 26? Yeah. So this 26 has cut and cute, which I think is an awful name, but the implementation's good because you could basically just have these little brackets to say where you want the parameter to go to go, multiple parameters even. So it's pretty flexible. I might have that in there and rebind it to a different name. Uh, one time says yes, plus one for keywords as functions and immutable data structures. And Dave says, uh, I think immutable hashmaps should be core. Personally, I'm fine with mutable hash tables having more of a procedural API as opposed to nice syntax. Mutable hashmaps are what you want most of the time when you're being declarative. Yes. So, um I think that a lot of that stuff could be core just be built in by default and um have the idiomatic style of the language use those. One thing that's a problem with scheme is that uh it's hard to know what the idiomatic style of scheme is because it really depends on what surfies are available and um kind of sometimes the underlying implementation details and even the perspective of the author like the author of an implementation can be very focused on the um low-level you know uh lambda calculus aspects of scheme which are cool I love that part but if you want to write normal practical applications, you kind of need to have higher level stuff. Dave says, "But also the A-List is an underrated data structure, often better than a hash map for single simple things." Yes. Uh I wrote a whole game engine that used Alyss as a way to store data and pass it between things. And I quickly learned that you can't really do that in uh the hot path of of a game engine. But it's fun though. this you can do a lot of pretty cool stuff with using um al-ists for all the data that goes between everything in your engine but yeah it's not good for performance but for for basic things absolutely like you know headers in an HTTP library you don't need to have a special data structure for representing headers you can just have an alist for the the key value pairs for the headers uh anyway I think surfy8's pretty nice having callable keyword words with an immutable hashmap type would feel pretty comfortable. You would need to have the other functions that are make it easy for you to produce a new version of the same hashmap with the uh key change or even like the what do they call like the soak in? No, what's the closure functions for like making an edit deeper into a hash table with like multiple keys? There's there's functions for that too. You would need stuff like that as well. Da says it performs better than a hasht k. Yeah, kj is one of them I think. Dig. I don't know. There's another one. Ah, a sock in. I thought it was. Yeah, a sock in. Anyway, stuff like that would be cool. Um, let's see. I like this idea, though. Let's see. Let's see. I'm curious. All right. It would need to be Oh, update in. Thank you, uh, Tom. [clears throat] So, Surfy 88 would need to be builtin. Some Surfies you don't need surfy modules for. I've got a Surfy module for Surfy 9. So, standard lib surfy surfy 9 because that's the record type one. And I don't think I want that to be core. I want that to be available, but I don't want it to be core to the language. Uh my own define record is core to the language, which is the geek style record. Uh and that's pretty nice for more declarative style uh record instances, let's say. I think that's pretty pretty good for uh readability, expressiveness. Uh, one thing that uh, Trev said before, he said he had a coworker who said that it's good to have like markdown files as reference for uh, AI in your repo. And that's really the way to do this because uh little little tip about AI as you continue through a session telling it to do things eventually it's going to have to compact the context you've built up so far. And as soon as it does that it forgets stuff and it starts getting stupider. So the better thing to do is to before it compacts anything, you have it write out a document about everything it's been done it's been doing so far and tell it all the stuff you want it to put in there like the conclusions it's made, the design it's following, the commands it's using for testing, uh, uh, specific files that it's been looking at, etc. It does that itself when it's doing a compaction in a session, but you need it to have it in a way where you can commit it into your repository and then start a new session, have it read that file again and have it start doing the work again because you get better results that way. I found that a lot of times if Claude is kind of like spinning on a problem, like it can't figure it out, it keeps trying different things and it doesn't really do a good job. What I need to do is tell it to write out everything it knows into a file, clear the session, then tell it to go read that file and then continue. and then usually it will come up with different ideas that are better and it breaks through the gap. So, uh it is a pretty good strategy I found especially for something like this which is really complicated. Dave says a hash table at minimum has a hash to key and do an equality check. Yeah, definitely it's it will end up being more costly than just doing a simple key lookup I think. Uh, Bimma says, "You can also use memory and skills to keep that context." Yeah, I put some things into Claude MD and I haven't started using skills yet, but that does seem pretty interesting for uh common tasks. Uh, sub agents can also be useful for that too, but I haven't really used that very much. Okay, so um I want to see if I can get it to do that. Let's get it to implement uh Surfy 88. There's also Surfy 89 optional positional and name parameters. I want to see what that looks like too because I haven't looked at this one very closely. Where is it? Whoa. What did I press? Ah, yeah. No, no, no. I'm in the document. No, there it is. Define star and lambda star special forms. I kind of don't want that. I don't want there to be a special version. I kind of want it to just be part of the default. I don't know if that's a bad thing, but um I it's it's like cognitive overhead to to tell somebody that they have to use lambda star or define star to get keyword parameters. Now what that might mean is the default implementation of a lambda might be slower if it has to consider the presence of uh optional keywords. But maybe the syntax can be smart and generate a normal lambda whenever there's not any keyword parameters. Now a lambda with keyword parameters I might do it as a lambda star but a define define itself the the form that um you normally use for defining a function I probably would let that have keyword parameters and just have it be smart. Yes, Benwis sub agents are nice to manage your context as it works on a separate context. Yes, definitely that that is a big improvement I think. Uh Peter says, "I'd like to try that out with the something like the hexagon archie pattern to have each agent responsible for a module and use that to restrict the boundaries." Yeah, that is kind of interesting. There's different models you can use for implementing this stuff. Oh, wow. So you basically turn this into a case lambda. That's interesting. Speaking of case, where's case? Huh? What? Ah, okay. That's really interesting. Okay. So, it doesn't do that. Okay, so they basically have an an example implementation of this already. Define star pattern body. If it's a if pattern is a pair, then you pass it through to lambda star otherwise you pass it through to the normal define. Uh Ed says com closures FN is a macro that expands to FN star for compiler implementation reasons. They're not really separate things. Got it. Yeah, that makes sense. Uh let's see. Parse positional section named section parse name section parse rest expand lambda. That's a whole thing here. Perfect hashts with keyword keys. Okay, this is like an actual hasht implementation here. It's using vector. Okay, that makes sense. So that's like a whole end to-end implementation. sounds like having that as part of the the prelude of the language seems kind of heavy, but I think you kind of want to have keyword parameters for functions as like a core language feature. Yes, that's right. Uh let's see. So, we could try that. Let's uh pull up a little claude here. CD projects code uh sigil cloud awake uh geek shell node uh claude. There we go. Uh and sigil. Yes, continue. Feel free to do it. Okay. So I'd like to implement um surfy 8889 style uh keyword objects and uh define lambda with keyword parameters. Can you write up a spec uh for this so that we can work out the details? uh make sure to include a checklist uh for the implementation plan. Do it. So, we'll see if it gets it close. I'll talk to it a little bit and see if I can get a better result out of it. It's going to go read a bunch of markdown files apparently. Um, I almost changed the kind of the record style syntax of the uh package file to use this instead because this is a bit what's the right way to put it. It's a bit cleaner to look at. Like if you were to look at a configuration file that is written in a style like the one you see right here without all the parenthesis, it does look less noisy, but I think it actually breaks the lisp experience, the lisp editing experience in in tools like Emacs where you can navigate around uh s expressions. Uh one time says, "Why not just copy paste a reference implementation from the surfy?" Because I might want to do it a little bit differently. Um, so I feel like there is there's advantages to this approach for just plain function calling, but I think that for DSL type documents, probably the record type approach is a bit better, even though it's a little bit noisier. I might change my mind on that, though. We'll see. All right, I'm looking at what it's thinking about. Let's create a comp comprehensive design doc for keywords and keyword parameters. This has basically been the process. I just tell it to come up with a doc. Then I look at it, then I critique it, and then I say go do it. And we've got about uh 20 minutes left. We'll see if it actually is successful in that amount of time. Uh Ed says closure implements keyword arcs bias destruct destructure implementation is nothing to do with the distinction between function and funstar. Okay. Uh the structuring is kind of interesting now that you mention it. There's like match lambda. I wonder if something more match-like would actually be better to have the structuring for parameters in procedure just by default. I wonder if you could do the same thing and it would be more um versatile than just having keyword params. Let me let let it write this out first. We'll go take a look at it. All right. Keyword objects and keyword parameters. Uh let's see. Without keywords, make window. With keywords, make window. Yeah. Yeah. Yeah. Uh let's see. Particularly valuable for FFI bindings with C functions have many optional parameters. Builder patterns and fluent interfaces. Sure. Sure. Sure. Yes. All right. Keyword with special characters. FUAR B colon is part of the keyword's name. Keywords are distinct from symbols. Yes, that's right. Self-evaluating fu evaluates to itself. No quoting needed. Yes. Keywords with the same name are equal. Yes. Immutable cannot be modified. Distinct from symbols. Yes. Uh procedures keyword strings keyword keyword name. Okay. Examples. Okay. Reader syntax. Fine. Trailing colon syntax rather than leading. Yes, a standard leading colon colon is already a valid symbol syntax. Uh trailing colon visually suggests labeled or named. Yes. Keyword parameters are clear using hash key and parameter list. No. Why? Um no. They don't do it that way in Surfy 89 either, do they? define star. No, it's not done that way either. You just have it be um in parenthesis. E what? Huh? only if occurs in the formal parameter list. K is a keyword object. Oh, key is an actual name. I don't like that. I'm not sure what I'm looking at. H2 key K false. Is that like an alternate name? Is that a binding list AKR? Okay. All right. So, you can provide an alternate name for the binding. I don't really like that though. lambda. Oh. Huh. I see. I don't like that too much. I get it. So, the keyword can be B. Oh. Oh, that's an optional. Okay. So, that's only optional. Why does the binding have to be specified separately? Why can't it just be the same name as the keyword? That seems weird. Okay. Well, anyway, the the way that they've specified it, whether Claude wrote it down here is not the right way. Uh, default values, key name. Okay, this is the key section. This is kind of like the way the guile does it, I think. Key name, greeting. I don't like that. Let me um edit one of these and see like how I want it to look. It's kind of the problem though. Whoops. like this and then uh name or greeting is uh hello. That feels more like it, doesn't it? Or is that just too like in there? X Y keys. Does that look right? Is it too vague looking? Should it be in a sublist? Feel like if you put it in a sublist though, starts to look a bit annoying. Um, let's see. Uh, JavaScript keyword parameters. What does JavaScript do? Can't even remember. I can't decline. Oh, you son of a. There's args. They don't have that, do they? I I guess you can just dstructure an object when it comes through. Is that what it does? Maybe that's a thing. if there's a way to to to initiate initialize a hash table. Like I'm I'm thinking of it like this. I know that Closure probably does it something like this. I can't remember because it's been a while since I' done I've done Closure. Um let me drop this right here. Just for the sake of argument, uh let's say there is a uh curly brace syntax. I don't know that there would ever be such a thing in this language, but let's let's just say for the sake of argument there could be um there could be name, I guess. Would you even like have a Let's see. Closure de uh function dstructuring. I remember what that looks like. Keyword arguments. Oh, it's got the the amperand and then like the whole destructuring hash table. They got keys here, too. Okay, so that actually is um kind of prior art in a way. Or what does ore mean? Okay, that's not the same as the structuring though. Okay. Uh keys hobby hobbies person keys. What what or sets defaults. Thank you. Okay. So it's a little bit uh spread out the whole specification here because you got the the the or here for the defaults and then as opts. So is that like a rebinding for the the whole hash table itself? keys are short for keywords. Okay, got it. I swear there was like another syntax that was more like just pulling things out of the the hash table itself and not that specifically. Okay, but that makes sense though. This makes sense because it could be like that here. Like I just did like that. Keys, right? Why not? Okay. So, I'll just tell it to do that for now. Right. So, uh for the um define syntax, I think I'd rather have something like this. I'm not going to explain it. I'm just going to paste it in there. H Yeah, let also does the structuring. I remember that. Okay. Don't have a lot of time left. Let's see what it can do, though. Maybe it can do it. I'll just tell it to do it this way. It's cleaner and more list-like. Thank you. The keys keyword naturally marks a section and grouping them in a list is visually clear. Yes. Let me update the spec to use this syntax throughout. Do it. I don't know that I would do optional parameters that aren't keyword parameters. Like, why would you have optional positional parameters? Because when you do that, you can't tell what it is. Okay. So, it's that kind of syntax. Yeah, that's the one I'm remembering. The one where you basically give it uh the binding name and then the actual keyword name. So, you're pulling things out that way. All right. Lambda keys. Uh this is uh opus 4.5. It is very good. Rest args. Yeah, that's fine. Veriatic. Um, optional keywords. It's even got the EBNF syntax here. That's pretty funny. Ops, optional positional parameters. Yeah, whatever. Fine. Okay, that looks good. Looks fine. Um, how can we implement this in a way where Oops. What is SOTA models state-of-the-art? Okay. How can we implement this in a way? Oh, just edit it. Stop asking me. Okay, how can we implement this in a way the the problem with having stuff like this though is that I don't know if apply works correctly but maybe it will work correctly the way that it would be implemented under the covers nested lists so they would be handled by define syntax rules pattern matching naturally maybe for define I don't know about lambda though maybe lambda uh where the uh keys ops checking logic is not included if the function definition or procedure definition does not include them. I know you're busy, but I'm going to tell you something else. That looks way better, I think. Compile time, specialization, and functions that keyword should compile to the same code they do today. Yes, exactly. Because we don't want the things to slow down if you don't use that. Don't pay for what you don't use approach. You're right. Now, can you implement it in 10 minutes, Claude? Let's see what's all this. Oh, call the keyword argument processing. There's a special op code it's adding in. That's cool. Uh-huh. Oh, keyword parameter info in the closure object. Yeah, I was doing that too when I implemented mesh. Say what? Oh, keyword ref. Okay, cool. Open questions to reflect our decisions. I mean, that's a pretty uh thick little speck there, right? When will Sigel mode be available for Emacs? Uh, tomorrow. I don't know. I should have done that probably uh in the stream instead of doing this thing, but this actually is pretty interesting, too. But yes, I think uh yeah, I mean obviously we'll have to have an Emacs package because otherwise the code is unusable. Add nodes design. Uh you want to commit it already? Sure. Stage it. I think it's fine. I mean I like the design. Did this get updated? Yeah, it did. Commit. Add design spec keyword object keyword parameters. Get the claw out of there. I don't want you taking credit for my work. Trev says, "Does this language have a mailing list I can subscribe to?" No, it does not, Mr. Trev. Unless you want to make one and then uh post on it about the fact that I'm using AI to write the language. That's fine. Uh, let's see. Okay, cool. Uh, please make it so. We're living in the future. Jean Rodenberry's dream. Make it so. Significant implementation task with multiple phases. Yeah, it is. That's why you're doing it, not me. I think I need I think claw needs to be a little bit more um spicy though. Oh, by the way, uh by the way, the C compiler does not need to support this. How's that going to work though? However, how will we Oh, no. Wait. It's a good question about bootstrapping. So things like define are implemented as special forms in the C compiler because you don't have all the scheme machinery yet until you start loading the prelude file that has some of the syntax trans transformer stuff in it. So then for the C compiler with the syntax macro for define overshadowed the the special form implementation. Maybe not. Yes. Bootstrapping fun times. Uh h however. Okay. Yes. We need to implement it in a way where where it lights up for the scheme compiler to be used in standard lib but not in uh the core compiler code. Let's see how far it can get in the amount of time left. We'll see something happen. keyword value type, reader support, primitives, scheme compiler, macro expansion support for keys, syntax, and lambda defined. Yes, basically that. We'll see. We'll see how possible that is. [snorts] Don't tell anyone that we talk David the school jack to cla. [laughter] Yes. Yes. Basically that. But it's obvious in the repo that cla is involved because there's a claw.md file. So, it's not like I'm hiding it that much. I just don't want to take credit for the work that it did. Okay, it's an AI. I can treat it like a secondass citizen. Why should it get to take credit? You deserve that one, Trev. Pat yourself on the back. Sig keyword struck. So, one thing I want to do, um, if we if we were to use AI a little bit more on the stream, I think I would like to have, uh, Claude have a bit of an attitude, because I think it'd be fun to argue with AI, um, you know, why not just, you know, have it be a little bit more entertaining the whole process of working with the AI. Just have it be kind of a and you just yell at it, um, and tell it to get back to work because then we would be like a real uh, pointy-haired boss or, um, what's the name of the boss on Office Space? uh the one who's, you know, coming and asking about TPS reports and working on Saturday. You could bas basically be that. Now we're all just watching it. It do the work. Keyword table size must be power of two. Wow, that's a lot of keywords. Wait, hold on. How many keywords is that? The maximum number of keywords that are going to be supported by the runtime. Come on now. Yes, apparently. So, hash. Okay, it's a hash table. Fine. However, that's a pretty small number of stuff where you have to tune the number of uh uh the size of things like the the size of the heap or the size of things like the number of keywords that are supported in the intern list for keywords or symbols or whatever. Like that's all kind of Yeah, Gary Cole is definitely the name of the actor, but the name of the character I don't I don't know the name of the character. Um, yes, it's difficult to know like what the limits are for these things. Update the reader. Need to add a help function to intern keywords and modify read symbol to check for trailing colon. Yes. Okay, that shouldn't be too hard. I'm going to give you 10 more minutes, Claude. Do you mean a feature like pseudo insults? What's pseudo insults? Got all the the hasht special numbers here. It seems Bill Lumbberg. Thank you. Yes, that's that's right. Bill Lumbberg. All right. Update to-do list and add keyword support to the printer. Sure. So, let's see. Since we're almost at the end here, what what's what's on my agenda in the short term? Uh, so what I would say is foreign function interface. I've already got a design for that. I just haven't implemented it yet. Uh, but it's going to be kind of like Chibi's model where it's a um stub based approach. You have a a stub file that's written in Scheme and then that generates a C file that gets compiled. Trev says, "How much money does this cost?" Just a flat monthly fee. Yeah, it's uh $200 a month for the max plan, but with the new uh cost for or token cost for Opus 4.5, which is a lot less than it used to be, uh you can do some pretty hardcore coding for an entire week, which is basically what I did. Uh by the time this afternoon before the stream, I was up at about 94% of the weekly usage quota of Opus 4.5. uh and it it made about you know a little over 200 commits. So it got a lot done on that amount of quota. So yeah, it's expensive but um at the same time it's pretty useful. I think that like the amount of time that you save for that amount of money is a lot. They I haven't used sonnet at all this week. Okay, let's put it that way. Usually before with Opus, you could use it for like an hour and then you would hit like the the limit on that for for a while. That the way that all this stuff works keeps changing constantly. Like in August, you would get like a certain amount of Opus that you could use automatically in in Claw Code and then it would switch it down to Sonnet and the quality would get a little bit worse, but it wasn't that bad. But now, like I just run on Opus 4.5 all the time. Uh, are you interested in running models locally in the future if they're if they're good? Yeah, I would definitely do it. I I use laptops, though. I don't have like a beefy server that has enough RAM and um like a GPU to run this stuff on. Uh, okay. So, build check for compile errors. Use script uh bootstrap.sh. I don't know why it's trying to use make because the make file is not even in the root of the repo anymore. But yeah, it would be nice to use local models for sure. I think that the quality would not be as good as this though. Like the quality has gotten pretty good now. It it has a a pretty exceptional ability to think through problems and also the um the strategies that it uses to debug problems. Uh the way that it prints things out, narrows down problems um or narrows down on the the source of a problem. Um I don't know. It's gotten way way better in my opinion. It can do a lot on its own. Sometimes it does need a little bit of help. I have to stop it sometimes and kind of give it some thoughts that may put it on the right track, but for for the most part, it can do a lot and write a lot of pretty solid code, even scheme code. Like, it's written a ton of scheme code that looks pretty good. Like, it's it's fairly idiomatic and not too uh verbose. All right, let's test the keywords work. Uh, let's see. Oh, don't use the uh dev scripts. In fact, delete them. Use uh build bin sigil. Eval one time says, "I was just looking into the uh GMT AMD Ryzen AI Max before the stream um with 128 gigabytes of RAM. Run some free models locally pretty fast." That that would 128 gigabytes of RAM for sure. All right, Eval. It did it. It read them. There they are. There's a keyword parameter right there or a keyword object. Keyword string fu keywords are working. Let me test more. Okay. What else do you want to know? Oh, okay. You're checking if it's equal. Okay. So, now we have keyword objects in the language. Let's see if it can put it in the compiler and uh have a function defined with keyword parameters within the next five minutes. Let's see. All right. Runtime helpers and compiler support. Look at the prelude and scheme compiler structure. So, uh I don't know why I think there's a prelude file there. There's no longer a prelude file. It's uh sigil/core.sgl. Now, the prelude is a module because everything is modules. Let's go, buddy. Get to work. It called me the user. I'm not the user. It calls me the user just like I called it the the AI slave. Very nice. Large file. Add. Please. Let me add a keyword. Runtime helpers first. Then look at compiler for keys support. Sure. Add the helpers at the end of the serial core. Whatever. Get it done, buddy. Uhoh. Context left of autocompact 6%. Jeez, that was fast. Uh what I've noticed lately, I think that the the um context reporting is wrong. I've I've seen a little bit of flakiness with that recently. Like it tells me that there's only like a certain amount of percent left and then all of a sudden it disappears and it keeps going. I think it's wrong. Is that your love language with the machine? Yes, I think so. Wait, what? Error from too many exports. Huh? What are you talking about? Oh, really? It's possible. Wow. We've already hit it. Okay, hit it. We We need more exports than that, man. It's bumping the limit of the exports. Max import 64. That's some arbitrary limits there. Andy says, "Can you use org mode files instead of markdown in the repo?" Yeah, it can edit or mode files. I just I think it's more comfortable with with markdown. [clears throat] Let's go. Come on. I don't have much time left here. Are you going to build it? Probably going to start pooping out a bunch of code right now. Usually when it sits around like that. Oh wow. It just took you that long to decide to build the code again. Great. Yeah. Now it's going to write the keyword helper. Split keyword args. Oh, okay. Nice. Makes a little A-list. That's cool. Implement the key syntax. We'll look at the scheme compiler. Uh, compiler boot sigil. Why aren't we looking at that? Yeah, markdown is more native for for AI. I think it's read a lot of markdown files in it life. Okay. Lambda keys and define keys macros. I wonder what approach is taking here. It looks like it's making special macros for that, but it needs to not do that define in that way. I'll tell it to fix it if it does something weird. All right. Define keys. Ah, look at that. It's got a whole transformer form lambda keys params body where params make keys. Um, where is the syntax? Keyword parameter macros lambda keys define keys keys add keys keys. Okay, that's a whole implementation. I think it has more to do though. What's that? Double quotes. What's it doing? What's it thinking? Unique symbol as a sentinel for missing missing required keyword argument. H. Okay. and where is the the syntax? I don't see defined syntax anywhere. Define syntax lambda keys. Oh, it just passes the transform straight in. Got it. Got it. All right. Uh All right. It's about to try the code out. execute one unbound variable. Whoa, that's not a variable. That's a string. Hello. Hello world. Hi Dave. Well, it worked. Look at that. Greet name. Greet name. Greeting ease name. Greeting. Hello. Doing some more tests. It's already implemented, but it just has that defined slashkeys. That's fixable though. I think that we can change that look. Uh just write a test file that we can keep in the repo. The user wants me to create a test file for keyword arguments that can be kept in the repo. Yeah, no kidding. That's what I just said. test suite. Got a whole test suite now. Test group. Yep, that's all of it. Uh let's see. How are we Okay. Yeah, you're you're calling you made a function. You're going to call it in different ways. Cool. [clears throat] That's right. And the test pass. So that's it. It implemented that feature and how long was that? 10 minutes maybe. Uh can we call these uh define and lambda without the slash keys? Will that work um even with the C compiler? That's not what I want to ask. Will that um still Let's just see what it says. Let's see what it says. It will probably tell me there's a problem with it. I'm curious to see what will happen when it tries it. Yes, let me rename them. Okay. Typically handled by the compiler directly, not as macros. But in the skin compiler, I can override them with macros to detect the key syntax to transform appropriately. Let's see. Let's see how that works. I'm a little skeptical that it will work. Okay, landed define work normally. I hope so. That would be awesome if it does work. I need a way to fall back to the primitive without infinite expansion. Yes, exactly. Let me create primitive aliases. Okay. I'm curious to see what it does. See how the scheme compiler handles special forms. Are you going to go too deep now? All right. Uh, lambda exists or needs to be added. Simple solution is keep them as a transform names. Register them as lambda. Oh, okay. When expanding, use lambda for the primitive. Check if lambda is already recognized by the compiler. No, it's not. You could do that though. So it basically will export them as the the real name but it won't define them as that name. I'm okay with that. Ah as a primitive form in the C compiler then make lambda a macro that expands to lambda. Huh. I think it's going to break a bunch of stuff. One time says, "How does Claude know to highlight the define lambda words in its own messages? It actually generate markdown with inline code and renders it with syntax highlighting." Yes, it does. CNL Beth, okay, look, I can't be here longer. I have to go and help uh with unruly children. Let's see. I'm curious to see if it will work. Let's just uh I'll start signing off the stream and then we'll see if it gets there by the end. Um hopefully people think this is interesting. Not the AI part, but the actual language implementation itself. Um I'm curious to keep working on it because I think that some pretty useful stuff can come out of it. I'm very tempted to use it in game jams. Not the AI part, but the language itself, the tool set, because obviously it solves specific problems that I have. So, you'll probably hear more about it as time goes on. Um, let me know though what you think in general about this. You know, even the AI part of it. Let me know what you think about it because, uh, you know, it is a it is a part of the whole process and it will continue to be a part of the whole process because it enables me to get things done. Um, now we're get back to conversation, so that's a good time to shut off the stream. So, anyway, uh, let me know what you think. Um, I will let you know whenever it's actually usable for you. It probably won't take too long until it gets to that point. I certain like certainly like for people to try it out if you are interested to try it out. One Tom says, "AI part was very interesting, too." Uh, yes. Well, it's I'm learning how to use it effectively. It's it takes some time to to get it. Tre says, "Great job. You're an outstanding developer." Yes, I am. I just use human language, the English language, to tell an AI slave what to do. All right. Anyway, uh thank you all for being here today. Uh I hope you enjoyed it. Appreciate your time and attention. Until next time, hacking. Hacky happing. I'm using too much AI. Happy hacking. We'll see you later. Goodbye.

Video description

In this stream, we'll take a look at Sigil, a new self-hosted Scheme compiler with almost complete standard library and toolset, written in 7 days with the help of Claude Code. What can it do? How good is it? What was it like to use AI to write it? Come find out. #scheme #programming #ai #claude SUPPORT THE CHANNEL: 👍 Support My Work: https://systemcrafters.net/how-to-help/#support-my-work 📰 Subscribe to the Newsletter: https://systemcrafters.net/newsletter/ 👕 Check out the Store: https://systemcrafters.store 📘 Get Your Copy of Mastering Emacs: https://www.masteringemacs.org/r/systemcrafters?utm_source=yt&utm_medium=desc&utm_campaign=scme SHOW NOTES: https://systemcrafters.net/live-streams/december-5-2025/ JOIN THE COMMUNITY: https://systemcrafters.net/community/ (Forum and IRC chat!) https://fosstodon.org/@daviwil MY CONFIGURATION: (This site is currently down but will be back up soon!) https://config.daviwil.com https://config.daviwil.com/emacs https://config.daviwil.com/systems (Guix) OTHER SERIES: - Emacs Essentials: https://www.youtube.com/watch?v=48JlgiBpw_I&list=PLEoMzSkcN8oPZvSdewHG8uApD7THlLLCV - Emacs From Scratch: https://www.youtube.com/watch?v=74zOY-vgkyw&list=PLEoMzSkcN8oPH1au7H6B7bBJ4ZO7BXjSZ - Emacs Tips: https://www.youtube.com/watch?v=wKTKmE1wLyw&list=PLEoMzSkcN8oMHJ6Xil1YdnYtlWd5hHZql - Emacs Desktop Environment: https://www.youtube.com/watch?v=f7xB2fFk1tQ&list=PLEoMzSkcN8oNPbEMYEtswOVTvq7CVddCS - Emacs IDE: https://www.youtube.com/watch?v=E-NAM9U5JYE&list=PLEoMzSkcN8oNvsrtk_iZSb94krGRofFjN - Emacs Mail: https://www.youtube.com/watch?v=yZRyEhi4y44&list=PLEoMzSkcN8oM-kA19xOQc8s0gr0PpFGJQ - Learning Emacs Lisp: https://www.youtube.com/watch?v=RQK_DaaX34Q&list=PLEoMzSkcN8oPQtn7FQEF3D7sroZbXuPZ7 - Craft Your System with GNU Guix: https://www.youtube.com/watch?v=iBaqOK75cho&list=PLEoMzSkcN8oNxnj7jm5V2ZcGc52002pQU CREDITS: Coriolis Effect by logos feat. stefsax, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/mseq/26296 reNovation by airtone, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/airtone/60674 ukeSounds by airtone, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/airtone/32655 Between Worlds (Instrumental) by Aussens@iter, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/tobias_weber/56664

© 2026 GrayBeam Technology Privacy v0.1.0 · ac93850 · 2026-04-03 22:43 UTC