CppCast - Job Hunting and Optimizing Compilers with Jamie Pendergast
Episode Date: February 23, 2026Jason 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)
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
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.
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.
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.
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
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,
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.
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.
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,
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.
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.
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
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
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.
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.
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.
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.
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.
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.
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.
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?
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.
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
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?
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.
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
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.
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.
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
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?
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.
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,
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,
right,
it's,
do it.
He recommends to do it,
actually,
he recommends to do the task
because you do
get paid but
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,
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,
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.
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,
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.
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.
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
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
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,
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,
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.
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?
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,
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.
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,
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.
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.
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.
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.
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.
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.
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.
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.
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,
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,
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.
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.
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
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
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?
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,
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
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,
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,
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.
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.
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
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
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.
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
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
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
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.
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.
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
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
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
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
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.
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...
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.
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.
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.
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
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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
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.
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.
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
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,
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.
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
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
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.
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.
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.
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.
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.
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.
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
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
they all have these
like quirks about them
right
and I don't like
AT&T syntax
most people don't
no
yeah
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
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
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?
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.
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.
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.
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
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.
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
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,
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,
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
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
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
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?
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,
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.
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,
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
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...
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
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,
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,
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.
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?
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.
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.
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.
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.
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.
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?
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.
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
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
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
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,
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.
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.
Thank you very much. They've looked to be here.
