CppCast - Job Hunting and Optimizing Compilers with Jamie Pendergast

Episode Date: February 23, 2026

Jason is joined this week by Jamie Pendergast to discuss the current job market, learning to program, and optimizing compilers. Designated Initializers, the best feature of C++20 · Mathieu R...opert Support for C++26 Reflection has been merged into GCC trunk! : r/cpp Latest News From Upcoming C++ Conferences (2026-01-14) : r/cpp Call for Papers - NDC TechTown 2026 | Software Conference for Embedded and Systems Programming Cyrex Optimizing Compiler

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome to the 404th episode of CPPCast, the first podcast for C++ developers by C++ developers. I'm your host, Jason Turner. There was some chance that this episode would never be found, but I have decided to restart CPPCast. I am the sole host at the moment. I might be open to talking to a co-host if anyone's interested in that. The format will stay the same for those of you who are a fan of CBPCast, although I'm sure the editing and such will come across little different than it has in the past because this will be the first time I'm editing. I am planning for a once a month cadence. So this will be every fourth week will be a CBP cast episode
Starting point is 00:00:40 that's going to overlap with C++ Weekly. So every fourth week, expect that on C++ Weekly's YouTube channel, you'll see a CBP Cast episode. But you can also listen to CBPcast on your favorite broadcasting platform, assuming I do all that correctly. This week, or this month, I am joined by Jamie Pandergast. Hello. Nice to meet you. Did I pronounce your name correctly? Yeah, if everyone gets it wrong, you go to write that time. Oh, interesting. Okay.
Starting point is 00:01:10 Jamie is a 23-year-old hobbyist C-Bless Plus developer who enjoys building fun, niche, and creative projects. He has recently taken an interest in compiler theory and development for the sake of fun and learning something new and challenging, despite having a diverse set of skills in plenty of areas, such as backend development, video game development, development and web development, he has been unable to land a job in any technical field. We'll talk more about the job situation throughout the podcast, I expect here. So welcome, Jamie. Thank you.
Starting point is 00:01:41 I am, I'm glad I pronounced your name correctly on the first try. Now I'm curious, how do people get it wrong? They say, like, Pintagas, Prendagas is one of them. Prendegas. are like similar sort of sounding names that people associate with it. So someone says, Prendigas, it's Pendigast.
Starting point is 00:02:03 And they always say, oh, well, what's a funny name? Where's that from? So I have to go along with that whole, you know, or it's an Irish name. So, yeah, it's one of those foreign names
Starting point is 00:02:13 that people don't understand. So, yeah. I, well, I don't know. It seemed pretty straightforward to me. So, uh, anyhow. All right, we've got, um, some news items to discuss. This is, since I'm going to be doing a once a month cadence,
Starting point is 00:02:32 again, for the sake of the listeners here, I'll let you know that the news isn't going to be quite up to the minute as it was when it was Rob and I who were hosting CBP cast, but this is kind of news that you may have missed this month, perhaps. So the first article that we have here is an article from Mathieu Ropère, who Atou is a longtime friend of the podcast. He was on a couple of times way back in the day, I think. Matthew has this article, designated initializers, the best feature of C++20.
Starting point is 00:03:04 And you said you did have the chance to read this article, Jamie. I did read it, yeah. Do you have any opinions here? Is this the best feature of C++? I can't say it's the best feature. I think the best feature set, really, is Constexper. I think the Concepsper support in Seablus was 20.
Starting point is 00:03:22 It's pushed him much forward than it was in CBO's 17. But I do think it's really important with designated initialises, especially just for people who don't have IDs, just get to see what the parameters are, you know, without guessing really. We should have to guess what the parameters are. One of the nice plans I've let's do, especially for RackNet, in particular,
Starting point is 00:03:48 is the send method on the RACPear interface has got a billion parameters. Without a IDE, or preferably, in my case, a struct, like saying Ruck send info with all the parameters there, and it has fields, making pretty much boil down what is without any, you know, unintended errors. Right. Designation initializes, yeah, it makes it a lot easier to understand.
Starting point is 00:04:20 Yeah, and that's what Mattu here is talking about using designations. using structs as function parameters so that you can use designated initializers to basically get named parameters. Yeah. Yeah. And I think I do. I agree personally. Designated initializers are great, but I've always been frustrated by the fact that you can't require the use of designated initializers. However, I just learned that Klingtidy recently added a new check where it was. will require the use of designated initializers when directly initializing a struct. And so that might be going on my list of best practices right there. I'm only using clang tied in clang format and they're an absolute godsend.
Starting point is 00:05:10 They can do, it's just so much things ever, like it catches some sorts of things. Yeah. If I get to use no discard or, you know, I do make this static instead or, you know, I can make it constatic. it lets me know and it really helps the on certain situations. Nice. Passing the poll requests with a very pedantic
Starting point is 00:05:31 reviewers. This just came up recently, I think with my user group for listeners, I host a C-VLS Plus users group in the Denver area. If you happen to live here, come to my users group. Anyhow. Sometimes claim tidy can be really, really slow. And some of my members
Starting point is 00:05:52 pointed out to me that it's the identifier checks in clang tidy that can be really slow so that's that's interesting anyhow there are ways just so you know if clang tidy is slowing down your workflow there are ways to profile it profile and think they can figure out anyhow whatever random rants about things okay so reflection has been merged into gCCC So I think this counts as the first compiler to officially support reflection from C++-26 is GCC now. Who can be surprised? GCC is always the first and coming at the newest feature, aren't they? I do think it's more, yeah.
Starting point is 00:06:38 I'm agreeing, yeah. Yeah. Have you played with reflection at all? I don't know. It's difficult for me since I'm on Windows and I have to belong on MN-D-W. And that's always all day. So, you know, I'm 23 for me. Okay.
Starting point is 00:06:56 So, 26, just yet. Yeah. You could use the free versions of Visual Studio community, but it definitely does not have reflection yet. So that's not going to help you. Yeah. They're always going to stay behind Microsoft here. Yeah.
Starting point is 00:07:12 Well, that's good news, anyhow. First one where you don't have to have a special fork of the compiler or something. And then the last thing that, we have here is this Reddit thread that is the I guess biweekly update or something like that on upcoming C++ conferences. I noticed after I sent this to you that there is a now more up to date one that was just released like yesterday. But the news is still basically the same. And I just want our listeners to be aware. Cbus plus no. 2026 has its call for speakers open. ADCX India has their a 2026 call for speakers open.
Starting point is 00:07:53 I haven't been to India before. And the CBPCon Academy is asking for instructors to submit proposals, and that is still open. But I don't know if that'll still be open by the time this episode goes live. So maybe we shouldn't have mentioned that. I don't know. But if you're not a speaker or not interested in speaking, it's also just an overview of the conferences that are coming up. Yeah. So it does mention here, ACCCU on ACCCU.
Starting point is 00:08:20 on C, which has been merged with C++, C++ on C plus, C plus on C and ACCU have been merged together. They are June 15th through the 20th. Tickets available. And I was just talking to you off air about the fact that these conferences always won volunteers. And it's free to get into a conference if you volunteer. And anyone can be a volunteer. I highly recommend volunteering at conferences. It's not just, it'd have to be a speaker to be volunteer.
Starting point is 00:08:49 as I thought I'd be a speaker to be a volunteer. Now, if you're a speaker, you're far too concerned about when your talk is coming up to have the presence of mind to be a volunteer. Let's see, we've got also Toronto, in D.C. Toronto is coming up soon. That's May. That's May 5th through the 8th, yes. I also just want to take a moment for you and for anyone else listening. something that I've learned, because I've now across CBP cast episodes, I've interviewed nearly 300 people. And what I've learned is that everyone has a unique experience.
Starting point is 00:09:31 And this is also just a note for, if you're listening to this and you're interested in coming on CBP cast, give me a shout out. Whether or not you think you have something interesting to share, you probably do because everyone's work experience has been different. everyone's experience with C++ and programming has been different. You always have something to share that is unique to your experience. And grant, I guess, or something like that. Okay, so let's go ahead and actually get started on the interview portion of this. You put it right out there in your bio that you've had very little luck finding a job lately. So I'm just kind of curious, what has your job search experience been like?
Starting point is 00:10:11 What is the market like right now for? Well, unfortunately, it's not that optimal for young developers who don't have much experience professionally. I found that it's been a bit of a chicken in the next situation applying for these entry-level jobs. You need about five years of experience to even consider applying really because the demands are so high. You need to have experience and things that have just been released with a lot.
Starting point is 00:10:40 like the cob in fiasco you need to expect about five years of experience and when the language I just came on you know right it's really difficult well yeah to say four years of experience for an entry-level job that's yeah yeah and um I don't think employees are really eager to train new people or to consider like you know take on the risk of a new person then they'd rather just take what the old companies used to have. People used to have old companies, well, take them so employ new
Starting point is 00:11:15 people. Less risk. They already have provenably shown that they know what they're runable. But with a new person, you don't have that proof. Right. Have you had any, has anyone said anything to you?
Starting point is 00:11:30 Like, oh, I mean, I sometimes I hear rumors that like, oh, we don't need entry level developers anymore because we have AI, basically. No, that's that. It's not a lot of this one thing. What's that? It's really disheartening to hear, though.
Starting point is 00:11:45 So have you ever heard that directly at all is what I'm curious? No, I haven't heard it. Okay, well, that's good, because maybe they're just made up things that I've heard, yeah. All right. So you have found job openings, but you just haven't been able to get any, get past that initial screening, basically, right? I've applied for about 100 programming jobs, and I've only had two emails back. and their rejections
Starting point is 00:12:10 fuddly. Well, strangely, what I have had is like scan WhatsApp messages and spam emails. Because a lot of these top listings, they're not even real, they're just, you know, they have to get your data, really have to be on the lookout for that.
Starting point is 00:12:26 Well, that's terrible. And you shared a story on LinkedIn about a, you were denied for a job, and then they said, oh, maybe we want you for a different role. but that got lost in your inbox or something? Yeah, yeah. I applied for a retail job.
Starting point is 00:12:44 They said it did really well. They said, right, you're really happy with the score that you got. Unfortunately, we had to select somebody else because they do slightly better than you. But we will contact you again if there is under the position that you might be suitable for. And a week later, you know, after hundreds of spam emails, I got a email saying, oh, we'd like to interview you for a role. all that are the post office of all things in the in the retail store. Please reply back with this reference number and I'm like you know I've used this email
Starting point is 00:13:20 address to apply for so many jobs and I'm getting all these spam emails from all these like fake job sites and like you know I even got a Nigerian a Nigerian prince of all things in my emails I thought they'd all died up but apparently not. I've heard of the Nigerian job scam before. That's a new one. Yeah, yeah. And I got one of these Chinese, like, task scams. Yeah, what's that message or one of your family gets?
Starting point is 00:13:52 What's that messages? And saying, you can earn 50 USDT or C by cryptocurrency. Oh. Or, like, liking or reviewing certain things on Google Maps or, you know, anything really, just to boost the ratings. so you can get paid. Cryptocurrency for doing these simple tasks.
Starting point is 00:14:12 First of all, I don't understand how that's worth $50 an hour or $50 a task. Secondly, as you go into it a bit more, I've also online,
Starting point is 00:14:22 there's a guy called Jim Browning, one of my favorite YouTube was Jim Browning. He doesn't always like these scams. And he covered it and it basically said,
Starting point is 00:14:32 right, it's, do it. He recommends to do it, actually, he recommends to do the task because you do get paid but
Starting point is 00:14:39 quit immediately because you're not having to pay to do the tasks and it's not guarantee that you can complete them in time. So it says do them but you know immediately quit because they will try to rob you. Okay. It was interesting, you know,
Starting point is 00:14:55 of all things. Well, that sounds terrible. Yeah, it was interesting. Yeah. Trouble. Okay, so since our listeners who might be interested in hiring you would be curious. I'm just curious if you have any formal training, diploma,
Starting point is 00:15:10 anything that you would like to mention? Well, unfortunately, for me, I wasn't able to complete college, so I wasn't able to get into university. But I did complete training by a certain training provider called North Code, which is, I say rather well known in the UK.
Starting point is 00:15:26 I went to their data engineering course, and they took me quite a lot. Initially, I thought, you know, I'll only do this, I can prove that I can do the job so employees will consider me. But no, I learned quite a lot, you know, I'm quite impressed, but there's how much to taught me. JavaScript, SQL, you know,
Starting point is 00:15:46 there was a good portion of, like, collaborative coding. We were onto teams. We learned Bozo Control, AWS, Terrible, and stuff that I'd never been able to do before, or have we considered doing. You know, I've always wanted to get into systems all programming, so that's, you know, C++, C, you know, video games, anything really like that.
Starting point is 00:16:08 know, my sort of interests. But being on that course showing me that there's more to code than just what you're interested in initially. Whatever time when it has been quite a good bit of fun, really. It's quite a fun, you know, Donald's Strip is very relaxed. It's very, like, zen. Right. That's not how to describe it.
Starting point is 00:16:26 As long as it appears to work, it's good. Just keep diving. Definitely, yeah. Well, of course, it didn't quite work out on this. So they need to have type script as a patcher of a dog's script. but I did loads things there like making HTTP servers Restful servers
Starting point is 00:16:42 you know model view controller things things I've never needed to do before in game development because you know you don't really have that sort of interaction between data and games it's very immediate in game development
Starting point is 00:16:56 you use access to end indirectly or go through a certain success you know I use a rapper that wraps over a wrapper providing a certain ways of access the data But yeah, it was excellent. Unfortunately, the job board that I was guaranteed access to,
Starting point is 00:17:15 all the jobs were in Birmingham, in London, in Manchester, ages away from where I live in Harrogate. And that's not a big tech area. It's more of a traditional, you know, where wealthy people retire sort of area. Yeah. Yeah. So that didn't go over. well. But you know what? I think it's worth it in the end because I learned all these new skills,
Starting point is 00:17:42 working with people, learning new things. Yeah, and I'm very happy to have done that. It reminds me of when I was in university, I had the opportunity to take a database course, and I said, I'm never going to use a database. I want to be like a C-Boss Plus program. I never going to use data. In the course of my career, I've used something like 12 different SQL variants. Well, it's a lot of... You like, name a database engine.
Starting point is 00:18:10 I've had a reason to professionally use it. And I never had any interest in that whatsoever. So yeah, those skills never will never go to waste. So that's good. So you're looking for mostly a remote job then, it sounds like, perhaps?
Starting point is 00:18:25 Yeah, in the beginning, because of course, I do hope so low to drive, but I can't afford a car or a driving license right now. Right. So my hope is I'll get a job, I'll learn off to drive, I'll buy a second-hand car for about 100 quid, maybe there's 200 quid,
Starting point is 00:18:42 cheap as far as I can find, you know. A shoebox and something else if it counts. You know, maybe it'll be able to drive that. Just so I can get a bit more at this to the job market than just being in the immediate area. All right, well, let's tell the listeners about the kind of projects you've been working on then. I'm curious, how did you first get interested in C-Boss, Blas.
Starting point is 00:19:03 Oh, that's a good question. Well, I'll begin with unity. Okay. We've all played with unity when we're, you know, maybe even now, especially when I was younger. And I wanted to make a, like, a Minecraft sort of gaming C++. I saw Hobson's video. I remember Hobson's video specifically,
Starting point is 00:19:26 you know, Minecraft in one week video. I was really impressed by that. I don't know that one. In fact, no. might have one of my time frame on there. I remember being 16 in high school, and I was watching Biscuits videos, and you know Biscuits? Yeah, yeah, yeah.
Starting point is 00:19:41 Yeah, I remember being absolutely dazzled by is like any assimilated videos, is doom engine videos, like just like, well, what I was wondering, I thought of typing all by hand, like, like, rapid typing all the way. Oh, yeah.
Starting point is 00:19:56 Yeah. No, I remember being really impressed by that. I was like, okay, this language looked amazing. I'll try it out. And I did, I couldn't really, I couldn't get into it. It was too, to advance my 16-year-old brain. But yeah, I wanted to make a game, and I saw Matthew Hobson video, and that really got me interested.
Starting point is 00:20:15 I was like, okay, it doesn't seem that bad now. No, there's not just rapid coding, you know. All these labels, my own pictures, I've got no ideas, templates, context, but all the rest of them. I had no idea about all that. I watched videos, and I asked my mother if I could have a, C. Bus Plus Plus book. Uh-huh.
Starting point is 00:20:34 Thursday and I ended up getting Lake Salains Lanes, Jump into C-Bus Plus and that. Do you know the one, like the water? I don't know that one. I'm now going to look it up. Jump into C-plus. That's the one. Jumping into C-plus.
Starting point is 00:20:47 Jumping into C-plus. No, I don't know that book. How was it? He recommended on his discosur. I remember him saying that. Oh, okay. Don't go on to the base because it taught code looks as an I-G, an IDE.
Starting point is 00:21:00 It's okay. And it covered like really basic things but C-Bustforce, you know, functions, pointers. Pointers, I cannot understand pointers, I'm sure many people understand that both being C-O-C-BOSP pointers, how does it work, what are they exactly? But I ended up on the Sun to get eventually.
Starting point is 00:21:19 The book covered, you know, basic, you know, header files, source files, and there was a bit of a linked list projection there as well. I found it really quite fun. And what was covered that, I asked my mum for, um, the Bjarn's book. Yeah.
Starting point is 00:21:34 Lonnie's book, there's a few of us bringing with language book. And I, you know, I wish for making another one of them because it was absolutely amazing. Yeah,
Starting point is 00:21:41 that's a couple years out of date now. Yeah. It's been a long time. Yeah. Did you actually go through the whole book by, I'm curious? I don't remember from it through all of it because there's so much,
Starting point is 00:21:52 but it's just passes off. So much. Honestly. And, yeah, I could be a lot of it. I'd love to be. I can remember all the top of me.
Starting point is 00:22:02 It's like 1,200 pages or whatever. Yeah, no. I'm sure you don't, you can't remember all of it. No, I, yeah, I enjoyed that. And I remember immediately getting into OpenGEL. I wanted to make my own sort of Minecraft game. And it did, and it didn't work. I had fun making it. Yeah, it was all good fun.
Starting point is 00:22:25 I knew a bit of OpenGL from when I was at school. so like when I was in school I was a bit of a naughty boy and they sent me into I get this isolation room and I'm in an isolation room yeah in an isolation room
Starting point is 00:22:40 yeah basically prison cell was okay because at least I had a laptop a laptop there was Java and that meant I could download up
Starting point is 00:22:53 you know LWJGL and make a little look around cameras seeing you know basic three you know, I enjoy, but, you know, how sorts of me are, for a few days or so when I was in an order boy's room. So you, you, you taught basically taught yourself open GL programming in Java while in detention?
Starting point is 00:23:12 Pretty much, yeah. Okay. Yeah. As you do, you know, just. As one does, yeah, of course, yeah. Yeah. Yeah. So, I mean, I really want to talk about the C++ projects you're working on, but maybe jumping ahead a little bit, since you've already mentioned,
Starting point is 00:23:28 Minecraft a couple times. It sounds like you're starting on a new Minecraft project, like right now? Did I catch that right? Yeah. Yeah. That's one of these projects, these big ideas of mine
Starting point is 00:23:41 for a game. I'm probably never going to be able to finish it, but the idea is what drives and not if you can fix it or not, get it done or not. And it's like, like, a match in Minecraft, but like,
Starting point is 00:23:54 well, ace of speeds, but a bit different, say. So, like, there was just one Mineshuff mini game. I remember playing when I was really, what, 20 years, 10 years ago, called Turf Wars. And this game was really cool. Like, you know, half of the map was red,
Starting point is 00:24:12 and the other half was blue. You were on red or blue, and if you kill someone in the game, you know, there was a red turf expands if you're red, you might lose some, you know, if you're killed. And I found that kind of really interesting. That game kind of really interesting. and it made it really quite dynamic.
Starting point is 00:24:30 And I'd want to be something quite similar to that in, like, you know, my own sort of game. Because obviously, my isn't built for, like, first-person shooters. It's just the, you know, sores and bows, isn't it? So I wanted something like that. And I tried, I couldn't do it, tried again. But I'm very determined. I really wanted to get it done.
Starting point is 00:24:51 Even if it had been five-time making the same mistake, I still wanted it done. Maybe we need a bit of maturity on that, I think. I ended up making in C-shop and the reason I chose C-shop is because I found I was getting you know
Starting point is 00:25:05 myself into footguns doing things the wrong way that I have no way of knowing how to do otherwise so I don't know everything about C-plus-plus I want to try a different language for a change you know why don't try C-shop and one of the benefits of that was I could make a
Starting point is 00:25:23 window system really really easily So I know when angels like Unity, you've got this big window and you've got the inspector, you've got the scene view and all the other things, the scene, the nose and all that. And that was really easy to implement using reflection in C-Sharp. Right. Yeah, in my map editor. So I ended up doing that.
Starting point is 00:25:46 And I did it in direct text for a change. You know, why don't do new things? Right. Learned new ways to do anything. It's really good for you. and then I ends up adding a C-shop ID-A to it
Starting point is 00:25:59 it's really bad it's really just a skin tiller like a window that you can just run code from but it does a job that will automatically scan the code and pick out certain things
Starting point is 00:26:10 if you make it like a tool class in the C-Shton window it will automatically detect the button in the actual end of a bit like a unit team okay one of the genera user interface I have fun with that
Starting point is 00:26:23 yeah And I've tried doing this sort of thing before and I failed, but I did end up making a C++-plus voxel shooter. Okay. But without being in a team, I find it hard for me to stay consistent in code quality, because sometimes I just want to coach for work. Oh, yeah. Yeah, yeah. Well, we all know with that. It's like, you know, just, hop it together, you know, in the space.
Starting point is 00:26:47 Yeah. It's a recommendation I often give to people who are, like, in your situation, who are, you know, actively. looking for a job and they're still, you know, well, we're all still learning, so it's silly to say still learning, but whatever. It's like on your GitHub, open a branch, work on the branch, make a pool request, review your own, you're a team of one, I don't care, review your own pool request, merge your pool request, right? Like, still pretend like you're working on a team so that you have that muscle memory, if you will, like when you actually do get on a team. And I still, I try to maintain that discipline myself because I haven't worked with other programmers in a long time.
Starting point is 00:27:29 Yeah. Okay, so when you say like a Minecraft engine, I want to make sure I'm clear, I understand. I know there are two official Minecraft engines. But when you say a Minecraft engine, do you mean like a Minecraft style Vauxhall-based engine? Or do you mean something that actually talks to the Minecraft protocol? Oh, no. just a boxel engine Voxel game engine
Starting point is 00:27:55 I see I see Yeah well I was able to like really good optimizations into this engine because I thought I only got a bit of SIMD And that's from working on a compiler You know I've looked into assembly And SIMD was there So I thought okay well how do we use this in C shop
Starting point is 00:28:08 And I was able to reduce Well Reduce the The The Sorry improve the speed of the meshner rate By 16 times By putting the
Starting point is 00:28:21 an entire robot voxel later into a SIMD register and because SIMD registers are my machine 60 bytes wide I was able to process all this at once and that went from about 800 microseconds on debug mo to about 200 really well Wow So even better
Starting point is 00:28:41 Does C-sharp provide the intrinsics for that Are you like writing inline assemblies? Yes, I actually it does I never knew this but it does Okay So you tell you that you want to use a SIMD instruction or a SIMD data type and it does the right thing. Yeah.
Starting point is 00:28:56 It's not like C++ where it's like underscore underscore M. Right. It's just like it's like SIMD dot interleave bits signed. You know, it really straightforward. I think C++ 26 officially merged support for SIMD data types in C plus plus. So you don't have to do the underscore. Endrinsic nonsense. But I...
Starting point is 00:29:19 Why is it called underscore M underscore? What my underscore SIMD? You know, why underscore M? What does underscore M mean? Oh, they, well, I mean, they're doing that to let you know that it's a compiler extension. All right. And it's outside of the standard, basically. So you're, you know that you're taking your life in your own hands, basically, had that.
Starting point is 00:29:41 On the same to work, yeah. Yeah. Yeah, we're not technically supposed to touch any of the stuff that has double underscores in it, unless our compiler vendor tells us that we're allowed to, basically. Ah, I see. On the topic of SIMD and such, you're working on an optimizing compiler. I am, yeah.
Starting point is 00:29:59 It's nothing like Clang or GTC or, you know, anyone, you know, worth anything to see what's the compiler, you know, it's just a fun property project. It's really just, you know, something new, really. Just something different to challenge me.
Starting point is 00:30:15 They're not not the same thing or a different way, but something completely different. And I've had a lot of thought. doing that really you know it I ended up making a people optimiser for it after figuring out an intermediate representation and all the rest and getting a decent parser and I was I was fascinated by like these like seemingly cascading optimizations of assembly code you know you change out of a morph rax zero to an x-or racks you know and that leads for another optimization way where you know where something is zero so you can eliminate code
Starting point is 00:30:50 and that end up eliminating an entire jump instruction, that could end up moving the labels around and causing even more effects. It's fantastic. It's like a dynamite. I'd call that sort of optimisation, peat optimization. And the current thing I'm working on that right now, along the same one of the other, testing it test drivenly, is control rough.
Starting point is 00:31:13 You know, there's so many things you can do with live and analysis that it can't do just pure, pure, into pure IOR. You need to break into blocks and process ins and outs and make sure variables are alive. Otherwise, like in my compiler, everything goes on the Slack about it, unfortunately. Yes, I'm looking into that really complicated stuff.
Starting point is 00:31:36 And, you know, I wish there was a different way of doing academia where it's not seemingly gate kept by people who are not in academia. Do you understand what I mean? You know, like we got the most obtuse language for the most simple thing and it you know there should surely be you know another appendage saying right this what this means in plain english as much as like in a technical way is but you know seemingly getting the point you know i think a very long time ago and i think this has probably been deleted now so it doesn't really help our
Starting point is 00:32:10 listeners but i believe my cousin um did a video on her youtube channel really long time ago that was how to read academic papers but I'm pretty sure it's been deleted now. So I don't even know why I bothered mentioning it. But there are people who are concerned about the same kind of thing. I also know that there are people who will take a link to an academic paper and they'll give it to chat GBT and ask it to summarize the paper for them. That's hard because you can't always trust chat CBT.
Starting point is 00:32:41 No, you can't, but it might give you a... Maybe it'll point you in a new direction. That's how I think of chat GBT. It points me in a direction that I didn't know I should be looking at my life. So you might be using TadDBT to do some coding. You're not going to work. You know, this is not going to work. You're not going to be able.
Starting point is 00:33:01 Here's the picture result. It was, you caught me out here. You caught me out. I was playing a game. Yeah. It doesn't quite work. You have to really push and prod it, you know, into a bit of brainpower to figure out what to do.
Starting point is 00:33:19 you just vibe coo and you can't do it because you understand the codes. No. So at least they end up with the most, you know, ridiculous, luggy game there have always. There was a Twitter game. It was like five FPS and what your vibe code is. Well, my price was like, five FPS. You shouldn't be doing that. It should be at least 30.
Starting point is 00:33:39 I'm curious about more of the details of your language. So, like, what, like, how, what do you have right now? Do you have the parser, the lexer, the compiler? Like, what is the language? which like, start me at the top. What does the code look like? And let's go down layer by layer. Yeah.
Starting point is 00:33:54 So it initially began as a C compiler. Okay. After wrestling with C's drama, which is really ambiguous, the size of okay, rather than having the type begin either a function or a identical or a variable, so I'll have a function keyword, obviously.
Starting point is 00:34:15 So a bit more than int maybe function main. Okay, it looks like, okay. well, where do we put the types? And it turns out the easiest place to put it is at the end of the line, right inside. So I know that every new language does this, but it really is really good. So be functioned main.
Starting point is 00:34:35 And I'm like, okay, well, you know, my type names are purely for types. How do I describe, you know, if I'm making a variable, or simple, for all const. So be function main, left-rent, right-resist. or const, X, you know, int, who knows? And then obviously the int with the end of the function.
Starting point is 00:34:56 Yeah, so a more simple C, it's definitely not going to be obviously standard, it's definitely not going to be as practical thing. I'm not amazing as I know a compiler of the theory, but I already know what I'm doing really off the time. That's a way to learn.
Starting point is 00:35:13 I enjoy making it and then programs work. Yeah, and one of the things I've added to it is a more expressive way of doing things. So, you know, I think C, sort of, could be made a bit more pythonic. Like, that's my last of my language is turning God. It'd be like C, or a bit more of a Python flavour to it. Okay.
Starting point is 00:35:35 You could initially, you could make if an expression, you can make wider than expression, and they can be doable, you know, rather than having, like, you know and C when you want to make a one-line if statement. you have to well should be doing putting curly braces around it because otherwise if you'd least it you could cause an error
Starting point is 00:35:54 right so rather than that I'd be like if X, then Y and else Zed and that would be your if expression and the reason for us doing a single line
Starting point is 00:36:07 so I'd be like if X then you know whatever Y there is probably a function call there and a statement probably you know just a bit more concise A bit more easy to pass, really, for me. Okay. Yeah.
Starting point is 00:36:21 It's basically really simple thing. That's not really poorly. I don't know why it really. Do you have to do explicit returns or if everything is an expression, is it one of the languages that just implies that the last statement is the return value from that expression? No, there's definitely a return statement. Yeah. Okay. Yeah.
Starting point is 00:36:37 All right. So you've got a parser that works, I assume. Yeah. And then are you building like an AST from that? they are. Yeah. And different to how I used to do it, where I'd have this AST node class somewhere
Starting point is 00:36:56 and all the nodes would inherit from me. So I've often to do in it. What compile I'm taking. And that is by having it all as a variant. And so I would have my top level things like functions and parameters and with a module, AST, you know, as a variant. I'd have a statement as a variant. That'll be if statement, well statement, return statement,
Starting point is 00:37:23 or other statements, another one of the sun. And then another variant for expressions. And then I'd make a variant of all them. So that'd be made it. Medita would be a variant of top statements and expression. The beat of that is I can put everything into into construct. I don't need to have these really awkward, like, forward declarations because then I need to be a visitor pattern for compiling things.
Starting point is 00:37:46 things, it's really straightforward, I think. And also, really good for errors, because if you'd not implement the correct visitor, it will not compile. They'll say, you've got to implement this visitation bit. So it's really healthy, aren't there? Really good. And it also separates the logic of what we want to do for the ASD from the ASD
Starting point is 00:38:08 because I don't need a visitor methods. There's new methods in the ASC, it's just purely data. Right. What I do, either, is functions that I use the visitor fast and made just do SDD visit and then you make the structure overload and every other sorts to make sure it works yeah and it's really good um yeah about that's a really good improvement i think i've made over i've been a class everywhere and four declarations yeah so to be clear you are writing this in c plus plus i am yeah and so when you say variant you do
Starting point is 00:38:37 actually mean the standard library variant that's right yeah okay cool yeah i was um just playing with that I mean, one of my languages is similar to what you just described. I've also done both roads. I've done the inheritance hierarchy, and I've done the variant of things. And I think I prefer the variant of things. But then every single time I go to do that again, I find myself going, wait a minute, this expression needs to be able to have sub-expressions, and I kind of would like to have it, like, not require, you know, like, okay, it's going to have something.
Starting point is 00:39:11 And then I'm like, oh, wait, how do you? Oh, right, no, that's right. I have to have effectively a vector of expressions for the sub-expressions because you have to, you know, you can't at compile time, say an expression contains an expression. There's no way to do that. Yeah. But an expression can contain a pointer to an expression. So that works. And that always, that frustrates me just a little bit.
Starting point is 00:39:37 Like, I really wish that I could somehow just define a recursive data structure in C++. But that's... Unfortunately, it's impossible. We always think it's impossible. You know, it's the same for like... We always at 77 plus 33, we equal 100, but it's just not. A bit of a funny example there. Yeah.
Starting point is 00:39:57 I just say, like, you know, using PTR equals unique pointer of AST and there's either way, you know, it works. It's okay. Yeah. Yeah. Okay. So then you... then you you then actually compile it from there.
Starting point is 00:40:14 Yeah, yeah. Okay. Do you have like a multi-phase kind of thing? Like, how do you, how do you? I've never written an optimizing compiler, just for the record. I've never written a compiler. I've written a few interpreters. Never written a compiler.
Starting point is 00:40:26 It's really fun. It's a big, simple one. The next, you know, people for $206. It's just brilliant things. It's a bear baby in the time. It's really fun to see there's knocked down like Tetris sort of level of accumulation, but you get the one there, it goes bang there, you know, fores arm bang, just amazing.
Starting point is 00:40:45 Nice. You mean build structure? For how I build the project, how do you, how do the compiler goals, the source code? Oh, I don't know, whatever you want to talk about, I guess. I was just kind of thinking, like, how do you, how do you, like, you were omitting assembly and then you pass that off to, like, Ganoos assembler, no? Oh, yes. they compile them eventually
Starting point is 00:41:09 it's assembly that you know that Mazum assembly because at last I think Nazan's the best one of them you know we got Mazum
Starting point is 00:41:15 they all have these like quirks about them right and I don't like AT&T syntax most people don't no yeah
Starting point is 00:41:23 just just sign all the signs just syntax everywhere that doesn't need to be there yeah I like Nazim it's open source I think it's not some open source
Starting point is 00:41:32 yeah yeah I think it is yeah yeah you know so if if if I want it to I could even and patronizing into a compiler as like a submodule and I'm just
Starting point is 00:41:40 probably called the fortune. It does the thing, you know, really simple. Okay, so then you are targeting 64 bit, right? I just bought the compiler. No, sorry, go ahead. Oh, sorry, yeah, the compiler isn't specific to make 64 because it's like, I can get back ends. So are you relying on someone else's linker? Have you written your own linker as well to actually make an execute about this thing?
Starting point is 00:41:59 I just use LD. Okay, I mean, I mean, I mean, you just like, you may as well add a kernel on to it at that point if you've already implemented. Hopefully. Yeah, that'd be quite cool. So you have, it's an optimizing compiler. I assume you have like, and you said people optimizations. I assume you have like optimization passes.
Starting point is 00:42:20 Do you like, and this is something that's, I've always found fascinating too. How do you decide when you're done optimizing? Do you just like literally keep going until nothing changes anymore? Yes, that's precisely how it works. Absolutely. Okay. I don't think. I don't think.
Starting point is 00:42:33 I thought too much on about, oh, yeah, it's all you do. and just, you know, dual changed. You know, if you detect this, like, silly pattern, like, you know, test, racks, racks, you know, set L, compare AL, compare AL, Zerene and that's all. Then you do that, you know. And you remove something, you change something, change equals true, continue, back to the sort of loop, does this thing.
Starting point is 00:42:55 Yeah, over and over again. Returns, if there was a change, yeah. While, while optimise, do nothing, basically. Right. Yeah. And you never try to do more than one change. per pass, it sounds like you just exit as soon as you have a change and can then start over
Starting point is 00:43:09 again? Well, how I would do it is, I want this wild loop where I was saying, you know, wild optimize, while people underscore pass really, I do an awe with their, like, remove regent labels.
Starting point is 00:43:25 Okay. So basically, it's just, like, a mix of the two, juggling really. Okay, juggling. Yeah, just basically juggling. I'm hardly an expert in in pilot theory. I just want to I'm certainly not. I've gotten the impression that like GCC and Kling don't do the just keep running until you no longer find a change because that program scale that would just take like like if you try to do that to Chrome
Starting point is 00:43:54 it would take too long basically so but I don't know I don't know I've just gotten the impression that that's that they don't do it that way but I mean that's how I would do it Just keep running. Why not? I've, you know, it's a small thing. So what kind of programs can you have you actually written with your compiler now? Or can you write? We're the bare-bones ones. Because the C-A-BI is really simple, especially for Windows,
Starting point is 00:44:19 you just put it all into, you know, R-CX, R-C-R-8, R9, you know, the rest was... I'll look at it. I'll look at the registers that way when you want to put the parameters in. I was able to, like, do funny things like Put-S and Put-Chaw. I wasn't able to get more further than that because of all the, you know, register exhortions because I wasn't able to figure out of allocation just yet at that time. But once I get to doing Smuddy Analysis and, you know, maximum analysis, I can get to doing that, you know, allocator smart,
Starting point is 00:44:50 you know, deallocation when I don't need it, them. But I don't need to the variable, when I don't need the register anymore. Okay. Yeah, that's what, again, not an expert by far on any of those. But my understanding is that claim, LLVM's IRM's IRR basically has an infinite number of registers or something like that, and then they
Starting point is 00:45:10 start doing register allocation when they actually lower it to assembly or something. Yeah, but that's why I do it at my one, yeah, we just have these values. Okay. We have like, you know, V1 equals load, V2 equals, you know, less than
Starting point is 00:45:24 X, sorry, less than one, three, you know, probably in two, so even someone on me, you know, it makes new values over time. So, I suppose, I suppose it's kind of like single static single static assignment, but I haven't got a far, you know, the
Starting point is 00:45:40 function that determined whether it's A or B based on what brandy talk, you know, I haven't got that just yet. It sounds interesting, they've got, just not yet. So are you, like, have you like basing any of this off of, like, a book? I know there's, like, the compiler book with the dragon on it that everyone loves, whatever, like, or are you just, like, 100% just, like, self-taug on this or what?
Starting point is 00:46:02 Very easy to produce. Okay. YouTube videos. They're very difficult for you. And, you know, seeing all the Zun and Clang, you know, I can do it there,
Starting point is 00:46:11 you know, yeah, it's odd. There's a lot to me. You know, these people who write in pilots, they have a massive brain, you know.
Starting point is 00:46:18 It's ridiculously sized brain. Because it's really hard. It's fun of them. It's really, really helengin. And just for the record, I'd like to state, also for you,
Starting point is 00:46:30 but also for the rest of the listeners, everything that you've just said about your process, of building a compiler would totally make a fun conference presentation you could absolutely do a conference presentation on that just for the record and it's a great way of getting your name out there when you're looking for jobs yeah all right you want to get a bit more you know functional and unusable and doesn't just put everything on the second for about 10 registers or 10 variables or so it doesn't
Starting point is 00:46:57 matter you know how much code is presented at conferences that would fall down if it was given Come on. Do you have a... Well, I guess another question that I've always had is like, how do you know that your optimizations are correct? Good question. Do you have a test? I've recently run into because I ended off...
Starting point is 00:47:22 Sorry, a little bit of a bit of a time, but I'll get back to it immediately. Sure. It's that my semantic analyzer... Is it that... The code that converts the I ought to basically... blocks. It entered almost working in that it told me how many, um, there is, link them all together. And unfortunately, the, the point is really valid. So, you know, the basic block may, may not, well, sorry, according to the compiler, the basic block may have
Starting point is 00:47:54 for a million billion different inputs and a million, million different outputs, because the point is wrong. Okay. I need to, right there's a test for that. So I'm, I'm, I'm, I'm halfway redoing that in a different branch right now. But, you know, I also call the code. It's like really good thing because you know, like the old code. Now, when I get around us to redoing the optimizer, I will definitely be using tests. You know, test and searching machine code,
Starting point is 00:48:21 being sure that that's definitely going to compile on correctly and causing side effects. Really, though, the way that I did it was just, I like Bolling it, suppose. Just been looking at the assembly, reading the assembly, reading it's sending it and just saying, okay, well, we don't need to do this,
Starting point is 00:48:33 can just replace it with that, you know, really simple, some things allow. They would not pass production radar. You know, a clangor, he's a little level of sound like. It does a job. Right. Yeah. You do have some sort of a test suite, though, it sounds like. Working on it, yeah.
Starting point is 00:48:49 Yeah. Yeah. I do find working on parsers having a test suite is very valuable because it's so easy to accidentally break part of the parse. Yeah, if you're not careful. Yeah. I mean, we're getting pretty close to the hour here anyhow. Do you also have mentioned that you're working on a voxel-based game engine that you can, like, customize for people?
Starting point is 00:49:10 And how's that going? I haven't pushed it in about two weeks. Okay. And that's because I think Seashaw makes it very easy to do the wrong things. Like, you can... Yeah, it's easy. It's easy. It's the wrong thing.
Starting point is 00:49:24 I'll be code with me in Visual Studio. Like, okay, make this into a class? Yeah, why not? Make it into a class? Make it into a record? Yeah, make it into a record. Why not Visual Studio? Oh, you're just taking us exception.
Starting point is 00:49:36 It's recommendations, you're saying. It'll recommend you do these things. I'm assuming Maddof knows how to cook better to shop than me. It just ends up making a mess. It's not the end of the war. It's hard to fix this, but it works. Yeah. That's kind of funny.
Starting point is 00:49:52 Have you had any customers by any chance? I'm just curious. Oh, no, certainly not. I mean, I've sent it to a few friends on Discord, one, and they finally buy four, you know, right? It's all right. It certainly not yet. Yeah.
Starting point is 00:50:02 I just immediately... I'm sorry, go ahead. Sorry, I was going to say I'm working with a few friends on a Minecraft server the past week or so. Half compiler of the server. So, remember my own server code and C++ Plus working in a team.
Starting point is 00:50:18 Okay. This one guy is in very pedantic. I love the guy, really, really small guy. And he's very good antique. You must be making sure that the code's absolutely correct. You're using no discords, no, don't even don't put const in the head of file. Did you know that?
Starting point is 00:50:36 I didn't know that. I'm sure you do know. Don't put const in the parameters list and the head of all that makes a difference. I didn't know that. I knew that, but I also disagree with the people who say to not do that personally.
Starting point is 00:50:48 Yeah, so I'm hoping that once we get the upper-growing, what we're understanding of the net programming, the UDP, how long-craft does it? Because obviously, we're copying their protocol. So if I can figure that all, with my team, I can work on this other program this also thing in games
Starting point is 00:51:04 which now no I'm doing really well yeah okay so this is where my confusion earlier when I asked you about Minecraft game I was thinking of the Minecraft
Starting point is 00:51:15 server that you had mentioned too yeah I see so now in this case are you actually copying the Minecraft protocol or are you just again making a Minecraft style thing well we're making a micro bedrock server
Starting point is 00:51:28 so we're making sure as close as the better protocol as they possibly can. Oh, neat. Yeah. Well, that sounds like a great experience. It is, yeah. You get to look at a team. You get to, you know,
Starting point is 00:51:42 understand team dynamic. You see you look up, which will make sure you write some best codes. It's all very fun. Yeah. Is this also open source, GitHub collaborator, you kind of think? Okay.
Starting point is 00:51:51 You definitely need to make sure you send me links to all these projects so that I can share them in the show notes. Is there anything else that you would like to talk about before we wrap up? I don't think so, no. Okay. Well, thank you very much. Jamie. It was great having you on. And I hope you have some luck looking for a job. And like I said, be sure to check out those conferences that are out there.
Starting point is 00:52:15 Thank you very much. They've looked to be here.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.