How'd you like to listen to dot net rocks with no ads? Easy? Become a patron for just five dollars a month. You get access to a private RSS feed where all the shows have no ads. Twenty dollars a month. We'll get you that and a special dot net Rocks patron mug. Sign up now at Patreon dot dot NetRocks dot com. Hey, guess what it's dot net rocks. I'm Carl Franklin, an amateur Campbell. Well, you didn't have to guess because you knew because you You pushed the button to listen, didn't you.
There you go.
Yeah, it's just like the old way we telephones. Right when foleophones is gonning aft to the wall and I called you, I didn't have to ask you where you were because you answered the phone you knew where it was.
Hey, you're home. That's usually what we would say. I'm glad I got you. Uh wow, comf coming up or maybe it's already gone by. I'm not sure. We'll take care of that later, but in the meantime, let's roll the music for a better no framework awesome? All right, what do you got?
Well?
I think both you guys would be interested in this. This is Unity Technologies has an mL agents repo. The Unity Machine Learning Agents Toolkit is an open source project that enables games and simulations to serve as environments for training intelligent agents using deep reinforcement learning and imitation learning.
Hmm interesting, Yeah, certainly it's all been on my radar because I have a bunch of friends in the gaming industry that a lot of the generative AI technologies are being evaluated to make games less expensive to make.
Ah okay for building games, not necessarily for having intelligent agents in them.
Not actually making the game play better, but like instead of having to voice act every single line and plan every single line of dialogue out the fact that you can generate a voice now and you can give it an area to talk about and it will literally, you know, just generate to you know, spoken word for you speaks to game experiences being better where you know, there's not
a fixed path through all of the words anymore. They could say even more diverse things and you could go create far more words effectively, you know, imagine your behavior towards an NPC actually changes the way that NPC speaks to you, even if they communicate the same facts.
And the hallucinations add bonus entertainment in a fantasy world that.
Would be a feature in a game, not a feature in real life. But yes, exactly right. But tier one video games to the billion dollar games, of which is maybe ten a year, cost a couple hundred million to make, and so you can't make more. It's very high risk intolerance. So the idea that we'd reduce the cost of game creation, democracize some of this technology, it's pretty compelling.
Well, Richard, before we get into the message that you want to read, let's talk about what happened in nineteen twenty four twenty four.
This is Oh, you got any favorite highlights for nineteen twenty four?
Yeah, so this is episode nineteen twenty four, and Dylan you can chime in here too. As we're getting further and further up in history, I thought, you know, let's highlight some of the things that happened that year. Some of them may or may not be relevant to what's going on today.
In nineteen twenty three, I mentioned the beer hall pushed right.
That's right, So there are consequences for Adolf Hitler in twenty four and.
Twenty four is when his trial is and he's quote, you know, imprisoned for five years, but he's out in nine months.
Out in nine months. Yeah, that's right. Yeah, right's mind camp while he's at it. Yeah, so that must have really made him mad and that may have contributed to his whatever. Okay. So January twenty fifth, the first Winter Olympics nineteen twenty four Winter Olympics open in Shawnee, Chemnois in the French Alps. Sorry French people, I do not speak French.
Chemony. It's a tremendous apport, ah because billionaires use it to fly in ghostkiing for a day and then fly out again. And it's one of those strips that you kind of there's a suddin point where you kind of need to fall off the end and get up enough sp that you can pull up at the other side of that nice It is true the walk.
Yeah, and that was the voice of Dylan Beattie, who does interesting things with computer's code, comedy, music, and video, then travels all over the world and tells people about it. Hello, Okay, so I got his buy out out of the way. January twenty six, Petrograd, which is Saint Petersburg, is renamed Leningrad and it'll revert to Saint Petersburg in nineteen ninety one. February fifth, gmt A radio time signals broadcast for the first time from the Royal Greenwich observ Cool nod to
Richard there, that's a good one, yeah. February fourteenth, the Computing Tabulating Recording Company CTR, based in the US state of New York, is renamed to IBM IBM. March twenty fourth, Jean Sibelius or Jean Sabelius conducts the world premiere of his symphony Number seven in Stockholm. March twenty fifth, the Second Hellenic Republic is proclaimed in Greece. April first is when Hitler was sentenced to five years in Landesburg prison
for his participation in the Beer Hall. Butch April sixth Italian general election nineteen twenty four, Fascists win the elections in Italy with a two thirds majority. April seventeen, Metro Pictures Corporation, Goldwyn Pictures and Louis B. Mayer Productions are merged to become MGM. May thirtieth, Italian socialist leader Jacomo Mettier Mettioti, matt Tiati. I'm going with Mattiati speaks out against fascism. A few days later, he's kidnapped and murdered
in Rome. September nineth through eleventh, the kahlhat and riots breakout in India. October tewod the Geneva Protocol is adopted by the League of Nations Assembly as a means to strengthen the League, but later fails to be ratified. November tenth, the trial one hundred and forty nine begins in Estonia, eventually resulting in the conviction of one hundred and twenty nine communists, including several members of the Reche cow. I don't know how to say that, but.
You're also talking about this is the time of the emergence of the Soviet Union, right, Yeah, that's right. Tendency of communism YEP.
December twenty in Germany Hainlf Hitler's release from the prison. December twenty fourth, Albania becomes republic. In December thirty, American astronomer Edwin Hubble announces that Andromeda, previously believed to be a nebula, is actually another galaxy, and that the Milky Way is only one of many such galaxies in the universe.
Sound that long ago, is it?
Yeah?
I would add one more four is actually the beginning of the civil war in China that will lead to the Chinese Communist Revolution. Wow, although they don't really They say the war started in twenty seven, but Kaichek is grabbing cities like stuff is up before Mao actually kicks off the march. It was an interesting year. Two ways about it.
Yeah, so you mentioned that is the IBM became IBM. You know, IBM has averaged four patents a day since then. Wow? They Yeah. If you average out the number of patents awarded to IBM engineers over the last century, it's something like one hundred and fifty hundred years, which is about four point one patents per day, sustained for one hundred years.
And in the last ten years they've all been fonts.
IBM has the largest gone to computer in the world the moment. It's called the IBM System two.
There's only one of them, and it's the largest cryo cooler on the planet.
Nice.
Nothing beats you in a blab from the Jetsons, though, lab Shall I read a comment? Yes? Please? Who's talking to us? Switch?
I'll grab a comment. I've jumped into the wayback machine here and grabbed a comment off the show twelve o three. So that's from twenty fifteen when we talked about programming in Go Wow, because I know we're going to have some conversations in a language with Mike ben Sickel generated a ton of comments lots of people. It should you know, back in twenty fifteen, polyglot was already hit. But you know it's now it's just mainstream. And Aaron has this great comment, admittedly.
From nine years ago.
He said, being passively familiar with many languages and toolkits provide some value. Commonalities start to jump out at you, and you can start to develop an understanding of concepts that transcend a specific language. That said, actually, quote getting things done does demand a good amount of attention to a single framework long enough to become effective in it. The most effective way I know to learn a language more deeply is to switch from I'm learning X to
I'm trying to get Z done. Go make something right right. In other words, set out to solve a specific problem right a small program, contribute to an open source solution. The quote fear of missing out that people often have jumping from language language is much suppressed by trying to get something specific done, especially if you go contribute to an existing project.
That's how I taught myself.
Yeah, yeah, for sure, make something. But I also like this contribute to open source because if you can get through a pr in a new language from somebody else who uses the language meaningfully, like, that's a confirmation you've learned some things, you're doing it well enough to make a contribution.
I always try to make those projects just out of what I think I can do, just outside the box of what I think my ability is.
There's an interesting parallel, like, as I'm sure call, you've also had folks come up to you like, how do you learn to play the guitar? I want to learn a play an instrument. It's like you come like learning a plan instrument. You start now and you I'll still be learning when you die. Yeah, but you could learn to play a song. What's your favorite song? Like like
pick us? Okay, maybe not that one, Maybe pick something a little easier, a little simpler, but go hook on the water for a reason, right, And like by the end of the week, you'll be able to play Smoke on the Water. Congratulations, Now you're a guitar player. Just one with a limited repertoire. Yeah, and then you'll learn another song, another song, another song, and eventually the pieces start to click and the theory starts to make sense.
My favorite interaction is and I'm playing the gig and somebody comes up and says, hey, wow, how long have you been playing it? Him about forty minutes?
So, Aaron, thank you so much for your comment, and a copy of music Koba is on its way to you. And if you'd like a copy of music Koby, write a comment on the website at dot net rocks dot com or on the facebooks. You publish every show there, and you be comment there and ever reading the show. We'll send you a copy of music go by.
And you can follow us on ex Twitter if you like. We're still there and we've been there for years. But the cool kids are now hanging out at mastadon. I'm Carl Franklin at tech hub dot Social and.
I'm Ridge Campbell the Social. But the really cool kids are all on Blue Sky now because that's the latest wave of migration. Was seeing. Yeah, this has been pretty good right now.
I got a whole bunch of followers there all of a sudden, Yeah, yeah, Blue Sky is cool.
It's very much well, the web interface is very much like Twitter. Yeah, and that's the kind of what.
Is Jack Dorsey after all. The big thing that's happened recently is that they haven't thing called starter packs, so you can go on and this I think is just a great feature. Like if you're organizing a conference and all your speakers are on Blue Sky, you can give people a starter pack. You like to click one button and you're going to follow everyone who's speaking, right, that's pretty good. And so a couple of folks started putting together like this is the AI starter pack, this is
the you know, three D gaming starter pack. This is and so you're like, where will all these followers come from? And then you're like, oh, oh, I'm in a starter pack? All right? Yeah, and you know it's I was talking
with Rendle about it earlier. It kind of feels like Blue Sky has got a little better, and the kind of gets it's a little worse and then better and then worse, and it's like waves coming up the beach, but the tide is definitely coming up, and it's getting closer and closer to hitting what feels like a sort of critical mass.
Yeah, yeah, I have my Blue Sky's social account. I have one hundred and ninety five followers, so not a whole bunch, but I do post there. I'm at Carl Franklin dot b sky dot social in case anybody cares.
So the other thing I really like about the way Blue Sky is set up is that your handles your domain, so or if you want to set it up, it can be. And so if you're you know, I'm dylanbet dot net, because I'm dylanbet dot net and I have the DNS and I control the domain, so that's how you know it's me. So none of those kind of blue tick verification, right, and you know, like the sort of big newspapers. If you've got at Washingtonpost dot com, then that's it. You're the Washington Post. You don't need
blue check marks and stuff. And you can because if you control the DNS, you can sort of sub delegate it, so you could have like, you know, Richard dot dot net rocks and Carl dot dot net rocks, and the whole mechanism filters down. I'm a big fan of anything that uses DNS in interesting ways because it's such a flexible and powerful system that I think has really stood the test of time.
So well, we're also making it sound like mere mortals won't be able to use it, but that's not true. It's very easy, isn't it.
Yeah, Yeah, it's that Lenark. If you just want to sign up, you just sign up and hey, now you're reading and writing and you don't need like mast it on. You know. I love what they tried to do with it, but it feels like Linux. It feels like the people who get it don't see the problem, and the people who don't get it, I'm never going to get it.
Are you saying you don't like Linux and are the majority?
Linux is a wonderful cloud server operating system and I will never use it to edit video? Put it that way.
Ah, good right, Okay, got concern there for a minute. All right, dyl we're here to talk about to catch up with you first of all, and talk about some new things that are happening in your language, rock star. Why don't you, yeah fill us in on how that came to be and bring us back a little bit.
So well, I was trying to figure out what it was. I can't remember, but I was on the show a few years back talking about Rockstar, which is a tweet that turned into a spec that turned into a so the joke tweet it was, yeah, it's a joke, prank literally, Yeah. It was a tweet from I think it was Pulster Vell, the Octopus deploy guy, just saying, hey, you're had a confused recruiter. Someone should make a language called Rockstar.
Because they always ask for rock Star developers.
Yeah, and there was this whole trope of we need to hire Rockstar developers and we're looking for and you know, and one of the nice things is that that has that has gone down a little bit because it and I think, yeah, yes to you, well, you know me and all of the other people who have leaned in
on the joke and kind of got with it. And so this it started out as a parody specification, just a kind of you know, tongue in cheek piece of technical writing about like you know, it was one markdown file on a GitHub po And what I've done is I tried to take as many cliches from rock and metal, heavy metal, soft rock and yeah, and see, you know, is there enough formulaic consistency that you can derive a grammar from it? And it got it kind of got too far, too fast for me to give up. Hilarious,
I said to folks before you know that. It was the three factors behind taking the joke too far. I had Internet, I had alcohol, and there was no one that stop it. I was I was meeting friends in a bar and they were like, I'm like, I wonder if you could and you know, to stop you. Yeah, you'd be amazed how much of the fun side of
the web is attributable to those three fures. And so this, you know, it turned into like a parody spec with you know, things like you want to write a function, like you know, most languages, you have the function declaration and the return type, and then you have some brackets around the parameter types. And so it's like, well then you say, well, this function like modulus takes a number and a divisor, and you're like, all right, well and we'll use takes a this and that. That's function syntex.
So my function takes first argument and second argument and you know all kind of thing like variable names with spaces in them, which is easy to do when you're designing a language in a bar as a joke, right, and oh well, we're going to have you know, my variable, your variable the variable. And you know that the idea that came from from Crockford, from Douglas Crockford talking about the whole people arguing about pascal case, camel case, kebab case,
snake case change, and he's like, we want spaces. We all want the same thing. These are stupid arguments. So I'm like, he's absolutely right. You know, we want to be able to have a variable called, you know, customer
account category because that's what it is. And if you're writing documentation, you don't use pascal camel case and and so you know, I came up with this this spec which had kind of just enough structure to write a joke fizz buzz so you do rockstar interviews, And then I stuck it on the internet and I went to bed, and do.
You remember any of that? Because it's really a poem, isn't it.
So desire is a love struck lady killer is how you initialize a variable to one hundred Because one of the ideas I had very early on is you want to be able to write numbers by using the lengths of words, right, which is you know, I love anything that has two different meanings depending how you look at it. I love you know, kind of optical illusions in art and that kind of thing. And I thought, well, if you take the length of the word, that's a decimal digit.
So love struck is a ten letter word, so that's a zero, and lady killer is a ten letter word, so that's a zero. So a love struck lady killer is one zero zero, so that's one hundred. And of course that means you can pick any words you want, so you can actually write code that rhymes and and
so you kind of throw these ideas together. And then what happened next is that the Internet found it and they liked it, and people started filing issues on the get repo with the spec because and some of them were just jokes like, hey, the number system should go up to eleven, like happen It's like hah, yeah, no, but yeah, I get the joke, but no, we're not right that, And some of them were genuinely people saying, hey, well what should happen here? I like, there's undefined behavior,
and the specification. I'm like, of course, there is a joke, why do you care? And people implemented it. There are a couple of people built Rockstar interpreters, someone built a Scarlar interpreter, someone built a rock Star Python transpiler, and all this is within like a week of this this first draft coming out.
And so suddenly you've got an obligation because yes, you know, not enough alcohol, not enough.
If you had a little more alcohol, then it would have been more obvious that it was a joke.
It was in Sydney, Australia, and they they cut you off there if they think you've had too much. So they're almost incubating the conditions for these kind of wonderful, terrible things to happen, you.
Know, So we can blame that bar wherever it was, or that hotel bar, probably the Baxter. Yeah, therefore, now the Baxter was later in the evening. I definitely remember that that the Evening progressed to the Baxter. If you've never been to Sydney, Australia, folks, the Baxter in is this wonderful whiskey bar. And the first time someone takes you there, they you will think they are taking you there.
To kill you and dispose of you. You're going down an all, down an alley, down a flight of stairs, and you bang on an iron door and then behind it there is this little speakeasy. It's a one. Wow, it's about one of the best collustions of whiskey on the planet. Yeah, it is. It's it's phenomenal. And so and you know, this kind of became a recurring theme of like, oh wow, if I'd known people were going to do that, that I would have I would have.
And so that there's there's about a week of you know, a lot of it to activity, and then and it dies away like it made hack and use, it made Reddit, it got write ups in a like Boing boying and things, and then it kind of goes away and then it makes read it again a couple of months later, and there's another influx of activity, and then it kind of dies away. And then Carnegie Mellon University used it in there Capture the Flag competition.
Right, I remember this story.
Oh no, and that had like that that was in twenty twenty, and that had like thirty nine thousand people. And of course every time it happens, there's a bunch of you know, mostly sort of younger developers, because a lot of this stuff is sort of undergraduate fresh air level going, hey, how does Rockstar work? How does this work? How does that work? And there's a voice in the back of my head going, Carnegie Mellon was looking at
my joke. Oh yeah, you know, and so it kind of it never it's never been big enough to be important, but it's also never gone away. And there's this little community of people out there on the web who clearly they really enjoy playing with it, and that one of the things that really blew my mind is there is a you know, a double digit number of people out there in the world right now who Rockstar is the
only programming language they have ever learnt. That is insane because it has no baggage, it doesn't have any of the kind of technical It's like you type it into a web page and you click go and if it works, it works, and like you know, and this is a pattern, you know, the same like Python has online interpreters, you know dot net. They've been working really hard to get rid of all that boiler plate, which scares people who don't know what they're looking at it.
But you're not going to have academics breathing down your next saying no, that is the wrong way to write rock Star.
Well it's you know, one of the things that we'll talk about in the show is I stopped asking kind of you know, language experts for help because a lot of them just don't.
Get the chat right.
They're like, well, you shouldn't do that. I'm like, no, no, you don't understand it has to be lyrics. If it's not lyrics, and they're like, well, you just use parentheses. I'm like saying parentheses and they're like, well, why would you sing a language. I'm like, the choke the job, you know.
And I remember you actually performed a rock Star program with your band at somewhere.
Yeah, so so so fizz buzz in in rock Star became the sort of canonical touch point. And I did that at the end of a talk I did at NBC London in twenty twenty, right before the lockdown started, and that talk got like millions of you Tube and you know, and Covid can take a lot of the credit for that because a lot of people were stuck
at home with nothing to do. But clearly it's kind of struck a chord and people like, we like this, and they were sending it around and you know, I got I got a bunch of speaking gigs off from people who just seen that one video. They're like, we need to book this guy to come and do our conference. And of course a lot of one like you got to bring the guitar, you do the rock Star bit and so yeah, so that kind of and it just, you know, sort of bubbled along. Now, one of the
things that always bothered me was the implementations. You know, with all due respect to the people who did them, it's a phenomenal piece of you know engineering to build this interpreter for an esoteric language in like forty eight hours. But the people who are curious are not the same people as the people who know how to runs color right, And I care about the people who are curious because I think curiosity is you know, wonderful quality that should
be encouraged and nurtured. And so started twenty twenty, I sat down and built a Rockstar interpreter in JavaScript so I could run it in a browser. Because I decided early on, i'd I want to do this on you know, a zero or Google Cloud, because I don't ever want to wake up to a five thousand dollars bill. You don't need a bill.
Yeah, yeah, exactly.
Yeah, because Rockstar made hack and News and everyone jumped on it, or because you know, I there's an infinite loop somewhere that I was paying every time it ticks, and so it had to be client side. There's a lyric for an infinite loop in there somewhere, you knows, oh easily. So one of the things that I did in Rockstar Version one is a blank line ended a block.
So if you had like a loop or a function or a you know, an if statement, a blank line mark the end, which meant if you had an if that was inside a loop that was inside a function, you needed three blank lines to end all of them, which became very very hard to troubleshoot because it wasn't always obvious. You know, one is obvious, Two is you know, is that three or four or five? I honestly can't see it. And so a lot of folks out there they started in to make it easy to track, and
I'm like, no, no, it looks like Python. That's the point, right, And so one of the one of the features that I put in. So so let's uh, actually, let's let's bring things up to speed. So this ticks along for about five years and it's built in JavaScript and it runs on the web, and every once in a while there's a little something just kind of you know, hits me and makes me think. And last year somebody did
an advent of code in it. They solved every day of advent of code in Rockstar has no IO, You've got standard in Standard out, doesn't have file system, doesn't have a network, which is partly on purpose, because I don't ever want somebody to, you know, start a job and be like, oh, well, the no viruses in Rockstar, or you know, worse than that. The because I believe that this could happen is somebody's like, yeah, the previous developer wrote the whole system in Rockstar and they've left now.
And the new guy, the new guy rock he doesn't understand any of it.
But if you don't have no file system and no network, then there's how limit to how much damage you how much trouble can you really go? But advent to code is brilliant because it's standard in Standard out and that's it. That's all you need. And so the kind of and somebody did the whole thing, and I was like, if people are going to put that many hours into the joke.
They deserve a better implementation of the joke. And the other thing that happened at the end of last year, so Rand November twenty twenty three was dotnor eight and dotnor eight finally gave us a native ahead of time compilation. And this was always a deal breaker for me, is because having to install the dot net framework. I'm like, that is if you want to learn dot net whatever, but if you just want to play with Rockstar, I don't want you having to install dot net that because
that is too much downloading and everything. And then this thing came along and I'm like, wow, so this, you know, you can do the ahead of time compilation. There's a thing called il stripping, which takes a Dotnet program, runs it or builds it, links it against the entire run time with certain caveats. You can't use reflection, you can't use type introspection, you can't use you know, dynamic assembly instatiation. But we're not doing any of those things.
You know.
It's a PASA and an interpreter. It's it's the code for it is relatively kind of clean, I guess is a good word for it. It's not doing anything too gnally.
So you end up with an EXC that anybody can download and run on Windows or.
And so yeah, you end up with with an XC and this is this is the fun part as well, because GitHub actions now has native runners for Windows and Chirk, so you can write code and c sharp, you can deploy it to gethub and as long as you wire everything up properly, you end up with a mac OS native executable that doesn't need a run time. So it's just it's like about a six megabyte binary that is a rockstar interpreter and as a six meg one for Linux.
Actually the Mac one's a little bigger. It's four for Windows, four for len it's about six megs for Mac. And that to me was like this is time, like if dot net can do this, now is the time to see what would be involved in kind of porting the whole thing. And so the first kind of potential brick wall there was, okay, well what about the web sure?
And now the interesting thing something that I've seen time and time again is so dot net will compile to web assembly, and the I think misunderstanding a lot of people have and I think, you know, Microsoft could have done more to avoid this is people think dot net plus web assembly means Blazer. Yeah right, and you're like, no, dot net plus web assembly runs browser enables Blazer. That's
not Blazer's built on top of that. If you want to, you can compile sea sharp into a web assembly binary that you then bootstrap in a browser and you can run code natively in web assembly and you don't need the Blazer.
You are stuff.
None of that interaction happens and the JAS interrupt that exists in dot net.
Now, yeah, it's really great.
It just blew me away, Like I kept getting to this point thinking can I do that? And you know it's things like so the way that the Rockstar Web interpreter works now and by the time the show comes out, this will be on code with Rockstar dot com because the next week is going to get flipped over. It's been on running on beta for a couple of months now and folks, I think have kicked out most of the bugs on it. So if you've got a code
with Rockstar dot Com, there will be an interpreter. You type code and you click run and it runs, and it's running sea sharp code built into web assembly and it's doing it in a background. So it's a JavaScript worker process because that way, if you're an infinite loop, it doesn't freeze the browser window. So we got JavaScript in the browser talking to JavaScript, and a worker which is instantiating the web assembly runtime loading the dot net.
You know the runtime that the CLR web assembly version of that right flying in the Rockstar code interpreter on top of that, and then buried under all these levels. Someone wants to say hello World, and you're like, well, where is the hello world? Co and the js interrupt team who built the web assembly support for c sharp
are like, well, yeah, you can inject a function. You give us a function signature, and we will take the JavaScript function which puts hellow world on a web page and we will wire that all the way through these levels of abstraction so that you can wire that into the environment, the input output mapping of the environment when your interpreter is running. And when I found that, I was just like, this is amazing. This is like and you're thinking, how many things, you know, let the browser
do what the browser is good at. The browser is going to do fonts and color and typography and buttons and clicking on stuff.
And then ninety percent of those fonts came from IBM. Just remember that.
To joke people, to joke, that's a callback. And you know, this to me was just like, it was really really exciting being able to use c sharp to do the heavy lifting. And of course there's always that point. I don't know if I'm sure you folks experienced the same thing. You make a little list in your head of the bits of it you think are going to be difficult, and you do those first, and you validate the approach. You're like, is this actually impossible? If we can prove
it's not impossible. And at that point I do what I think a lot of developers do, which is like, well, I've proved it's not impossible, therefore it's going to be easy, yeah, because you know, and it turns out it's not actually easy. It's it's just not impossible, right, And so the what I thought was going to be a probably a long weekend and probably about five or six weeks of working on this thing. But it's good fun. And you know the number of wonderful things that exist in dot net now.
So there's a fantastic book Crafting Interpreters by a guy called Robert Meistrom and it's a great book about how to design a programming language. Fantastic reading. And there's a couple of things in it that I'm looking at and a going the thing he's doing here to avoid it
being slow. That's not slow in dot net anyway, right, So, like you know, switching on a switch expressions inside and using pattern matching and stuff kind of alleviates the need for the visitor pattern, which is one of the things I used to get away from big switch statements, because the compiler knows where to root the execution flow based on the types that are available at run time. And that kind of thing made it just this compelling proposition let's do this, and let's do it right, all.
Right, And there's more coming up with Dylan Beattie and Rockstar after these very important messages stick around. Did you know you can easily migrate asp net web apps to Windows containers on Aws. Use the app to Container tool to containerize your iis websites and deploy to AWS managed container services with or without Kubernetes. Find out more about app to Container at AWS dot Amazon dot Com, slash dot net, slash Modernize. Hey Carl, here, today we're spotlighting
a tool that's turning heads in the tech community. Ygun's AI error resolution brings you smart AI powered insights directly into your development workflow. This feature doesn't just identify errors, it suggests how to fix them quickly and efficiently in seconds. If you're ready for a deeper dive into smarter debugging, you won't want to miss what raygun has to offer.
Visit raygun dot com slash dot net rocks that's ygun, r A y g U n dot com slash do O t n E t r O c k s for your free fourteen day trial to explore the way raygun is revolutionizing debugging. And we're back. It's dot in a rocks. I'm Carl Franklin, my friend Richard Campbell Hey, and our friend Dylan Beattie, super genius who wrote a programming language as a joke, and now he it's like
stepping in a pile of dog poo. He can't get it off his shoe and every but even worse, all the dogs are coming around sniffing at it, asking him to improve the quality. I don't know what that means, but it kind of I kind of thought it would work before it came out of my mouth.
Mister Carl Franklin, our chief Medical Office site, his finest quite so.
So dot net eight turns out to be the point at which you say, dot neck got awesome. Now I can do what I want to do, and it can run everywhere and pretty much maybe we should talk a little bit about the internals of how it actually works through the grammar and the parser and the interpreting the interpreter.
So you know something that I've been very acutely aware of throughout the whole process. There are people out there who are way smarter than me. And I know this because there are certain elements of this where like the JS interrupt thing I just mentioned, I understand how that work, I understand how to use it, I understand the problem it solves, and I can appreciate the solution how they
got that thing to work. I have no idea. You know, there is clearly there is a level of genius far beyond anything that you know I would have done on this. And you know, I'm in awe and respect of the people who made those because with that stuff, none of this will work. And one of those is there's a thing of the pausing expression grammar and or a PEG grammar they call them. But then you've got redundant acronyms
like machine. So yeah, like ATM machines where you put your pin number in the ATM machine.
Or IBM machine, but the IBM machine.
Yeah again, an IBM business machine. Where are you getting that?
Oh?
Internationally, you know, But basically, you know the expression grammar is ah, you build a set of matching expressions regular expression syntax or something very very similar to that, and you feed your source code into that. So one of the really fun things about building a programming language interpreter is you have the language you designed, and you have the language that you're building it in. And so when you find a bug, you're like, Okay, where's is it.
It could be a bug in my rock Star code, or it could be a bug in the thing that passes the rock Star code, or it could be a bug in the thing that then runs the interprets the abstract syntax tree. And so you're constantly trying to find, you know, where are the abstraction points in this where you can stick in a debugger or something and go right, If it's good as far as here, then I know it's not a bug.
In this part.
It's a bug in that part and the pausing expression grammar as a guy called John John Getson has a library called Pegasus, which is up on new get and this is basically the you write your peg grammar for the language you're building, which is like, what's a program? Will a program is a set of blocks, or it's empty. So the shortest possible program is nothing, it's white space
followed by under file, which is valid. Or it's a block followed by a program, which could be the empty program, so it's just one block, or it could be a block followed by a program, which is a block followed by a program, which is a block followed by a program which is the empty one. So you got four. And I love that. I love the elegance of kind of the self yeah, self reference.
I know if you heard that the burdens were flying over around my head in a circle.
And then what's a block? Well, a block is either a statement followed by an end of statement, or it's a statement followed by a block, all right, And what's a statement? And then you're like, well, a statement is input output arithmetic par as this read that you know, the actual the guts.
Of the language.
That's where it kind of widens out, and then you get down to what are the expressions, and the expressions are operators and values, and what are the values, And that's where you get down to the type system. You can have a string, you can have the number, you can have a boolean. And the type system in Rockstar is straight out of JavaScript, just because it you know, it's one I think makes sense, so no types. Very
early on it kind of has types. It's got some really interesting type coercion because one of the one of the things that JavaScript always frustrated me with is, you know, it's really idiosyncratic, like, you know, you can add a string to a number, but you can't subtract a string from home. And I'm like, well, if you can add the string, surely there are scenarios where subtracting the string
makes sense. So I decided, you know, the Rockstar two point zero, everything would return something like there's no nan, there's no so divide by zero gives you infinity because that sounds like rock and roll, and something like we
don't have we don't have not a number. It's got mysterious, Like mysterious is the value you get but other things like you subtract a string from another string, it's gonna like if you subtract rock from Rockstar, you're going to get because it's going to take the rockout because obviously that makes sense. And like Rockstar divided by R it gives you two because there's two rs in the words.
So string division is defined, string multiplication is defined. And so you got all these these kind of ideas and you're like, right, first, you got to design the syntax, and some of it is syntax you design, and other stuff is like, well, I've got these types and I have this operator now, but I haven't figured out what happens if you mash them together. And I figured out very early on. So there's a wonderful tool called Endcrunch, which is a continuous test runner for dot net that
I love dearly. I use it. It's on Writer as well now but it's still Windows only. But for a long time it was just a visual studio plug in and it just sits there. It runs all your tests, and I figured out very early on how to get that to report the line and the rock Star program where the test had failed. But I think the developer remco molderus like, hey, how do you know when a test fails? How do you know what line to link to? And it was like, it's just we use a regular
expression to pass the output from the dot netcompiler. And I'm like, so if I can emit a line of output that matches the exact error this space at space file name colon, line number, comma, And he's like, try it, and see I tried it and it worked. So now I have a test runner that I can click and I can jump to a line in a Rockstar program where the test failed. So now you can start using
Rockstar to write the tests. And that's at that point I'm like, well, if you can use them to right the tests, I can also use a test runner to validate the documentation. And so the code with rockstar dot com website, all of the examples in it are actual Rockstar programs that are tested as part of building the solution.
But then the website's built in Jackiel, so it runs on GitHub pages and there's a little custom Ruby plug in that takes each snippet of code and turns it into an one you can actually run right there on the page by clicking a button. So every single kind of scenario, every test case, every operates to the examples. How do you do a raise, how do you do loops? How do you do input? How do you do output?
The docs get unit tested as part of building the whole thing, which has only caused a couple of headaches because it doesn't using symbolic linking, which causes problems with cross platform builds, which you know is a is a headache.
I have a question, Go for it. I hate to interrupt it. As you're talking about this, I can't help but think that you beyond rockstar, you may have invented a new type of language paradigm where you could use the language in any kind of genre of writing, for example Shakespeare. What's stopping anybody from taking your the basis of your you know, your language and turning it using Shakespearean language to write code?
And so that's that's actually a really interesting question because I think at this point, so generally, you know, part of the problem is how do you take the lexical structure of natural, lyrical sounding English and turn that into something you can use to write programs? And that part of it does lend itself to a lot of flexibility and One of the things that I baked into Rockstar early on is aliases. So there's a lot of things where there are three or four different keywords that compile
to the same instruction. They mean the same thing. So we got like print tallow world, but also you can shout, you can scream, you can whisper how world. Otherwise it's just print, print, print, print, print, you know. And so the minimalist rock Star looks a little bit like Python, and idiomatic Rockstar has all the kind of fancy edges
and frills and stuff on it. And so the next part then is choosing the keyword that you're going to use for built in operations, so you know, like a natural or many programming languages have stack operators which are pushing pop, and everyone's like, you push it on the stack, you pop it off the stack. And I was like, all right, well push and pop is in there. But I'm also going to have rock and roll absolutely, so
you can you can rock something. And then you're like, well, if we got this rock up right, what happens if you rock something that isn't a isn't a list, and so rock will if you rock a number, it turns it into a list that just contains the number. If you rock a string, it turns it into a list that contains one string. And then if you rock it again, two strings, three strings, and roll will pull the element
off the string. And then I thought, well, hang on, if you if you rock a string with a number, what it does. It takes the number, it converts it into the Unicode character with a corresponding code point, and it appends it to the string. And so what this thing gives you is it gives you a way of building strings without having to actually use them, so you can you can. They're called ninja strings because they're stealthy.
You don't see them coming. And so I'm just going to look up the example because I can't remember it off the top of my head. Yeah.
Well, while you're doing that, the Shakespearean version of rock and roll might be ebb and flow.
Yeah, exactly, this kind of thing. And so you're like that point. You know, if you wanted to add ab and flow as aliases, it's a very So adding alias is one. It's very easy because you just stick another case in the grammar and you've done. The problem then is you might have somebody out there who's used ab as a variable in a program, at which point that's
a breaking I see. And you know, this is a sort of classic problem that all programming language designers, no matter how esoteric, is if you have something that wasn't a keyword and now it is, well, somebody might have used it before. Yeah.
In this case, though, you'd be creating a whole other language other than Rockstar. It'd be you know, Shakespeare or something. Right, So if you're writing, you're either writing in Rockstar or in Shakespeare. You wouldn't be using them together.
It has occurred to me that there is a sort of fairly natural split because the Rockstar engine's kind of in two halves. There's the pausa, and the Pausa takes the Rockstar program and turns it into a abstract syntax tree, which is a collection of dot Net classes that refer to each other. And so like program has a collection of statements, and then a statement is one of the
following types. But in theory, you could then build a completely different grammar that compiles to the same set of classes and then just run it through the rock Star engine the interpreter, and it would tell you what it did. And so there's almost like the guts of a language construction kit in here.
Yeah, well you're like, well, you.
Know, this thing maps onto that thing, and you know, at that point it's a little bit fundy because it's like that might actually be thinking this wasn't supposed to be useful, but this accidentally invented something that has genuine application as a teacher crap, that wasn't the point and but yeah, and you know it, really there is this intermediate representation and if you if you go on the Rockstar website, you can type in any program and as well as running it, you can see the past tree.
You can see the visualization of what your program gets translated into, which has been one. You know, it's a tool that I found incredibly useful when I was developing the thing, and then I was like, other people might find this useful too, And you know, it's very particularly if you're trying to debug something where you have an expression that could either be interpreted as an actual expression or it's going to be interpreted as a poetic literal.
And you know, this means that you have something you think is going to be like a logical expression. You know, X is not why and you'd think, well, X is not my means of why is true? X is now false because it's going to do logical negation. But in some circumstances X is not. Why is going to count? Well not as one, two, three, and why is one?
So you're going to get X is now thirty one and be able to see what the parsa is picking up because a lot of that stuff happens at past time because it's not going to change, it's it's baked in, and so visualizing the pasetree for that and yeah, at this point you're absolutely right. You're like, well, the grammar is now decoupled from the interpreter to the extent that if you wanted to, you could build a different grammar on top of it and still use the same back end, the same interpreters.
Fascinating kind of stuff on it. So, in this new version for dot net, did you have any breaking changes and did both of your users complain about it?
Or yes? And yes you should come down every shown. So yes, there was a certain inevitable number of breaking changes, some of which were just stuff that, like I mentioned a moment ago, we had a push and pop and rock and roll and actually push and pop was backwards. When I baked that in pop didn't do what popping a stack does, and I was like, I'm going to
fix that. So push and pop, you know, add an element to the end and remove the final element, and then rock and Roll will add elements to the end, but they will remove elements from the beginning, which is analogous to shift and unshift in JavaScript. So that was just fixing something that was broken. And there were a couple of so the there's a test suite. The really nice thing is the community contributed a test suite for Rockstar.
One was a set of about sixty Rockstar programs, and the testing here was just here's a program, and here's a text file containing its output, and so whatever language you're using to implement it, you're going to read this, run it, and compare your output to that, and if it works, then it passes. And that proved incredibly useful
in terms of, you know, understanding backward compatibility. And I got to a point where it was one hundred percent no breaking changes, and I was like, right, there are now some things I'm going to break on purpose, and one of them was so using is as an assignment operator used to be like, if you say desire is a love struck lady killer, the word is there in that very specific context, would pase a love struck lady killer as a as a literal, it would count the words.
And I wanted to be able to say. I kept in my own code writing things like X is with five, which is X plus equals five like incremental, but it wouldn't work because it would passe with as a four and get excess now you know, forty one or something. So I just I broke that. I said, a poetic
literal can't start with a keyword. Okay, if it's a keyword that can start an expression, then you're going to interpret that as an American expression or a logic expression, not just count the lengths of the words and.
Did you find poetic ways around it?
So what I introduced was like a so anywhere you have the word like the rest of that line or the rest of these statement up as far as the next piece of punctuation is going to be a poetic literal. So now you can use it in a lot of different places. You can say, you know, if my love is like a burning forest, and it's like, well, my love is a variable, and like a burning forest is going to give you as one burning seven forest six. So that's if this is one seventy six, and so
if you want to you can use that. I don't know, whatever ask you one seventy six is you can compare to that. And there's this weird moment where you start realizing that things things like that which you hadn't considered that use case when you design the building blocks for it. They just kind of emer And you know, we were talking earlier in the in the show at the beginning, you folks are talking about using machine learning to in
games and AI to generate that. And earlier this year I played through boulders Gate three and I absolutely loved it. And one of the things I loved about it is that it is the kind of game that's like, yeah, we're gonna the game engine is solid enough that you can do stuff that the game designers did not imagine. Like you got an eight percent chance if you try to turn the god of Death into a sheep it's going to work.
Now that's not a rock Star line, right there is it?
It would probably work, It might compile, And you know, I love that sense that there is a foundation here that just leads to these wonderful, little you know, idiosyncrat page cases. They go oh, oh, I guess that works, and it does work, and you're like, oh, that's weird.
It takes your brain in a way that regular programming languages just don't do. Like, you know, you're firing a lot of synapses when you're writing Rockstar, a lot more in a different part of your brain, I think than if you're writing C sharp for example.
Yeah, and it also, you know, it decouples. It is programming for the joy of programming, because you can't solve any real problems with it, and so it absolutely reinforces the no. No, you're doing this because it is fun. You're doing this because there was a yeah, I know.
It's it's such a great Kata approach, right yea, just really exercise thinking about how you'd solve something in and teaching kids.
They must love it, right, I mean, can you imagine having a rock star programming class at a high school or something? Kids would flock.
I know a couple of people who tried it, kids like fifteen sixteen above. They got the joke because probably their dad listen to and they're like oh, you made a programming language out of my dad's collmusic.
All right, let's sealk with it his album collection.
Kids younger than that, they don't really get like because a certain amount of it is this makes no sense unless it makes you laugh, right right, and it does make people laugh, you know. The acid test for Rockstar is are people still laughing at this? And they are?
You know, it's very cool. So yeah, what about the error messages? Can you write clam rock error messages?
So it tried. I tried very hard to emulate the JavaScript approach of you know, don't fail like if you can, if you possibly can. There's no exception throwing or handling. Everything returns something. It's just that sometimes it returns a
zero or an empty string, or it returns mysterious. Getting the PASA to generate good error messages that was difficult, and that's actually still something that I'm not one hundred percent happening with because the nature of a pausing expression grammar is very much hey, check that input against all of these patterns, and if none of them match, then it can't tell you where it failed. It can just say, hey, I tried all this, and there wasn't a program, and
you're like, well, where wasn't there a program? It's like there that whole thing wasn't a program, and one kind of a stretch golfer. There's something that I've been working on, but I haven't got at working yet. There is a thing called a code mirror. You know code mirror. It's the code editor that's built into web pages. And the code mirror. Syntax highlighting uses something called a laser grammar. Eliezer and laser grammar is the I've completely forgotten his name.
The guy who created this basically was like, look, compiling a grammar for syntax highlighting is not the same as compiling a programming language. You are going to run because you think about syntax highlighting, like if you make a mistake, you know on the syntax high learning to be off for the whole rest of the file. You want it to recover as soon as it can. It needs to be like, well the rest didn't make sense, yeah, and
so you know the laser grammar for it. And I spent a that two weeks trying to write a laser grammar so I can have syntax highlighting for Rockstar. And because the pausing expression grammar is like, try this. If that doesn't work, try this. If that doesn't work, try this, whereas the laser grammar is like try this, it works
or it doesn't, we don't care. It doesn't have this notion of kind of backtracking and trying another one and backtracking trying on to And that's the point where my brain just went, now, yeah, yeah, no no no no no no no, you're tired and you're never going to figure this out right now. So I parked that until life was a little more conducive to spending six hours
reading up on code grammars and stuff. And it is a I mean, it's code Mirror is a phenomenally impressive project, but it's also Codemera reversion five was like, put this JavaScript file on your website and you got syntax highlighting. Codemera reversion six is like, here are sub atomic particles. You should be able to use them to build a universe.
And you're like, I don't know how to do that, and you know the builds that like, you've got to define your grammar, you got to find your syntax, you've got to find your keyword operations. Then you've got to build in a JavaScript built step that. So the editor that's on there, it is actually code mirror, but it has no syntax highlighting.
It just okay.
So that's something I'm either going to come back to or I'm going to nerd snipe the Internet. It's going to go on like you know, Blue Sky and be like, hey, I just discovered that code Mirror can't pass Rockstar because Rockstar is too complicated, and give it. Give it forty eight hours and somebody will be like you're wrong. I'm like, oh, yeah, thank you great, I'm willing to be wrong.
Yeah, So that's something you're thinking of any other new features in the next version.
You think, So, you know, the appetite has always been there. People are like, we want file system I owe, and you know the challenge there or even just a module system, like a way of having code in one file. And the best proposal that we've kind of seen there's a couple of us who bounced the stuff around on GitHub issues is that. So you know, if you open like the sleeve notes for a record, you've got.
The queste a record, I'm sorry, are these things don't It's.
Like you take an MP three and what you do is you you cut the MP three into a piece of wax, and when the MP three is very wobbly, you make a very wobbly cut, and when the MP three is very still, you make a very straight cut, and then you turn the wax round and round and round.
That's fascinating with it. And it comes with a piece of paper obviously that you can read.
Yeah, So for our younger listeners at the Apple, music used to come on on LPs, and LPs came with sleeve notes, which is where you could read about your bands because the Internet wasn't invented yet, so if you
wanted to read, that was all you had. Yeah, And you know, somebody said, well you got the title and then after that you got like, you know, drums, Dylan Carl guitar, Comma synth, programming, Richard Moraccus voice, and you're like, all right, yeah too, And so you could use like the musician is the file name, and then the instrument credits are the things you want to import from it HU and you're like that that would kind of work, and then you're like, but then how do you use
that within the program to be like, so, you know, Richard's guitar taking a solo might be find the guitar function which was exported by the Richard module and pass a solo into it as an argument, and and you know, none of the stuff's impossible, but there's a point where it just starts to feel so convoluted.
Well, you know, I was just about to say, you know, do you ever find yourself at three am after working on this for six hours just asking yourself what the hell am I doing?
Actually the worst, the point where that kicks in the highest is when I've been doing you know, the presentation talking about esoteric languages and you know that kind of stuff, and it builds up to the big fizz buzz outro with the guitar and everything, and the audience is like, he's not really good to do? This is And it's a bit of my brain that is just going you are about to sing the word fizz buzz to an audience of eight hundred Java developers. What are you doing
with your life? Like? How did it get to this?
So cool?
And the thing is it's the word fizz buzz. I was like, if it wasn't that word, like I would be cool with this. And so what we can do now with this ninja string thing? Is. So I'm just going to give you, like about thirty seconds of lyrics. So my dream is diamond nightmares, My suffering is the sea. My scream is hollow hatred. Your love is meaningless to me. Rock my dream like a razor blade. Smile, rock my dream with your love, your love, rock my scream like
a switchblade. Missile, rock my scream with your love, your love, and you take that apart, and you is meaningless to me, so meaningless to me. It gives you one twenty two in ASCI, which is the letter Z. So rock my screen with your love. Your love puts z Z on the end of a stringer building, and so that that builds fiz Bus. With that you ever actually having to say it, it's great and that kind of that that solved the problem for me because it's like this is
now plausible all the way down. Like you, you could perform fiz Bus to an audience who just thought that this was you know, like we're not talking Grammy when it maybe like the B side to a meatless record, But they'd be like, yeah, all right, that works.
Maybe some Italian developer will create a language based in opera lyrics like Italian opera, you know, with with completely different language.
So asking about the future of it. So you know, there's there's opera that shape, there's all kinds of things you can do with the grammar. But the question I get asked more than anything else, is is there a way that you could generate music from the source. Of course there is, and at that point that's really interesting because then you'd have a piece of writing which was simultaneously a set of lyrics and a compilable program and the definition of the melody or the chords or whatever.
And so that's something and you.
Know that'd be tricky to write. That'd be even harder to write than just lyrics to a song, because you have to make the lyrics fit a melody. So you have a pattern, you have a constraint, you have a pattern that you have to follow.
You've introduced a third constraint to it because you know, something that I played around with is, well, we'll just take the text and like anytime we see a letter that is a note on the major scale, we'll hold that note for as many letters as it takes till we get to the next one. And that gives you a melody.
But it's not a musically.
Well, and you're like, well, if you if you wanted to be able to write the melody that went with the lyrics. So yeah, I have a lot of ideas on that one, but nothing yet that has kind of, you know, caught fire.
So you could do melodies. I mean a melody is a note and a duration, right, I mean that's really all it is. But now in musical notation you can do chords, which is three notes with multiple durations or morm notes at the same time. So it gets very complicated, it does.
And uh, and there is another idea that kind of emerges from all of this, which is, could you could you write a programming language that used sheet music instead of asking as its input? Could you actually create a turin complete compiler for musical notation?
So then, oh my god, I'm not going to sleep tonight. Lyrics completely.
You are insane.
Friend, Good lord.
I have a little thing in the back of my brain that just comes up with the stuff twenty for us seven days a week. Hey, what about this?
What about that?
You could do this?
That's so exciting, Dylan. Thanks, thanks for thanks for you know, keeping us abreast of what's going on and where can we get.
Rockstar code with Rockstar dot com.
Perfect.
You gonna check that out and by the time the show comes out, that will be the all singing, all Dancing dot eight But you don't care because it just works. The binaries will be up on GitHub, so if you want to run it locally, that's on Linux, mac Os and Windows, or you just run it in a browser. And the whole idea is it's out there in time anyone who wants to do adventive code and Rockstar thisea.
You don't have to install note js. That's my Christmas gift beautiful to all of you lovely, lovely people out there.
Son, it's always a pleasure to talk to you. Maybe we'll see you in one of these so much fun conferences somewhere.
Thanks so much for having me on the show. Folks, It is always a pleasure.
Slowly and we'll talk to you next time on dot net rocks.
Dot net Rocks is brought to you by Franklin's Net and produced by Pop Studios, a full service audio, video and post production facility located physically in New London, Connecticut, and of course in the cloud online at pwop dot com. Visit our website at d O T N E t R O c k S dot com for RSS feeds, downloads, mobile apps, comments, and access to the full archives going back to show number one, recorded in September two thousand and two.
And make sure you check out our sponsors. They keep us in business. Now go write some code. See you next time.
You got javans and
