 Uh, this is going to be another Q and a stream, although this one is going to be a little bit different from the previous one in that I actually had people, uh, I give people the ability to submit questions ahead of time rather than just taking them in chat. So hopefully this will actually be useful even for those of you who are not here right now because hopefully you already submitted a question. Um, the way this is going to work is I've posted a link to chat and on Twitter that is, um, basically a voting site where you can add, sort of suggest new questions or vote on other people's questions, and then I'll just walk through them in sort of ranked order roughly and answer them as we go and we'll see how far we get. And then chat will hopefully be a way to just with sort of additional questions or stuff around the current topic that I'm talking about. Um, this is also a little bit of a weird stream because at least in theory, this is going to be my last stream in this apartment, which is where I started doing these rough streams in the first place. Um, this is a little bit of like a bittersweet feeling, but I'll be moving to LA, it's going to be exciting there. Uh, and hopefully there'll be plenty more streams when I get there. My hope is also that once I finish my thesis work, I'll be able to continue doing some of the longer form streams that sort of is what, where I started and the things that, that give me the most as well. Um, there's some other videos of the, the sort of old stuff I did of like porting flame graph or Java's concurrent hash map to Rust that I recommend you give a watch. They're like five to six hour each clip. Uh, some of them have multiple parts. So they're pretty long, but they are very thorough and they're a great way to just learn some more advanced and real uses of Rust. Uh, and I hope to be doing more of those. And of course more uses of, um, uh, of crust of rust is the plan as well. So all of that, hopefully if everything goes according to plan, we'll start up, uh, I'm guessing like end of September sometime, but it's a little bit hard to predict. Um, and I still won't be finished with my thesis by then. So realistically, the longer streams probably won't started till maybe mid-November. Uh, but hopefully there'll be at least be some more crust of rust before then. All right. So let's get into questions. So the way this is going to work is I have a monitor over here with chat and with, um, questions and I'll read out the question and then try to answer, uh, let's see here. Um, how do you start contributing to small open source rust projects? What good practices would you recommend to newcomers in the open source field? So this one's interesting. I was, um, I was actually interviewed on a podcast called humans of open source and the, the episode with me actually dropped today. So you can, you can listen to that. Well, we talked a bit about my thoughts on open source in general, how I got interested in the first place. Um, and also just the things I, the ways in which I think it's good to try to get into open source. Um, the, the sort of high level overview is that I think the best way to go about it is first of all, to try to work on things that you find interesting and useful things that matter to you. It's really hard to just sort of dive into some random code base and just start tacking on it because you won't have the right motivation. You won't have an understanding of what it's supposed to do or how it works. Um, and so you have to learn what it's used for while you're also learning the code in general. I found it a lot better to start with something that you use, whether it's a library or a program or something like that, something that you, at least to some extent understand what is for and what its purpose is. And then ideally you have some issue with it or something. You would like to see it be able to do. And then you dive in from there. So you start looking at the code that matters to you. You don't have to understand the whole code base. All you have to understand is the stuff that matters for the things you want to change. Um, so that's a good way to get into it. And the other thing is I would actually say, try to avoid the very established projects, uh, at least in the very beginning. And, and this is a little bit controversial, but my thinking here is that some of those code bases are really optimized. They've taken a lot of work from a lot of people and reading them. You might not immediately understand what they do because there's a lot of just finicky, smart, optimized stuff that maybe wasn't, is there more for like performance optimization or that sort of stuff, but actually makes the code a little bit harder to understand. Whereas if you read simpler code bases or code bases that aren't as evolved, um, they might actually be easier to read. Now that said, they might also just be bad code. They might be harder to read for that reason. So it's a, it's a tough balance. Um, but in general, I think just look for something that you care about and then work towards that. And that will just make everything a lot easier. Um, can you post the link? I'm interested. Um, it's, ooh, I think the, their Twitter is humans of OSS. I think that's their username on Twitter and it's whatever their latest tweet is, or I also just tweeted it out. Uh, let's see. All right. Next question. Let's see what happens if I click this worked. Um, do you think the recent Mozilla layoffs will affect rust greatly? If so, in what ways? Um, so there was a, um, uh, there was a post on the rust blog about this also today, I believe. Uh, and like the, the thinking here, right? Is that it's really unfortunate for so many people at Mozilla who were integral to getting rust adoption started. Like they, the many of them, many of the people who laid off were not necessarily rust core contributors, although some of them were. Um, but they were a big part of driving rust to what it is today. Like the servo team is a great example of this. Um, and it's sad to see those people go and to see those projects sort of disappear. I don't think it spells like the end of rust at all. I think rust has grown to the point now where, um, uh, there's enough adoption in industry and at large companies that I think the project is going to keep surviving. And we see this because many of the people working on the rust core team are employed, not necessarily by Mozilla and they work on rust in particular, um, they might be employed by like, um, David Tolna is a good example, right? Who works for Facebook, but works a lot on rust itself and on the ecosystem. Uh, and I think that is the way that rust survives going forward is not necessarily for Mozilla to like employ all the engineers. That's not really a scalable approach either. Um, and I think the blog post also talked about the sort of establishing a rust foundation, which is at least at the moment, it seems mostly like a legal process. It's not necessarily to like solve any like programming problems, but it's just because you need like, you need rust to have a bank account, uh, in order to just end to own like trademarks and stuff. And this is, at least reads to me as one way in which rust wants to try to make sure that it's a separate entity for Mozilla. Um, but yeah, I think that overall, I don't think that the layoffs are going to break rust in any meaningful way. Uh, even though they are very sad. Um, I was especially sad to see, um, that the MDN team basically went away. Like that was, that seems, seems really bad for everyone. Um, advice on intermediate level programming. Uh, I finished the rust book and I want to implement a toy database. How would you generally approach that? I put it as going from language to systems level thinking. Um, advice on intermediate level programming. Well, so, so it's tough because I think for basic programming, the, there's like a narrow waist there of there are sort of basic skills you need to pick up almost no matter what you're going to be programming. Once you get to the more intermediate skills, it branches off a lot more. Like you can know a lot about GUI programming or windows programming or game programming and be sort of intermediate or advanced in those levels. And you don't need to learn things like the, I don't know, um, if you're getting deep into game programming, you probably don't need to know too much about how the rust embedded space works. And so in that sense, what intermediate resources to look for really depends on which intermediate areas you're interested in. That's sort of where you start specializing. That said, I think there's some general good advice for what you do if you want to learn intermediate rust stuff. Uh, and that is to look for the, basically slightly more intermediate resources. So one example of this is my own videos on just like developing real stuff in rust. Right. So this would be things like the two porting streams we've done, some of the open source contribution streams we've done, um, just things where you get to work with real rust problems, um, and develop sort of real rust code. Um, there are some resources that are not necessarily just like observing people, writing code and reading code. Um, and those are sort of open source contributions is one. Um, the other would be to read, read and try to understand, uh, some of the, some of the more advanced guides. So for example, try to read like the Nomecon, which is one of the sort of rust resource for how to write unsafe code. Um, you could try reading, learning rust with entirely too many linked lists, which gets into more of like the unsafe nitty gritty data structure management type stuff. Um, there's also Philip, Philip Opperman, I think is his name, um, has a really cool blog series on writing an operating system in rust. Uh, and that goes into a lot of the lower level details. Uh, you can do things like David Tolney's proc macro workshop. Um, and so it's really just like seeking out topics you don't know anything about or know little about that you want to learn more about. And then just like try to do them or try to contribute to them. Uh, you could also look at like the internals rustline forum or the users rustline forum and just look for interesting discussions. Like RFCs are in progress and just try to understand the process, understand the problem they're discussing and the solutions they're debating. And that's one way to just like pick up things a little bit more organically, perhaps. Um, yeah, so the advice is very broad, but it's really just find things that are seem interesting to you and then just read and learn about them, uh, rather than go, this is too advanced for me. Um, have you been following the const generics developments? I'm definitely going to do a video on const generics at some point. Um, currently it's not really stable enough to do that. Uh, but it's something I want to. Oh yeah. Another, the, um, uh, pink cap, the company pink cap has a, a good rust tutorial that has you write a database like you asked for. Um, you could also like try to read the Norio code base. Although realistically it's probably hard to wrap your head around. Um, in general, if you're going to write something like a database, I would say start with a key value store, not a database database. You might be using the terms interchangeably, but a database usually has a lot more sophisticated features, like try to implement like a, a basic memcash D or maybe even Redis clone. Um, you can even implement the Redis protocol itself. It's, it's fairly straightforward. Um, all right. What is your opinion on test driven development and testing in general in rust and other languages? I'm wondering because in the streams, you seem very structured and organized, but only write very few tests. Um, okay. So this is a trickier topic because I think tests are really important. Um, but to me, the first instinct is not necessarily to start writing tests. Um, I don't think it's a bad idea. It's just not how I think about the problem. Um, the, although my thinking is similar, it's just not quite the same, which is I like to start with the use of the, of whatever I'm building. Um, and that sort of might mean writing example code, but I'm not writing a bunch of test suites and then like building out the thing by writing the tests. Um, I'm more sort of constructing the, the use of the library. Uh, and then filling in what's necessary to make that use work. Uh, and then I would add tests. Now there's an argument that like test driven development is better because you don't use sort of set up the expectations rather than adapting it as you go. I don't know if that's better. I don't have a strong feeling about this. Uh, but I do think that one of the, one of the parts that's the most worthwhile to me about test driven development is, is this notion of beginning with writing the outside, the external code rather than just diving into the internal straightaway. Um, as for why I don't write too many tests on screens, um, it's partially because it's really hard to write good tests and it doesn't make for very interesting watching most of the time. Um, usually over the course of a stream, we might not even get to testing that interesting of a behavior. Like very often, like when we're porting the concurrent hash map from, from Java, for example, it's not clear that there's a nice self-contained, like the simplest test is like do an insert and do a get and check that you get the value, but that required like 12 hours of work for us to be able to satisfy that test. Um, there are some other streams where tests might be more reasonable. Like if you look at, um, I did just a, uh, simple hash map implementation a while back where we did a little bit more testing. Um, but in general, there, there's a lot, um, there's a lot of work for many of the streams I do in order to even satisfy simple test cases. Um, your thoughts on Microsoft becoming a big player in the open source software scene, uh, Linux, GitHub, NPM and such. Uh, are you afraid they could hijack, uh, open source projects in, in the future? Uh, you know, I don't mind it. I think Microsoft is doing better. Um, I know the Microsoft has this reputation of sort of like embrace and I forget what the, it's like embrace and extinguish or something. I don't think that's what's happening here. It's, I think many people who like have been around for a while and seen what Microsoft has done in the past might have this sort of eerie feeling of like, uh, but maybe they're doing the same thing here. I don't really have that here. Um, I feel like Microsoft is just getting a lot better at dealing with open source, um, and I applaud their efforts to be honest. I think I do have some concerns around, um, Microsoft is a very big enterprise company and usually when you own a product, you sort of cater it to the use cases you know, and so I'm worried that some of them become very enterprise. The, the best example of this for me is, uh, Azure pipelines, even though it's not open source, but it is something they provide for free for open source and using it as a pain, mostly because it's really geared toward enterprise settings. It has a lot of just like org chart stuff and pipelines and artifacts that like they don't matter to open source projects. And I'm worried that they might, for example, in, in GitHub, like, encourage the development of features that don't matter to open source projects, um, which like might be a problem, but overall, I'm not too worried about Microsoft entering the space or, um, or becoming larger in, in the investment in the open source ecosystem. Um, if you'd have to pick something from the Rust programming language you don't like or you think it could have been done better or that just doesn't make sense, what would it be? Um, I got this question last dream as well. And I think my answer is the same that I don't, I don't have anything that I really dislike about Rust. Uh, there are some design decisions that like retroactively could be fixed. Um, these are things like having both from and into, which is probably not necessary anymore. Um, or having like try from and from stir. Um, there's also stuff like async drop, uh, or having, uh, the drop trait take a pin mute self. But these are things that sure, if I could like wave a magic wand and fix something, those would be good things to fix, but, but they're not, they're not to me like something I don't like. Um, I think maybe the, no, you know, I've, I'm actually pretty happy. Um, let's see. I have some people who are saying three types of strings. No, I think having multiple types of strings is a really good idea in Rust, actually. I'm happy they did that. Uh, string and stir are just different types. Uh, and U8s are not strings. Um, uh, the need for different future traits. No, I'm pretty happy with the future traits. Um, yeah. No, uh, and there's like file and module organization. I'm pretty happy with how that works too, actually. Um, yeah, I don't think I have any major complaints, which is maybe weird. And, and maybe I would say something different if I was like in the middle of hacking on some project and was stuck on something the Rust compiler doesn't let me do, but, but in general, no, I don't think there are design decisions that I completely disagree with. Uh, I would like to re-implement some parts of a project I work on, which is mostly written in C in Rust. What is a good starting point for learning about interoperability between C and Rust? Um, so the, um, the Rust book has a chapter on FFI. It's not very expensive. Um, I would also read, um, bind gen and the bind gen and C bind gen documentation, which gets into this a little bit. Um, there's also the Nomecon has some stuff about, uh, extern C and, um, the in-memory representations of types that is relevant. Um, so those are maybe some of the things to look at. In general, though, the interoperability story between Rust and C is, I'm totally going to get flack for this, but it's just like not that complicated. It, it's complicated for like the, what I mean by that is the mechanism is not complicated. It might be complicated to get any given library to work because of a bunch of corner cases you have to deal with, but in terms of what the mechanism does, there aren't that many things as like extern C, rep or C, how to link it. And then the rest of it is really like figuring out what is the, how do I express the C type in Rust or this rust type and C with rep or C that shouldn't be too hard. Uh, unless you start dealing with things like unions and enums, which you have to do a little bit more magic with. Um, but apart from that, like the FFI infrastructure is pretty good, I think. Um, let's see. Um, yeah, that's what I would say. Okay. There's some follow-ups to the previous question about, uh, other gripes with rust, no pin and iterators. Yeah. Uh, that's another one where after the fact, we know that it should have it. Um, this is so that you can support generators better. Um, and it's a, we can't make this change after the fact. Um, no proper aliasing model for writing safe unsafe code. Um, so that's something the unsafe working group is working on the unsafe code guidelines is pretty good about this. Um, and part of it is just like, it's really hard to figure out what the right answers are. Um, I'm seeing that there are a bunch of other questions here, if you can submit them to the question submission link, that's a lot better because that way I can actually go through the questions that you submit. Uh, if you put them in chat, they're just going to get lost. Uh, and I think chat can supply you with the link if you, um, if you miss it. Um, oh yeah. Um, for the FFI question, Ryan Levick recently did a stream on, uh, FFI and rust. Uh, and that's something you should probably check out. I think he's planning to do more as well. So that might be a good thing to, to keep an eye out for. Um, how did the Trump administration affect your or your colleagues, student visas? Um, so luckily for me, it didn't make a difference because I'm a continuing student. Um, and MIT is in a position where, so there was a debate for a while about, um, the change that would require that if you, um, if the university you're at does not require any in-person attendance, then you cannot enter the U S on a student visa. Uh, they have to require some in-person attendance. Uh, if it's fully remote, you would have to stay out of the country. Now, luckily that ended up not getting enacted. Uh, but even if it had, MIT would probably basically have just put in place, um, like at least for graduate students, uh, requirements for like one hour a week or something in person, just to have some nominal amount that lets you stay in the country. I luckily didn't leave the U S when the pandemic started. Uh, and so I'm still here, which means that I don't have to go through customs. So that would be less of a problem. Uh, continuing students also had slightly different regulations. More generally, I haven't been touched by them that much, but I know that there are many students that have, uh, in particular, students from, uh, certain countries that just like can't enter the U S, um, or, um, new students that are just unable to come here. Part of this is also not necessarily about visa regulation, but with how poorly the U S is handled the pandemic. Now the U S is just doing really poorly, which means that they're in this position where students who are here have a hard time leaving because it's like Europe, for example, is just like we don't want Americans here right now. Uh, and similarly people from Europe can come to the U S, but they kind of don't want to because everything is currently a bit of, uh, uh, it's not exactly organized and well managed here right now. Um, so I think actually for me, the biggest challenge has been the uncertainty. Like it's not that the Trump administration has enacted policies that affected me personally. It's more the ongoing, I don't know if fear is the right word, but sort of anxiety around they're doing, they're making all these changes and some of them might be relevant to me. Uh, and all of them are bad, right? Uh, so for example, um, there was some talk about they might like reevaluate things like, uh, H one B's or the, uh, student visa practical training programs, which would affect me. Um, I don't think anything has happened in that space currently, but there's just like a lot of uncertainty that makes it really hard to plan for the future. For example, um, how can a beginner get started with systems programming? Um, we, I covered this question in the past actually, so I'm going to skip this one. Uh, I think the answers were pretty much the same. How can you centralize compiled rust dependencies to avoid having them in every project location? Ah, this is an easy one. Um, so cargo has a lot of options. There's a lot of configuration parameters you can set and in particular, you can set what target directory cargo should use. So by default, this is like dot slash target. So it's the, a target directory in the current projects directory next to the cargo tumble, um, or in next to the workspaces cargo tumble, technically, um, now you can override this either in dot config slash cargo or dot cargo slash config. Um, or you can just set the environment very variable cargo target dur. Uh, and if you set that to some absolute path, then now all things you compile that is rust code cargo is going to compile into that target directory. So for me, for example, I have that on a separate, like partition, a separate disk essentially. Um, and that means that I don't end up having like huge target directories are duplicated all over the place. Like if I compile Tokyo for one project in Tokyo for a different one with like all features enabled, then it doesn't end up keeping two copies of the resulting binary blocks. Um, it's just been really nice. It has some downsides. Like it needs to serialize the, the compilation across multiple crates. So if I, well, not across crates, but across projects. So if I run like cargo build in one project and cargo build in another project at the same time, uh, one will wait for the other to finish so that they don't step on each other's toes. That might be something that gets fixed eventually. Uh, but usually this is not a problem because you just, it's rare that you're building multiple projects at the same time. Um, yeah. So you get this like waiting on workspace lock kind of error, which is basically cargo saying someone else is currently using the target directory. I'm going to not use it at the moment. And this can be annoying if it comes up, but usually it's fine and usually wouldn't even help you that much because if all your CPU cycles are going to compiling this thing, compiling this thing at the same time would just make everything slower. Um, there are some exceptions, like if, um, if like Rust analyzer is building your crate and at the same time you're trying to run like cargo check, um, those can conflict. And that's pretty annoying. In theory, this shouldn't be necessary. They should be able to run it concurrently, but that's something that I'm assuming just hasn't been fixed yet. Um, what is the Rust nightly feature? You want to see stabilize the most. Um, this also came up in the previous stream. Um, but for me, the answer is, what's the feature called type infiltrate type alias infiltrate. Uh, this is also known as known as, uh, existential types. Um, and it's just such, uh, such a lifesaver when it comes to dealing with, uh, asynchronous code and traits. Um, the basic idea is that it lets you write like type foo equals impulse bar. Uh, and now foo is a concrete type that happens to implement bar and you can use foo in multiple places in your code and they will all refer to the same impulse. So it's basically being able to say like impulse bar, but have it be the same type across multiple instances. It basically gives you a name for an auto constructed, uh, infiltrate, which is, uh, it just turns out to be really handy. One of the places it comes in particularly useful is, um, imagine that you have a trait like, uh, what's a good example of this, uh, I mean, towers service trait is the best I can think of, but it might not mean much to you, but imagine you have a trait with an associated type that has to implement future. It's really annoying to implement that trait because you need to name a type to go there and you can't use impulse trait in that position. You can't say like impulse, um, like service for my type and then type future equals impulse future. Uh, however, with this new nightly feature, you can and it's just, it's a lifesaver. Um, uh, yeah. So that I think that's the one I want the most. Um, Contrary case is nice, but I don't actually need it that often. Like I need it sometimes in very low level libraries, but usually not that important. Um, there's another one that's cool. That's, um, label break value, which lets you give, um, it lets you, you know how you can like name a loop in rust? Uh, actually, I can demonstrate this might be easier here. Uh, so in rust, you can do something like, uh, oh man, um, like outer and in here you can do break outer, right? You can name a loop and you can choose to make this a little bit larger. Uh, you can name a loop and then choose to break out of a named loop. Uh, that way you're not just breaking out of the innermost one, but an outer one as well. Um, now that's really cool, but what this new feature does, I think it's called label break value, um, is that you can create an arbitrary scope with this name, uh, foo. Um, so it's not a loop. It's just a scope. You write a bunch of code here. Um, and then at some point, like if let's say early return, um, you can do break foo with like true. And now this thing is going to evaluate to true. Um, this turns out to be really neat if you have things like asynchronous blocks. It lets you early return from an asynchronous block. Um, can't see screen. Oh, right. Ooh, nice. I forgot about that. Now you can see the screen. Maybe my fancy new. No. Oh, right. How about now, dude, we can only see your face. Great. Nice. All right. So, um, yeah. So if you look at this code, um, if you hear, we have a nested loop, I have a name assigned to the outer loop and inside of the inner loop, I can break out from both loops. Whoa, all the comments came in. Great. Everyone can see it. Great. Um, and with label break value, you can name not just a loop, which you can already do on stable, but you can name a particular scope, uh, and then you can break from that scope, right? If I typed like return true here, that return would return from the whole function, but break lets me break from this scope, uh, which is real handy. Um, and in particular, uh, imagine that you had something like, um, like you have an async block, uh, and inside of this async block, you want to write some code like if early return, then you want to return from the async block, you can't type return here that wouldn't work, uh, because it would return from the outer function, which would probably just generate an error. Um, and there's no like yield keyword or anything like that at the moment, uh, but this break label value, label break value would let you do like block break block, uh, to early return from the whole async block, which is really neat. Uh, why not use a closure? Um, so closures often work, but closures have other problems. Uh, so for example, if I do like, uh, like let X equals, I guess I'm going to execute this closure immediately. So something like this, uh, and if early return, then like return true. So this is what you're suggesting. Um, that works most of the time. Unfortunately, a, it doesn't work with async blocks because we don't have async closures yet. Uh, B, it means that now you don't have a rate of returning from the outer function. So if I wanted to use like the question mark operator in here, then I would have to also propagate that error from here. Um, if I actually wanted like a full early return, I couldn't do that at all in here. Um, the other thing this doesn't let me do is, um, imagine that I want to, yeah, like I have something that mutably, mutably borrows like self dot Y and in here I want to do self dot X dot push or whatever. This code wouldn't compile because the borrower checker currently at least, um, tries to mutably borrow all of self into the closure, but I still have Y mutably borrow dot here. And so this code wouldn't compile with a closure, but whereas with a block it would. Um, is that blocked by a technical issue or because they don't want to stabilize the design yet? I think it's a little bit of both. Um, yeah, I think you can do a little bit. I think it's a little bit of both, but I'm not sure. Uh, Alice, are you sure you can return an async blocks? I feel like I've tried this before and it did not work or specifically like it works in an async function, but an async block. You could be right. You could be right. I just, I feel like I've run into this before. Um, what's the RFC name? Ooh, I don't remember the name label break values, the thing you would look at. Um, uh, if you're not in a loop, doesn't unlabeled break already do this? Uh, you can't break outside of a loop in Rust currently. Ooh, let's see what Alice came up with here. Ooh, my browser is being weird. Let's see here. Ooh, sorry, that's going to be bright. This is not the same. It's not clear that this doesn't return from main. Uh, the way to actually check this would be, or how can we adjust this to actually make it do the right thing? It wouldn't print anything if it returned from main. Oh, yeah, you're right. Interesting. I did not know that. Learned something every day. Neat. Um, well, in that case, label break value, still useful, not as useful. Sorry, it was very bright. I should have warned you. Um, okay. Sweet. So let's switch back to questions. Theory shows me, um, I'm currently feeling very comfortable programming in Rust and most of my projects rely on it. Should I learn also languages such as Java and C++ because of its popularity in the job market? Um, it really depends on what it is you want to do. Like you can, you can find Rust jobs and that's fine. Uh, now there are a number of jobs where it will still be useful to be familiar with other languages. It's, there are some companies that are Rust only, but a lot of, especially the larger companies will have systems that are implemented in other languages and being able to interact with them is going to be valuable regardless. You don't need to necessarily be as competent in those labeled languages as you are in Rust, um, but it's probably worthwhile to at least not be completely out of the loop on how they work. Um, but that said, I think you can totally get by with knowing just Rust. It will limit your job options though. Um, do you have any experience with actor frameworks or languages? I dearly miss Erlang's model when I program Rust, but also know that there's a big interest from people trying to mimic it. Um, I don't have a lot of experience with actor models, although I have written a lot of code that happens to work a little bit like it. Um, I think very often in the async world, you sort of end up building a little bit of this, like you spawn things that have channels to talk to one another. Um, but I haven't used a framework for it. Uh, so I can't really speak to that. I have not used Erlang, although I do really want to try it someday. I just like haven't found a thing to use it for. Um, Rust also has a sort of troubled history of actor frameworks, which is probably part of the reason I haven't really used it, but I think part of it is also, I haven't felt a need for it. That could be ignorance on my part of not, not knowing the values that it brings, but at the same time, I've been able to get by just fine without it. So is the answer I would give there. Um, do you think rust needs a repel? It was like an interactive, um, like a programming language interpreter for rust. Uh, why is it hard to implement? I think if it was easy, it would already come with a repel. Um, in general, repels for compelled languages are hard because there isn't immediately obvious ways to take like a prefix of a program and then only run one more line. Usually what you have to do is like run the whole program again, which works, but it's often a lot slower. You don't really want to reevaluate all the state up to that point. There are some ways you can get around this. Like you can take snapshots of memory and that kind of stuff, but in general, it's like kind of painful to do this process with languages that don't have a runtime. There, I think there are some like experimental ones for rust, but I haven't tried them. I don't know how well they work, and my assumption is that they're basically either they are recompiling and running the program from scratch each time, or they're using something like Miri, which can actually interpret rust. But I think then you need hooks into like very deep into your rust code into the compiler to be able to do this efficiently. If a company would offer you employment to turn Noria into a production ready database, would you accept or do you consider the chapter Noria to be done for you after you finish your PhD? OK, so I think I've said this before, but I'm in a position where I've worked on Noria for so long, like I've worked on it for almost six years, and I still believe that it's a great idea. I want it to be a thing that people can like use and take advantage of, but I'm sort of burned out from it. Like I don't want to work full time on Noria at least for a couple of years, maybe more. Even for databases more generally, like I wouldn't want to work on this set of problems for in a little while, I basically need to sort of recover a little bit. I don't consider Noria done. And I think there's plenty more research to do there as well. It's just that I I am sort of done with the project, at least for the time being. If you could single handedly prioritize the projects that a new Rust Foundation would fund, what are your top three and why? That's tough. I think some of the most important projects for Rust are. Realistically, BindGen. BindGen is basically it's one of the key reasons why Rust is getting traction at bigger companies so quickly. And that is that you can interface with existing code so easily. And BindGen makes that easier. And so I think BindGen is very important for that use. I think arguably Cyn. Cyn and quote to me are like one thing. And I think Cyn is pretty vital. It should arguably be in the compiler, but it's a little unclear. It's only important for certain things, which is why I'm hesitating. But it is like a critical piece of infrastructure to make a lot of the cool things that we can do with Macros possible. And. I think the third one might be Serdi. And the reason for that is like everyone needs to serialize and deserialize. I don't think Serdi really needs funding. I think sort of it's like gotten good enough as a core library that it. I mean, I'm not a maintainer, so it's easy for me to say. But I think it's fairly stable at this point. That's also why it's now 1.0. But that's certainly something I would consider like a key feature of the ecosystem. This is this just like ubiquitous ability to serialize and deserialize things in an efficient way. After finishing an undergraduate career, wouldn't you undergraduate career? Do you mean undergraduate studies? Would you recommend gaining experience in the industry before in getting into academia? I don't think you need to. Like if you if you finish your undergrad, you can just start grad school. That I mean, that's basically what I did. And it was fine for me. I do think there's value in being older, at least when you start your PhD, because the PhD requires a lot of self discipline and that sort of comes with time. At the same time, I don't like I don't think it matters. I don't think the industry experience will help you that much. It might help you a little just to be more familiar with like real world problems. But in general, I don't think you need it. The other argument against it is that you'll be farther behind when it comes to things like recommendations in general for applying for academic positions. It helps to have references from academia. It's not necessary, but it helps. And those sort of date as you leave academia and stay out of it for a while. And remember, you can always get industry experience in academia, right? You can do internships and such over the course of your studies. And that might be a better way to get that insight into into industry. Give me one second. I'm just going to open a window. Let's see. What's the best resource to learn Rust concurrency? Oh, I could use my standby screen here, right? What's the best resource to learn Rust concurrency? I don't think there's a one best resource. I think it's a rich enough field that it just there's a lot you can get experience with. Like one example would be try to port some existing concurrent data structure or like find usually a good inspiration here is like find older research papers on concurrent data structures and try to implement one because usually they give like C pseudo code, for example. And just go implement that. And you'll learn a lot in the process. The other resource is to look at other people who implement concurrent code. This would be something like my stream on porting the concurrent hash map from from Java or it might be things like look at the cross beam code for things like cross beam channel or the the like cross beam skip list, for example. You can even just like read Wikipedia articles on it. There's just like a lot of good interesting concurrent data structures that you can implement without too much trouble. And I think that's really where learning those concurrency bits really come from. Of course, there are parts of concurrency that are not unsafe. They're not about data structures. So this is the stuff like locks and con bars and channels and that sort of stuff. I don't have any good resources for that specifically. I would say that there's some good ways to learn it that are not necessarily tied to rust. So, for example, MIT's 6824 class on distributed systems. There's a lab that's publicly available where you implement the raft consensus algorithm. And that has a lot of concurrency in it. You need to have like channels and locks and all that stuff. And that is in go currently. So that part of it is not rust specific, but it will teach you a lot about concurrency and about reasoning about distributed systems. And it might be a good exercise. I think pink cap has a port of that lab to rust that you could try. But I haven't looked at it myself. MIT's PhD program is probably one of the hardest to get into. What is your personal experience at MIT as a PhD student? What part you liked a lot? What part you wish could be better? It's a complicated question. I think my personal experience at MIT has generally been very positive. It's been I think PhDs are weird in that they it matters a lot what you do with it. As opposed to many of your earlier studies in the PhD program, like you decide you decide what you work on, how you work on it, what area you work in, very little is sort of pushed on you. And that means that what the university provides is sort of the support structure around it. What you actually end up working on is going to primarily be down to you. And so that part is hard to evaluate. But in terms of that sort of surrounding infrastructure, I think MIT does really well. Like funding has not generally been a problem for me up through the years. I've worked with a very talented group of professors who like have a lot of experience both with both an industry with writing papers with academic research. And they're just good people to talk to in general. And similarly, like my lab, the other people in my lab are very smart people working on interesting problems. The same applies to like the whole floor really and all of MIT. But my floor is the one I know the best. I think one thing I liked about MIT is that there really is a spirit of you can just walk up and talk to people like in general. If I wanted to talk to a professor, I could just like email them and then go talk to them. Or if they're students in like the database group, which happens to be on the same floor as my desk was on, I could just sort of walk over and chat to them. And it was a very like informal atmosphere of just like academic collaboration. I also think MIT in general is pretty decent about supporting their students when it comes to like making sure they have housing, making sure that there are like our contact resources for things like immigration. And like the stipend you get is very little compared to working in industry, but it's good enough to get by as a student, like you're not building up debt as you go here as a grad student, for example, at least in the computer science department. As for parts I wish could be better. I think that comes down to very personal things, not in the sense of I don't want to talk about them, but in the sense of it really comes down to your particular situation. So for me, I think what would have made it better for me is to have an understanding sooner of what a thesis is, like what work needs to go into one to have it be like this is acceptable for a thesis. That's sort of something I had to figure out as I went and there aren't really well structured guidelines. That might just be because they're hard to set because of the wide range of work you can do for a PhD. But but I think that was certainly one of the bigger struggles for me. Why are you planning to leave academia and work in industry instead? So I'm planning to leave academia because I don't think it's right for me. Specifically, I really enjoy building things that people use. That that other developers in particular, like I like building tools and infrastructure that that other people can like sit down and either learn from used to be more productive or just like have things be useful immediately or in some immediate sense. And academia is not really about that for arguably for good reason. But there it's more about you have to make sort of meaningful intellectual contributions. And that means that spending a bunch of time on getting the documentation right or building out an expensive test suite is just like not that important. And that's probably the the biggest difference of opinion there for me that I want more of that sort of hands-on usefulness that I feel like is more prevalent in industry than in academia. At the same time, I like sort of developing new things. I don't just want to be a code monkey, right? Like I want to feel like I'm designing, architecturing new solutions, thinking of new bits of infrastructure. And so there's certainly be some of that like research and teaching certainly aspect of it to me. But I think I can do that better in. I think I can do that better in industry than academia. Do you have any podcast you listen to or would recommend? I have several. I already mentioned the humans of open source podcast, which I think is just a really good idea. I like this idea of trying to show that the people who contribute to open source are normal people. Like we have problems in our lives. We're like we have flaws and errors. We have ups and downs. I think that's important. I think it's very easy to think that the like big usernames you see all over GitHub are they're all humans that you can talk to and interact with and they're not that unlike you. And you can also be one of those people. There's some other podcasts that I think are really good. There's a psychology podcast called You Are Not So Smart, which I think is just absolutely fantastic. It looks a lot at sort of social psychology, why we do the things we do, why we think the way we do the biases, the cognitive biases that we have. I found that podcast really, really interesting. I would, of course, also recommend the Rostation Station podcast, which I sort of will obviously recommend because I'm a big part of it. But also, I think it's a good way to just sort of stay up to date with the community. Like now we have this week in Rust that appears there. We still go through like new releases of the Rust compiler. We have interesting interviews. So I think that's a good way to stay up to date on Rust itself. Let's see what else I have. Let's see here. Podcast app. What do we got? Stuff you should know is fantastic. If you haven't listened to it, I highly recommend. There's a podcast called Not Another D&D Podcast. And it is fantastic. If you enjoy just like storytelling and D&D, it's it is another D&D podcast, like it's one where you've watched them play through a story, but it's really good. I personally prefer the main story much more to the one called Trinivale, but it's really funny. I enjoy that a lot. There's a podcast called Make No Law about the First Amendment in the US that I thought was pretty interesting. It's like a legal podcast. There's a podcast that hasn't been updated in a while called Playing for Fun, which was a podcast where these two people were basically playing their favorite games and talking about what they liked about them. So it's not a game review. It's not about like talking about all the ways in which a game is broken, but just talking about the joy of video games. I like that one a lot. What else do we have here? Constitutional and presidential were two other pretty good podcasts that they're more politics oriented, but they're sort of historical in nature. Tell Me Something I Don't Know was also really good. It's a it's sort of a game show podcast, but it's one where people have to come in and explain to the judges something they didn't know. And they get rated on their answers. And I think the final one is there's a podcast called The Turnaround, which is this person who goes around and interviews really famous interviewers and really good interviewers and try to get their take on how do you interview people? How do you talk to people you don't know and and learn interesting things? And I highly recommend this, even if you're not a person who normally interviews people, it was just a fascinating view into into just like the minds of interviewers. Can you share your development environment? Vim set up, which terminal shell, etc. I actually have a video on that already. I'll put it there in the video or something. And it is it's a little bit old at this point. So I can go through some of the changes. So I'm using Neo Vim. I'm using the fish shell and I'm using color scheme called grove box dark hard, I think that's what I'm using in all my programs. And I'm using Rust Analyzer to get like all the nice Rust things in Neo Vim. I'm using the Neo Vim plugin I'm using for interacting with us analyzers called COC and it's really good. It's really good. I use mutt for email because I'm old school and I like having my email in my terminal because I'm weird. I use Firefox as my browser. I use Alacrity as my terminal. I think those are like the. The quick the quick glance. Oh, and I use. You launcher as my this is like my program launcher. Which I'm very happy with and I use the binary space partitioning window manager. So BSPWM, I recently switched to it. I'm pretty happy. And yeah, I use Tmux as well for doing things like having multiple buffers open. I find that that works really well. And all my config files and stuff, all my dot files are on GitHub. They're on GitHub.com slash John who slash configs on Arch Linux. Let's see. Oh, quick reminder to because we now have a bunch more people watching. If you have questions, please post them into there's a website that like has all the Q&A where you can submit questions. You can also rate questions. And in general, I'll be answering the questions that have been the most highly rated sort of working my way through them. That way, the chat won't be just filled with questions that I don't get to answer. We can have them be a little bit more organized. Do you have any recommended books, which helps you gain strong computer science knowledge? I actually mentioned this last time in the last stream, but I'll do it again now because I think the list got lost sort of among chat somewhere. Let's see here if I can find it. It's pinned in the in my my channel on the station station Discord. But let's see here. The books I mentioned last time were The Progmatic Programmer, which is a great book. I highly recommend it for everyone. Seven languages in seven weeks, which is a it doesn't have Rust in there, but it's a really interesting take on just like exposing you to how different languages work. If you're introducing an operating systems, then design the design and implementation of the free BSD operating system is a really good and thorough book about how free BSD BSD works. The visual display of quantitative information is a book that I haven't read yet, but I've heard really good things about, which is basically if you have a bunch of data, how do you present it in such a way that it's understandable and neat? Hacker's Delight is a really cool book about very low level details like like bit twiddling and assembly and stuff, but it just really cool to read through some of that. I use it almost now more for reference than anything else. While I'm at it, I might as well do some like there's some other good nonfiction out there that I really like. So for example, is a book called Mindwise, which is social psychology book about why we misunderstand each other like the psychology behind why we misunderstand each other. There's a book called The Code Book by Simon Singh, which is about cartography and sort of the origins of cryptography, how cryptography is broken in the early days. The Dorito effect, which is a really interesting book about food and how the food processing and food development has developed through the years. The What If book by Randall Monroe, the person who makes XKCD is really good. But yeah, if you look through the pinned post on my channel on the Restation Station Discord, you'll see a couple of others I had there too. Factional books. Yeah, exactly. I still think factional is way better than nonfiction. If I have a hash map with strings as keys, are they cloned when they are inserted? So if you have a hash map where the keys are strings, like string with a capital S, then when you do an insert, you have to provide a string. If you provide a string that is owned, then no, the key is not cloned. If you provide a stir type, like a literal string, for example, then it has to be turned into a string in order to be inserted if that is the type of the hash map. And in that case, the string would be heap allocated and then copied over from the string literal you gave. Have you done any digital signal processing? What are your thoughts on Rust as a language for building audio tools? I've actually done fairly little signal processing in Rust, although I do think it's a language that is pretty well equipped for doing that. This is in part, I think GStreamer is one of the libraries is like looking at developing more stuff in Rust, and that would be really cool. And I think it's basically because Rust is a language that gives you really good control over low level details, like writing assembly, dealing with the memory management, and there's no runtime, no GC, which means that you can actually do at least semi real time processing. And I think that is a pretty good argument for why using Rust for signal processing is worthwhile. Especially in like an embedded setting, you might be able to use Rust programs pretty easily. But I haven't done it myself. It's something I want to do more about, like I like that space. But I don't know much about it. Oh, link to the discord. Can someone provide that? Should be easy enough if you're in there. How's the job hunt going? The job hunt is going pretty well. I don't have any public announcements yet. But my hope is that I have a sort of decision maybe even by the end of this week. I don't know yet. But it's going pretty well. Thanks for asking. Any thoughts about OCaml and modules versus type systems? No, I have never used OCaml and so I don't really have any thoughts on its module and type systems. What do you be working on next after getting your PhD? So as I mentioned, I'll be going into industry. I don't know exactly what position I'll be taking yet. But my a little bit more general take is that. I like working on things that matter to developers, like developer tooling, infrastructure, that sort of stuff. And I would like to keep doing that. I want to keep interacting with the rest of the community and ecosystem as much as I can. And ideally, I want to continue doing teaching, whether that's internally in the company externally or both ideally. I'll certainly be continuing with these streams. But if there was an aspect of my job that included doing things like rust education, that would be fantastic. So that gives you a sort of idea of what I'm looking for without necessarily being like a specific job. I also really like high performance, low level concurrency bits and doing more of that would be super cool. It is not a requirement for my job. It's something I could also do in my spare time, but it appeals to me. Someone mentioned, relating to the previous question about repels and rust, Haskell is an example of a statically typed language which has a repel, which is heavily used. Very nice to have as part of the development workflow. That's true, but Haskell is Haskell also has a runtime, which makes it a lot easier because the runtime carries the state of the program. Now, you still need to have like reach into the runtime in order to be able to provide it with new things to execute. So it's still not trivial, but that is an advantage that Haskell has over rust in that context. What are some good beginner to intermediate systems engineering projects that one can finish in a week or so, mostly to get the main ideas of systems engineering? What depends what you mean by systems engineering projects? The first thing that comes to mind for me is to do like bigger university lab projects like in 6824, the Distributed Systems Lab, a class at MIT, there's a lab that has you implement raft. It's in go, but there is a sort of a start of a rust port of it. But even if you do it and go, it's going to teach you a lot about systems programming, just because you have to build the distributed systems. Alternatively, you could look at something like Philip Opperman's operating system that he's building from scratch and rust. That's a great way to just learn like all the components that fit together, although, of course, with a focus on operating systems. If you're looking at sort of slightly higher level things, you could look at something like in 6858, the Computer Security class, the final lab is to implement a encrypted remote file system, which is pretty cool. It's a pretty big lab where you have to figure out the systems design yourself. That one is in Python. I think if for when it comes to learning systems engineering, it's just sort of independent of the language you're working with like systems engineering is a skill that you learn and it doesn't have that much to do with the specific language that you're using. And both of the both those classes I mentioned, like eight to four and eight, five, eight are both like they're they're classes that are very much intended to teach you how to do well, systems engineering in general, but specifically distributed systems and computer security. But they are they're the all of the necessary material is available online. You won't have access to like the TAs, for example, but all the lab instructions, all the template code, all of that is available. And you could try to implement the whole lab yourself. You wouldn't get the test suite that way, but it might be interesting. Have you been playing D&D or other tabletop games virtually since the event? As someone who's done podcasts and streams, how have you found the switch? I have. So I've been playing a decent amount of D&D, actually. I have a campaign that I run myself for a group of friends, like every used to be every week. Lately, it's been like every other week. We've just run that over Zoom. And then we have user of D&D beyond and a tool called Dungeon Revealer, which is a browser based like map Revealer thing. I think that's worked really well. I think I do miss some of the like table interactions. You don't really get a resume. I've also been playing a lot of, well, that's not true. I've been playing some Blood on the Clock Tower, which is this big, big group social party deception game that I'm a big part of helping develop and play test. And that has a Discord server as well, where their regular games run online. I've participated in some of those, helped run some of those. And that's also been really fun. It is just a very different experience online. These games that are intended to be very social, they're still social, but it's lacking a little Shenziqua, you know, I think yeah, I think I just missed the sort of chatter that happens more in person than online because online cross talk becomes too much of a problem. I have started appreciating how much it helps to have like a proper audio video set up when you do those. Like that has just made a massive difference for me. And I'm very glad I had that before things started. What do you think about the future of programming graphics with Rust, Vulkan, WebGPU, etc. It's not something I've done a lot of myself. I've done a little bit of GPU programming, although that was in C++. It seems like something Rust could be really good at, but without more experience is hard for me to really say. I think Vulkan is really exciting. I hope that we end up in a world where NVIDIA also adopts Vulkan. Previously, what sort of happened is NVIDIA has a little bit of a stranglehold on the market with CUDA. And because they're not adopting any other proposals that are put forward, everyone's like, well, we already have stuff that works really well in CUDA. And this thing is only supported by other GPU manufacturers, but it's not that good. So we're just going to buy NVIDIA GPUs and use CUDA. I'm hoping that with Vulkan, it's going to be a sufficiently widely adopted thing and that it's going to have sufficiently good other features to drive adoption a little bit, but I don't know. How do we prevent Rust from becoming another C++ in regards to feature bloat, coding friction, et cetera? It's a good question. I don't have a good answer for you. I think part of what happened with C++ was that it had so much legacy before it started formally developing. Or like things like C++11 and C++ I forget what the most recent numbers are and C++17, they all developed relatively late in C++ life. I think maybe what we're seeing with Rust is that they might be getting a little bit ahead of the curve by having well-established processes for doing sort of language development. These are things like the RFC process, additions, that sort of stuff. So maybe that can help save some of it off. But it's hard to say. I don't have a good answer. I'm considering going into industry for two years after my masters and then doing a PhD. I'm afraid that I will lose too much knowledge and academia type of skills. Do you think this is achievable? I think so. If you go into industry, let me rephrase this a little. PhDs are just different. It depends a little bit of where you did your masters, but in general, the stuff you learned over the course of your bachelor and masters is somewhat irrelevant for your PhD. Not entirely. There are some cases where that would be helpful, but at least for the purposes of my PhD, my masters was on a completely different area of computer science to my PhD, my bachelor as well, and I don't think that remembering more of what I did there would help me that much in my PhD. Also, when you start your PhD, much of the initial work is just going to be catching up on things that you don't know that are important for the field that you join. So I wouldn't be that concerned about it. The biggest thing, as I mentioned earlier, is things like references. That can be a little bit harder to deal with if you have been outside of academia for a while and then ask for academic references. But in general, I don't think that's much of a problem. Do you believe crates.io will become as bloated as NPM, like the is-even, is-odd, and is-number packages? It has the potential to become that. In practice, I actually don't think this will happen. Part of the reason is because I think the Rust ecosystem has been pretty good about making it a virtue of having few dependencies. Now, we can argue whether that's good or bad, but in general, the ecosystem has been pushing in that direction, where there's actually a decent amount of pressure on developers of especially core libraries to reduce their dependency lists, their dependency trees. And this is something I know Burnt Sushi has been talking a decent amount about. And I don't think there's anything that's fundamentally stopping crates.io from becoming like NPM. I just think the culture is a little different to the point where even if that kind of crate got built, and my guess is there already is one, it probably won't be that widely used. Because I don't know, there's just something about the culture, at least in my experience, that means that those things people aren't using dependencies for, they're not willing to add dependencies for that. What dependencies in Rust are more expensive than an NPM? That factors into it too a little bit, that in Rust you have to compile your dependencies. You don't just add them, and the fact that they get compiled means that the more dependencies you have, the longer it takes to compile your project, even though the delta might be small, this effect gets exaggerated as your crate dependency tree grows. That might be another reason why it gets, why more dependencies is not shunned, but disparaged or avoided a little bit in the Rust community. It's more obvious that you have many more dependencies. It increases binary size and compilation time. What general advice you give to a student that is into Rust but has very low chance in finding a Rust job? Oh, in finding a Rust job locally? Don't work locally? I'm semi-serious. I think that work as we know it is changing. In part, the current world situation is a factor in that. But also looking locally is like bad for businesses and it's bad for people. For businesses it's bad to only look locally because you're restricting the pool of talent that you're willing to look at. You're like fishing in a smaller pond and that means you either have to pay more for the talent or you'll just find less talent. If you're a developer, it means that you can only work for the companies that are near you which means that you have many fewer to look for and that limits the options. I think if you're willing to work remotely or at least semi-remotely you should seriously consider doing that and then Rust positions will not be that hard to find. In general, my experience has been that a lot of Rust positions are available remotely even internationally. If you if you're having trouble, if you specifically need to find a local job and you are comfortable with Rust but you don't think there are any Rust shops available remotely, I would look for companies that you think might be willing to adopt Rust either because they're small or because they have use cases where Rust is a good solution. If you find someone in the embedded space, for example, or in the high performance space or in something like high frequency trading where performance might be really critical, you might be able to start writing certain components and Rust would make sense. If it's a security sense of module you might be able to argue that the benefits of Rust by you are actually valuable enough that you should build this component in Rust and then have FFI calls from the existing code base. It's certainly a harder sell but that would be my take. Yeah, I would probably also say like if it's like a Rust shop or a Python shop, or sorry, if it's like a Ruby shop or a Python shop it's less likely you'll be able to use Rust there than if they're like a C or C++ shop. So that's also worth taking into account. How would you write a concurrent and asynchronous cron-like task scheduler in Rust? Asynchronous cron-like task scheduler? So I think the question is really how would you implement cron in Rust? The asynchronous is necessary for cron. Task scheduler is what cron is. So I think the question is how would you implement and concurrent is something that cron sort of has to be. I think the answer is pretty straightforward actually. You define some format for people to define jobs. This could be crontab files or something equivalent to them. And you just run it as a program. It uses like iNotify or Linux or some other API to watch the file system for when those files change. Or you have a command for telling the daemon that it's going to send it up to its config. And then really what it does is just usually you want something like an interval tree or a timer wheel to keep track of all of the different next schedule times. And then all you have to do it could even just be a min heap. Where the key is just the time of the next trigger of this job. And then what you do is you just like look at what's at the head of the heap and then you sleep for that long off. You spawn it as a background. You spawn it as a thread basically. You have a thread that like forks. And then you just run the jobs that way. I don't think you need async here actually. You could, but I don't think it's necessary. Are you considering a remote position? What do you think of remote work? Yes, I am almost exclusively looking at remote positions. I think working from home is better. I think the only upside to me of not working remotely is that you get to see people face to face and there is certainly value in that. It's more likely you pick up like chatter from other people, for example. But to me the benefits far outweigh the costs of working from home permanently. So yeah, I'm entirely looking for remote jobs. And I'm a big fan of it. Like it means that you I mean, I haven't I've done it as a PhD student. I haven't done it in industry. So like take this with a grain of salt. But it means that I can like not have commutes. It means that I can like be at home with pets and like get joy from that. It means I can like have lunch with my girlfriend, for example. And then go back to work. I think one thing that's very important though if you are going to be working permanently from home is to make sure that you have a dedicated space for it. Like if you're using the same computer the same desk the same room for you're working from homework as you do from like your relaxation, it's going to be really hard to do work productively. This is something I've experienced during my PhD that I've tried to keep like my desktop computer as something where I do work and then I do fun elsewhere. Like if I play games it's like on the PlayStation or something. That doesn't always work. Sometimes I need a computer. But once you start mixing and matching what you use a given space for your brain gets confused and it's much easier to accidentally end up procrastinating. Like I might it means that like while I'm working I'm used to also checking Twitter and discord on the same computer. And I think it's better just have like a dedicated physical space so that your brain knows that when you go into the space you're at work and when you leave the space and that's I think a healthy thing to establish for yourself. The downside is that you now compete with the entire world for a job. That's true. Although realistically I think the calculus still works out that it's generally better for you to be willing to work remotely. It is true that like if you are local and the company only hires locally that gives you an advantage but there are a lot of downsides as I mentioned as well. It is true also that like remote jobs make communication harder. It's more difficult to just like randomly be a part of the conversation or pick something up like by the water cooler. It's harder to accidentally be a part of decision making processes. And that's that is a downside. I think companies are getting better at this of having all or much of the communication happen online anyway. Think of it this way if everyone is remote then there's no there's no face to face benefit because no one is having it. Where you run into problems is if like some people are face to face and some people are remote because that way they can end up being this like split where they're not they're like equal but not equal. If everyone is remote that helps but you need to be much more structured about documenting processes communication channels that sort of stuff to sort of encourage that sort of serendipity that can happen when you're in person. Do you have plans to record a session about MPI programming in Rust? It depends what you mean by MPI programming. Let me see what the official definition of MPI programming is. Message passing interface programming. I assume you're thinking of things like open MPI and like the actual standard as opposed to just like concurrency. It's not something that I've really considered. I don't know that the MPI protocol and standard matters that much in the Rust space. When you have crates like rayon that helps a lot it is true that maybe MPI might be nice if you want concurrency between Rust and C for example. But it's not something I've looked at and not something I could really speak to. Yeah. If you're not interested in being in LA long term, considering your career background what places are you interested to settle in? Do you want to stay in the US? Do you want to go back to Norway? I don't think I want to be in the US. It makes me a little sad to say that because there's a lot of cool stuff happening here in terms of intellectual work but there are too many things that the country doesn't value that I value. I think for example the work culture in the US in general not everywhere but in general is it focuses too much on people being workers and people being employees as opposed to people being people. The amount of vacation days you get in the US is extremely low. Health care is something your employer has to pay for and it's an issue, it's a thing. Things like taking sick days is something you actually need to look at before joining a company. Even just the amount of hours you're expected to work, how your work life balance works out these things in the US are sort of second order things. Whereas like if you look at certain parts in Europe, there are countries that are considering doing like four day work weeks where that is totally reasonable. In the US that would be absolutely outrageous. As for where I'd want to go instead I don't know. I think for me it would probably be Europe just because that's where I have the most ties. I'm not opposed to going somewhere else but Europe is probably where I'd be aiming. Canada could be cool too but I don't have much experience with it. In terms of within Europe I really like London. I lived in London for a couple of years and enjoyed that experience immensely. I think London is a really cool city and it has the advantage that it feels really local while being very large. The downside of course is that Brexit is a complete shit show and currently everything is a pain there and the political situation there like here is a little bit on fire and that's not great. I don't know if I want to deal with that. Norway could be good. I think the biggest downside for me for Norway is that it's a fairly small country it doesn't have that many people it doesn't have that many job opportunities. I could work remotely but Norway is hard to live in so I'd probably have to work remotely in Norway from the US because US salaries are higher which again limits my options I honestly don't know. It also depends a little bit I move into LA because of my girlfriend and she's getting into voice acting which because she's from the US that's something that she'll know how to do in English and moving to Norway might be problematic there too it might be hard for her to find work but it's still a problem. Luckily it's something that I don't feel like I need to decide right now I think realistically I'll be in LA for 2 or 3 years and then we'll see who knows, after that I've decided that everything is better in the US now and I want to stay but I honestly don't know and yeah as for temperature I come from Norway, I like things cold even Boston is generally too hot for me I don't know I guess I'll survive LA I lived in Australia for a few years so I can deal with it but certainly for me I want there to be seasons and I want there to be winter as one of those seasons let's see what do you think of the future of Rust in web programming? I see more companies adopting Rust for web services even though the web tech libraries in Rust seem young like GRPC I think Rust's future in web programming is actually pretty promising Rust has a really good story for web assembly and works a lot with the web assembly working group both on the standard itself and for the Rust integration with it things like integrations with constructing Node.js packages through Rust I think there's a lot of cool stuff happening there and I think Rust is uniquely positioned to be able to provide like high performance stuff for the web through its integration with web assembly in particular I also think that even in the space of writing servers Rust is pretty good we have like Hyper is an excellent language for things like HTTP servers and clients Rocket is great for writing web applications I think it's going to be hard to make everyone move to Rust I think realistically if you have developers that are using Ruby on Rails today or Django or something like that it'll be hard to make them write that stuff in Rust instead so I don't think Rust is going to replace that ecosystem at all it's the same with Node.js it is harder to write Rust code in that sense but I do think that it's very well positioned to do well in the web and networking space it's true that some of the libraries are young like I wouldn't say Hyper is young or Rocket is young GRPC is a little young but I think once you start seeing companies adopted there's enough development effort behind it that I'm not too concerned Scotland would be a great tradeoff Scotland could be cool I like Scotland can you name some programmers that you admire in particular maybe some that are active in open source there may be blogs, teaching sites, etc ooh this one's much harder because well first of all because many of them I only know by their usernames but also because I don't think there are that many programmers that I admire but that's just because I don't generally admire people I think there are many programmers that I think are good for the ecosystem that are sort of talented and their time is valuable and there's sort of a good force in the world of software development I think it's easier for me to answer this question in Rust specifically than for other languages so specifically in Rust the ones that come up for me are I think David Tolne is great this perhaps obvious I really like David both but also as a developer he does excellent work I think the same goes for Burn Sushi for what's his name Andrew Gallant also just like produces really high quality code thinks carefully about things and it's just like he's also on the Rust moderation team and does a great job there even though it's an extremely hard job I think much of the Rust core team like Niko Matsakis comes to mind as someone who just like has poured his heart and soul into both Rust and its ecosystem and it clearly pays off I think there's some developers that are building really good cool infrastructure as well like I forget Jane's last name her twitter handle is YAAHC underscore I think she's the person who writes error and color error which are error handling libraries that are they build sort of on top of anyhow to provide much better error reporting with context and such and she's done a lot of work in just expanding Rust's error handling story then there's Eliza Wiseman who has built basically all of tracing so this is the if you don't know of tracing it's a really cool crate that basically gives you sort of the same interfaces you have with the log crate but it lets you emit generic events that can be consumed by a subscriber that it could write it out to a log but it could also do other things like analyzing statistics I'm sure there are others if I try to go outside of the Rust space there's a game developer called Oscar Stolberg let me see if I can actually give you the aww his twitter handle is O-S-K-S-T-A this person so this person does game development and in particular works on doing like procedural game development and posts a lot about that development online and it's really really cool the stuff that he's building he recently built a game called Townscraper it's super simple and silly but it's just really cool I think Frank McSherry is another person who is a developer that is also very good at writing about what he does and I think this is a valuable it's a really valuable skill that I think many developers lack which is the ability to not just build interesting things but also explain them to people like explain why they're useful, explain how to use them explain how they work and basically do education and that's something that that I think Frank is pretty good at about like writing about his endeavors I see a lot of people in chat are mentioning John Blow I don't have experience with him but that's true as well I'm just like going through my Twitter feed at the moment actually to see what else is out there like people that I specifically know are doing really cool stuff I think off the top of my head those are the ones that I would mention but I'm sure there are plenty of obvious people that I'm missing I think there are also some people who are not Dan Lu does a lot of cool work as well Dan Lu in any case I think many of these are talented developers but I think ultimately what it comes down to is look for people who are interested in the same things you are like there are a lot of talented people out there and sometimes it's useful to follow people who do something that's very different from what you do but it's just like look for things that are interesting and in particular I would say look for people who produce content you're interested in like one thing is if they produce quality software like that's great but often times if you really want to learn from them look for people to reduce like educational content to produce blog posts about what they're working on who do like good documentation and write ups that's the stuff that you're really going to learn from long term I think let's see is Rust more informed by academic research than other popular languages I well certainly than some like the famous counterpoint here is Go which sort of explicitly did not include anything that had been discovered in the past like 20 years it's not quite true but that's sort of the adage Rust certainly tried to build on a lot of the programming language research that had happened over the past many years and I think that has certainly helped the language and I think that is something we're seeing ongoing as well where there's a lot of academic interest in Rust as a language from people like Ralph who actually recently joined the lab I'm in at MIT who's the person who one of the people at least who developed Miri who's doing like research on things like unsafe Rust and how to make it safe and I think that is that's one sense in which Rust is language that fits pretty nicely with academia and I think in return academia is also working on building out the language and I think in some small way Rust is also contributing to the programming language sort of set of information like things like the things like pin from boats I think is a really cool idea and it's something that hopefully I think we'll see other languages maybe adopt or something similar but I don't think Rust is the only one I think there's a decent number of other languages that are doing this kind of work like ZIG is an example, D is another language, Haskell of course is a very academic language so I don't think Rust is the only one but Rust is certainly one that has pretty successfully taken ideas from the PL community and put them into interproduction in my last semester I opted for internships rather than an undergrad thesis is it possible to still have a chance of getting to grad school without the aforementioned research experience everything is possible I don't think you're under so certainly for me I didn't even write an undergrad thesis that was just not a thing I did in Australia and that was fine but I also didn't get into MIT from Australia I went through London which is where I wrote my master's thesis you might find that it's a little harder it sort of depends on what you did during your internship if your internship was a little bit research oriented that might help I wouldn't worry too much about it the one thing to keep in mind though is that if you apply to universities like MIT you're sort of competing against some of the best people in the world but you're competing against other people right like it's not as though there's like a checklist and if you don't have all the boxes take you can't get in it's a set of people that is evaluating a different set of people and so what they're looking for is do they think that you would make a good grad student that's what you have to convince them it's not about showing them high numbers or like I checked this box there are certain boxes you must take like if all your grades were terrible that's probably not a great starting point but whether you did or did not do an undergraduate thesis is not going to make or break your application I think that Rust's power and versatility can be used in a wide variety of projects so in what situations should we choose other languages like for example the ones that run on the JVM such as Java, Kotlin, Scala etc so I haven't found a use for many other languages than Rust there are some exceptions like using Javascript and the browser I still use like bash like ultimately there has to be a lot of infrastructure code in bash because something needs to run to start your programs and give it arguments and such there's also I think a decent space for things like Python for doing plotting R for doing data statistics Python for ML to a great degree still today Ruby for web development or Python for web development so there are use cases for other languages when it comes to the JVM specifically I think for me it really comes down to whether and I mentioned this a little bit on the last Q&A stream too it becomes particularly relevant if you have legacy code you need to interact with or if there are libraries written in that language that you need to use so for example if you're interacting with like some hardware device that only has a library from the vendor in C++ you might want to use C++ if you're writing if you're working at a company and they have all their build infrastructure in Java then it seems pretty reasonable that if you want to like augment that build infrastructure you probably need to use Java for that not necessarily but but it's more about having integrations because like all of their SDK stuff is written in Java then you probably want to use Java too unless you want to port the entire SDK it more comes down to legacy choices like that for me the JVM does have the advantage that it runs in a lot of cases so maybe if you want things to just run everywhere Java is a good target or the JVM is a good target in general I think if you're writing sort of greenfield code it's rare that I would go for C++ or anything on the JVM these days what are your thoughts on writing new Linux kernel modules in Rust would the sacrifice of rewriting some parts be worth it so this is something I've recently seen a discussion about this actually that they're working on making it easier to write kernel modules in Rust and I think it's a really good idea I think drivers in particular is a thing where Rust could potentially help quite a lot like you really don't want drivers to crash and Rust is pretty good at making code not crash you might have to do some things like provide a bunch of wrapper types like I'm guessing what we will see is sort of kernel module Rust libraries that wrap kernel functionality in safe wrappers and with the hope of having driver code maybe even be completely safe or largely safe it would be hard to probably make them 100% safe but I think Rust can certainly provide a lot of value in that space what was your favorite language before Rust um I think certainly the language I used the most before or at least immediately before Rust was Go I wrote I did a decent amount of work on 6.8.4 the distributed systems class in Go my first year in grad school I worked on a system in Go and to this day I still like Go I don't use it like I haven't used it in quite a long time um but I don't mind Go as a language I think there are a bunch of features that I think are missing now that I have experience with Rust but I think Go is a good language and it's good for many of the things that's being used for and it's certainly good for large code bases I also I like Python and I wouldn't want to build large I like Python is because I can usually guess how to write the code Python is the language that I can come back to without having written it in like a year and still write code and it sort of does the right thing it feels very much like sudo code and that I think is an advantage when you just want to hack something together quickly like I use it for building all of the graphs and plots in my thesis because they're good plotting libraries the code is pretty straightforward to write and I don't need to like have a whole compile infrastructure for it there's also the advantage that it just like exists on basically every system the code will just run anywhere and also just there are libraries for almost everything in Python so it's just like a very low friction environment I also just really like Bash I may be weird in this but I like Bash as a language I mean it's all sorts of broken words and pitfalls for you to fall into but it's like a very useful language to know it comes in handy in a surprising number of cases do you have any thoughts about WebAssembly and WASI Rust seems to be a popular language to target those yeah I mean I talked a little bit about this in the past I think WebAssembly is really cool I think WASI in particular is going to be a big win for interoperability between languages but I haven't used it much myself and so it's hard for me to say like yes it will be the ultimate thing but certainly what I'm seeing seems very promising and I think Rust is in a very good position compared to many other languages to sort of take the mantle in the WebAssembly and WASI space Opinions on ButterFS I used to use ButterFS but I stopped using ButterFS because I realized that what matters more to me in a file system is whether it's going to lose my files than like specifically the speed and the features the ButterFS provide like I didn't really need either of those as currently I'm using XT4 just because I feel like I want something that is I want something that's more as stable as possible when it comes to my file system Do you have any interest in joining a Rust team? Absolutely, I think that would be really fun in fact there was a before the layoffs and actually before the pandemic Mozilla announced this position of Rust community engineer and it sounded like exactly what I want to do but that was before I was looking for work and then the pandemic happened so Mozilla went into a hiring freeze and then I went on the job market but that position was not available because Mozilla was on a hiring freeze and then they did all the layoffs and now I assume they're no longer hiring for that role but that certainly would be really cool for me, I think working with the community in the ecosystem is something that appeals a lot to me and if I could do that full time that would be great, realistically I'm fine working at a company but in the Rust ecosystem and on the Rust ecosystem but from the position I think there's some value in that too because you get to see how the language is used somewhere and have that influence and inspire and inform how you work with the ecosystem and what you focus on I haven't been invited to work on any Rust teams like any of the core Rust teams but I totally would if I was offered um have you considered using Rogaine I don't know what Rogaine is so no perhaps surprisingly ooh I can see you working out the Rust foundation yeah that'd be pretty fun go work at Oxide with Steve to teach Rust would also be really fun um I don't know if Oxide is really doing teaching as much as they're doing low level OS and embedded stuff I certainly if I could work full time on teaching Rust I don't know if I would do it I think if I was offered a full time Rust teaching position I think I would get too antsy I need to work on things I need to build things and I guess I would just fill all my spare time with building things but it helps to have specific use cases working for a company where there's like a particular problem or set of problems you're trying to solve I feel like that to your great extent inspires me to do the teaching that I do like I can do teaching where the teaching I do is informed by the problems I've run into myself what about a paid course it would be great to do like I think it would be really fun to build a course a Rust course even if it's free like I don't really need to take paid for it part of the problem is because I'm in the US on a student visa there are a lot of things I can't do in this country it's stupid because if I weren't in the US I could do them in the US but there are a bunch of things like I can't have a Patreon that's not a thing I'm allowed to have and it sucks but that's just how the rules work out which makes things complicated um sure I've had a bunch of people ask whether my webcam is mirrored and yes it used to be the wrong way around like this stuff is behind my right shoulder and it was showing well it is now behind my left shoulder in your view but it means that when I point this way it points the right way on the screen so yes it's mirrored to past streams but it's because it made more sense to me for the webcam to be set up this way what is the most impactful book you read in your career hmm I don't know that I could tell you that there was just one I think the programmatic programmer is really good there's also one called the art of UNIX programming that I remember thinking was really good but I haven't read it in many many years but I don't have one that like sticks out as the most impactful one I do think that I mentioned earlier the code book by Simon Singh and I think that was certainly one that taught me a lot about how cryptography works and how to think about cryptography that was really like I remember for many many years later the initializations I had during that reading that book could you explain how it is possible that a program can be mathematically proven to be correct like in the case of ADA or COC so okay I'm not the best person to explain this I have a it's funny because I have a lab mate who I've tried to convince this person to do a stream on and they haven't done it yet I'm still working on trying to poke them I think they don't think that there's enough interest in something like COC to do it I think there is I think formal methods is something that a lot of people are curious about and finding some way to do like introductory stuff I think would be very valuable but I will try so the basic idea behind program verification and formal verification of programs is well there are two main approaches to it one is to use basically a SAT solver so a SAT solver is a thing like the Z3 is one of the well known ones where what it does is basically you give it a set of constraints like give me something that is a number that is less than 14 than 10 you give it to this program it like runs for a while and then it tells you 12 because that is a number that fits all that's a thing that fits all the constraints and then the idea is that when you write your program you write a set of constraints for your program so for example you might say when you run this program it should be impossible to reach a state where it crashes like the most trivial correctness guarantee you can give like it should not be possible for this program to crash and then what the proof assistant will do is basically try to make any path in your program to somewhere it crashes like imagine you have a assert somewhere in your program like assert true or whatever basically what it's going to try to do is make that value false and it does this by walking your program to anywhere where it might panic and then trying to make the conditions under which it would panic true and it does this by collecting all of the conditions down to that point giving them to the SAT solver and if the solver says here's the value then now it has proven that there's a way to get your program to crash if the SAT solver says there is nothing that meets the constraints so for example give me something that is a number greater than 10 and it's less than 9 there is no satisfiable solution and therefore that particular crash cannot happen so that's one way to go about proving and this is something that's used by Daphne I think is one of the languages that approaches formal modifications this way the other way to go about this is to basically reason about program behavior this is a lot more complicated it's not something I'm really qualified to speak much about but the idea is to have a set of axioms so you have some set of facts that you know about the world like you know that if you have an array of length a thousand then every index from 0 to 999 is a valid index it's not is a bad example of an axiom because it's not the form axioms takes but you have some set of facts you know about the world like the Boolean true evaluates to the logical true the Boolean false evaluates to the logical false and then you encode a bunch of rules based on those axioms for example if you take something that's true and you do and with something that's true you end up with true and then over time you build up all these rules like the rules around Boolean logic you build up sort of higher and higher abstractions over time and ultimately what happens is when you say something like this index will be in bounds what it does is basically transform your code into a bunch of logical statements that it can reason about and figure out whether they must be true or whether they could be false it basically tries to determine whether your program logically makes sense the environment here is that you have some way to express to the proof assistant how to translate between the program code and some logical framework that it can reason about and there are many ways to do that some of them are using like pre and post conditions for functions there's like a lot of depth to this field but the basic idea is you teach you have some tool that knows about you can teach about the association between the executable code and some higher level logical abstraction that it can reason about I'm sure there are plenty of things that are wrong about what I said but that's like the it's like my mental model of what's going on how old are you I am 30 years old I turn 31 on December 7th so in theory I will get my PhD before I'm 31 cool let's see here are you only looking for Rust page jobs or are you willing to work in Go or Python or some other language I'm only looking for Rust jobs I both because I think that's where my experience and expertise lives I think you should try to cater to your strengths I think I can do a lot more good working in the Rust ecosystem working with the Rust language and the experience I've built up over the years working with Rust that I can if I now start to contributing to a Go codebase so that's one of the reasons the other is that I really enjoy working with Rust and so I want to continue to work with Rust now those two things said I think it's important that you don't say I'm only willing to work on this language and the reason for that is usually at any large company there will be parts of the codebase that you will interact with that are not written in that language like if you go work at Google lots of the code will be written in C++ if you go work at Amazon lots of the code will be written in Java and this applies to like basically any company of decent size the chances that their entire codebase is going to be written in Rust or that everything you will ever interact with is going to be written in Rust is fairly low and so you probably want to make it a requirement of you taking a job that the only language you touch is Rust and I certainly haven't done that but I want Rust to be the primary thing that I work with what was your first programming language my first programming language was visual basic and it was great I built a Minesweeper clone it was terrible but that's what I did realistically my first language was PHP I built some stuff visual basic but it was all kind of stupid I built something like batch scripts for windows but it all just stupid the first time I really started building like real programs was with PHP I like PHP though I mean PHP is bad in so many ways it's gotten a lot better but I don't know there was something just like very straightforward about PHP like you just write HTML and you stick some PHP in there and then it just works there's a lot of Perl early on too I like Perl I still use Perl sometimes any thoughts on the creation of the Rust foundation until the end of the year so I have mixed feelings about a Rust foundation I think that there's certainly some value in it I think it's valuable for Rust for its own organization and sort of both a place that like money can go money can flow from a thing a legal entity that can own things and take responsibilities I think when it comes to actually like employing developers and having people work on Rust I think a foundation is probably not where most of those people are going to come from realistically most of the work that will go into Rust I guess like on the whole and the larger scale of things is going to be getting companies to work together to build out Rust and the Rust ecosystem and the Rust language we need to get companies to invest in the language and they could do that through a foundation I think realistically it's unlikely that the foundation will employ enough people to make this work and I think the more worthwhile take many companies employ engineers to work on Rust and maybe it's coordinated through the Rust foundation or something like that what is the most idiomatic way to parse binary data in Rust depends what you mean by binary data like non-works fine for this actually you can also use just like reaper C and type casting you want to be careful there but it could work then you can also use things like the bit flags crate which is really great my experience has been that like non-works fine for this like I implemented the MySQL binary protocol in Rust and that was a lot of just like bit parsing and non-works fine for that I know there are other approaches to parsing in Rust as well I mentioned some of these last stream I don't have much experience with them but it's worth just sort of like play with a couple of the different libraries and then see which one sort of feels the best when you just start tacking on it and then go with whichever one you prefer the style of I don't think there's a right answer here oh yeah be careful with type casting for making sure you keep track of the allocation you can use something like the zero copy crate for example to hand off the parsed version of the crate of the type and also the backing storage Rust is being touted as the next C and C++ but why is there no big project or platform like Twitter or Facebook or Gmail built on Rust is the learning curve of productivity being an issue I actually think there are lots of big projects that are written in Rust many of them are not public because many like Rust I think is often used for infrastructure more so than like the immediately public facing products but certainly we know from from a lot of the from a lot of the publicly available information that like Amazon is doing lots of Rust things, Google is doing Rust things Facebook is doing like a lot of Rust things Discord is doing a lot of Rust NPM is using a lot of Rust and so I think I mean Deno is like it's cool the Deno chose to implement stuff in Rust but it's not a massive effort at the moment it probably will be so I like reject the premise of the question in a sense that I think there are big projects and big companies that are using Rust Microsoft of course also is doing a bunch of Rust stuff it's funny too because like over my course like interviewing at various companies I also learn more about what they do but I can't technically speak about what they do but I think everything I said is like publicly available stuff how to improve Rust compile time well it's a very broad question so in general for improving Rust compile time the answer is have fewer dependencies depends whether you're doing from scratch builds if you're doing from scratch builds then like reduce number of dependencies have more course on your computer if you're talking about building a particular crate then Rust should be getting fairly fast at that right now if it's not then that's probably because you have one crate that's very large and breaking that crate up into multiple crates might give you some benefits in general I've found that Rust compilation has gotten way faster especially with things like incremental compiles a lot of the work that's been going on behind the scenes in the compiler with like query based making the compiler query based this is like the salsa stuff a lot of the work that I forget this person's name they go by like Nethers something on Twitter they've been doing like regular blog posts about improvements to the Rust compiler that's helped a lot it's been a lot of work on parallelizing the compilation of crates using multiple code gen units in LLVM that helps a lot so I actually haven't found it to be that much of a problem anymore also having things like a shared target directory has helped a decent amount even just because you avoid compiling dependencies that are shared but if you really just have one crate that takes a really long time to compile usually it's either you have a very large crate or you have a lot of generics and macros if it's the former break it into multiple crates if it's the latter if it's like you have a lot of macros and generics look at things like cargo bloat and cargo LLVM lines which are good ways to explore just like what generics and potentially macros are significantly increasing the size of your code base which ends up giving more code to LLVM which makes things slower examples of this are like if you have so imagine you have an implementation of imagine that you use hash maps a lot and you use hash maps with a lot of different key and value types then what the compiler will do is instantiate hash map the implementation of hash map once for each type of key value pair which means you end up with multiple copies of the hash map implementation in your code so even though you may have very little code you end up producing a lot of binary code the compiler then has to deal with and so this is where crates like or tools like cargo bloat come in really handy where they tell you you have like 17 instantiations of hash map maybe try reducing that and that will increase your compile time so I think endeavours like LLVM 11 and if we managed to ever get on crane lift those things would be really cool as well you feel like software has gotten slower with time and people have gotten used to slow software hardware has gotten vastly faster but modern software methodologies do not seem to optimize for it I think that's certainly true I think there's been a decent amount of discussion about this over the years too that software used to be fast and even though hardware has gotten faster I think that's true I think to some extent this is an artifact of integration we're building software that can do more stuff and therefore it gets slower it gets less specialized I think the other thing we've run into is that software today is often very deep it's very abstracted it used to be I think that software was written a lot more from scratch maybe than it is today and partially is a good thing that we get to reuse then you end up with things like ElectronJS I guess it's just called today which is great a lot of cool things have been built because of Electron but the big downside of Electron is that now every application has to spin up a web browser and that is just a lot slower than having a native application and cause a lot more bloat and so that I think is one of the reasons we see this very often actually I found that you can just go in and like benchmark things and try to make them faster and a lot of people will thank you for it is it common to use immutable data structures in Rust in general or specifically when dealing with concurrency I haven't done that much so there's the IAM crate which provides like immutable data structures in Rust they're really cool I haven't seen them used for high performance stuff at the moment or for concurrency for that matter so I don't think they're particularly commonly used in Rust I think another point actually to the previous question of why is software slow one of the other things is that it used to be the processors were getting faster and that's no longer true nowadays what we're ending up with is more cores and so you need to write software that doesn't just rely on hardware getting faster but is able to utilize more cores and in general we're pretty bad at writing good concurrent software where its performance increases with the number of cores often what you see is like a trend like this where going from one to two cores helps a lot going from two to like 32 cores does not help that much and that's unfortunate and so that's certainly another place where this comes from the other is a general misunderstanding of how performance optimization should work I highly recommend that you look at the there was a paper a few years ago called Cause C O Z which is the causal profiler which looks at how can we how can we figure out how to make a program faster using a profiler that is not that doesn't just rely on sampling profiles because it turns out they can often be misleading and the author of that paper actually built some had some really good presentation arguments about why the current way we're doing profiling is often really bad there's also just like I think a general misunderstanding of how the hardware works and what we should optimize for for example very often the reason why applications there are slow is because of things like CPU cache misses and the latency of going to memory and optimizing for that I think is very valuable but it's something that many developers just are not aware of how that works there was a talk on youtube modern hardware optimization let's see if I can find this yeah there's a video called a crash course in modern hardware by a cliff click there was a really interesting talk that goes through some of the just like some of the ways in which the ways we optimize applications needs to change because the hardware has changed where different things now matter do you know the interplanetary file system if yes what is your opinion on it I only know very briefly what it's about I think IPFS is maybe interesting unlikely to matter but that's my very naive take I just like have little I generally believe little in this like super distributed world I think very often it falls apart when it comes to actual economy and that's where things fall apart let's do another two questions maybe so here's what I'll do I'll drink some water so and then what we'll do is go to the link that has all the Q&A look through the questions maybe look through the top questions and vote on the ones that you want to hear the answer to and then I'll take like in a minute or so I'll then look at the next top two or three questions maybe because currently these are fairly low votes so not that many people care about them so if you look at chat someone just posted a link to the place where you can ask questions if you click that and then click ask a question it lists all the questions that people have currently asked like sort it maybe by the most number of votes and then vote for the ones that you want to hear the answer to because that way I'll actually be addressing questions that many people care about it's funny every time someone votes for a question a little like loading icon appears on my screen which like is good but and someone asked the question that just says okay which it's not a question but I appreciate the spirit it's weird like almost my entire apartment is in boxes at the moment and my plan is actually to pack this computer the moment the stream finishes like take apart all the components and pack them it's weird it's kind of sad oh put the transition screen I could do that I can just just demo it but I feel like I need like intermission music then then then and then I'm back wait that's the wrong one this one I think this should now show my face I think I feel like I need like key caps I have this like little numpad that I'm using to do scene transitions and feel like I need labels for them so that I don't keep pressing the wrong one alright I'm gonna go ahead and go to the next more and more people are upvoting the question that just says okay which seems like I mean I guess that is a good question I am okay thank you alright let's go to the next one do you think WebAssembly will become a universal platform targeting do you think WebAssembly will become a universal library targeting platform like WebAssembly can also be used in Python not just JS why stop here I think it has the potential to be I think WebAssembly has the potential to become the next way to do FFI and one of the reasons why it's particularly attractive is that it doesn't require that you share a memory space in particular you can basically do sandboxing through WebAssembly which is much harder with something like direct FFI I would say in particular the efforts around WASI which is like the standard for how to describe interfaces over WebAssembly is gonna make a huge difference here and I know that parts like some pretty core Rust people are involved with that effort and I think that's we're gonna see that pay off a lot as it comes to Rust position in that space do you think that Rust's static linking of crates will harm apps especially in fine crafted Linux distros with specific dynamic libraries so Rust doing static linking is definitely something that is it's a mixed bag this is something that Go does as well and it's tricky right because statically linking against libraries is really unfortunate because it means that you can't upgrade like if I have like let's take the example of OpenSSL where it's a lot of applications linked to on Linux if I upgrade OpenSSL on my system all of the applications that are dynamically linked automatically get that upgrade because they're dynamically linking with it so the moment I launch it I can link with whatever the latest version of OpenSSL that is available is whereas in Rust because everything is statically compiled the binary I have comes with the version of the equivalent of OpenSSL as ring would be the equivalent that I compiled it with when I compiled the binary this means that there's no system-wide update that can update all of my binaries at once and that is unfortunate but it also means that the binaries run a lot more smoothly you have fewer runtime dependencies it's a tricky trade-off one of the I would really like to see Rust doing more dynamic linking I think if you have a library that you could dynamically link with that's that's something that would be good to make easier I think the biggest roadblock here is that there isn't currently a good way to do dynamic linking with generics there was an interesting article on this let me see if I can dig that up Rust dynamic linking Swift this one I think it's a pretty long article I know you can't see my screen but it's by Alexis Bengisner on how Swift achieved dynamic linking where Rust couldn't this one and it was actually a really good exploration of why dynamic linking is hard in Rust why it's hard in Swift too but why Rust doesn't have it and why the path to getting it might be pretty hard and without that dynamic linking in Rust becomes just really challenging because it means that your APIs can't be generic which is pretty unfortunate do you think it's important for Rust to have a stable ABI? great it's basically the same question I think it would be really valuable for us to have a stable ABI precisely because you could do things like dynamic dispatch or not dynamic dispatch, dynamic linking a lot more easily I think that would be fantastic I think there are some pretty serious roadblocks to getting that to work and I would like to have it I don't know how we get it I do think there's value in Rust having a stable ABI even without generics but I think ultimately it's going to be sort of a package deal where either Rust is able to provide a fully stable ABI that includes generics or the stable ABI is just going to be FFI which like FFI is valuable too and I think it would be good for more Rust libraries to present ABI so that other languages could use them directly or so that we can even get dynamic linking but it's just like the benefits of having generics directly in the interface are so large that it's a tricky trade off I'll do two more are we living in a simulation? I don't think that it's reasonable to assume that we do but at the same time who knows have you tried the CraneLift back end for Rust C? I have not tried CraneLift I think CraneLift is really cool it's a really cool effort to for those who don't know it's basically trying to switch out LVM with a completely Rust built back end for compiling Rust code all the way down to machine code I should say to machine code and one of the reasons why you want to do this is it gives you a little bit more power for doing things like optimizations it also means that you get to run Rust you don't have to rely on all of LVM it also means you can use Rust to make that part of the compilation process safer, potentially more efficient like you could use tools like Rayon to safely get concurrency even in that layer of the stack but of course it's a monumental effort it is cool that with Rust at least in theory it's possible to just swap out the code generation back end in practice I think we're pretty far away from seeing that being a reality but it would be really cool alright last question what do you think about the current political climate in the US have you considered not staying in the US long term and if so which countries are you considering alright so clearly not a short question but I think this is something I covered decently previously on the stream so I won't go over it too much again I think when it comes to the current political climate the US is currently a shit storm I think most of the world thinks that the US is royally screwing things up and I don't think that's good for anyone at least of all for the US I think the US is really shooting itself in the foot and I think part of the problem we're running into here is like the long term effects of this remain to be seen one thing is the short term effects of you can't travel from the US to Europe the sort of economic downturn and all the suffering that people are experiencing but I think there's a long term effect too of like the US being I guess mismanaged is a word for it and this is the same thing that happened to the UK because of Brexit you end up in a position where people are much more hesitant to come here to work here to stay here more people want to leave to go seek their sort of opportunities elsewhere and that ends up having this sort of role on effect where imagine that fewer people end up applying to US universities this means that they go elsewhere which means that that talent is being developed in other countries this means that the US university system starts to fall behind because much of the talent is not coming here this means that in the next cycle there will be fewer talented students to become professors to become teachers to become the people who start companies this means that the US starts falling further behind and the people who would have done those things in the US would have done those things elsewhere instead and now those cooler companies start in those countries instead with those people where they chose to go instead of the US or the UK and so now talent is going to be drawn away for the US to where those places now are being established and so I think there's like this huge chain of events that come from just mismanaging a community which is what every country is that I think we haven't even seen the start of yet I think in the short term there's also pretty severe effects which are disturbing to watch in real time and I think historically we'll be disturbing to look back on as well so yeah this was my attempt to briefly answer my thoughts on the current political climate in the US which is such a question to end on but I think we did pretty well I think this is good I think we're going to end there it's been fun having all of you both the people who are in stream and the people who are watching the recording after the fact it's been fun like up through the years to be able to stream for all of you it's become such a big part of my life and it's exciting that I could have all of you with me to like this is the place where we started streaming it's not just me right it wouldn't be the same with all of you it wouldn't be the same without all of you and it wouldn't be the same without this apartment like this is where it all started but I think it would be great wherever it goes next and I'm excited to see you all there bye everyone for the last time bye from bye from Cambridge, Massachusetts