 Okay, alright, so this is natural script writing with Guile by Pretend Arnie, so Arnie's newest step towards a perfect script writing with syntax, so hello audience and presenter. I am pretending to be Arnie, Arnie is imaginary and is not here, presents his gratitude. So hello Arnie and then audience should applause, that's what it says, don't leave him hanging, he's not here, that would be so rude but luckily you fulfilled it. So this is the output of that program that we just saw, so okay, the audience applause and stuff like that, and so you can see there's this kind of cool, it looks like plain text but it's also got some scheme involved in there, kind of quasi-quoting, but yeah, okay, so let's continue on. So apparently that's actual Guile code, parse the scheme at read time, you can import the language back, so he's got a whole website about Wisp, if you haven't heard of Wisp, Wisp is this kind of white space significant Lisp that Arnie's been working on and it allows you to do Lisp as if it allows you to write scheme in a very kind of like pythonic natural looking way. So where, prior art, where do we start from? Presenter set, oh okay, so I'm supposed to give this just in seconds each, okay. So this is Battle for Wesnoth, I'm also familiar with this structure here. These are, they actually use INI style config files for their entire system, including they actually embed programs instead of the string values of everything, like with their whole DL cells. So anyway, you know, for both, dialogues are not its main purpose and yeah, you really don't want to embed programs inside of the values of strings and INI files. Okay, scum, see him from Monkey Isle. Not bad, something's odd, but it does have the kind of actor, you know, it looks a little bit more like a script, all right. Python, his last try, you know, all these quotes, no action between the words, it doesn't look good. Look, you got three quotes there just to be able to say the thing and have a new line, okay. All right, so what's next? Spells with Lisp. So this actually, I don't know if anybody's ever seen this, there's a fun article about casting spells with Lisp. There's also a book that came out called Land of Lisp that includes it as well, and it's got a little text adventure that you write inside of Lisp. You see, Lisp and text adventure is another connection, and you're, when you go in, but it looks very not natural, right? Okay, so examples, where Arnie is. So here's an example, looks very much so like writing, yeah, just kind of a script, but it's, again, got the string quasi quoting, and the output looks good. It has the actual structure in there. So here's some more examples. Apparently this is actually, this looks like it's a defining a list of answers here. And again, it has the output, but you can see that it actually converted the stuff that was here because it was a list, and it actually did a map across it or something like that. Anyway, his summary is it works, and he's happy. And his next step is making games, main complications, shipping games made with Gile. You can find the source code in the Wisp poll here. Thank you. Thanks, Arnie. Here's apparently the basic version of the Three Witches thing. Scott. How many people are using this? I don't know. I gave a talk, I have a blog post where I showed how to use it with Geeks, Dusty Cloud, Geeks, Wisp. Yeah, so I mean it's kind of cool because Wisp lists my own surprises. So I've used it. So you can see here side by side the same code. I'll make it a little bit bigger so you can see it. So here's a Hello World example in Wisp, and here's a scheme version side by side. And you can see they look pretty similar, right? What this mostly does is they can do any S expression language, not just scheme, as long as it's got, as long as it knows how to convert things to the parentheses. So unlike a lot of other white space significant languages, you can do macros with it, too, and stuff like that, right? Which is really hard. Like if you've used Julia or Dylan or something like that, they're theoretically kind of Python-like syntax, but with macros. Except they actually use a completely different syntax for the macros thing, because without something as cool as S expressions, you're just not going to get it, I guess. But anyway, so here's the version of the code side by side, where on the left you can see the geeks definition of grep in scheme. And then if we shift to the right, you can see it actually looks pretty similar. And actually I think quite readable. In fact, I gave a talk on this, and I showed it to some friends. And one of my friends said, wow, looking at the right version of things makes the left version of things a lot less scary. And he's like, and I don't like lists, right? And so he's like, now I'm not as scared of parentheses, right? So I actually think that that's one of the coolest things about Wisp is that it might end up being a nice in-between of things, right? And of course it would probably make this look a lot less gnarly with all my code, although of course I love parentheses, so I don't mind it. Yeah. Other questions? You can do questions for either Arnie's thing, because I can probably only answer to such a limited amount, or about concurrency or 8-sync things. It's up to whatever. Arnie, is Wisp intended to make the entry into S-expressions easier, or is it really intended to be used? I think it's intended for both. Let's see. Arnie's website. Well, wait. Does he have a live version of the thing that's happening right now? Livestream from the guile development. Oh, man, it's so meta. We get deep. You have no idea, Arnie. Okay. So his whole idea here, as far as I understand, was that he wanted to, and Arnie came from Python originally, and he has a whole book that he wrote that you can find online about his experiences of moving from Python to guile. And I think he was, he still found it really difficult to overcome the parentheses, and now he likes the parentheses, right? But like many people, yeah, and he's quoting me here. I guess it's appropriate that I'm up here representing Arnie. And here's him from last year, even more meta. So yeah, I think that it's actually intended to be both. You can definitely write stuff in it, and I think that Arnie hopes to, that people will. But it's also, I think, reduces a lot of the pain of coming into it. And I think it would be great if we had Wisp as one of the languages that ship with guiles VM by default, right? We've got this theoretical VM tower, and it's so much of an easy match to guile anyway. Why not include Wisp with it, right? It seems like a pretty easy win for us to include it. And then when somebody's like, well, I would use Scheme, but I don't like the SAS expressions, we can be like, well, look at Wisp. And like, you know. Yeah. And just like Emacs emulating them, you're like, it's exactly like that other thing except for in all the places that it's not. And then they go read the manual, and they're like, it's like, don't worry, you don't have to understand the parentheses, and then they can go read the manual, and it's full of parentheses. But no, I think it's a pretty cool project. I think that Arnie's doing great work here. OK, another question about whatever. OK, I have a question for Chris. So about Aetsync, do you have a feel of the overhead of passing messages? So when I tested last, and I know. Oh yeah, so the question is, what's the overhead of passing messages in Aetsync? So A, there's a lot of things that can be sped up. Like for example, I'm converting numbers to strings in there, and I actually could just have it not append the numbers to a string and just have them be separate, and then I wouldn't have that problem, right? So there's a lot of things that could be sped up. When I did a test on my Libreboot X200 from a decade ago, I was able to get about, I think, 25 to 50,000 messages at a time going for per second. So not great, but not really good. But if you look at ACA, which is a Java-like actor model thing, they've got, I think on modern machines, so I have no idea what it would be on my X200, they've got about a million messages a second or something like that. So it can be improved. There's also, I think, a bug that you won't notice in the mud, but I know about it, where I keep accidentally adding a prompt every time you resume one of the delimited continuations. So that's adding so overhead that's what it's just a bug, and it can be improved. So I don't really know, but for me, it feels like 25,000 messages per second is, for most things that you're going to be doing, it's probably good enough. And you could also probably, like, so I'm planning on writing a web server application, and for that, the majority, I'm not planning to break it into as many fine-grained actors as, like, the mud, right? It's okay to do your usual thing where you have, like, the views and you have, like, a request comes in and it runs through the whole thing and then runs out, right? So you could just have an actor for the web server, and then, you know, when you've got your database thing over there or you've got your running, like, if we were, it was MediaGoblin and you're trans-coding videos, you can have an actor for the trans-coder or something like that, right? So you might only have a few actors kind of rarely sending messages between each other in that kind of case. So I don't know, 25K seems like okay enough for now. I'm not happy with it, but I'm not unhappy with it. So, yeah. So I'm not copying, I'm passing it by reference, and also in Aka, I listened to a talk on that, on the plane here. They don't completely guarantee immutability. It's, like, probably immutable by default, but which is, you know, like, and so in here, I'm in mudsync for the entire thing. I'm passing as, like, like classic list, as expressions between all these things, right? For the most part. Like, I'm passing anything that could be written by SchemeWrite, basically. So this, it would be fine. As long as nobody takes one of those cells that I send and then mutates it by doing, like, setCutter and then just ruins my program, right? Like, as long as they don't do that, it's fine, right? And you even could pass a mutable thing to another actor if you're gonna never handle it again or something and you're in the same address space. But, right, so this doesn't serialize it between each thing. It actually just constructs the record of the message and then it does that. So it's by reference. Unless if you're sending it to something on a different process, of course, it's going to serialize before. Yeah. Anyone else? Any questions? Didn't you have a question, Alex? So the thing about dual that I said earlier, one cool thing about duality is that you can implement one on top of the other. So it's possible. So Andy Wing goes definitely a way better programmer than I am, right? Like, I'm unintentionally having prompts stack up without realizing it, right? Like, I don't think Wingo would make that mistake because he knows how things work and I don't, right? And like, but like, so fibers, I think, is probably a lot faster right now and stuff like that. And I would like to borrow the same data structure that they're using for the scheduler, which is actually borrowed from Ian Price's PFDS library. Whether or not they're going to merge or not, I don't know. Well, first of all, they implement two very similar but technically different abstractions, right? CSP versus the actor model, right? Those are not the same thing, but they can be implemented on top of each other. I don't really know. One of the things I was going to have, so CSP I think is a lot more mathy in some ways too, right? The actor models also has actually a fully like developed math concept, right? Of course, I'm using Goops, which like immediately makes me feel extremely on mathy. But by the way, I was originally, I never had time to program in here, but I was originally going to have a room that you could go into inside the eight sync hive, which would be the eight sync mutation chamber. And there would be a bunch of actors, like each one of them inside of that and they each send a message and then they like mutate horribly. And then there's like this woman who's like a functional programmer in the corner and she's like, oh, disgusting. Every time that it mutates. And like if you chatted with her, she's like, she's like, follow the white rabbit to see like the functional future version of actors. And then you can like follow the white rabbit and you go in there and then like they've got actors. And then instead of mutating horribly, every time that a message comes to them, they actually clone with a modified version of itself and the old body gets thrown on top of the garbage collector and then like dumped into a shoe and she's like, this is much more humane. I never got around to coding it. So I just had to describe it. But anyway, so yeah, I don't really know. And I think Wingo doesn't know either. Like Wingo and I both in our manuals both reference each other's library. And I think the main reason for that is that nobody really knows, right? It could be that eventually just fibers turns out to be way better than 8th sync and I'm just like, well, I'm just moving over to fibers, right? I don't know. And I think that, and I think in Wingo's, some writing that he did, he said it's too early to guarantee what the proper high level concept of things is in Gile right now, but like we can collaborate on the low level concepts. So suspendable ports, for example, is kind of the low level side of things and then we can experiment in the high level thing. And I think that's good. You know, unfortunately it does mean that maybe eventually I'll completely rewrite mud sync to be, you know, in fibers or something like that. But in the meanwhile, I think it's still, you know, it's still fun. It's still fun to experiment with. By the way, 8th sync is in geeks. So you can, and I think fibers will be tuned. Hopefully, if Wingo said he was going to try to add it, I don't know if he did. I ran into troubles while trying to package it, but I think he said it could be packaged now. But anyway, so if you want to check out Gile-8th sync and start playing around, there's a full tutorial if you go to the 8th sync there is a full tutorial. There's not API documentation who needs that. But if you go to the tutorial, it'll actually walk you through from writing an IRC bot to writing your own network-denamed old actor and then it just talks about how great Emax is. But anyway, yeah, so I probably answer that in over detail. Anybody else have any questions about any of these things or whatever? Just a suggestion. Why don't you take this talk about the Python instead of Python-Deprude next year? Maybe I have to go test the interesting shape of Python. Oh, you mean the Python-like syntax? Yeah. Okay, well, I mean, I'm not Arne, so which Arne should do it, for sure. But as meta Arne, as meta Arne, I say that's a great idea. I should show up there. I should talk about my experiences of moving from Python to Gile and then show why I wrote this other thing that makes me feel like I'm writing Python but I'm actually writing Scheme. So yes, I think it's a good idea as meta Arne. Anybody else? I mean, we could just take a break or something. Yeah, so yeah, we've got 12 minutes till the next talk. All right, everybody's able to, for the first time in this entire thing, we've got like an actual break, so all right. Thanks, everybody.