In compiler development, achieving test parity requires systematic debugging of intermediate representation (IR) code, where developers must identify and fix issues like sequencing problems, incorrect instruction generation, and state management errors to ensure the compiler produces correct output for all test cases.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
studying compilers every day until i land a compiler role (day 210)Added:
We're live. Okay. Um, hello all, hello world. This is day 210 of studying compilers every day until I learn a compiler roll. Last time we went back into CMake hell and it kind of worked out. I think it worked out. We I think we got all of that done surprisingly.
So, um, there might be we might have to touch CMake like one or two more times in the future, but for the most part, it's actually like um it's actually a pretty good time. Um, this time we're going to go back to, I guess, finishing debugging our front end. Hopefully, if we can get this to a completed state. I think that'd be really great. If not, then like all good. Um, the overall goal here is to get it so our tests are roughly they reach roughly par with our original test output. Um, or at least referring to our regression tests. Um if we get the same output from the same inputs then we can say that everything is good to go. Um but if not then we can like I guess manually convince ourselves by hand. Um yeah so that's kind of where we're at right now. Uh what's up Isra?
Uh good to see you. Um yeah so I've I think these are roughly the three things that we want to look at um that's causing all of our test differences.
So get diff test regression.
Uh specifically we're looking at star.mir.
So we have some differences in like the ways that we generate um we generate labels because of like just some minor differences. It causes some like interesting there's some really interesting stuff happening. I need to figure out what's happening there. Um, there's some other strange stuff happening here and there.
Uh, trying to find a good example of it.
Um, let's keep looking. Yeah. So, here we have like some weird sequencing issues.
Um, I'm not really sure why that's happening, but it happens. Um, we're going to need to figure that out, but it should be correct at least. So, I'm not completely concerned about it.
Um, also something I'd like to do at some point is to rewrite the test to have like like actual printed output instead of just like instead of just I guess existing in a vacuum. It's a little bit awkward to a little bit awkward to verify correctness um at least after assembly.
Um yeah, here's another example where we have some weird sequencing issue.
Um yeah, and that affects some things which is a little bit concerning.
Um let's keep looking more sequencing stuff here. We have like something going really wrong. Um that's a minus one which should not be valid.
So we need to figure that out. And then like that's kind of like the big three categories. So yeah. Um I think the first thing to look at is probably like the or the continue block with if um or that might be the most annoying.
So maybe we look at like the address operator because I think that's causing one of the things to uh one of the things to go wrong. So let's see. This lives in here I believe.
Um H I guess this switch block really doesn't help actually. That kind of makes a mess out of things. We might have to just do an if tree just for arbitrary logic.
Um, yeah, because I guess the big thing that's annoying me about using the switch block is that we have to like make these buffers appear um for temporaries. Uh, do you use fee nodes in your IR? Yes.
Um, yeah, I have a very specific fee instruction that exists in Mir.
Um, that was fee.
Uh oh, I'm looking the wrong file.
Yeah, here we are. But yeah, it it exists.
Um, I was thinking about switching to like basic block parameters, but I was too lazy to make the change, so I didn't really think much more about it.
Um, it also is like the LOVM like canonical solution. So, I think, sorry, um, at least for my goals, I think it made sense to just use fees and call it a day.
Um, yeah, there was something wrong with address, I believe.
and expected putter at zero. Okay.
So then what is what is wrong here?
I guess maybe we could we could split screen like this.
We'll do that. Uh, get diff.
There we go.
Let's learn what they last night. Yeah, it's it's quite it's quite important for us to say because you got to we got to do the resolution at least.
Um, short serving is still throwing me for a bit of a loop. I see. Um, yeah, I haven't actually looked at that yet, but I'd need to extend the front end more for that and I'm a little bit lazy. So yeah, I would that might be something that you could ask me about in a year, but probably not right now, unfortunately.
Um, okay. Let's also just pull up the test here as well.
Okay. Um, yeah. So, we're like looking here, I believe.
So we have that load which makes sense I think. What the hell is happening actually? Why is why is there an extra load there?
Or I guess we need that load necessarily, right?
Wait, hold up. Wait. So, what are we taking the address of?
Okay. Wait, do we even use that? No, we just don't.
Wait, what the [ __ ] Oh, because use prime expert. I see.
Okay, that makes that makes sense.
Tornado warning. What the hell?
That That sounds very Midwestern.
Um, okay. We're going to we're actually going to take the time to bleach this.
This is like this is genuinely irritating me now. Um, yeah. So, let's let's figure this out now.
See, we definitely want this, I believe.
Or I guess we necessarily Oh man. Okay, let's just let's just start from the top. We don't even know if we if type is what we want, but we definitely want to accept the value as a prerec.
So So op equals e get op.
And we're just going to avoid the switch block because that makes so much overhead mess here. It's just not worth that. It's not worth the headache.
Yeah. So, we'll just do we'll do do things with a giant if tree.
Uh we'll do um and then we can probably like else stood unreachable just as a catch all for myself cuz I am definitely going to forget to implement something.
So minus we have not uh we have address and then we have DREF.
I live in an area that gets tornadoes.
Wow.
I mean I guess like I don't know the the weather the weather is just really strange everywhere.
Man, we love climate change out here.
Anyways, depressing note aside, uh, let's let's figure out what to put in here.
Um, let's see. What do we do after? At least we have an allocate.
Or we definitely do that, I think.
Yeah. So, we definitely need this stuff, I think.
Uh, we'll worry about that after we clean this up though, I think.
Uh, if it's unary plus, we want to use val.
Um, what type is this? This is just unary op, right? Yeah. Okay, this is fine.
Uh, what's up, Zach? What's the main goal here? Um, I am trying to I'm trying to I guess continue the whole test debugging thing as I'm removing MIR. So, the goal here is to make it so my tests or my test output is one to one with what it was before and then maybe we can start making some cleanup changes. Um, that's why I jump through like crazy hurdles.
Where was it again? I think it's below here. Yeah, it's like this stupid thing.
Um, the reason for that is to try and reach par. Um, hopefully we can get it to a point where that doesn't matter anymore and our tests are still accurate. Um, but for now, just to prove correctness, I want to make it match as close to 1 one as possible and then we can undo those changes.
We gather in Argentina for 365. I could be convinced. Um, that might that might be interesting. That might be funny.
Um, let's see.
I think this is fine.
We can even move this. We could still move this out actually.
Yeah, we could do this.
So if op equals or not equals unary op df I think or address if it's not that then use prev expert other or I guess we should we should invert the condition so if it's address then just prev expert otherwise use prev expert Um, yeah. So, we could do it in this order.
I think that might I think this will clean up our code a little bit.
Um, okay. So, let's start with let's start with plus.
I guess we could kind of keep a lot of this the same, right?
Um, I guess we necessarily need to make this anyways, but the type changes inside of the block.
Um, yeah. So, we do that.
So you set type. We have Val still.
Um, let's make a we should probably make a result buffer. So we kind of do need to we kind of need to yank this unfortunately, but it's it's less bad, I think. Uh, we can rename that instead because we definitely we changed up how we did binary op as well, right?
Um, Jesus Christ, that's ugly.
Um, let's just name it result and that will hopefully clean things up.
So, result equals or res, I don't know.
This is very neat code pill I think if you watch any neat code.
Okay. So this is val.
Yeah. So we do that. I think we need to yank that.
Um okay. So next or do we care about type beyond this point?
Um yes we care about all.
So we want God damn it.
Okay. Well this is this is really awkward all of a sudden. It might just be easier to keep this original structure then.
Um, oh man. No, no, we're we're we're cleaning up. We're cleaning it up. We have to clean it up now. We have we absolutely have to clean it up. Let's just let's be maximalist about this.
Um, okay. So, we've cleaned that up. Why exactly are you removing MIR? Um it was it was it was annoying to like uh it was annoying to maintain and it didn't pro it didn't preserve enough information and everything I needed it for you could just directly do on the anyway. So it was a little bit redundant at least in my opinion.
Um so that's why I got rid of it at least.
Um overall it's just like a cleanliness decision.
Um, does AI help with compiler research?
Um, sort of not really. It's definitely a subject of research at least. Um, cuz part of compilers research also extends to like tooling based around like static analysis for instance. Um, and there's like a lot of ongoing stuff about whether um whether AI is like able to use tooling output to the fullest extent. Um but aside from that like AI in the system space and by extension compilers is generally like as long as we have a way to verify the output. Um as as long as we can verify the output then it's perfectly fine. Um what's up rich? Did you hear about the produce 240 situation? I have not. Uh what what is that? I could I might look that up actually.
Ah, I see.
Um, wow.
Uh, let's turn this into dark mode real quick. There we go. Much better.
Self-report which assignments they used.
That's crazy.
Um, wow. Uh, what's up, Max? Um, also what's a harsh, uh, do you contribute to real compiler related projects in open source? Um, that's on the buck list for now. Most of my real world contributions beyond just like this toy compiler. Um, those are pertinent to research. So, our research lab has a couple projects and I contribute towards those.
Wow, this is crazy.
Yeah. I mean, like, this is I don't know what I'd even do in this situation. That's That's crazy.
Oh, no. I just I care about y'all. I don't I don't want y'all to burn out your retinas.
Wow.
Okay. So, the the big idea I'm seeing here is just they they added a new cheat detection tool. We don't actually know how well it works, but it flagged a lot of people and that's causing a big deal. Is that kind of what's happening?
watch parties. That's crazy.
Okay, that's not really helpful.
Um, okay. Sure. Well, that's that is a little bit insane. I can't lie.
Um okay let's see so we need type as well here this is also uh casted like that what type is this middle and or I okay we can do it like this this might be easier senior engineer, you need to choose the right thing. Um, yes, that that makes a lot of sense. I think again, I'm mostly doing this right now just because it's like fun, but like yeah, open source is definitely on the list. Uh, one of the things I want to do with my research is to um, I guess my current big research project right now is making like a uh, building a independent like Rust tuning pass for LVM because it turns out there are a lot of IR differences. And part of that also involves like making an LVM blog post.
So, um, that's that should be fun. Um, ideally I'd like to also get some stuff upstreamed, but we'll we'll end up we'll see how the scoping ends up going. Um, but yeah, I don't I don't want to like reveal too much at this stage. So, we will leave it at that.
Um, okay. So, we have this. We're making all this stuff.
Uh, res equals that.
And we push this back.
Okay.
All right. Next up is not let's yank this.
Yeah, there's I will do a big presentation at some point probably when I graduate. But um yeah, we'll see.
We'll see how things end up going.
Uh this makes sense. We need to set type as well. I think maybe we should just set type by default.
Ah, that's the wrong Oh, whoops. Okay, there we go.
We can just auto this at this point then.
Uh, we could do this even.
We could get really ambitious with this.
Yeah. So, we can do this.
We don't need that anymore. We need to update those.
Um, yeah, we'll do this.
And then let's see.
This is res or wait. Yeah, this is just res now.
We can split that up like that.
Uh, how's the market like in America? Do you grind lead code in your free time?
Um, it is still necessary, but I've been very lazy about it recently, just between like school and just like being a little bit burnt out to be honest.
Um, so yeah, I've kind of just been like really slow about it. Um, it is definitely something I should pick up again though. I might I don't know.
Should I start doing it on stream again?
I feel like it was like really boring when I stared at a leak code problem for like an hour.
I also just like I don't know. I feel like my process is not really like very streamable cuz I kind of just like I don't know. It's just like I like stare at the problem for a while and like I don't really explain things very well. I guess it would be good interview practice, but I think I would have to frame it explicitly as such instead of like relearning stuff.
Um, oh man. Okay. There's there's a lot of stuff happening in the address thing or this is DREF. What am I doing?
This goes here.
Let's paste that there. Let's rename this or let's paste it there.
D goes here. Um between a phone call and the cost of tornado warnings and missed your explanation about fee. Uh you're good. I haven't like I didn't properly explain it. Um, if you want me to like give a if you want me to like properly explain what phenotes are, I'd be happy to though.
Um, oh man.
Uh, let's see. So, here res equals val Uh maybe maybe we do just split this logic up. I don't know. That's really ugly. I don't really like it.
Ask for tomorrow. Yeah, sure. Don't worry about it. Um or even just like off stream. Um if you wanted me to like type something up in Discord, I'd be happy to.
Um address we store allocate putter or use the putter of wait actually how do we how do we represent address for like a temporary I guess it is just use the use the inner value address, I guess.
Yeah, sounds good. Um, again, no rush on that either. Um, just at at your own convenience, I can I can try to cook something up. Um, maybe I should actually just like I don't know. Another thing I've been thinking about is making like educational content.
Um, I think like uh one of the things I want to do is make more offstream videos. And I think like I'm struggling to think of good concepts for it. Um, at some point I want to build like a full compilers course, but I think a good place to start might just be like smaller concepts that are usually not really covered too too explicitly.
Um, neither of my compiler classes, or at least the compiler class I took, never took uh never covered SSA. So, I think that might be something fun. Um, so SSA, FE nodes, um, I guess why they're useful.
Um, I think that might be something. Um, if that's something y'all are interested in, u, let me know. If that's something you're not interested in, also please let me know. But also, if there's anything else you are interested in, please let me know.
Um, yeah. I'm I'm always looking for more content ideas, but whether I actually get to do something with them is a completely different question. I watch Hell yeah.
Yeah, maybe I do like I don't know. How would I even animate it? Unless I'm like scribbling on Paint.NET. I feel like that's a little bit too a little bit too sloppy for for the channel.
Uh maybe I'd do some like maybe I do some animation like three blue on brown.
We'll have to see.
Um actually how would we do this?
So if we have like if we have like fu plus two or if we get the address of like I don't know I guess it has to be a variable anyway.
So this is like there's something drefocable or no something referenceable obviously.
Um or like some sort of store.
So I guess if it is just like a variable this should be fine.
Um oh man animation library. Yeah I remember someone mentioned it before.
Python animation library. I forgot what it was called. Yeah. Um manm I don't remember how it's pronounced. I think this is what's used though. Um if you remember like I'm not going to dox them. Um there's there's someone in my chat that was like messing around with menm.
So yeah, I I might give that a shot. But then I have to write Python, so that's not really fun. Maybe if there's like a rust equivalent. I don't know. That might that might be a little more enticing all of a sudden.
Um, yeah, I guess this is probably fine. We just need to figure we need to figure out how we do this.
Um, can we just copy from alloc for dref or for address? Um, well, we haven't made the allocate yet or oh wait, I see I see what you're saying. Um wait yeah so private expert here so the val is I is um is the allocate putter if it's an address otherwise it's just the value um or the value in the uh the value in the address. So, we can just copy directly, which is what we're doing here.
Um, we'll just do that, I guess.
Uh, what's up, Jojo? Uh, why C++ and not Rust? Um, well, initially when I started this, um, part of the goal of this was also to get comfortable with C++ because a lot of like LVM's infrastructure is in C++. So, it's kind of like a necessary evil for me, at least for better or for worse.
C++ is better. Hell no. Hell no. It is not better.
Um.
Oh god. What was I doing here?
Jesus Christ.
So this is a star. Planning to use LVM as the back end later. Um I'm not but I'm using this as practice for C++ because I will be like I'm working with LVM a lot on other projects.
Um okay this makes sense.
What the hell am I doing here? Why am I dynamic casting?
Oh I see. I see.
Um, wait, what?
Wait, no, that doesn't make sense.
Wait, what? What am I doing?
Oh, I see. Obviously, it has to be a It has to be a putter.
It has to be a putter if we're drepping it.
Um, okay. Uh, how do we even split this up properly? I think this is probably fine.
We'll just add a type checker later.
LVM kaleidoscope tutorial. Yeah, that was that was way back in the day. Wow.
So much has changed since then, actually. just in my life, which is really funny.
Um, okay, this makes sense. Res equals that.
So, that's a load.
Let's just do putter of val or Oh, what the hell did I do? There we go.
For now. Um, yeah. Well, thanks for stopping by. Um, I appreciate the support lots.
Uh, and have a have a wonderful evening.
Um, okay. I think we bleached all of this now, luckily. So, we can get rid of this slop.
Um, this is mostly fine. This is just res now.
There we go. Okay. So, hopefully that's all good now. Make build.
Wait. Make install.
Okay. And then let's Okay, let's let's make tests real quick just so we know nothing is crashing.
Okay, we're we're good there. And then uh test regression generate regression tests.
Let's see how this changes everything.
Uh putter is very late in this list because many reg is slow as [ __ ] Yeah.
Um, okay. There we go. So now if we edit. Okay, that fixes everything here, which is very good. And that also cuts down the list of tests a little bit more, which is also very good. So now if we diff again.
Yeah, so we're just generating an extra instruction and that was causing issues.
Um, is there anything? Okay, there's still there's still whatever the hell is happening here, but we've we've solved one problem. That's very good. We solved this and that only took half an hour.
Um, okay. So, next let's look at whatever the freak is happening here.
Oh, I see. Um, this was from the runtime library, I believe, right? because this is prototype and pre-process.
Or at least that doesn't make a lot of sense to me. I'm not sure why this is happening.
Um yeah, something looks a little wrong.
Yeah, we'll worry about that in a second. Uh for now, let's I think it might be easier if we just start with the if continue block stuff. Um, it also looks like it exists in while, so I think we'd probably want to fix it there as well, or at least make some changes there. Um, yeah.
Yeah, it looks like we just generate blocks differently. At least is why this is causing some weirdness.
Uh what did we change here?
Uh just that function pretty much. Okay.
Uh source.
Let's skip this for now. Skip this for now. Let's add all of that for now.
Yeah. So that is just that little hunk.
Then if we go up here, that should still be not added. Okay, perfect.
Uh, let's see. So, we did rewrite unery oper We should just use the language bleach here because we use that in the comment. So, it'd be really funny.
Um, okay. This all looks about right though, which is good.
Uh, we're going to need to bleach this eventually as well, but that's a future task.
Um, this this file is getting very very long.
Okay. So then there is something going strangely with all of this.
Um I think the SSA test also showed something odd happening. I think that's also part of what was happening here.
uh runtime library like what what is happening here? Why is this breaking? This might be easier to look at.
Um yeah, a lot of this is fine.
And it seems to mostly clean up at some point.
Yeah, like a lot of this is just like minute differences in block storage order, which is like fine.
Um, yeah, I've been stuck on a bug for two days.
Am I cooked? Hell no. That's That's fine. It happens. Um, as long as you're still working towards fixing it, I think you're fine.
So, where' the SSA test go? It looks like it stopped breaking.
I guess it did. Huh. That's really odd.
I guess somewhere we had a bug and then somewhere we fixed it, I guess. So, that might that might be good. Um, are there any that don't get preserved after optimizations? It looks like everything everything after the optimization passes turned out fine given all these are just 00.
Um h yeah I'm very curious what's happening on that like really big number though.
So if we go back to this whole pile um what are we doing here I guess? How how is this happening?
I'm I'm very confused by that. So, that might be something to look at. I think that's probably the next thing I look at now.
Um, sorry, checking something.
Um, okay.
Okay. So, where is this even happening?
Let's look at the pre-process test.
Um, select pre-process oz mir use proto. Okay, so that's something to do with our prototypes, I think.
Yeah, that's something that we flagged there.
That's really confusing, though.
What are we even trying to do with this?
I guess that's the other thing that I'm very confused about. I think it might be easier to look at in the runtime library because we don't import anything here at least. Um, so that should make things easier.
So, this is specifically with using Oh, wait. No, we definitely import. Yeah, we definitely import there.
Um, maybe we make a separate prototype test. I guess we have that. And that turned out fine, right?
Oh, no, it didn't. It definitely didn't.
Okay, so it is that is what we want to look at then.
Um, so for context, the original was this. So, we don't have any imports there. It's just these directly.
I'm not sure what we're doing with those stores, though. I have no idea where those are coming from.
Um, yeah. I I could not even fathom or I have no idea where those could possibly come from even.
Uh, we're going to commit a sin and use the mouse for a second.
Okay.
So look what I just like this looks this looks ridiculous and it is really ridiculous. I have no idea why this is happening or where these stores come from. So let's um let's see.
Yeah, that doesn't make a lot of sense.
So, huh.
Where could this possibly come from?
Maybe call call expert.
Oh, wait. It might be this. Wait.
Um, no, we generate the stores correctly there. Maybe this is args. I think this is args.
So, we're generating the arguments here.
But what the hell are we storing?
What types are these?
That's a smart pointer.
It's an expert.
Wait, what? Okay. Wait. So what? It just what? How?
Why are we What the I don't think this is the problem at least.
Okay, let's let's break this test up a little bit more.
So let's split this up like that. Return a plus b.
Why is a register big integer? Yeah, that's that's what I'm wondering. We shouldn't even be generating these lines is the other confusing thing.
Uh that's like that's really what's confusing me at least.
So yeah, uh we'll modify the test.
Let's just regenerate.
Yeah, maybe this was not a wise choice for me. Maybe I should have just regenerated one specifically.
Um, okay.
So then, okay. So now they still exist, but we split it up a little bit at least.
But wait, what the [ __ ] Okay, wait. I'm I'm so lost. I'm so lost by this.
Let's just Let's go back to what this was before turn one. We'll just do that.
And then instead of regenerate tests, we just test regression or do we have panic on the path?
No. So source enable panic test input.
This is what prototype.
Okay.
Uh oh.
Okay.
So now we can look at that file.
Oh, we need to ozero this.
Okay, there we go.
So, we're still doing that. But why?
What what could possibly be generating this?
Like what what actually is what could physically do this?
Is there something that I'm like missing?
Do I need to clear args after this or like wait is there something really stupid that I'm forgetting in like here we make pams Uh, do I need to move res?
There's no way it's this, right?
Okay, we don't need to rerun the tests.
Okay, it isn't that. Okay, so then why is this worked? I guess I guess this shouldn't be It definitely shouldn't be make params then. I think I think that's fine because this only breaks on prototypes. This doesn't like this doesn't happen anywhere else.
So then maybe maybe in here somewhere I'm like forgetting something.
Type name params.
We do a thing there.
Is there something I'm like missing?
Oh my god. What am I doing here?
What the [ __ ] Um, okay. Okay, I'm getting really confused now.
Like this should just be one to one. We just don't make a body.
And then declaration versus definition.
Yeah, like this should be fine.
It seems like it's fine at the top here at least, right? Wait, wait a second.
I think this is probably fine. This should be fine. Um, okay. So then why is this breaking?
What happens if we just return one here?
Okay. So, it's still like going crazy for some reason.
So, it's not even related to that. I think it's What the [ __ ] Is there something I'm like forgetting to clear?
Like what is there? Like what state am I forgetting about?
This might be a make params thing actually. Right. Is there another test I can look at?
Like what the wait okay so if we okay let's let's not mutate this test more let's just write like we'll do that we can do that int use fu or R.
Save that.
Instead of that, let's just give it WTF.C.
Or wait, what?
Oh, duh.
Okay, so now let's get rid of that.
Let's look at this. Okay, so I think it is just related to prototype then.
So just to be clear, if we get rid of this and then we rerun this, this works perfectly fine.
So it has to do with the prototype.
So why the I think it's keeping the parameters in the buffer for some reason.
All right. So then if we make this like return zero does this break as well doesn't so it is exclusively prototype that is breaking that I think Wait. Okay. Wait. I think I have an idea. Wait. Make params. Yeah, we make an allocate here. Um, that modifies instructions.
Okay, this makes complete sense now actually. So, okay, let me let me draw this out. Um, I'm very glad I figured it out. So, let's see. Where's paint on?
Okay, I could just use epic pen to scribble, but that's a little less interesting. So we have a program here.
Let's represent like this or like I don't know we'll make it smaller. It's like int fu. So this is a prototype and then we have int bar and some sort of body here. So what happened was ideally these are not really supposed to share state beyond like saving functions. The problem is between them I reuse a function that processes the parameters.
Um and the problem here is that function which is make params it does in fact modify state. So it modifies scope bindings which is fine because we've accounted for that. Um so like in uh when we visit function definition we make a new scope bindings and then at the end of that we pop it off or yeah we do it down here and then we also do that when visiting prototype. So that's all fine. The problem is the other thing that this function does uh which is yeah up yeah up here it modifies instructions.
So we necessarily push instructions onto our instructions buffer um after we make a function. That's not a problem because we just like we have this giant instructions buffer um that's fine because that gets stored in the memory representation for this.
But when we're doing a uh when we're processing the parameters inside of a prototype that buffer doesn't go anywhere. So this just lives here for some reason now. Or the the stuff for that is like load or allocate and then uh and then store.
So those just live in here for some reason. Uh because we don't clear it. So we need to do something about that.
Um yeah, I would like to reuse state here.
Um we could we could do some interesting stuff here.
Um, yeah, we could give it a flag, which is like we could give it a flag and then have it change behavior based on that, but that seems kind of clunky as well. I don't really like that. I don't like passing flags to functions generally.
Um, so what we could do is we could just separate this logic out actually.
Yeah. So we just do this and then we could we could just do another pass over it in the function thing.
Okay. Let's close out of this stuff real quick so we can get full a full screen here.
Uh, so we just want to nuke this pretty much, I think.
Yeah, we kind of just want to nuke all of this.
Uh, we care about res. Yeah, all we care about there is resz.
So, that doesn't change any of that.
But, so now we want to go back down to here.
So we make params and then for auto param in params.
We'll figure out the substance of that in a second.
Um what's wrong here?
So we have pram type and pram name. I guess we need to keep that in some capacity.
H. Okay, I kind of understand why I did it the way I did now. Um H yeah, okay, that makes a lot of sense.
So these are just values now though is the annoying thing.
So, we're missing pram name now in both of these.
Um, unless we want to like iterate over it twice. That's a little bit annoying.
Um, we might just want to make a flag then and call it a day.
Unfortunately, I think that's probably just the path of least resistance.
So, we want uh let's see what do we call this?
Um um alternatively we could just throw away the computation.
I guess we could instructions clear, I think. And that might also just work. It feels a little bit awkward. It feels a little bit slow, but it's probably fine.
Yeah, this is probably just the easiest way to do it if we're avoiding like optimal.
So, this should fix everything. Now, I keep doing make build. So, if we do that now and then we look at this, that's still broken. Wait a second.
Ah, that's not that's not supposed to happen.
So, we do that now. Okay, there we go.
Perfect.
Uh okay.
So now if we do test regression generate regression tests.
Um yeah let's wait for that. We can get rid of these now.
That's such a funny change or a funny thing we forgot about statewise.
That should fix up a couple more tests and we should be good.
Doesn't do anything on function prototype. Exactly. Um, yeah, I just forgot to clean up in like some intermediate state on it. So that's that's fixed now hopefully.
Okay, this list feels much smaller again. This is good. This is very good.
So we just have control flow things to fix now.
Um, do I want to tackle this today? I don't really want to tackle this today.
I probably should though.
Yeah, this is all just control flow now.
But it's all like very minute changes, so it's like probably fine.
And like as long as there's no like major bugs happening here, I think it's all good.
Um, yeah, like these are all just like small reorderings for the most part.
Yeah. Okay. I would like to clean this up, but I don't care a lot about it, so I think it's probably fine. Um, do you work on this off stream? I do not at all. Um, all the time I spend on stream is all the time I spend on this.
Sometimes I do stuff off stream, but nowadays it's very rare.
And even if it's off stream, it's all like very small things. So yeah.
Okay. So we want not that, not that. We want that.
Clear pram instruction buffer after prototype.
There we go.
picture last night that okay the funny thing is that uh with that is every time I get a CI/CD fail I get an email from GitHub. So that is just from the email.
So I clicked on it because I was curious and uh we figured out we figured out exactly what caused that uh caused that run to fail.
So yeah, that was that was pretty funny.
Um, okay.
So now, do I want to even tackle this?
This feels like a lot of work.
This This does seem like just a lot of work.
Um, I think this is mostly fine.
Um, yeah.
I guess this is kind of just default handling. Anyway, I guess we should we should rename it as such.
So, we should live. It lives here. I think this is probably fine.
or I guess yeah, we'll just we'll just comment as such just to be simple with it.
Um, this is fine.
Yeah, this closes the block. That's fine.
What happens if we just have an empty function? Actually, I guess we're not we're not letting that happen. So, this is probably fine, though.
Okay. Um, do we want to deal with this reordering thing? I'm down to not do this actually or this misde pile cuz like this is just like a small block reordering, right?
Like I really don't care enough about it. I think it's fine.
Although I am curious about this top thing.
this fib test um expected. Let's go to fib 0 mir.
What did this change from? What are blocks 28 and Oh, I see. They're down here. Okay.
Wow.
So it does just this pile.
So this is just kind of the same. Like it's it's literally fine. We just ordered the blocks differently.
Yeah, maybe I should just make the print order like a traversal instead of just like storage order. I think storage order causes a lot of headache like this.
Um, I guess there are some small differences though. Maybe I don't think it really matters too much in the big picture of things.
Like as long as the logic is correct, it's fine.
It might be shorter in some instances even like I guess maybe not. But yeah, like this is this is fine. You just move things around.
I'm I'm comfortable saying that this is still correct at least.
So, let's just commit some stuff.
Okay. This um handle remaining basic block stuff update. Or actually, we should just we could probably just commit this.
So now test regression generate regression tests make test.
This should all just be fine. This should all pass unless we have some silly thing happening.
Uh, many red is slow. So, this is fine.
Give it a second.
Cool.
Okay.
So that's all good. Now we can to-do which are the what are the ones skipping? Um I have like some of the tests rely on like custom uh custom pass input. So we have like this passes file that lists like what passes get run on a very specific case.
Um all tests run on O and 01. We don't have O2 or 03 yet. But there's also this like this like S thing, which is I guess that like custom I guess custom passes. I guess I called it like select passes, which is like really stupid. But yeah, the ones skipping are just the ones that don't have these like specific passes, I guess.
Okay, let's let's do the cleanup now.
Let's let's do this damn cleanup.
Um yeah. So let's do make allocate with type.
This is star.
This is that we don't need those anymore.
Yeah, we can do this now. Make install All right. And then we can do test regression generate regression tests.
Again, I want to see these like uh I guess granular changes in tests because I think that's pretty cool. So, we're going to do it like that.
Okay, that's that's fine.
Did that change anything? That didn't change anything. Am I insane?
This should fail tests.
Maybe we just have to rebuild. I don't know. The install script is causing other problems obviously. So yeah.
We love Cmate. We We freaking love Cmate.
Who am I kidding? We hate CMake.
Okay, there we go. Um, that is actually crashing a test somewhere surprisingly.
What the [ __ ] Okay, that's that's interesting.
Why is that different?
Why is that psychulting now? What the hell? Wait, that doesn't make any sense.
That like absolutely should not be psyching. Oh, wait. I know why it's psyching. Duh. We still need to make the store, I think.
Yeah, we we still need the store obviously. So obviously that's going to site fault. Uh that's not what I wanted to do.
Okay, so we can do that. We need that.
We just do that now.
Okay, so this is more paradigmatic I think.
Okay.
Still sack paltting. Um.
Huh.
Make install. We're just going to keep re reinstalling it.
There we go. Okay, first try.
Uh this way we can like commit tests at the same time or changes to tests at the same time and then it's like really cool.
Uh then we can see the changes as they happen as we clean this up.
Oh yeah. What the hell?
Why is that suck faulting now?
What are we serious?
This is This is ridiculous.
What the [ __ ] Okay. Um, is there like an all buffer we need to clear now? Like, is that what's happening?
Oh my god, there is an all buffer that we need to clear now.
God damn it. What am I doing with my life? Why Why do I keep doing this? Why do I keep making the same problem for myself?
Um, okay. This lives in here.
Yeah.
That should work. This better work. If it doesn't work, I will be very upset.
Come on now. There we go. Okay.
Okay, so these are just like small reorderings, which is like fine.
I don't think that substantively changes a lot of speed.
Yeah, like this is just a small reordering. I think it's fine.
Maybe we shouldn't actually.
We're going to We're going to do it.
We're just going to use it.
Um yeah. So, we're just going to use this in where where does this live?
up here. Yeah. Make params.
Okay.
So, next change.
Oh, man.
So, we have five to-dos. This one we actually care about, I think.
Um, reorder is like clean up stuff, I believe, is what I told myself.
So this should be make allocate and this should actually be fine.
This should like actually be safe.
Guess we don't need that anymore.
Um, do we even care about using this allocate anywhere other than just red allocate now?
I guess not. That's perfect.
Um, okay. So, we can just reorder it like this now, I think.
Yeah. So, we do that.
Um, yeah. Okay. This sequencing makes sense to me.
Yeah, this looks fine. This looks fine.
That's all clean up.
Um yeah. Okay.
So, let's reinstall it again.
Regenerate tests.
Give it a second.
It's taking a second.
Okay.
Uh, let's diff the thing again just because I'm curious.
Um, yeah, that's just that just changes the order a little bit. That's fine.
That's that's perfectly fine.
Okay. So what did we change?
Use make allocate in function definition.
Okay. So that cleans up our code a little bit.
And then there is one more to-do which is very big.
um is this thing this stupid thing.
So I think we are good to just delete all of this and then uncomment that. Uncomment that.
Uncomment that.
Uncomment all of that.
And then we should be good.
And then this will change the test again. but not by a lot. This is just an ordering thing.
Yeah, I I've been fighting this for a while, but I think I think I have finally won. I'm fairly sure I have finally won.
Um, yeah, this should this should be good. This should be very good. I'm very excited.
We couldn't get like full test parody, but I think this is as good as we were going to get. So then from here, like it's just clean up uh code cleanup and then making the new tests fit our format properly.
Yeah.
So, we'll let this we'll let this run.
Hopefully, it finishes in the next 3 seconds.
That was a little ambitious.
We'll keep waiting.
We'll keep being patient. We'll keep biting our time.
Are slowly taking away time. That's like Yeah. Okay.
Let's do this again.
Yeah. So we just like we just change the order of evaluation here and there.
Okay.
Uh revert parody changes for binary op.
Okay. So now we can actually like clean this up. I think I think there's a way we can clean this up. I don't know if there is a good way, but I think there is a way.
Um, we did stuff at the top there.
Uh, huh.
Huh.
Um.
Do we use putter type anywhere?
I guess not.
Oh, okay.
Yeah. Okay.
So then uh Yeah. Okay. This makes this makes enough sense to me.
Yeah. Okay. So, then we can we could probably move this up somewhere as well, just to be like cleaner.
or more consistent.
Yeah. So, now we can just like clean the rest of this up as we see fit.
Uh oh, wait. We can't do that. Um this is fine.
Okay. So we we have right, we have left.
Um yeah. So this is fine. This is very standard.
Oh, wait. Maybe evaluation order does actually matter here.
Oh, wait. Hold up. Hold up. That might matter.
Um, okay. Let's Let's see. How do we want to do this?
H I don't know. We'll see like that is annoying. This is really annoying that it does matter in some way.
Um yeah.
So we can do left prev.
We'll just we'll buffer it like this. I think and I think this will let us simplify things a little bit, right? And then this if we reorder like this, I think this is safe.
I guess not. We should probably not do that.
Okay. So, we'll figure this out as we go. Uh, what's up, Turing? Um, how do you start these projects? Um, you kind I don't know. I I don't have a great answer for this. You kind of just got to do it. You just got to like you got to jump in and just try to make something.
Um, don't be scared if it sucks because it will always start up being terrible, but you'll make it better. You'll make better stuff as you make more things.
Um, yeah, there's like I remember reading this like quote somewhere which is like the master has failed more times than the novice has tried or something like that. I think that at least guides a lot of my motivation. Um, and like it it might feel a lot like you don't have a lot of time, but like just setting aside a little bit of time every day lets you get consistent and just like sort of build up to something larger.
Yeah, I don't know if I answered everything, but hopefully that was a little bit useful.
Um, okay, let's see. So, this is fine.
So, we just do left and right.
So, we have load for left. right is necessarily this.
Um, oh, we need to Oh, that's really annoying.
Okay, we need to No, I I don't deserve a lot there. I can't lie.
Um, okay. We're just going to We're going to do it like this.
I think this evaluation order stuff necessarily mattered.
Um, can we just get reset soft head till the one?
Okay, so all that's still staged.
we can update tests and then we can see if that changes anything.
Um yeah, so this is kind of just like clean up in a way as well.
Um yeah, okay, this makes sense to me.
So then we want uh we can do that.
So that we just load from the putter and then we can do that.
Yeah. Okay.
Um, yeah. Okay. The rest of this looks fine to me at least.
Yeah. And then this is very funny at least.
Um so we don't care about we don't care about computing a lot of stuff here I think right this is just assignment so we don't care about left that much I think yeah we don't care that much about it Um, yeah. So, we can do this. That also lets us like decouple prev expert stuff as well, which is probably good.
Yeah. So, that is a putter to the temporary. So, this is probably fine.
Um, yeah. Okay.
Right. Wait, hold up.
I think this is correct. I'm fairly sure this is correct. Um, yeah. Okay.
Oh, man. Okay.
So then we want this again.
We can just simplify it like that even and then let's see what this changes.
And hopefully everything is fine.
Um, actually, let's Okay, here's what we're going to do. We're going to recommit this.
We're going to push and then we can re-revert that.
And then we can test regression generate regression tests. That might change some things. If it changes things, then we can make a comparison.
Um, yeah, it'll be it'll be really cool if it just like undoes the changes actually.
I think I've like written it in a way such that it does just undo the changes, which is really funny. Um, if it does undo the changes, then we are in a very good spot. If it doesn't, then like that's also fine.
Okay. So then add test.
Okay. It just undo it undo the changes.
That's so funny. Okay. That actually makes me very very happy.
Um yeah. Yeah. So we can just recommit with the same error binary op but then rewrite it to be clean and unrevert them.
Get push force. We're just going to force push. Call it a day. Okay.
So make test. This should all run. It fails one test. That's not good. If it's the test that has just always been failing, then I care a lot less about it.
Yeah, it is just the one test that has always been failing. That's That's fine.
We'll we'll worry about it later.
Whatever.
If we rerun it again, I'm pretty sure it'll be fine as well.
Uh while we're at it, let's see if we can just get this merged at least.
Okay. Um, panic.
Oh man.
So we start or we write front end to use new coding or new style or modify.
That's fine.
Flatten the history. Nah.
Or at least I I rebase. But we're just we're just force pushing over the old commit and call it a day.
Um, let's see.
Wow.
Okay, so we did that stuff.
Um, and then we nuked HR.
We just go from KC to MI now.
Um, yeah, that look that looks fine.
And let's rerun the tests just just for fun.
Yeah. Okay. It's just going to keep failing that. That's fine.
I'm not sure why that fails. We'll worry about it some other time. And I think I think this should just work as well is the funny thing.
Yeah. So, this fails the format check as well, which is really annoying. This should not fail. I might just like ah that irritates me to no end.
What?
What claim format is this?
Like are we serious?
Like this isn't here.
This is what line.
Yeah, it's saying this formatting is wrong. But obviously when I format it, it changes it to that. So like what am I meant to do here?
We'll just Oh my god, that irritates me so much.
Why the [ __ ] I shouldn't do that.
Okay, let's let's see if it passes the other check. At least if this passes, we're good and we can just commit at least cuz I'm lazy.
One of them has pseudo pre-install while the other doesn't. What the hell?
Yeah, that is that's so cooked.
Wow. Yeah, that that really sucks. Holy [ __ ] Wow.
Um, also what clang format.
What version is this? 22.
No tests were found.
Are you serious?
Oh, did I?
Oh, I see. So, I need to I need to fix this real quick.
Oh, man. That's so annoying.
Oh, yeah. That's also something I need to add real quick to the thing.
Um, cm make hell install enable file etc. Why?
Oh, maybe I need maybe I do need to do it in this order then.
What do you mean?
What do you mean that didn't?
Are we insane?
Uh non-coding person here is compiler job. Um no it is it is just software. Um I'm looking for a I guess compiler engineer role is like the more accurate form of the title but wow I didn't want the title to be that much longer. So compiler role it is. Um, compiler is in the software, not as in the not as in like someone that compiles things.
Um, yeah, apologies on that.
Um, h yeah, this is annoying. This is really annoying.
This does not run the tests.
What does it do for build? This doesn't install, right? It doesn't look like it installs.
Uh, maybe this will work.
Why is this taking so long? Uh, do you have VPS for testing or you doing it locally? Um, I'm just using a GitHub runner. Um, I should probably set up something like more elaborate, but it works fine enough. And I'm just using like GEST uh for like local testing.
It's all just like it's all just like automating some basic tests. So it's not like anything particularly fancy, but like it'd be cool at least.
I'm not sure why this is struggling.
Oh man. Okay, there we go.
We made progress.
This will take forever to run.
So we can see test.
Why doesn't this used to work?
This used to have like actual testing or actual automation, but I changed something so it broke.
We changed a lot of things actually and a lot of things broke. So I guess that makes sense. Uh can you hypothetically compile things fully manually? Um yeah.
I mean like in some sense that's kind of what we already do when we like write um when we write code, right? Like we're we're compiling from like our abstract ideas down to like a language. But even just like writing assembly or like translating C code by hand um you could consider that as compiling.
Isn't that how the first compiler was made? Yes. Yes. Exactly.
Uh okay. It has to be this.
Oh, this is this is what broke. Okay.
All right. So then why is this borked? This should be fine.
This should be perfectly fine.
C test not finding tests.
Um, this doesn't wait what that a This is what we changed.
Are we what?
Let's just make build instead of installing and then let's see if that works cuz this should theoretically work at least.
Why is this so slow? Oh my god, this is actually like pissing me off a little now.
Like, are we are we kidding me?
Please.
Okay. So now C test.
Wait. What?
H.
Oh, we don't even need that anymore.
Yeah. Why? Why did this break? When did this break?
Did we change?
We didn't change anything really here.
Maybe we changed Ah, no, we didn't change anything.
Why is Why doesn't that work then?
Like this doesn't change anything.
Unless that was like trying to install or we can ignore that hell. That's like its own misery.
Yeah, I don't use C test, but I guess this stuff does for some reason.
Build is fine.
No, it was definitely fine before I feel like because I remember seeing a bunch of really slow output, which would mean that it necessarily works. So, if we go to like our old pull requests, close. Let's go to like back here.
If we look at the run for this uh checks, there we are.
Yeah, like we had a bunch of output here. So, it was definitely working at some point.
I don't know why it stopped working.
Does does it make sense why this is like so confusing now?
I wonder if it has something to do with like the install stuff actually.
What happens if we use release actually?
So let's let's see uh GitHub Ubuntu latest Is there non YubUbuntu that exists?
No.
Great.
H. Is there a better way to do this that doesn't I think there might be a claim format version difference that's going wrong here.
Yeah, we'll worry about that in a second. For now, this is the bigger concern.
Okay. Um, so let's look let's compare it to like what we have in here.
So what happens if we change the build type then?
What happens if we dash J32 here as well? Just for fun.
Yeah, let's do let's do that. Let's be evil.
Um, yeah. I'm not sure. I'm not sure what's happening here at least with C test.
Okay. So, I think we just got to fix C test then.
What's in this testing directory? It's just temporary.
Okay.
I'm I'm curious if J32 will do anything.
So, we'll we'll see. But um H.
Yeah. So, we add these things. That makes sense.
Right. Yeah. See, we make a library called middle end, right? Like this should just work. This really should just work. I don't know why it doesn't just work.
Like we we did this. Maybe we need to do this before that as well.
Let's do this.
It's going to hang again. Oh, okay. It didn't hang. Let's go.
Um, make C test.
Still doesn't find any tests.
Uh, do you draw the profile picture yourself? No. Um, I just I took a goose.
Yeah, I didn't I didn't do any drawing.
Wait, what?
Wait, this should be fine. We should just look in build.
What do you mean no tests were found, though? That's really strange.
Okay, let's uh Okay, let's let's keep looking.
Oh, what the hell?
Okay, wait. Sorry. I'll I'll rehat in a second.
Uh, set wrap.
So, we have include this.
Oh god. Yeah. So, these should exist.
So, why isn't it working?
This This literally does exist here, right? Am I going insane?
Oh god.
Oh man.
Little test regression regression tests.
Yeah. So, this runs. This literally runs.
So, why isn't it being picked up?
Anyway, um what's the goal of the current build? Um, I'm making a compiler from C to x8664 and I'm trying to recreate a lot of like LVM's existing infrastructure. Uh, why don't use Linux? I'm using WSL right now, so I'm working in like a Fedora environment, but I'm just too lazy to dual boot and I play Valor, so I kind of want Windows around. Um, yeah, my laptop is running Arch, but I'm obviously not going to stream off of that if given the choice.
Yeah. So, why isn't this finding it?
Okay. So, there we go. So, we just have to change that. Same from day one. Um, I had a couple of like I took a tangent somewhere in the first week or two for like uh to work on like LVM's kaleidoscope tutorial, but for the most part, it's been focused on this project.
Okay. So, do we just need to change the C test directory then? I think I think that's what we need to change then.
Workflows testing.
Um, can we just CD build and then do that? Is this a thing we can do?
Or wait, let's change this real quick.
Uh, C or fix C test.
Let's see if that works.
I hope this works.
It's going to fail the damn formatter again. Obviously, it's really irritating, but it's fine.
Although, why is it taking so long?
Okay, there we go.
All right, we'll we'll wait for paint to dry. Use lazy git. Um I prefer command line.
Yeah, I like tried using some form of git in neoim and I just I don't know. I just couldn't get used to it. Command line is portable. Command line will always be there for me.
So I I may as well just stick to it.
Are we serious?
You ever work with ML? Um, I'm going to um hopefully I will be taking a class in the fall where I get to mess around with it. Um, but I have not up to this point.
No.
Um, okay. Okay. Why is this failing then? What what directory does this live in?
Where is this building?
Cake build.
Oh, wait. That should just work.
Right.
Am I stupid or like this? Should work.
So, or wait, what? What the f?
Wait, I'm so lost.
So that is the working directory. So we've what the [ __ ] This should just work.
Let's see. um choosing a single main OS and studying cyber. Um I don't know. It's I feel like that's more just like personal preference at that point. Um Arch has been fun because I like the customizability, but like I think Fedora is perfectly fine.
Um there's like that one very specific Dro that like everyone says is like the hacker Dro. I don't remember what it was called though.
Um, it's called Yeah, Kali. That one.
Uh, what's up, Siki?
Um, apologies if I mispronounce your name. Uh, you'll make it. I appreciate it a lot. Thank you.
Uh, do I need to do this then?
It's in 3.9, so we can just do this.
Right.
This should just This is so annoying.
So, why doesn't test work?
Or how do we Is it worth the effort?
Let's see. Is there a better CMake with C test? Okay, this might be closer to what I'm looking for.
Okay. So, this doesn't help me because it doesn't tell me what went wrong.
Okay. So, Huh.
What if we just rewrite this?
This should be fine.
Unless maybe I want to move this to the other directory.
Uh okay, that's all running. So now C test.
Oh.
Um.
Oh, okay. So, we're just we're just running it in the current directory, which obviously isn't going to work.
Um, okay. Wait.
See you. Test. Test. Dur.
Okay, there we go.
Do we just need to like change the That's so annoying.
So, let's go back to workflows.
We have this.
I think J32 worked. Ironically, it looked like it was fine, which is really funny.
Uh we we'll look at that again closer later.
Um what if we just do uh what did we do again? dash tester.
And then we can just yink that or just push.
Sorry. We're going to force push like a like a good student.
Hopefully this works so I don't have to babysit this even longer.
This is This is getting a little old. I don't know. Just Just a hunch. This is getting a little bit old.
Okay, it looks like dash J32 did not in fact do a lot. That's very unfortunate.
I guess it doesn't hurt to have though, so we may as well keep it on.
Also, I have a blue Jolly Rancher here.
I don't want to eat it on stream because that would be annoying.
Well, what's what's Ys's like Jolly Rancher flavor ranking?
Do we do we like blue? Do we think watermelon is the worst flavor? Okay, it works now. Wait, let's go.
That's quite fast actually.
Red on top. That is respectable. Um like cherry red, not like watermelon red.
Um, okay. That worked. Perfect.
God damn it, I hate C test.
Um, is there something we can clean up with here?
Maybe we could edit this workflow file install or install claim format. H I don't know. I don't care enough about this. Can we like rewrite this to not do this? This is like really annoying me.
We'll just I don't know. We'll just ready for review. Ranking for Gushers.
It's been It's been so long since I've had Gushers, so I don't I don't actually have a good opinion on them.
Uh, is this all we needed here? I think I think this is good.
Right. Is there anything else?
I don't think so.
Okay, we'll just rebase the merge and call it a day.
Yippee.
Okay, that's that's a lot of commits, but they are all there now. I'm going to get another email about this Chud thing failing, and it's going to be great. Um, yeah, we'll we'll worry about that later.
Um, yeah, I think that's a pretty good place to call today's stream, though.
Um, next time we're going to continue the big rewrite. Um, if we look at our list of objectives, all of this is done now. So, this is all we need to do. I think this we figured out already. So, we don't worry about this.
Um, what was I doing here?
Yeah, we don't care about this. We've fixed all that.
Okay. So, this is this is our like stack of stuff that we're working on. All of this is in a goal to get DREF generating and then implementing arrays.
Um, yeah. So, we're going to pop this off the stack.
Um, and clear our buffer by accident, so we have to redelete it.
Um, yeah. So, we can do this now.
Um, yeah, I think that's all we need. Uh, do you understand hardware as deep as you do software? Um, I need to learn more about hardware. So, I'm going to say I don't understand it enough and I would like to learn more.
Um, yeah, this is this is what we're gonna continue doing next time. I think this was a good start, though. Um, anyways, thank you all so much for showing up today. Like the stream if you haven't, sub if you haven't. Um, join the Discord. It's linked in the description. It's the best place to get pinged when I go live, and stay up to date with the rest of the community.
Everyone there is really chill. Um, I guess my GitHub sponsors is also down there if you want to give me money and my socials are there if you want to add me on anything. Um, yeah, that's about it. Take care y'all. Take it easy and I will see you all tomorrow.
Related Videos
Agentforce NOW AMA: Build with React and Salesforce Multi-Framework
SalesforceDevs
490 views•2026-05-28
How agent o11y differs from traditional o11y — Phil Hetzel, Braintrust
aiDotEngineer
450 views•2026-05-28
Re: 🗣️📍theprophedu📍2026 GST 103 CLASS (E-EXAM REVISION)
theprophedu
636 views•2026-06-04
WEB TECHNOLOGIES UNIT-2 | Degree 4th sem BCOM Computers web technologies unit-2 full explanation💯✅
LearnwithSahera
1K views•2026-05-29
More tests are always better? How to use AI to identify tests that bring little value
Alliance4Qualification
335 views•2026-05-29
Search Algorithms Explained in 60 Seconds! 🤖💨
samarthtuliofficial
218 views•2026-06-01
People of Game of Thrones using JavaScript DOM
AltCampus
296 views•2026-05-30
Instagram accounts got PWNed
EricParker
13K views•2026-06-03











