Loris Cro on the Rise of Zig
Read full transcript 25 segments
-
Hey friends, it's Scott. I want to thank Hey friends, it's Scott. I want to thank our new sponsor, Mail Trap. Modern email our new sponsor, Mail Trap. Modern email our new sponsor, Mail Trap. Modern email delivery for developers. They integrate delivery for developers. They integrate delivery for developers. They integrate straight into your code with their SDKs. straight into your code with their SDKs. straight into your code with their SDKs. You get unified transactional and You get unified transactional and You get unified transactional and promotional email delivery. 24/7 promotional email delivery. 24/7 promotional email delivery. 24/7 support. You contact humans, not AI chat support. You contact humans, not AI chat support. You contact humans, not AI chat bots. We'll give you 3,500 emails bots. We'll give you 3,500 emails bots. We'll give you 3,500 emails monthly in the free tier. And you can monthly in the free tier. And you can monthly in the free tier. And you can try them out at mail.io try them out at mail.io try them out at mail.io today. That's m a lap.io today. That's m a lap.io today. That's m a lap.io io today. [music] Hi, I'm Scott Hansselman. This is Hi, I'm Scott Hansselman. This is another episode of Hansel Minutes. Today another episode of Hansel Minutes. Today another episode of Hansel Minutes. Today I'm chatting with Loris Crow, the VP of I'm chatting with Loris Crow, the VP of I'm chatting with Loris Crow, the VP of community at the Zigg Software community at the Zigg Software community at the Zigg Software Foundation. How are you? Foundation. How are you? Foundation. How are you? >> Hi, Scott. I'm good, thank you. Thank >> Hi, Scott. I'm good, thank you. Thank >> Hi, Scott. I'm good, thank you. Thank you for having me. you for having me. you for having me. >> Yeah, thanks for hanging out. So, you're >> Yeah, thanks for hanging out. So, you're >> Yeah, thanks for hanging out. So, you're always live coding. You're on Twitch, always live coding. You're on Twitch, always live coding. You're on Twitch, you're out there talking about Zigg. you're out there talking about Zigg. you're out there talking about Zigg. When did you discover Zigg and what kind When did you discover Zigg and what kind When did you discover Zigg and what kind of what programmer were you before Zigg of what programmer were you before Zigg of what programmer were you before Zigg came into your life?
-
came into your life? came into your life? >> Uh yeah, I was a very different >> Uh yeah, I was a very different >> Uh yeah, I was a very different programmer back then. Um so I programmer back then. Um so I programmer back then. Um so I I never really So Zigg is a low-level I never really So Zigg is a low-level I never really So Zigg is a low-level programming language. programming language. programming language. >> Mhm. >> Mhm. >> Mhm. >> So you do systems programming stuff with >> So you do systems programming stuff with >> So you do systems programming stuff with it. And um in university I studied it. And um in university I studied it. And um in university I studied biionformatics. So I never really got biionformatics. So I never really got biionformatics. So I never really got much into lower level programming except much into lower level programming except much into lower level programming except you know I had one course where uh we you know I had one course where uh we you know I had one course where uh we had to do some string algorithms in C had to do some string algorithms in C had to do some string algorithms in C because you know DNA analysis wants you because you know DNA analysis wants you because you know DNA analysis wants you to do string algorithms fast. Uh but to do string algorithms fast. Uh but to do string algorithms fast. Uh but that that was it. That was uh all the that that was it. That was uh all the that that was it. That was uh all the experience that I had. Um, at some point experience that I had. Um, at some point experience that I had. Um, at some point I found myself at Rady's labs and I I found myself at Rady's labs and I I found myself at Rady's labs and I needed to show people how to write uh needed to show people how to write uh needed to show people how to write uh Rady's modules which are a way of adding Rady's modules which are a way of adding Rady's modules which are a way of adding custom extensions, custom data types to custom extensions, custom data types to custom extensions, custom data types to radius. Uh, which is a really cool radius. Uh, which is a really cool radius. Uh, which is a really cool system. Uh, but to do that you need to system. Uh, but to do that you need to system. Uh, but to do that you need to use a lower level programming language use a lower level programming language use a lower level programming language because you need to produce a DLL and uh because you need to produce a DLL and uh because you need to produce a DLL and uh you're interfacing with C APIs with a C you're interfacing with C APIs with a C you're interfacing with C APIs with a C Yeah, with CPIs. Um, so I was shopping Yeah, with CPIs. Um, so I was shopping Yeah, with CPIs. Um, so I was shopping for a language that would allow me to for a language that would allow me to for a language that would allow me to show how to do this stuff to people that show how to do this stuff to people that show how to do this stuff to people that would be less uh that would look less would be less uh that would look less would be less uh that would look less scary than C or C++ scary than C or C++ scary than C or C++ and I stumbled upon Zigg and uh I kind and I stumbled upon Zigg and uh I kind and I stumbled upon Zigg and uh I kind of fell in love with it and I started of fell in love with it and I started of fell in love with it and I started interacting with the Zig community and interacting with the Zig community and interacting with the Zig community and then after a while I jumped ship and then after a while I jumped ship and then after a while I jumped ship and joined the Zigsoft Foundation.
-
joined the Zigsoft Foundation. joined the Zigsoft Foundation. >> Mhm. And Zigg is comparatively young, >> Mhm. And Zigg is comparatively young, >> Mhm. And Zigg is comparatively young, isn't it? I mean, Andrew Kelly started isn't it? I mean, Andrew Kelly started isn't it? I mean, Andrew Kelly started it just about 10 years ago. Is that it just about 10 years ago. Is that it just about 10 years ago. Is that correct? correct? correct? >> Yes. Yeah, that's correct. >> Yes. Yeah, that's correct. >> Yes. Yeah, that's correct. >> And I'm looking online, the uh the >> And I'm looking online, the uh the >> And I'm looking online, the uh the release, the latest release is 0.152. Is that does that mean beta or does that Is that does that mean beta or does that just mean that we don't want to say 1.0 just mean that we don't want to say 1.0 just mean that we don't want to say 1.0 until it's perfect? until it's perfect? until it's perfect? >> It means that we will break your code. >> It means that we will break your code. >> It means that we will break your code. That [laughter] That [laughter] That [laughter] but it means that it's not done. There but it means that it's not done. There but it means that it's not done. There are a lot of things in the language and are a lot of things in the language and are a lot of things in the language and tool chain that are still work in tool chain that are still work in tool chain that are still work in progress for sure. Uh but it also mean progress for sure. Uh but it also mean progress for sure. Uh but it also mean that you should expect breakages every that you should expect breakages every that you should expect breakages every time you update zig. They're not time you update zig. They're not time you update zig. They're not terrible usually. Uh but you know it's terrible usually. Uh but you know it's terrible usually. Uh but you know it's not B1 so there is no promise of not B1 so there is no promise of not B1 so there is no promise of backwards compatibility and in a sense backwards compatibility and in a sense backwards compatibility and in a sense it's our superpower because it means it's our superpower because it means it's our superpower because it means that every time we realize that that every time we realize that that every time we realize that something needs to be tweaked we we you something needs to be tweaked we we you something needs to be tweaked we we you know we don't have to fight with uh know we don't have to fight with uh know we don't have to fight with uh legacy promises. we we can just break.
-
legacy promises. we we can just break. legacy promises. we we can just break. >> Mhm. So let's talk about C and C++ >> Mhm. So let's talk about C and C++ >> Mhm. So let's talk about C and C++ because Andrew was frustrated with C and because Andrew was frustrated with C and because Andrew was frustrated with C and C++ specifically around the tooling C++ specifically around the tooling C++ specifically around the tooling cross compilation and the build systems. cross compilation and the build systems. cross compilation and the build systems. What is the problem in your mind with What is the problem in your mind with What is the problem in your mind with C++ that would cause someone to be so C++ that would cause someone to be so C++ that would cause someone to be so frustrated that they would make their frustrated that they would make their frustrated that they would make their own programming language and tool chain own programming language and tool chain own programming language and tool chain in response? in response? in response? >> Good point. [laughter] >> Good point. [laughter] >> Good point. [laughter] >> Okay. Well, you know, I don't I cannot >> Okay. Well, you know, I don't I cannot >> Okay. Well, you know, I don't I cannot speak for Andrew 100%. speak for Andrew 100%. speak for Andrew 100%. >> No, just, you know, speak for yourself >> No, just, you know, speak for yourself >> No, just, you know, speak for yourself because you did you did jump ship. because you did you did jump ship. because you did you did jump ship. >> Yeah, I did jump ship. Um, >> Yeah, I did jump ship. Um, >> Yeah, I did jump ship. Um, so I think that uh Okay, I'll give you so I think that uh Okay, I'll give you so I think that uh Okay, I'll give you one example that has to do with C and one example that has to do with C and one example that has to do with C and C++ that I diagnosed like uh uh less C++ that I diagnosed like uh uh less C++ that I diagnosed like uh uh less than 24 hours ago. Somebody wants to use than 24 hours ago. Somebody wants to use than 24 hours ago. Somebody wants to use Open CV. And OpenCV is a C++ project. Open CV. And OpenCV is a C++ project. Open CV. And OpenCV is a C++ project. And for people who don't know what And for people who don't know what And for people who don't know what OpenCV is, it's a very cool library that OpenCV is, it's a very cool library that OpenCV is, it's a very cool library that allows you to do computer vision. So you allows you to do computer vision. So you allows you to do computer vision. So you can recognize objects, track them, do can recognize objects, track them, do can recognize objects, track them, do all kinds of very cool stuff. Um, so all kinds of very cool stuff. Um, so all kinds of very cool stuff. Um, so this person wanted to use it. Uh, but it this person wanted to use it. Uh, but it this person wanted to use it. Uh, but it turns out that OpenCV uh has no C turns out that OpenCV uh has no C turns out that OpenCV uh has no C bindings. So it's a C++ project and they bindings. So it's a C++ project and they bindings. So it's a C++ project and they want you to use it from C++. Um the want you to use it from C++. Um the want you to use it from C++. Um the problem is that languages that aren't problem is that languages that aren't problem is that languages that aren't C++ they don't want to talk to C++ most C++ they don't want to talk to C++ most C++ they don't want to talk to C++ most of the time they want to talk to C uh of the time they want to talk to C uh of the time they want to talk to C uh because there's a thing like called the because there's a thing like called the because there's a thing like called the AI uh which is about interoperability AI uh which is about interoperability AI uh which is about interoperability between uh let's say languages and uh
-
between uh let's say languages and uh between uh let's say languages and uh executables executables executables um and um um and um um and um >> the application binary interface >> the application binary interface >> the application binary interface >> yes and >> yes and >> yes and um so there are third party projects um so there are third party projects um so there are third party projects that maintain C bindings for Open CV. that maintain C bindings for Open CV. that maintain C bindings for Open CV. >> Mhm. >> Mhm. >> Mhm. >> Uh and apparently that's what you're >> Uh and apparently that's what you're >> Uh and apparently that's what you're supposed to use. One of those is called supposed to use. One of those is called supposed to use. One of those is called Go CV. So these are bindings uh C Go CV. So these are bindings uh C Go CV. So these are bindings uh C bindings bindings bindings uh for OpenCV that then get consumed by uh for OpenCV that then get consumed by uh for OpenCV that then get consumed by a Go package and that ultimately exposes a Go package and that ultimately exposes a Go package and that ultimately exposes uh OpenCV to Go. So this person then was uh OpenCV to Go. So this person then was uh OpenCV to Go. So this person then was trying to take those uh headers and use trying to take those uh headers and use trying to take those uh headers and use them to them to them to uh talk to OpenCV from Zigg, but they uh talk to OpenCV from Zigg, but they uh talk to OpenCV from Zigg, but they were having a compile error and they were having a compile error and they were having a compile error and they couldn't figure it out because they were couldn't figure it out because they were couldn't figure it out because they were not C++ programmers. To be clear, I am not C++ programmers. To be clear, I am not C++ programmers. To be clear, I am not a C++ programmer either. There are not a C++ programmer either. There are not a C++ programmer either. There are uh there's a probably an infinite amount uh there's a probably an infinite amount uh there's a probably an infinite amount of things about C++ that I do not know. of things about C++ that I do not know. of things about C++ that I do not know. Uh but um one funny thing about uh what Uh but um one funny thing about uh what Uh but um one funny thing about uh what happened here which we we ended up happened here which we we ended up happened here which we we ended up solving this fairly quickly is that um solving this fairly quickly is that um solving this fairly quickly is that um the bindings had a had a mistake in them the bindings had a had a mistake in them the bindings had a had a mistake in them where they were including another where they were including another where they were including another library in the wrong place. They were library in the wrong place. They were library in the wrong place. They were including a C++ header inside of a including a C++ header inside of a including a C++ header inside of a extern C block in which you don't want extern C block in which you don't want extern C block in which you don't want to have C++ stuff.
-
to have C++ stuff. to have C++ stuff. >> And so that is wrong. But wait, how did >> And so that is wrong. But wait, how did >> And so that is wrong. But wait, how did the go people not notice? Why does it the go people not notice? Why does it the go people not notice? Why does it not break for them in the compilation? not break for them in the compilation? not break for them in the compilation? Well, it turns out that um in uh in C Well, it turns out that um in uh in C Well, it turns out that um in uh in C whenever you import something, there's whenever you import something, there's whenever you import something, there's usually the if not defaf uh guard at the usually the if not defaf uh guard at the usually the if not defaf uh guard at the top of the header file that prevents you top of the header file that prevents you top of the header file that prevents you from including the same header file more from including the same header file more from including the same header file more than once because that there is a than once because that there is a than once because that there is a >> very common thing to do. >> very common thing to do. >> very common thing to do. >> Yeah. So what was happening basically is >> Yeah. So what was happening basically is >> Yeah. So what was happening basically is that the go project was importing that that the go project was importing that that the go project was importing that header file uh from somewhere else uh header file uh from somewhere else uh header file uh from somewhere else uh earlier in the in the build process. earlier in the in the build process. earlier in the in the build process. >> So that second time where that header >> So that second time where that header >> So that second time where that header was mentioned inside the extern block was mentioned inside the extern block was mentioned inside the extern block the if not def would trigger and would the if not def would trigger and would the if not def would trigger and would prevent the template from expanding uh a prevent the template from expanding uh a prevent the template from expanding uh a second time. Sorry the template I mean second time. Sorry the template I mean second time. Sorry the template I mean the the header file uh from expanding a the the header file uh from expanding a the the header file uh from expanding a second time. So long story short, it was second time. So long story short, it was second time. So long story short, it was a uh problem derived from order in which a uh problem derived from order in which a uh problem derived from order in which uh these header files were included.
-
uh these header files were included. uh these header files were included. >> Mhm. Oh wow. >> Mhm. Oh wow. >> Mhm. Oh wow. >> That is one of >> That is one of >> That is one of >> it was almost like it worked because of >> it was almost like it worked because of >> it was almost like it worked because of luck because this one got there first. luck because this one got there first. luck because this one got there first. But this is not the first time that I But this is not the first time that I But this is not the first time that I see this because I've seen quite a few C see this because I've seen quite a few C see this because I've seen quite a few C and C++ projects that have this issue in and C++ projects that have this issue in and C++ projects that have this issue in them because what happens is that I them because what happens is that I them because what happens is that I understand I think it's understandable understand I think it's understandable understand I think it's understandable because people uh you know you have a because people uh you know you have a because people uh you know you have a bunch of files you you you bunch of files you you you bunch of files you you you it's a big project maybe you don't have it's a big project maybe you don't have it's a big project maybe you don't have control over everything. So once it control over everything. So once it control over everything. So once it works for you, you don't start works for you, you don't start works for you, you don't start questioning whether there might be, you questioning whether there might be, you questioning whether there might be, you know, you start questioning why does it know, you start questioning why does it know, you start questioning why does it work. You're just happy that it works work. You're just happy that it works work. You're just happy that it works and then you move on onto something and then you move on onto something and then you move on onto something else. [laughter] else. [laughter] else. [laughter] Um but uh so my point I guess the reason Um but uh so my point I guess the reason Um but uh so my point I guess the reason why I told this story is that um in my why I told this story is that um in my why I told this story is that um in my experience C and C++ are full of these experience C and C++ are full of these experience C and C++ are full of these problems. they're they're the way they problems. they're they're the way they problems. they're they're the way they work is work is work is >> uh it's like it's full of >> uh it's like it's full of >> uh it's like it's full of >> of rough corners that and you keep >> of rough corners that and you keep >> of rough corners that and you keep getting cut. So if you are um a new getting cut. So if you are um a new getting cut. So if you are um a new programmer like for example thinking programmer like for example thinking programmer like for example thinking about my personal experience I was never about my personal experience I was never about my personal experience I was never I never got into lower level programming I never got into lower level programming I never got into lower level programming before discovering Zigg not because I I before discovering Zigg not because I I before discovering Zigg not because I I hated I hated the idea. I would have hated I hated the idea. I would have hated I hated the idea. I would have liked to learn more about lower level liked to learn more about lower level liked to learn more about lower level programming, but I my impression of the programming, but I my impression of the programming, but I my impression of the amount of effort necessary to navigate amount of effort necessary to navigate amount of effort necessary to navigate the complexity and the weird quirks of the complexity and the weird quirks of the complexity and the weird quirks of you know 40 years basically of you know 40 years basically of you know 40 years basically of accumulated stuff in the C and C++ accumulated stuff in the C and C++ accumulated stuff in the C and C++ world. I say 40 years because I'm
-
world. I say 40 years because I'm world. I say 40 years because I'm talking about myself like a few years talking about myself like a few years talking about myself like a few years ago. Uh by now I think it's more than ago. Uh by now I think it's more than ago. Uh by now I think it's more than 40. Um, so the there is so much stuff 40. Um, so the there is so much stuff 40. Um, so the there is so much stuff there that it felt to me that it would there that it felt to me that it would there that it felt to me that it would have been too much effort. And uh uh and have been too much effort. And uh uh and have been too much effort. And uh uh and I think that Andrew felt probably also I think that Andrew felt probably also I think that Andrew felt probably also the same way. Some some of that and some the same way. Some some of that and some the same way. Some some of that and some also because if you mention C++ also because if you mention C++ also because if you mention C++ specifically, he likes C way more than specifically, he likes C way more than specifically, he likes C way more than he does C++. So he wanted uh to have a he does C++. So he wanted uh to have a he does C++. So he wanted uh to have a more C like experience than C++. No more C like experience than C++. No more C like experience than C++. No objects, no distractors, less hidden objects, no distractors, less hidden objects, no distractors, less hidden behavior. Mhm. But philosophically, it's behavior. Mhm. But philosophically, it's behavior. Mhm. But philosophically, it's not a vote against C or C++. It's more a not a vote against C or C++. It's more a not a vote against C or C++. It's more a declaration of why is systems declaration of why is systems declaration of why is systems programming so hard in, you know, in the programming so hard in, you know, in the programming so hard in, you know, in the in the beginning part of the 21st in the beginning part of the 21st in the beginning part of the 21st century. We're sitting here and we're century. We're sitting here and we're century. We're sitting here and we're still having frustration. So, it sounded still having frustration. So, it sounded still having frustration. So, it sounded like he and the folks at Zigg are trying like he and the folks at Zigg are trying like he and the folks at Zigg are trying to look back on history and say, "All to look back on history and say, "All to look back on history and say, "All right, let's do it better. Let's do a right, let's do it better. Let's do a right, let's do it better. Let's do a better compiler. Let's have fresh ideas.
-
better compiler. Let's have fresh ideas. better compiler. Let's have fresh ideas. Let's have a new build system." Yes. Let's have a new build system." Yes. Let's have a new build system." Yes. >> And and but but Rust though has captured >> And and but but Rust though has captured >> And and but but Rust though has captured everyone's imagination. Where do you see everyone's imagination. Where do you see everyone's imagination. Where do you see Zigg living in a world of Rust? And and Zigg living in a world of Rust? And and Zigg living in a world of Rust? And and why are people so enamored with Rust? why are people so enamored with Rust? why are people so enamored with Rust? >> Um well, there is Okay, I'll I'll tell >> Um well, there is Okay, I'll I'll tell >> Um well, there is Okay, I'll I'll tell you one thing that I think Zeke does you one thing that I think Zeke does you one thing that I think Zeke does that Rust does not. And this is not like that Rust does not. And this is not like that Rust does not. And this is not like um much of a matter of opinion. This is um much of a matter of opinion. This is um much of a matter of opinion. This is like just an objective fact. like just an objective fact. like just an objective fact. >> Sure. uh because you know when you're >> Sure. uh because you know when you're >> Sure. uh because you know when you're talking about language comparisons then talking about language comparisons then talking about language comparisons then things get heated very very easily. Um things get heated very very easily. Um things get heated very very easily. Um but um and and this ties back to your but um and and this ties back to your but um and and this ties back to your point. This is not against C or C++. point. This is not against C or C++. point. This is not against C or C++. This is about um kind of modernizing the This is about um kind of modernizing the This is about um kind of modernizing the concept of systems programming but in a concept of systems programming but in a concept of systems programming but in a way that is different from Ras. So way that is different from Ras. So way that is different from Ras. So here's one important example. I did here's one important example. I did here's one important example. I did mention a moment ago that we were uh mention a moment ago that we were uh mention a moment ago that we were uh wrangling a C C++ library. I do that a wrangling a C C++ library. I do that a wrangling a C C++ library. I do that a lot nowadays lot nowadays lot nowadays >> because it's common for people to try >> because it's common for people to try >> because it's common for people to try and replace make files and CMake files and replace make files and CMake files and replace make files and CMake files um with the zig build system not just to um with the zig build system not just to um with the zig build system not just to reinvent the wheel but because uh Zigg reinvent the wheel but because uh Zigg reinvent the wheel but because uh Zigg is able to cross-co compile C and C++ is able to cross-co compile C and C++ is able to cross-co compile C and C++ code and this is something that Rust code and this is something that Rust code and this is something that Rust doesn't do. Rust knows how to cross doesn't do. Rust knows how to cross doesn't do. Rust knows how to cross compile RS itself which is awesome. Um, compile RS itself which is awesome. Um, compile RS itself which is awesome. Um, but if you have a C dependency in Rust,
-
but if you have a C dependency in Rust, but if you have a C dependency in Rust, it's on you to make sure that that it's on you to make sure that that it's on you to make sure that that dependency compiles on all the different dependency compiles on all the different dependency compiles on all the different platforms. And most importantly, cross platforms. And most importantly, cross platforms. And most importantly, cross completion is out of the question at completion is out of the question at completion is out of the question at that point, unless you figure it out that point, unless you figure it out that point, unless you figure it out yourself how to cross compile the C yourself how to cross compile the C yourself how to cross compile the C part. part. part. >> Okay. So, let me paraphrase and offer a >> Okay. So, let me paraphrase and offer a >> Okay. So, let me paraphrase and offer a perspective and you tell me what you perspective and you tell me what you perspective and you tell me what you think about this. So given that Rust and think about this. So given that Rust and think about this. So given that Rust and Zigg are both trying to be better C, Zigg are both trying to be better C, Zigg are both trying to be better C, modern C, modern C++, their philosophies modern C, modern C++, their philosophies modern C, modern C++, their philosophies are somewhat different. Rust is are somewhat different. Rust is are somewhat different. Rust is optimizing for safety, particularly optimizing for safety, particularly optimizing for safety, particularly memory safety, and Zigg is optimizing memory safety, and Zigg is optimizing memory safety, and Zigg is optimizing for control and explicitness and for control and explicitness and for control and explicitness and predictability. predictability. predictability. >> Yes. And in terms of how you integrate >> Yes. And in terms of how you integrate >> Yes. And in terms of how you integrate with uh you know I guess you can call with uh you know I guess you can call with uh you know I guess you can call them brownfield projects like projects them brownfield projects like projects them brownfield projects like projects where you're not starting completely a where you're not starting completely a where you're not starting completely a new but you need to uh coexist new but you need to uh coexist new but you need to uh coexist >> legacy code. >> legacy code. >> legacy code. >> Yeah legacy code. >> Yeah legacy code. >> Yeah legacy code. >> Uh with Zigg we're going for we are >> Uh with Zigg we're going for we are >> Uh with Zigg we're going for we are explicitly aiming for um integrating explicitly aiming for um integrating explicitly aiming for um integrating with with what's there in a more with with what's there in a more with with what's there in a more intimate way than Russ would and also intimate way than Russ would and also intimate way than Russ would and also gaining benefits from having a mixed gaining benefits from having a mixed gaining benefits from having a mixed project. Um because um and again this is project. Um because um and again this is project. Um because um and again this is not um uh knock on Rust but with Rust not um uh knock on Rust but with Rust not um uh knock on Rust but with Rust your uh guarantees come from your uh guarantees come from your uh guarantees come from Rust safe code. Uh the more code you can Rust safe code. Uh the more code you can Rust safe code. Uh the more code you can the more logic you can express as Rust the more logic you can express as Rust the more logic you can express as Rust safe code. So Rust code that doesn't safe code. So Rust code that doesn't safe code. So Rust code that doesn't have unsafe blocks the more code the have unsafe blocks the more code the have unsafe blocks the more code the more logic you can put in there the more more logic you can put in there the more more logic you can put in there the more guarantees you can have uh the more uh
-
guarantees you can have uh the more uh guarantees you can have uh the more uh mileage you get out of the compiler the mileage you get out of the compiler the mileage you get out of the compiler the borrow of checker. Um, but if you borrow of checker. Um, but if you borrow of checker. Um, but if you interact with code that is not in there, interact with code that is not in there, interact with code that is not in there, then Rust doesn't really give you much then Rust doesn't really give you much then Rust doesn't really give you much support. With Zig, this is completely support. With Zig, this is completely support. With Zig, this is completely different. We have a lot of tiny details different. We have a lot of tiny details different. We have a lot of tiny details in the language that are designed uh let in the language that are designed uh let in the language that are designed uh let let me put it this way. Um, and this is let me put it this way. Um, and this is let me put it this way. Um, and this is maybe a um a funny uh maybe a little bit maybe a um a funny uh maybe a little bit maybe a um a funny uh maybe a little bit boastful claim, but I'm I'm and I would boastful claim, but I'm I'm and I would boastful claim, but I'm I'm and I would be happy to substantiate it if uh if be happy to substantiate it if uh if be happy to substantiate it if uh if necessary. Uh, it's easier to use C necessary. Uh, it's easier to use C necessary. Uh, it's easier to use C libraries from Zigg than from C itself. libraries from Zigg than from C itself. libraries from Zigg than from C itself. [laughter] That's pretty cool. So, you can add a That's pretty cool. So, you can add a Zigg compilation unit to a C C++ Zigg compilation unit to a C C++ Zigg compilation unit to a C C++ program. You're out there, you're program. You're out there, you're program. You're out there, you're listening to this podcast, you've got a listening to this podcast, you've got a listening to this podcast, you've got a big C++ program and you're like, "Ah, I big C++ program and you're like, "Ah, I big C++ program and you're like, "Ah, I don't want to touch any of that." You don't want to touch any of that." You don't want to touch any of that." You can drop zigg in and it just works. can drop zigg in and it just works. can drop zigg in and it just works. >> Yes. And let's say that you're using a C >> Yes. And let's say that you're using a C >> Yes. And let's say that you're using a C library from uh uh from Zigg. Um here's library from uh uh from Zigg. Um here's library from uh uh from Zigg. Um here's a couple of things that you have at your a couple of things that you have at your a couple of things that you have at your disposal that are pretty neat. One, uh disposal that are pretty neat. One, uh disposal that are pretty neat. One, uh in C you have um you don't have a in C you have um you don't have a in C you have um you don't have a distinction between pointers to many distinction between pointers to many distinction between pointers to many item verse versus pointers to one item.
-
item verse versus pointers to one item. item verse versus pointers to one item. It's not well defined in the language. I It's not well defined in the language. I It's not well defined in the language. I think there might be some new think there might be some new think there might be some new annotations that you can put but um annotations that you can put but um annotations that you can put but um they're not everywhere in zig these they're not everywhere in zig these they're not everywhere in zig these things are explicitly written like they things are explicitly written like they things are explicitly written like they are uh explicit things in the type are uh explicit things in the type are uh explicit things in the type system. If you have a pointer to many system. If you have a pointer to many system. If you have a pointer to many for example you cannot be referenced as for example you cannot be referenced as for example you cannot be referenced as if it were a pointer to one item. Um if if it were a pointer to one item. Um if if it were a pointer to one item. Um if you have a null terminator be it a null you have a null terminator be it a null you have a null terminator be it a null bite at the end of a string or something bite at the end of a string or something bite at the end of a string or something similar but you know with different similar but you know with different similar but you know with different types that is also part of the type types that is also part of the type types that is also part of the type system. you can create a string uh sorry system. you can create a string uh sorry system. you can create a string uh sorry you can create a pointer which is for you can create a pointer which is for you can create a pointer which is for example a pointer to to bytes to many example a pointer to to bytes to many example a pointer to to bytes to many bytes with a null terminator so now this bytes with a null terminator so now this bytes with a null terminator so now this is in the type system and you cannot get is in the type system and you cannot get is in the type system and you cannot get it wrong you know you cannot say oh I it wrong you know you cannot say oh I it wrong you know you cannot say oh I thought that this was supposed to be a thought that this was supposed to be a thought that this was supposed to be a terminated nim string but it turns out terminated nim string but it turns out terminated nim string but it turns out it's not um that cannot happen because it's not um that cannot happen because it's not um that cannot happen because it's encoded in the type system um we it's encoded in the type system um we it's encoded in the type system um we have defer so uh cleaning up um you know have defer so uh cleaning up um you know have defer so uh cleaning up um you know resource allocation it's resource allocation it's resource allocation it's not as fully automated as it is with Ry.
-
not as fully automated as it is with Ry. not as fully automated as it is with Ry. It's still a bit more manual, but it's It's still a bit more manual, but it's It's still a bit more manual, but it's very nice to be able to allocate a very nice to be able to allocate a very nice to be able to allocate a resource and immediately defer free it resource and immediately defer free it resource and immediately defer free it or defer. So we have a variant of the or defer. So we have a variant of the or defer. So we have a variant of the fur that only triggers when you are fur that only triggers when you are fur that only triggers when you are returning with an error. And so that the returning with an error. And so that the returning with an error. And so that the idea is on success the resource needs to idea is on success the resource needs to idea is on success the resource needs to be returned to the caller on failure you be returned to the caller on failure you be returned to the caller on failure you want to free everything. So you use want to free everything. So you use want to free everything. So you use defer in that case and it is much better defer in that case and it is much better defer in that case and it is much better than uh having labels at the end of a than uh having labels at the end of a than uh having labels at the end of a function and doing go to to them. Uh function and doing go to to them. Uh function and doing go to to them. Uh there's a long list. These are just there's a long list. These are just there's a long list. These are just >> Yeah, it seems like Zigg values >> Yeah, it seems like Zigg values >> Yeah, it seems like Zigg values explicitness and clarity. Uh and it it explicitness and clarity. Uh and it it explicitness and clarity. Uh and it it doesn't like things that are hidden. doesn't like things that are hidden. doesn't like things that are hidden. >> No, it does not. >> No, it does not. >> No, it does not. >> Yeah, >> Yeah, >> Yeah, >> it's similar to C in that sense. >> it's similar to C in that sense. >> it's similar to C in that sense. >> Yeah, I would say that Zigg is more of a >> Yeah, I would say that Zigg is more of a >> Yeah, I would say that Zigg is more of a modern C than it is a modern C++ in that modern C than it is a modern C++ in that modern C than it is a modern C++ in that sense. sense. sense. >> H okay. It does also offer something >> H okay. It does also offer something >> H okay. It does also offer something very interesting that I want to very interesting that I want to very interesting that I want to understand more of. It's called comp understand more of. It's called comp understand more of. It's called comp time. time. time. >> Yeah. >> Yeah. >> Yeah. >> And it doesn't have a pre-processor. It >> And it doesn't have a pre-processor. It >> And it doesn't have a pre-processor. It doesn't have macros, but it allows you doesn't have macros, but it allows you doesn't have macros, but it allows you to say, I want this code to run at the to say, I want this code to run at the to say, I want this code to run at the time of compilation rather than at time of compilation rather than at time of compilation rather than at runtime. And the more I read and learned runtime. And the more I read and learned runtime. And the more I read and learned about that, I'm like, why aren't we all about that, I'm like, why aren't we all about that, I'm like, why aren't we all doing that? [laughter] doing that? [laughter] doing that? [laughter] You know what I mean? like there's You know what I mean? like there's You know what I mean? like there's there's there's there's aspects of that there's there's there's aspects of that there's there's there's aspects of that in C in C in the build system, but this in C in C in the build system, but this in C in C in the build system, but this is kind of like built into the language is kind of like built into the language is kind of like built into the language itself. It's not built into the build itself. It's not built into the build itself. It's not built into the build system the way you know kind of C# does system the way you know kind of C# does system the way you know kind of C# does it.
-
it. it. >> Yeah. >> Yeah. >> Yeah. Um well, I don't know what the answer is Um well, I don't know what the answer is Um well, I don't know what the answer is why not other languages are doing it. why not other languages are doing it. why not other languages are doing it. What I can tell you is that for comtime What I can tell you is that for comtime What I can tell you is that for comtime time to um work as naturally as it works time to um work as naturally as it works time to um work as naturally as it works in Zigg, one compromise that we have to in Zigg, one compromise that we have to in Zigg, one compromise that we have to make is that Zig needs to do lazy make is that Zig needs to do lazy make is that Zig needs to do lazy evaluation. So one thing that tends to evaluation. So one thing that tends to evaluation. So one thing that tends to trip newcomers is that if you if you trip newcomers is that if you if you trip newcomers is that if you if you write a function but you never call it write a function but you never call it write a function but you never call it uh well if the function has a syntax uh well if the function has a syntax uh well if the function has a syntax error that gets caught because the file error that gets caught because the file error that gets caught because the file has to be parsed. But if you have a has to be parsed. But if you have a has to be parsed. But if you have a semantic error and the function never semantic error and the function never semantic error and the function never gets called, your function will not be gets called, your function will not be gets called, your function will not be analyzed and your semantic error will analyzed and your semantic error will analyzed and your semantic error will not be caught uh until you let's say not be caught uh until you let's say not be caught uh until you let's say wire that function in the first time. wire that function in the first time. wire that function in the first time. >> Uh that surprises people but um and >> Uh that surprises people but um and >> Uh that surprises people but um and sometimes people mistakenly assume that sometimes people mistakenly assume that sometimes people mistakenly assume that it's done for performance reasons which it's done for performance reasons which it's done for performance reasons which is not the case. uh the the the reason is not the case. uh the the the reason is not the case. uh the the the reason why we do this is that the benefit that why we do this is that the benefit that why we do this is that the benefit that you get from lazy evaluation is that for you get from lazy evaluation is that for you get from lazy evaluation is that for example in uh this applies also for example in uh this applies also for example in uh this applies also for example to if statements that have a example to if statements that have a example to if statements that have a comp time known argument. So if your if comp time known argument. So if your if comp time known argument. So if your if is solved at com time, we don't even is solved at com time, we don't even is solved at com time, we don't even analyze the losing branch. The what you analyze the losing branch. The what you analyze the losing branch. The what you g what you gain from this is that for g what you gain from this is that for g what you gain from this is that for example multiplatform code becomes uh example multiplatform code becomes uh example multiplatform code becomes uh weirdly natural because for example you weirdly natural because for example you weirdly natural because for example you can have a a switch statement where you
-
can have a a switch statement where you can have a a switch statement where you have each branch uh correspond to a have each branch uh correspond to a have each branch uh correspond to a different operating system. And in the different operating system. And in the different operating system. And in the Windows branch you use Windows APIs. You Windows branch you use Windows APIs. You Windows branch you use Windows APIs. You use Windows definitions that don't even use Windows definitions that don't even use Windows definitions that don't even exist in the other oss. and you don't exist in the other oss. and you don't exist in the other oss. and you don't have to do any special guarding around have to do any special guarding around have to do any special guarding around that because that branch will not even that because that branch will not even that because that branch will not even be analyzed when you're compiling for be analyzed when you're compiling for be analyzed when you're compiling for Mac OS for example. Mac OS for example. Mac OS for example. >> Okay, so let's let's just poke on that >> Okay, so let's let's just poke on that >> Okay, so let's let's just poke on that for a little bit. So there's kind of for a little bit. So there's kind of for a little bit. So there's kind of like three ways to do that multi- you like three ways to do that multi- you like three ways to do that multi- you know I'm running I want to call an API know I'm running I want to call an API know I'm running I want to call an API on m from multiple operating systems. on m from multiple operating systems. on m from multiple operating systems. I'm I'm making an executable. I want it I'm I'm making an executable. I want it I'm I'm making an executable. I want it to run on Windows, Mac and Linux. I can to run on Windows, Mac and Linux. I can to run on Windows, Mac and Linux. I can go and pound define my way through it. go and pound define my way through it. go and pound define my way through it. you know, if if defaf windows [snorts] you know, if if defaf windows [snorts] you know, if if defaf windows [snorts] do a thing, that's a uh pre-processor do a thing, that's a uh pre-processor do a thing, that's a uh pre-processor and then we'll have whole chunks of code and then we'll have whole chunks of code and then we'll have whole chunks of code that will only compile on on Windows. I that will only compile on on Windows. I that will only compile on on Windows. I can do it at runtime where I detect my can do it at runtime where I detect my can do it at runtime where I detect my operating system. And you know, if I operating system. And you know, if I operating system. And you know, if I detect it incorrectly, I might end up detect it incorrectly, I might end up detect it incorrectly, I might end up calling into an extern C that doesn't calling into an extern C that doesn't calling into an extern C that doesn't exist. How is comp time in that context exist. How is comp time in that context exist. How is comp time in that context different from just saying if defaf? Um different from just saying if defaf? Um different from just saying if defaf? Um >> cuz you can have an entire chunk of code >> cuz you can have an entire chunk of code >> cuz you can have an entire chunk of code that only compiles if I'm on Windows.
-
that only compiles if I'm on Windows. that only compiles if I'm on Windows. >> Yeah. Uh the difference I guess is that >> Yeah. Uh the difference I guess is that >> Yeah. Uh the difference I guess is that on one hand the if defaf doesn't get on one hand the if defaf doesn't get on one hand the if defaf doesn't get syntax analyzed, right? You don't have syntax analyzed, right? You don't have syntax analyzed, right? You don't have to have correct syntax in there to have correct syntax in there to have correct syntax in there >> because it gets just chucked away. But >> because it gets just chucked away. But >> because it gets just chucked away. But but that I think that's not a but that I think that's not a but that I think that's not a particularly interesting uh difference. particularly interesting uh difference. particularly interesting uh difference. um um um uh in the case of com time I think there uh in the case of com time I think there uh in the case of com time I think there are other situations where this become are other situations where this become are other situations where this become where the sophistication that you get where the sophistication that you get where the sophistication that you get out of com time becomes more evident. So out of com time becomes more evident. So out of com time becomes more evident. So let me let me give you another example. let me let me give you another example. let me let me give you another example. >> Uh at comp time you can query a type for >> Uh at comp time you can query a type for >> Uh at comp time you can query a type for whether it has a given function or not whether it has a given function or not whether it has a given function or not or a given field. So you can say does or a given field. So you can say does or a given field. So you can say does the the the uh like stdos the current stdos does it uh like stdos the current stdos does it uh like stdos the current stdos does it have this function and if it does then have this function and if it does then have this function and if it does then I'm going to be able to call it if it I'm going to be able to call it if it I'm going to be able to call it if it doesn't then I'm going to be able to doesn't then I'm going to be able to doesn't then I'm going to be able to call some I'm going to call something call some I'm going to call something call some I'm going to call something else. Um so uh that is for example one else. Um so uh that is for example one else. Um so uh that is for example one way in which you can express your logic way in which you can express your logic way in which you can express your logic in to support multiplatform uh targets in to support multiplatform uh targets in to support multiplatform uh targets support different targets.
-
support different targets. support different targets. >> Okay. So if defaf is hiding code from >> Okay. So if defaf is hiding code from >> Okay. So if defaf is hiding code from the compiler and doing tug text the compiler and doing tug text the compiler and doing tug text substitution, but comp time lets the substitution, but comp time lets the substitution, but comp time lets the compiler think about the code, reason compiler think about the code, reason compiler think about the code, reason about the code, and do all of that work. about the code, and do all of that work. about the code, and do all of that work. So you're not going to have uh paths So you're not going to have uh paths So you're not going to have uh paths that don't get run. They're not going to that don't get run. They're not going to that don't get run. They're not going to rot because the compiler sees all. rot because the compiler sees all. rot because the compiler sees all. >> Um well, it depends. In some cases, the >> Um well, it depends. In some cases, the >> Um well, it depends. In some cases, the compiler will not analyze semantically compiler will not analyze semantically compiler will not analyze semantically some branches. So it will catch syntax some branches. So it will catch syntax some branches. So it will catch syntax errors but it will not catch semantic errors but it will not catch semantic errors but it will not catch semantic errors unless you errors unless you errors unless you >> you leverage uh that branch. So it is >> you leverage uh that branch. So it is >> you leverage uh that branch. So it is common in Zigg for example since we can common in Zigg for example since we can common in Zigg for example since we can do cross compilation it is common in Zig do cross compilation it is common in Zig do cross compilation it is common in Zig to have CI that just runs builds for all to have CI that just runs builds for all to have CI that just runs builds for all targets on on one machine like you don't targets on on one machine like you don't targets on on one machine like you don't need different machines. So on the same need different machines. So on the same need different machines. So on the same machine you just do uh three builds for machine you just do uh three builds for machine you just do uh three builds for all the different targets and it works. all the different targets and it works. all the different targets and it works. >> Wow. Um so Zig is run as a software >> Wow. Um so Zig is run as a software >> Wow. Um so Zig is run as a software foundation. And it's a non it's a foundation. And it's a non it's a foundation. And it's a non it's a nonprofit. nonprofit. nonprofit. >> Yeah, it's a 501c3.
-
>> Yeah, it's a 501c3. >> Yeah, it's a 501c3. >> Are there giant companies that are >> Are there giant companies that are >> Are there giant companies that are pushing Zigg in one direction or the pushing Zigg in one direction or the pushing Zigg in one direction or the other? other? other? >> Um, no, no, no. Um, so we are very small >> Um, no, no, no. Um, so we are very small >> Um, no, no, no. Um, so we are very small and uh independent. Uh, and uh independent. Uh, and uh independent. Uh, >> to be fair, we are not against big tech >> to be fair, we are not against big tech >> to be fair, we are not against big tech investment in Zigg, but we we don't give investment in Zigg, but we we don't give investment in Zigg, but we we don't give out board seats to be clear. So out board seats to be clear. So out board seats to be clear. So >> you don't you don't get bought. >> you don't you don't get bought. >> you don't you don't get bought. [laughter] I mean it doesn't I guess [laughter] I mean it doesn't I guess [laughter] I mean it doesn't I guess that's one way of looking at it but you that's one way of looking at it but you that's one way of looking at it but you know it doesn't have necessarily to be know it doesn't have necessarily to be know it doesn't have necessarily to be evil but it does have uh at some point evil but it does have uh at some point evil but it does have uh at some point um misaligned incentives and u we we um misaligned incentives and u we we um misaligned incentives and u we we don't want to play with that let me put don't want to play with that let me put don't want to play with that let me put it this way I don't think any of us it this way I don't think any of us it this way I don't think any of us thinks that we are particularly smart thinks that we are particularly smart thinks that we are particularly smart when it comes to this stuff but but when it comes to this stuff but but when it comes to this stuff but but because of that we try to not play with because of that we try to not play with because of that we try to not play with fire so no big tech companies in the fire so no big tech companies in the fire so no big tech companies in the board of directors um we try to board of directors um we try to board of directors um we try to diversify our income. So we get diversify our income. So we get diversify our income. So we get donations from some big entities but donations from some big entities but donations from some big entities but also we are very careful about having also we are very careful about having also we are very careful about having also donations from the general public also donations from the general public also donations from the general public and we try to keep it a balance. We we and we try to keep it a balance. We we and we try to keep it a balance. We we for example are deliberately uh avoiding for example are deliberately uh avoiding for example are deliberately uh avoiding to get in a situation where we have one to get in a situation where we have one to get in a situation where we have one gigantic donor that maybe doesn't have gigantic donor that maybe doesn't have gigantic donor that maybe doesn't have board seats but you know once they pay board seats but you know once they pay board seats but you know once they pay the salary of all the people at the the salary of all the people at the the salary of all the people at the company then saying no comes at a cost.
-
company then saying no comes at a cost. company then saying no comes at a cost. >> Yeah. Yeah. Yeah. And you're and you >> Yeah. Yeah. Yeah. And you're and you >> Yeah. Yeah. Yeah. And you're and you actually have moved from um from GitHub actually have moved from um from GitHub actually have moved from um from GitHub uh owned by big giant company uh that I uh owned by big giant company uh that I uh owned by big giant company uh that I uh work for to codeberg which is a uh work for to codeberg which is a uh work for to codeberg which is a nonprofit git hosting. nonprofit git hosting. nonprofit git hosting. >> Yeah. And do they do the builds as well >> Yeah. And do they do the builds as well >> Yeah. And do they do the builds as well or where do the where's the build or where do the where's the build or where do the where's the build servers? servers? servers? >> Uh the build servers are our own and >> Uh the build servers are our own and >> Uh the build servers are our own and they were our own also like we self-host they were our own also like we self-host they were our own also like we self-host uh the CI runners. We were also doing uh the CI runners. We were also doing uh the CI runners. We were also doing that on GitHub because some of our that on GitHub because some of our that on GitHub because some of our builds are very long because we are builds are very long because we are builds are very long because we are testing basically a matrix of all kinds testing basically a matrix of all kinds testing basically a matrix of all kinds of cross compilations. So like we're of cross compilations. So like we're of cross compilations. So like we're doing builds not only for Windows but doing builds not only for Windows but doing builds not only for Windows but we're doing builds for Windows from we're doing builds for Windows from we're doing builds for Windows from Windows from Linux from Mac OS from Windows from Linux from Mac OS from Windows from Linux from Mac OS from FreeBSD from NetBSD from Haiku. Um so it FreeBSD from NetBSD from Haiku. Um so it FreeBSD from NetBSD from Haiku. Um so it it's a lot uh plus tests not not just it's a lot uh plus tests not not just it's a lot uh plus tests not not just builds. builds. builds. >> Um yeah but the reason why we moved is >> Um yeah but the reason why we moved is >> Um yeah but the reason why we moved is not one of principle necessarily. Uh the not one of principle necessarily. Uh the not one of principle necessarily. Uh the reason why we moved is because we were reason why we moved is because we were reason why we moved is because we were having trouble with GitHub actions.
-
having trouble with GitHub actions. having trouble with GitHub actions. GitHub actions had started running weird GitHub actions had started running weird GitHub actions had started running weird and giving us trouble. Also we were kind and giving us trouble. Also we were kind and giving us trouble. Also we were kind of annoyed at the safe sleep stuff. I of annoyed at the safe sleep stuff. I of annoyed at the safe sleep stuff. I don't know if you heard about it. don't know if you heard about it. don't know if you heard about it. >> Yeah. Yeah. There's a lot of drama about >> Yeah. Yeah. There's a lot of drama about >> Yeah. Yeah. There's a lot of drama about that right now. that right now. that right now. >> Yeah. Uh it's unfortunate because I I >> Yeah. Uh it's unfortunate because I I >> Yeah. Uh it's unfortunate because I I still have uh email notifications on on still have uh email notifications on on still have uh email notifications on on some of those issues and I keep seeing some of those issues and I keep seeing some of those issues and I keep seeing people that watch YouTube videos and people that watch YouTube videos and people that watch YouTube videos and then then then >> going yell yeah [laughter] >> going yell yeah [laughter] >> going yell yeah [laughter] makes no sense. But um yeah, that was makes no sense. But um yeah, that was makes no sense. But um yeah, that was annoying. If I have to be honest, that annoying. If I have to be honest, that annoying. If I have to be honest, that was annoying. fig you know you log into was annoying. fig you know you log into was annoying. fig you know you log into the server you don't know why your CI the server you don't know why your CI the server you don't know why your CI pipeline is falling behind and then you pipeline is falling behind and then you pipeline is falling behind and then you see that there's like a safe sleep that see that there's like a safe sleep that see that there's like a safe sleep that has been running for like two months has been running for like two months has been running for like two months straight straight straight >> was that the reason that you left or did >> was that the reason that you left or did >> was that the reason that you left or did you have other reasons to go to codeberg you have other reasons to go to codeberg you have other reasons to go to codeberg >> uh I would say that those were the main >> uh I would say that those were the main >> uh I would say that those were the main reasons why we left as for why codeberg reasons why we left as for why codeberg reasons why we left as for why codeberg and not say for example I don't know and not say for example I don't know and not say for example I don't know gitlab or something like that gitlab or something like that gitlab or something like that >> um it I think it's because >> um it I think it's because >> um it I think it's because I think our experience as of late has I think our experience as of late has I think our experience as of late has been that nonprofit services that we've been that nonprofit services that we've been that nonprofit services that we've been using, maybe we've been lucky, but been using, maybe we've been lucky, but been using, maybe we've been lucky, but the nonprofit services that we've been the nonprofit services that we've been the nonprofit services that we've been using has turned out so far to be the using has turned out so far to be the using has turned out so far to be the most reliable over time. Like uh other most reliable over time. Like uh other most reliable over time. Like uh other companies, they keep changing. They companies, they keep changing. They companies, they keep changing. They change their pricing models. They change change their pricing models. They change change their pricing models. They change the set of features that they want to the set of features that they want to the set of features that they want to have. They change the company direction.
-
have. They change the company direction. have. They change the company direction. And it's um it's annoying because we're And it's um it's annoying because we're And it's um it's annoying because we're not that many people at the CSF and uh not that many people at the CSF and uh not that many people at the CSF and uh we don't really like having to deal with we don't really like having to deal with we don't really like having to deal with this stuff. We just want to code and this stuff. We just want to code and this stuff. We just want to code and it's annoying when you know you you have it's annoying when you know you you have it's annoying when you know you you have nobody wants to log into the server and nobody wants to log into the server and nobody wants to log into the server and diagnose the runner. So um I'll give you diagnose the runner. So um I'll give you diagnose the runner. So um I'll give you a different example of a nonprofit a different example of a nonprofit a different example of a nonprofit company that we've been relying on that company that we've been relying on that company that we've been relying on that we had uh a very positive experience we had uh a very positive experience we had uh a very positive experience with. It's called ever.org. It's a It's with. It's called ever.org. It's a It's with. It's called ever.org. It's a It's a website that allows you to accept a website that allows you to accept a website that allows you to accept donations kind of like GitHub sponsors. donations kind of like GitHub sponsors. donations kind of like GitHub sponsors. We also had a good experience with We also had a good experience with We also had a good experience with GitHub sponsors, but every.org allows GitHub sponsors, but every.org allows GitHub sponsors, but every.org allows more payment methods the the GitHub more payment methods the the GitHub more payment methods the the GitHub sponsors doesn't allow. For example, sponsors doesn't allow. For example, sponsors doesn't allow. For example, somebody in the past has donated to us somebody in the past has donated to us somebody in the past has donated to us Apple shares uh cryptocurrency Apple shares uh cryptocurrency Apple shares uh cryptocurrency and uh so every manages all this stuff and uh so every manages all this stuff and uh so every manages all this stuff transparently for us and it's really transparently for us and it's really transparently for us and it's really nice. So they are nonprofit and uh as nice. So they are nonprofit and uh as nice. So they are nonprofit and uh as long as we've been using them it's been long as we've been using them it's been long as we've been using them it's been just smooth sailing and we know or or just smooth sailing and we know or or just smooth sailing and we know or or rather I guess we don't know for sure rather I guess we don't know for sure rather I guess we don't know for sure but I think we can reasonably hope that but I think we can reasonably hope that but I think we can reasonably hope that they're not going to pivote into I don't they're not going to pivote into I don't they're not going to pivote into I don't know becoming an AI company tomorrow know becoming an AI company tomorrow know becoming an AI company tomorrow which would be very annoying. [laughter] which would be very annoying. [laughter] which would be very annoying. [laughter] >> Yeah, I like that though. Like we just >> Yeah, I like that though. Like we just >> Yeah, I like that though. Like we just want to code, you know, and like a want to code, you know, and like a want to code, you know, and like a company says something's going to be company says something's going to be company says something's going to be free forever and then capitalism happens free forever and then capitalism happens free forever and then capitalism happens and then it's not going to be free and then it's not going to be free and then it's not going to be free forever. But for for something like Zigg forever. But for for something like Zigg forever. But for for something like Zigg nonprofit makes sense and Codeberg makes nonprofit makes sense and Codeberg makes nonprofit makes sense and Codeberg makes sense as well. Um I also want to mention sense as well. Um I also want to mention sense as well. Um I also want to mention uh as we get towards the end of the
-
uh as we get towards the end of the uh as we get towards the end of the conversation here if folks are thinking conversation here if folks are thinking conversation here if folks are thinking about like what's a great example of a about like what's a great example of a about like what's a great example of a of a of a big important Zigg project. I of a of a big important Zigg project. I of a of a big important Zigg project. I think it's worth noting uh bun which is think it's worth noting uh bun which is think it's worth noting uh bun which is a high performance JavaScript runtime a high performance JavaScript runtime a high performance JavaScript runtime right so it's kind of like node plus npm right so it's kind of like node plus npm right so it's kind of like node plus npm plus ESB build allin-one thing. It's plus ESB build allin-one thing. It's plus ESB build allin-one thing. It's written largely if not completely in written largely if not completely in written largely if not completely in Zigg. Is that right? Zigg. Is that right? Zigg. Is that right? >> Yeah, I would say largely because they >> Yeah, I would say largely because they >> Yeah, I would say largely because they depend on JSC uh which is uh the depend on JSC uh which is uh the depend on JSC uh which is uh the >> uh I I think it's is it from Apple? >> uh I I think it's is it from Apple? >> uh I I think it's is it from Apple? Well, it's the other V8. It's the one Well, it's the other V8. It's the one Well, it's the other V8. It's the one that is not V8. It's a JavaScript. that is not V8. It's a JavaScript. that is not V8. It's a JavaScript. >> Right. Right. Right. >> Right. Right. Right. >> Right. Right. Right. >> Uh which is a big dependency, but >> Uh which is a big dependency, but >> Uh which is a big dependency, but everything else is Zig. Yes. everything else is Zig. Yes. everything else is Zig. Yes. >> Yeah. Was did they um did you know this >> Yeah. Was did they um did you know this >> Yeah. Was did they um did you know this was happening or did do Zigg projects was happening or did do Zigg projects was happening or did do Zigg projects just pop up and you're like, "Oh, wow. just pop up and you're like, "Oh, wow. just pop up and you're like, "Oh, wow. That happened. We didn't even know." That happened. We didn't even know." That happened. We didn't even know." >> Sorry. You mean bun using zig or >> Sorry. You mean bun using zig or >> Sorry. You mean bun using zig or >> Yeah, bun using zig. Do they call you >> Yeah, bun using zig. Do they call you >> Yeah, bun using zig. Do they call you first or does it just happen? first or does it just happen? first or does it just happen? >> No, no, no. But bun started from uh just >> No, no, no. But bun started from uh just >> No, no, no. But bun started from uh just one guy. So one day in discord, one guy one guy. So one day in discord, one guy one guy. So one day in discord, one guy shows up and he's asking uh how to do C shows up and he's asking uh how to do C shows up and he's asking uh how to do C interoperability because he wants to interoperability because he wants to interoperability because he wants to make his own JavaScript engine which you make his own JavaScript engine which you make his own JavaScript engine which you know happens from time to time and you know happens from time to time and you know happens from time to time and you don't really think don't really think don't really think >> random random internet person wants to >> random random internet person wants to >> random random internet person wants to do a thing and you never know it's going do a thing and you never know it's going do a thing and you never know it's going to become bun.
-
to become bun. to become bun. >> Yeah. And so he kept it. And at some >> Yeah. And so he kept it. And at some >> Yeah. And so he kept it. And at some point he had a uh discord server where point he had a uh discord server where point he had a uh discord server where there was a channel where you would type there was a channel where you would type there was a channel where you would type I want bun and if you type that you I want bun and if you type that you I want bun and if you type that you would get an invite to the private would get an invite to the private would get an invite to the private GitHub repository and then at some point GitHub repository and then at some point GitHub repository and then at some point he published it and well the rest is he published it and well the rest is he published it and well the rest is history. history. history. >> Wow. That must be a a vote of confidence >> Wow. That must be a a vote of confidence >> Wow. That must be a a vote of confidence towards Zigg not only as a great towards Zigg not only as a great towards Zigg not only as a great programming language but as a as a programming language but as a as a programming language but as a as a really valid C replacement because really valid C replacement because really valid C replacement because classically I think someone would have classically I think someone would have classically I think someone would have written something like that in C. It written something like that in C. It written something like that in C. It just it would have made sense and the just it would have made sense and the just it would have made sense and the fact that they picked Zig and they've fact that they picked Zig and they've fact that they picked Zig and they've had you know no issues in Bun of course had you know no issues in Bun of course had you know no issues in Bun of course is now very well thought of is pretty is now very well thought of is pretty is now very well thought of is pretty awesome and congratulations to you and awesome and congratulations to you and awesome and congratulations to you and the team. [laughter] the team. [laughter] the team. [laughter] >> Thank you. Although I would say this uh >> Thank you. Although I would say this uh >> Thank you. Although I would say this uh yeah maybe this says that it's uh not yeah maybe this says that it's uh not yeah maybe this says that it's uh not too bad to get into systems programming too bad to get into systems programming too bad to get into systems programming through Zigg. I personally do believe through Zigg. I personally do believe through Zigg. I personally do believe that but ultimately in this case it's that but ultimately in this case it's that but ultimately in this case it's Jared Jared the the guy in in question. Jared Jared the the guy in in question. Jared Jared the the guy in in question. Well I [clears throat] mean he's the CEO Well I [clears throat] mean he's the CEO Well I [clears throat] mean he's the CEO of Ban uh or was I guess because now of Ban uh or was I guess because now of Ban uh or was I guess because now they they've been bought by Antropic. Um they they've been bought by Antropic. Um they they've been bought by Antropic. Um but um yeah that's on him. He was able but um yeah that's on him. He was able but um yeah that's on him. He was able to pull this off on its own. That's so to pull this off on its own. That's so to pull this off on its own. That's so cool that a random person shows up in cool that a random person shows up in cool that a random person shows up in Discord and has questions and then like Discord and has questions and then like Discord and has questions and then like fast forwarded a couple years later and fast forwarded a couple years later and fast forwarded a couple years later and then it's like oh wow that became a then it's like oh wow that became a then it's like oh wow that became a thing the whole internet uses and now thing the whole internet uses and now thing the whole internet uses and now they got bought by Anthropic. Like you they got bought by Anthropic. Like you they got bought by Anthropic. Like you too can make an awesome thing in Zigg too can make an awesome thing in Zigg too can make an awesome thing in Zigg and get bought tomorrow. [laughter] and get bought tomorrow. [laughter] and get bought tomorrow. [laughter] >> I guess um there's another interesting >> I guess um there's another interesting >> I guess um there's another interesting project uh called Tiger Beetle. That one
-
project uh called Tiger Beetle. That one project uh called Tiger Beetle. That one is a financial database written in Zigg. is a financial database written in Zigg. is a financial database written in Zigg. >> [clears throat] >> [clears throat] >> [clears throat] >> uh they take it in my opinion also like >> uh they take it in my opinion also like >> uh they take it in my opinion also like even to the next level even more than even to the next level even more than even to the next level even more than one uh they do this thing where the one uh they do this thing where the one uh they do this thing where the database so first of all it's a domain database so first of all it's a domain database so first of all it's a domain specific database it's not SQL it's not specific database it's not SQL it's not specific database it's not SQL it's not relational it's not document it's relational it's not document it's relational it's not document it's financial transactions um I forget the financial transactions um I forget the financial transactions um I forget the name for it but you know where you have name for it but you know where you have name for it but you know where you have >> uh an account it's it's balance so you >> uh an account it's it's balance so you >> uh an account it's it's balance so you have have have >> it's a ledger >> it's a ledger >> it's a ledger >> yeah it's a ledger thank you stuff >> yeah it's a ledger thank you stuff >> yeah it's a ledger thank you stuff coming in stuff coming out has to coming in stuff coming out has to coming in stuff coming out has to balance out balance out balance out >> yeah it's a big distributed fault >> yeah it's a big distributed fault >> yeah it's a big distributed fault tolerant financial ledger tolerant financial ledger tolerant financial ledger Yes. And uh but not not as in blockchain Yes. And uh but not not as in blockchain Yes. And uh but not not as in blockchain as in blockchain normal database. as in blockchain normal database. as in blockchain normal database. >> Uh [laughter] >> Uh [laughter] >> Uh [laughter] and um they do this thing where they and um they do this thing where they and um they do this thing where they start the server, they allocate memory start the server, they allocate memory start the server, they allocate memory and that's it. They allocate memory at and that's it. They allocate memory at and that's it. They allocate memory at the beginning and then they never the beginning and then they never the beginning and then they never allocate any memory anymore. Uh it's allocate any memory anymore. Uh it's allocate any memory anymore. Uh it's like hard mode uh old school C like hard mode uh old school C like hard mode uh old school C programming. programming. programming. >> Wow. And in doing that, this was a this >> Wow. And in doing that, this was a this >> Wow. And in doing that, this was a this is an example where a financial ledger is an example where a financial ledger is an example where a financial ledger is not a place where you fit you want to is not a place where you fit you want to is not a place where you fit you want to do a GC language. You you need no do a GC language. You you need no do a GC language. You you need no pauses, no hidden allocations. You want pauses, no hidden allocations. You want pauses, no hidden allocations. You want to be very explicit. You need to have a to be very explicit. You need to have a to be very explicit. You need to have a deterministic layout on disk, tight deterministic layout on disk, tight deterministic layout on disk, tight control of your caches. I used to work control of your caches. I used to work control of your caches. I used to work in finance and uh Zigg making all these in finance and uh Zigg making all these in finance and uh Zigg making all these things kind of like enforcable and things kind of like enforcable and things kind of like enforcable and explicit makes it a great a great explicit makes it a great a great explicit makes it a great a great example. Well, now you've even got folks example. Well, now you've even got folks example. Well, now you've even got folks at like Open SUSA trying to go and do an at like Open SUSA trying to go and do an at like Open SUSA trying to go and do an SSH implementation in Zigg. So, there's
-
SSH implementation in Zigg. So, there's SSH implementation in Zigg. So, there's lots of really fun and interesting stuff lots of really fun and interesting stuff lots of really fun and interesting stuff in the space. in the space. in the space. >> I mean, it's not maybe as serious as >> I mean, it's not maybe as serious as >> I mean, it's not maybe as serious as finance, but developers really care finance, but developers really care finance, but developers really care about the ter their terminals and uh I about the ter their terminals and uh I about the ter their terminals and uh I don't know that Ghosty by Mitchell don't know that Ghosty by Mitchell don't know that Ghosty by Mitchell Ashimoto is also written in Zigg and Ashimoto is also written in Zigg and Ashimoto is also written in Zigg and >> it's not on Windows yet, but he plans >> it's not on Windows yet, but he plans >> it's not on Windows yet, but he plans also to add support for Windows. also to add support for Windows. also to add support for Windows. >> Yeah. >> Yeah. >> Yeah. >> Uh and a lot of people like it. >> Uh and a lot of people like it. >> Uh and a lot of people like it. >> Well, this is great. Well, thank you so >> Well, this is great. Well, thank you so >> Well, this is great. Well, thank you so much. Zigg is having a moment. Folks can much. Zigg is having a moment. Folks can much. Zigg is having a moment. Folks can check it out at ziglang.org. check it out at ziglang.org. check it out at ziglang.org. You can explore the code, download it, You can explore the code, download it, You can explore the code, download it, and get playing immediately. And and get playing immediately. And and get playing immediately. And certainly, if you uh or your company certainly, if you uh or your company certainly, if you uh or your company wants to, you can check out the Zigg wants to, you can check out the Zigg wants to, you can check out the Zigg Software Foundation. They are a Software Foundation. They are a Software Foundation. They are a nonprofit, and they will accept nonprofit, and they will accept nonprofit, and they will accept donations. And certainly, they'll donations. And certainly, they'll donations. And certainly, they'll appreciate you showing up in the Discord appreciate you showing up in the Discord appreciate you showing up in the Discord and announcing that you're building and announcing that you're building and announcing that you're building something in Zigg. something in Zigg. something in Zigg. >> Yeah, even if it doesn't get bought by >> Yeah, even if it doesn't get bought by >> Yeah, even if it doesn't get bought by Entropic, Entropic, Entropic, >> even if it does. We love you. Anyway, >> even if it does. We love you. Anyway, >> even if it does. We love you. Anyway, [laughter] [laughter] [laughter] thank you so much, Loris Crow, for thank you so much, Loris Crow, for thank you so much, Loris Crow, for chatting with me today. chatting with me today. chatting with me today. >> It's been a pleasure. Thank you. >> It's been a pleasure. Thank you. >> It's been a pleasure. Thank you. >> This has been another episode of Hansel >> This has been another episode of Hansel >> This has been another episode of Hansel Minutes, [music] and we'll see you again Minutes, [music] and we'll see you again Minutes, [music] and we'll see you again next week.
Summary
The main theme is the Zigg programming language and its growing community. Key subjects discussed include Zigg's use in systems programming and bioinformatics, and how it offers a less intimidating alternative to C/C++ for developers interfacing with C APIs. The takeaway is that Zigg is a modern, accessible low-level language with an active and welcoming community, exemplified by the speaker's personal journey into its ecosystem.