This is such a C programmer thing to worry about. Because I used to worry about what to name things. Because in C ⁇ C ⁇ is a very paranoid language. Because you you have to think about all the things that could go wrong on any given line of code. Like you could call the wrong function or the type the thing gets instantiated with is will will be missing something or will have the wrong thing in it. And so you have to take this very defensive stance when writing any C code. Now that I've been using Rust for a while now, I don't worry about these things at all. I don't worry about what to call things. I don't worry about uh how the code looks, because I'm I can be confident that it works. I don't have like these problems just don't exist in Rust, I guess is what I'm saying.
ConorWelcome to ADSP the Podcast, episode 240, recorded on May 21st, 2025. My name is Connor, and today with my co-host Bryce, we interview Jared Hobrok. This is part two of a four-part interview. In this episode, we continue our conversation about thrust, Rust versus C, Python, NumPy, Numba, and more. I believe Bryce and I have a ton more questions to ask you on the roots of thrust. I mean, I've been holding on to this question for a long time. Uh the last time I was in New York, which was in April, we're recording this tail end of May, we got into a discussion of the different names for uh the OG name is IOTA from the, I guess technically it was the C11 standard, but it comes from APL. IOTA is a uh integer sequence where you increment by one, one, two, three, four, five, six. In Thrust, there are two different names for this. There is the counting iterator, and there is also the thrust sequence. And this has been up for much debate between Bryce and I of what is the correct name. But our our first question is do you recall, Jared, where the names for both thrust sequence as an algorithm and thrust counting iterator as a fancy iterator do you recall where those came from? Sequence in particular, because it stands out.
Jared HoberockUh I think we were aware of IOTA and just like we couldn't name it. We couldn't give it that name. That was ridiculous. We were gonna, you know. It's gonna be used in every uh example. We can't use this stupid name that doesn't mean anything. So I think that's where uh sequence came from, and maybe we sort of justified it by saying, well, the the interface isn't exactly the same, so we have to change the name. We can't use iota. And counting iterator, I think, just came straight from Boost. I think Boost was uh I think there was a Boost counting iterator that we just took. If you want to talk about names, I can tell you the story of how Thrust got its name. Yeah, yes.
ConorOoh, I would love that story. Yes.
Jared HoberockSo uh I think when I was working on it in grad school, maybe its its name was STD CUDA, like std CUDA. Just as like a I don't know, a placeholder name. When I got to NVIDIA, you know, maybe someone made the comment it's not standard and it's not CUDA, so this is not a good name. So we said, okay, fine. And Nathan had just gotten back from uh a tour of Asia. So he had spent a few weeks touring Asia and touring like post-Soviet communist countries. And he had this picture of uh you know, a Soviet worker uh from a mural or something like that. And I don't know, for some reason it it appealed to him, and he decided we gotta call this library Comrade with a K. K-O-M-R-A-D-E. And we're gonna use this this picture I took as the avatar uh when we release it. I didn't really have a strong opinion about it, and I I believe the so for some reason he wanted to give the library a a communist theme, and he's not like a left-wing or anything like that. He just thought it was funny. And I remember the uh so we released it on Google Code under the name Comrad, and the uh the tagline was own the means of computation. And uh we were really proud of ourselves. We just released this library that uh we were really proud of. We gave it a hilarious name, or so we thought. And then like the next day, we after announcing that we'd released this this library, you know, to some mailing list at work, uh, we get a response from someone who was very important and influential uh at the time at NVIDIA, saying that, you know, communism isn't cute, it isn't funny, you can't name it this. And so we were sort of shitting our pants because this guy is very important. So we couldn't we had to, you know, save face somehow and think about a different name. So it was my task to come up with a new name after Nathan had had failed and you know gotten us in trouble. So what I did was I I looked through every English word between four and six letters ending in ST. You know, since we we were stealing everything else from Boost, we thought we would steal the name as as well. So I saw Thrust and I said, How about Thrust? And you know, originally I think people were like, you know, we were going from this, you know, uh left wing tinged name to some sort of sexual innuendo for a name, but uh we stuck with it and somehow the the name is stuck, and now it's you know it's just firmly firmly means this that this library's name and and nothing else, but um that's where the name came from. Just another thing we stole from Boost.
ConorI was gonna say is I always thought that Thrust and Boost, like they share the same one-syllable ST ending, and that was intentional, and it turns out that is the case.
BryceI I had no idea. I had no idea that that was intentional. I knew about the comments.
ConorThere's the guy wearing the thrust t-shirt, which we haven't mentioned until now. At one point, Bright Bryce left the uh Microsoft Teams meeting to go and disappear, and he came back with a thrust t-shirt.
BryceI've had I I I shouldn't I should not uh I say this for a variety of reasons, but I had these t-shirts made like right when I first started NVIDIA, and I believe that the only other person who has a thrust t-shirt is Jared, because I think I gave you one at like a committee meeting in 2018 or something. But I I I had like five of them made, and I think like one of them got like faded in the wash, and so I tossed it, and then I think I gave one to Jared, and I I guess I must have misplaced one because this is the only one that I have left.
Jared HoberockYeah, they're collector's items now. Yeah.
ConorIt is very sad because I can my my my what is it, autistic tendencies or OCD can sh tell me that it is the same logo that is misaligned. The left, or I guess Bryce's right side of the logo is slightly thinner than the left side of the logo.
BryceSo in uh as one of the other painful things, uh so the painful things I did with Thrust was one, deal with the version control, two, revitalize the docs uh twice, and then three, I had to reconstruct this uh this logo, and I don't remember if I eventually I think I may have gotten uh like some form of source image from Jared. Uh, but I remember there was something where like the fonts or something were missing, and I ended up having to like like I spent like a week on getting the the remade logo a little bit more correct. But then you know what I realized the other day was why didn't I fix it so that the thrust part fits all the way in the box? Like I got this S and this T out here, like even on the updated one, it's not all the way in there. So I'm so bummed at myself because I don't think I can I don't think I can push through another logo change.
ConorThe real question is, I mean, Thrust has within the name of it a programming language, aka Rust, I mean, which is our our a fantastic transition point to what is the future of parallel programming, parallel algorithm libraries? I mean, if you could restart today knowing everything you know now. I mean, back when you were in the the genesis of what became Thrust, you didn't know about reductions, you grew into it, and it's like looking back on it, it it seems obvious that you would know that stuff, but you didn't at the time. And and that is so true of like so many things that they teach in not just computer science but mathematics, it's like they teach you the artifact, but they don't teach you the path to it. And the path is very nonlinear. How would you, if you were starting today, uh like redesign a thrust library? Because you've mentioned a couple times that, you know, it's kind of messy, the internals, and uh you don't need to divulge anything about your current work, but if if you were doing thrust 2.0, maybe with a better name, with a better implementation, uh, what would you do? Would it be in Rust? Would it be in C? Uh tell all.
Jared HoberockI know what I what I would do. Uh there's not a langu, there's not a language, there's no current language that's uh I I think is sufficient, unfortunately. But um sort of three things that uh a language would need to do something like uh thrust or just you know GPU parallelism really well. One is uh asynchrony, thrust thrust just fails at asynchrony for various reasons, but um it would I'd start you know start with um a model for asynchrony. Um heterogeneity is important, uh by which I mean uh you really have to care about the fact that you're targeting more than one um machine and they have different architectures, and um the differences in the architectures matter. Um even CUDA doesn't really have a good way to deal with this, um unfortunately. And um I'd base it all around tensors, not uh one-dimensional sequences. Um tensors and multidimensionality is sort of really important for uh parallelism, and it's important for uh sort of vital to everything that people do with uh GPUs, maybe aside from video games. I don't know how much tensors are important for video games, but everything else you do with a GPU involves tensors in some way. Um the implementation of thrust today implicitly uh revolves around uh tensors because you have these.
BryceI'm pretty sure the video games are just like, you know, one out of every ten frame is real and the other nine are AI. So I think it's all just tensors these days.
Jared HoberockYeah, I I agree. But um I think a good language for doing something uh with uh for doing GPU parallelism really well would have to tackle at least those those three things. And um, I as I was saying, uh whenever you write a ACUDA kernel, uh you're implicitly doing tensor stuff because um every GPU is sort of shaped uh like a tensor in the architecture. So if you're doing something like a thrust reduce, whether you know it you're or not, when you take that uh input sequence, you have to sort of fold it into a shape that matches the shape of the hardware, and um inevitably that's some sort of multi-dimensional shape. Um so having a language where that was more explicit and can be taken advantage of would be really valuable for implementing um libraries like Thrust. So th those are the some of the things I would do um differently. I mean there's a whole lot of there's a whole lot of like problems with Thrust that um are there because of for C ⁇ reasons. Um and you know people have various different opinions on how to solve C ⁇ pro uh problems, but um really a better language would be uh would be uh better to work with. Unfortunately Rust is not that language. Rust uh I write in Rust every day. I really like it. Um it's good for uh single-threaded code, but I don't think it handles parallelism um that well, and it I don't think it knows what to do with GPU parallelism at all. It's sort of uh at odds with GPU parallelism, unfortunately. Interesting. Like the way that borrow checking works sort of assumes that you've got uh a single thread and it's going to call functions in uh sequential order, and the borrow checker works really well when you're doing that. But on a GPU we have a group of threads and they want to communicate and they maybe they want to mutate different parts of uh a shared array, and uh no one knows how to make that work with uh with bar borrow checking.
BryceUm what if what if you don't program the threads in the parallelism directly? What if um the way that you express the parallelism is by uh like performing operations on arrays that get paralyzed? Um and and they so what if you just threw out mutation? Uh that's something that's the other way to do it. Yeah.
Jared HoberockLet's just not mutate the data or you know, let's let's let's let the compiler decide how to parallelize uh collective operations on tensors or something like that. Um that's great. You don't need Rust for that. I mean that's sort of uh Rust assumes you're gonna mutate very carefully and you're going to think very carefully about sharing, but if there's no sharing and there's no mutation, you don't need a borrow checker at all.
BryceAh, that's an interesting point. Um that's a very interesting point. I had not considered that. Um that if you're in a purely value-based world, like why why use Rust? Why not just there's like dozens of options for that? Yeah.
Jared HoberockWell, we've got uh armies of people working on different MLIR dialects, right? Yes. Um so we need to leverage those armies um in a way that makes sense uh in a high-level language, at least that's my opinion. And I would definitely start with just value semantics, just uh um not necessarily functional, but um like SSA sort of semantics. That's what MLIR gives you anyway. Um I think you could get really far with that, um especially for the kinds of algorithms that are in thrust. If you sort of assume that you have at your disposal uh operations that might look similar to what you would see in Cub, but they're sort of um instead of mutating uh arrays in shared shared memory, you're instead just uh performing collective operations on values. Um you could you could easily build uh a thrust library uh or a thrust like algorithms uh like that. Uh you just need a language to uh express it in. I guess another thing we need, one really bad thing about uh libraries like Thrust or Cub or Cutlass is that they are locked in CUDA C templates, right? Uh so to get access to them and reuse those implementations, you need to generate C code and then you need to find a C compiler to instantiate that code. Like think about what we do from you know Python libraries that want to use the GPU. Inevitably they generate some C code at runtime, compile it, and uh execute it. But what if you know they didn't have to do that? What if those implementations were um in a more portable form than um C templates? Um what if you didn't need a C compiler to use uh to get access to fast algorithms like um like RinCub, for example? That's something we need.
ConorSo I guess the question is what is preventing us from having the world that you are describing right now today? Obviously, Python, I think the three of us in this meeting can agree, and the folks that have the prerequisite knowledge to also agree with us can agree that Python is the non-ideal language for targeting GPUs. It's dynamic.
BryceOh no, I think I think I think Py I I'll take a contrary uh perspective here. I think Python's great. I I I made this I was uh for the first time ever, I've been on another podcast, the Talk Python to Me podcast, and I made this point that I I will claim that Python is actually a performance-oriented language. And the reason for this is that Python has very loosey-goosey semantics. It's a very flexible uh language, and it does not have um a ton of uh rigorous protocol when interfacing with other languages. And uh it's very easy to build a DSL in Python. It's very easy to build something that takes Python syntax and kind of Python semantics and lower it down to native code. And it's also very easy for Python to call into uh native uh code. I remember a few years ago I went to this like conference at uh Facebook. That this was back when I was in California, and there was this fellow who was a very senior uh like JVM engineer, and he was talking about, he gave like a uh a 30-minute talk solely on all the work that they had to do to make JVM native calls fast. And the reason that they had to do all this work, it was like the calling convention for JVM to call native code was like at minimum a hundred instructions because the JVM had these very, very specific protocols for like you know, relating to like object semantics, and you had to you had to follow all these rules. Whereas like in Python, it can just be like, oh, you just you just call this function. You just call this function, you know, and like yeah, maybe the like if you want to have like two-way interrupt, like maybe the function needs to like use some of the Python APIs, but like it's super simple in Python to just call a C function. Um and that makes it easy for Python to call into fast things. And then also on top of that, it's easy to extend Python to build DSLs for Python. Um and so because of that, I think of Python as being more a performance-oriented language. I think Python's more similar to C and Rust in that it is used, uh, I would say, oh maybe not predominantly, but certainly it's getting closer and closer to that point where Python is predominantly used for performance-oriented tasks like machine learning and data science.
ConorI've heard you say this three times now, that Python is performance-oriented. And I I literally thought the first time you said it, I was gonna be like, oh, he said it one time, I won't be able to call him out on it. You said that three times. Are you serious?
BryceI am serious. Hey, we have free threading now. It's all gonna be fast. It's gonna be very fast.
ConorJared, do you can you back me up? What are we talking about here? A non-compiled, dynamic, interpreted language that treats integers as objects? What are we talking about here, Bryce? What are we talking about here?
BryceBut but the but the point is that that in the places where you care about performance, you can use it JIT.
ConorLike if you if you write Wait, wait, wait, you just said it was performance oriented, and now you're saying in the places where you care you can use it? It treats integers as ob in the base language, like if you want performance, it's better to use NumPy instead of the baked-in lists to Python. Like as soon as you're over a thousand.
BryceOne second, one second.
Jared HoberockI'm pulling up I'm pulling up some uh The reason Bryce can say this is because Python has had Python is backed by Google and has been for the past twenty years, and Google is the you know, the ones that have been Paying to make all of these libraries fast uh through Python, right? Um but as soon as you need to do something that one of these libraries doesn't have a C API for, you're screwed, right?
ConorUm that's the thing is that like in general, if you I I've said this before on the podcast that like if you want performant code in Python, you shouldn't use Python, you should use NumPy. Because NumPy is implemented in C, and as soon as you're doing anything serious, and by serious I mean greater than a thousand elements in a list, it's faster just in any library that's dispatching to C code, which means how is Python performance oriented? That means that Python is a language that facilitates fast libraries that are not actually in Python.
BryceYes, it that that that is true, but also Python has a number of different JIT options that are very good. So this is this is uh like we use Numba uh uh as the the basis of our like CUDA Python device code authoring. And so you can write uh uh kernels in CUDA Python that will c compile down to the same machine code that you would get if you wrote them in CUDA C. And you can use abstractions like lists, like you can use all the Pythonic things in the in this code because it's it's just this like little DSL that is Numba's gonna kind of violate some of the object semantics, you're not gonna have an interpreter, you're not gonna have object lifetimes, it's gonna map everything down to value semantic things in the C machine model, and you'll get the same perf. And now you can even use our device-side libraries in something like Numbakuda. Uh so like, yeah, like like Python on its face is like, you know, can be pretty slow. But Python gives you all the tools to make it very, very fast.
Jared HoberockBryce, are you talking about uh publicly about how it works?
BryceUh is that uh not publicly knowledge? No, it's it's all open source. It's all open source because numba is just an open source JIT compiler. Um so what Numba does is it just takes uh either Python bytecode or AST and then it lowers it down to this IR called Numba IR. And then all that numba IR is used for is to do type inference, to figure out, hey, you're you're calling this function here, you know, what are all the types? And then once you have all the types resolved, you lower it down to either LVMIR or MLIR. And then it compiles just like it would native code. And there's like two or three like major JIT solutions like this for Python. Um and you know, the the the best analogy I can give is like JavaScript. So JavaScript is another language which JITs very, very well. You can write code in JavaScript which after like after it's been JIT has performance that is close to the performance of native code. You you can't do that with a language like Java, um, which has a very rigorous object model that makes it very challenging to really be able to do that. But with languages like JavaScript and Python, uh their object models are a really good fit. Um and in particular, if you're writing lists like NumPy type code, if it like Numba, when it lowers things down, if it sees lists, lists get lowered down to just like a uh you know an aggregate type, uh the equivalent of like a std tuple. Um you know, integers, floats, etc., when they get jit compiled, they're just gonna be lowered down to the equivalent, you know, uh native uh processor types. And something like a numpy array, it's just gonna be lowered down to like a pointer plus some metadata, you know, the equivalent of like an MD span. Um but yeah, like like Numba, it just it just goes, takes your DSL, takes your your Python AST or your Python bytecode, turns it into um uh uh this intermediate IR and it does the typing and then it becomes LVM IR or MLIR. And Numba is like the heaviest weight of the Python DSL compilers. There's also a lot of other DSL compilers. There's some that do transpilation, so they take Python code, they turn it into C. This is actually what Coupy does. Coupy takes your Python code and it turns it into like it'll it'll spit out like thrust or cub code and then it'll jit compile that code. Um and then there's other compilers that will use an approach called tracing, where um instead of like parsing the Python AST, they essentially just inject mock objects into your code, and then as your code executes, instead of doing whatever your code was supposed to do, it captures a trace, and it builds up uh like from your actual code execution, it builds up a representation of your program, and then they transform that and they lower it down in whatever way. Uh this is how like things like Triton used to work, although I think they now have a more proper compiler framework, but there's a ton of these different uh like tracing frameworks. Like one problem that we have at NVIDIA is that it's so easy to make DSLs in Python that we have like 20 DSLs in Python. Like every two to three weeks, somebody's creating a new Python DSL.
Jared HoberockYeah, but what if you need to write a kernel? Like none of these none of these approaches uh have anything to offer.
BryceYeah, yeah, they do. You can you can totally write kernels in uh uh you can't write kernels really in Python. Yeah, yeah. You can you can you have access to all the tools that you have in Access.
Jared HoberockNo one's serious, no one no one serious is writing kernels in Python. I'm telling you, then why isn't Thrust written in Python?
BryceUh yeah, we we could get there. So like this is this is a uh this is like a speed of light softmax kernel written in like native uh uh native Python. You can allocate shared memory, you can allocate register memory, you can use Cub, uh you can use like other libraries too. Like people people are starting to use this. People are starting to write like serious kernels.
Jared HoberockWhy is it good for a kernel to look like that?
BryceUm because one you get to do you get to use numpy style arrays. Like like the the Python has like de facto uh uh very nice rank polymorphism. Uh would you care to elaborate on that, sir?
ConorYou're saying numpy like arrays, but the word is rank polymorphism, like that's the thing that Jared was saying is if he was gonna do it over again, he would implement it in terms of tensors. When you're implementing something in terms of tensors, it means you if you have a two-dimensional or three-dimensional array, you don't have to spell map, map, map in order to do an element-wise operation over your arbitrarily ranked array. NumPy semantics is array language semantics. It means that if you want to do some element-wise operation, it's just a single character plus a scalar or something like that. So like that is that is one of the benefits of NumPy, which is a poorly implemented array language, is ranked polymorphism or broadcasting.
BryceAnd this isn't even to mention the very cool thing that we announced at GTC this year, which is Qtile, which is uh a new higher-level programming model for CUDA that's entirely array-based, um, where you don't explicitly program uh threads. And uh and like this is what the speed of light softmax looks like in Qtile. Uh and on like on the left you're seeing the NumPy code, and on the right you're seeing the Qtile code, and they're very close. And it's usually taking advantage of the rank polymorphism that Connor's talking about. But to get to the question, why would you want to write a kernel from Python? Well, it there's a very simple answer to that question, which is if you can write the kernel in Python, then you don't have to deal with having to support both C and Python in your application. Then you don't have to you don't have to deal with having a C build system, and it solves a bunch of packaging problems for for you because instead of having to build a Python extension or a shared library that Python loads, you can just ship Python source code, uh, which is what most pi most Python projects do. So like it saves like a lot of headache that people have to do things. I'm not here to defend the language.
Jared HoberockI'm just like uh defending the idea of an ideal what what is the platonic ideal of uh GPU programming language? I I wouldn't begin with Python, I guess is what I'm saying. I understand people have people like Python and they have requirements to use Python. I just like to imagine what the perfect GPU language would look like.
BryceI would agree, and the reason I would agree is that um there are, while I think that the numpy ecosystem and its prevalence in Python is a huge improvement over C. Having these like rank polymorphic uh arrays that are that are it's a vocabulary type. It's it's not like part of the language, but it's so it's in such wide usage that like every library that does anything with tensors supports the numpy semantics. And that's great. However, numpy is a little bit old, 20, 30 years old, and uh it does have like a number of words to it.
ConorOne of the things Whoa, whoa, whoa, whoa, whoa, let's back up. Python is 30 years old, not NumPy. You're getting your languages and your libraries confused. Python was created in 1993 or 94. NumPy was not. When was NumPy created? NumPy, I think it became popular around 2010. And I I I I I agree completely with Jared. Like, if if I'm designing a GPU language from scratch, I'm not starting anywhere close to Python. The fact that Python has become the lingua franqua of in 2005, by yeah, Travis Oliphant. It was 2000.
BryceIt was 20 years ago. I said 20 years. That is 50.
ConorNo, no, no. You said 30. 30 was the genesis of Python.
BryceI had dinner with uh or we were at the same the same dinner table uh uh at the uh Py Ladies charity auction with with Travis Oliphant last week. Very nice fellow.
ConorFantastic, fantastic. My point being is that I agree with Jared. Python was created 30 years ago, NumPy halfway through the lifetime of Python, and a dynamically quasi-strongly typed language with all this, you know, uh great you know, FFI. That's not the reason that Python today is the language that folks use to target GPUs is not because it's a good language for targeting GPUs. It is okay, but it's not where I would start. And that's I think that's what Jared was trying to say, is that it I I think Python uh gets in the way of what we would like from a language in terms of trying to eke out max efficiency and performance from GPUs, uh and it's just an artifact of history that it's become the lingua franca of data science and machine learning and deep learning, etc. I don't know. Maybe Jared, you could you could add if if you disagree with what I just said.
Jared HoberockWhen I when I uh so I picked up Python recently because I was a uh I was considering using it for a project. And whenever I use Python, I feel like I've lost like I've gone blind, like I've lost a sense because there are no types. And even when there are types, they're not really there, right? Like they don't do anything for you. So I feel like uh I mean even if you use the type descriptions, they don't they're not helpful. Um I don't know, I just feel like I have brain damage or something when I'm writing or reading or writing uh Python code. Uh I like Rust because once uh cargo check is happy with the program, I'm confident it's gonna work. I can do enormous refactors to a code base and be confident that um they were correct. And nothing like that is possible with Python. Um I know it's important. I know it's probably the most important programming language, but there are some things that Python is uh inadequate for.
BryceSo there's a particular wart of NumPy that uh that I want to highlight. But if I highlight that wart, it rapidly leads into the really cool algorithm that I want to show you. And I suspect that that Connor may have a couple a couple topics he wants to discuss with Jared before we get there.
ConorSo no, no. I mean we we can go down this rabbit hole. I would just like to go on record saying that Python is the most popular language in the world at the time that LLMs have come of age, which makes you think that the rich are just gonna get richer. I am willing to bet my life on the fact that Python will not be the actual language that LLMs target because it's it's not like a language like Rust that is statically typed, has more linting, etc., is better to target than a dynamically typed language. And and so, anyways, I'm just going on record saying Python is popular now and will die before I die. And uh that's also keeping in mind that I will upload my brain to the cloud and live forever, uh at which point we will now transition to Bryce's segue into his algorithm that he wants to talk about.
BryceSo before we get there, uh a quick quick thing on LLMs. Um so I've been thinking a little bit recently about this question about like what um what language will the LLMs write code in? And one thing that's come up is this question of coding conventions. Uh uh in particular, what coding conventions should we as programmers follow to make it easier to use LLMs in our code bases? And one particular piece of this that's come to mind to me has been around naming conventions. I think typically, at least me, I tend to prefer I earlier in my career I would use very long and verbose names. Um but now I primarily write code for slides. And I got a limited number of characters that I can use in the slide. And so I found myself using shorter and shorter names as my career goes on. But it seems to me like you probably want to use quite descriptive names in your code base if you're planning on using LLMs to help you write your code. Uh maybe even you want to use um names that are you know more verbose than would be comfortable for a human. Uh because that's like if you use very short names that could be ambiguous or misinterpreted, it might be more confusing to the LLM. Whereas if you use very clear and concise names that uh are unambiguous, that's gonna probably give you better better results with using LLMs.
Jared HoberockThis is such a C programmer thing to worry about. Uh because I used to worry about whatn what to name things. Because in C is a very paranoid language because you you have to think about all the things that can go wrong on any given line of code. Like you could call the wrong function or the type the thing gets instantiated with is will will be missing something or will have the wrong thing in it. And so you have to take this very defensive stance when writing any C code. Now that I've been using Rust for a while now, I don't worry about these things at all. I don't worry about what to call things, I don't worry about uh how the code looks, because um I'm I can be confident that it works. I don't have to like these problems just don't exist in Rust, I guess, is what I'm saying. Uh these things I used to get uh paranoid about uh in my C ⁇ template codes. Um there's usually only one right way to write you know the Rust uh function um you know according to some LLM and if it compiles then it's and it's correct and you know and you move on. Um these these ambiguities just simply don't exist. It's a very relaxing way to to write code.
ConorAnd and I I can echo that. It's when you write Rust code, I like I am more of an expert in C than I am in Rust by uh two orders of magnitude. Like I've written a couple thousand lines of Rust. That doesn't make me an expert, but like I know the inner details of the special member functions and all this stuff, and I I I have so much like cognitive weight in my brain when I program C, and I'm like, oh I gotta am I using an initializer list? Well, I've got a special set of rules for that. And it's just like I have all these voices talking in my head when I program in C. When I go to Rust, I'm kind of just like, I don't really know what's happening here. But the compiler like holds your hand and is like, don't worry, I'll be the expert. You just program the way you want to program. And I all I'm saying is the future of generated code targets a language like that. Not like C, where you have a matrix of special member functions where depending on the subset that you implemented, you will get a certain other set generated. It's anyway, so I mean, and that's C. You're trying to say that Python, a dynamically typed, etc. etc. language is gonna be the No. It's it's in the short term, that's what's gonna happen. In the long term, the more compiler upfront static analysis guarantees that uh you can get, that's what's gonna be the future, in my opinion. But Bryce has a story to tell us about some algorithm and uh potentially refuting everything we're saying here. So we'll let we'll let Bryce speak now and uh convince us. Be sure to check these show notes either in your podcast app or at adspthepodcast.com for links to anything we mentioned in today's episode, as well as a link to a GitHub discussion where you can leave thoughts, comments, and questions. Thanks for listening. We hope you enjoyed and have a great day.
BryceLow quality, high quality, that is the tagline of our podcast.
ConorThat's not the tagline. Our tagline is chaos with sprinkles of information.