CppCast - Tease Your C++ Brain
Episode Date: November 19, 2024Anders Knatten joins Phil and Timur. Anders reminds us about cppquiz.org and tells to us about his new book, C++ Brain Teasers, how that relates to the site and why it's has good practical applicabili...ty. News New report by the US Cybersecurity and Infrastructure Security Agency (CISA) C++ Safe Buffers - a new Clang20 feature CppFront version 0.8 is out “Safe and efficient C++ interoperability via non-escapable types and lifetimes” - from the Swift Forums Links C++ Brain Teasers - Anders' new book C++ Quiz C++ Quiz repo and getting involved Submit your own C++ Quiz questions Modulo One - Anders' band IncludeOS - Episode #63 of CppCast
 Transcript
 Discussion  (0)
    
                                         Episode 394 of CppCast with guest Anders Knutten, recorded 8th of November 2024.
                                         
                                         In this episode, we talk about the latest CISA report on software safety,
                                         
                                         C++ safe buffers in Clang 20,
                                         
                                         and about C++ Swift Interop.
                                         
                                         Then we are joined by Anders Knotten.
                                         
                                         Anders talks to us about cppquiz.org and about his new book, C++ Brain Teasers.
                                         
                                         Welcome to episode 394 of CppCast, the first podcast for C++ developers by C++ developers.
                                         
                                         I'm your host, Timo Dummler, joined by my co-host, Phil Nash.
                                         
    
                                         Phil, how are you doing today?
                                         
                                         I'm all right, Timo.
                                         
                                         How are you doing?
                                         
                                         I'm all right.
                                         
                                         Yeah, there's a lot going on.
                                         
                                         Next week, I am going to Bristol, UK for the Audio Developer Conference,
                                         
                                         then to Berlin for Meeting C++,
                                         
                                         and then to Poland for the committee meeting.
                                         
    
                                         So busy preparing for all that right now.
                                         
                                         Also, we got snow here in Finland now,
                                         
                                         so winter has officially started.
                                         
                                         Yeah, what about you, Phil? What's new on your side um i can't remember if i mentioned it last time but i've sort of started a new role
                                         
                                         part-time developer advocate at undo or maybe familiar to many people who listen to the show
                                         
                                         oh those are the people with the time travel debugger right that's right yeah yeah so we'll
                                         
                                         probably have somebody from undo one again
                                         
                                         soon we've been talking about that for a while uh actually got some really interesting stuff going
                                         
    
                                         on at the moment and seeing it from the other side sort of makes me excited to want to start
                                         
                                         talking about it but so we'll put that off for now let somebody else do that talking so you're
                                         
                                         going to be doing that in parallel with your conference organizing stuff and your workshops
                                         
                                         and exactly and that's why it's part-time so i'm just doing a few days a month while i continue to be independent the rest of the time all right
                                         
                                         well i'm looking forward to uh things you come up with in that new role yes yeah me too all right
                                         
                                         so we'd like to hear your thoughts about the show uh you can always reach out to us on x
                                         
                                         mastodon linkedin or email us at feedback at cppcast.com. Joining us today is Anders Knatten.
                                         
                                         Anders started programming in Turbo Pascal in 1995
                                         
    
                                         and has been programming professionally in various languages since 2001.
                                         
                                         He is the author of the book C++ Brain Teasers
                                         
                                         and the websites cppquiz.org and blog.knatten.org.
                                         
                                         Anders has worked with everything from websites to CPU design,
                                         
                                         but his main focus these days is C++,
                                         
                                         which he also likes to speak about at conferences around the world.
                                         
                                         While not geeking out with computers,
                                         
                                         Anders likes to go to industrial music festivals
                                         
    
                                         and produce his own music as Modulo One.
                                         
                                         Anders, welcome to the show.
                                         
                                         Thank you very much.
                                         
                                         So Modulo One, obviously a bit of a programming pun there,
                                         
                                         but that's a band is it or
                                         
                                         yeah it's a yeah it's kind of a two-person band right doing all sorts of like industrial related
                                         
                                         music i would say interesting although presumably although two person when you apply modulo one
                                         
                                         there's only one left yeah that's uh left as an exercise to the audience so is it more
                                         
    
                                         like purely electronic industrial or is it more like industrial metal or like no it's an electronic
                                         
                                         one so like yeah ebm future pop dark electro industrial techno kind of stuff cool well that
                                         
                                         sounds great um i'd like to listen to that stuff yeah. It's basically just me trying to make whatever I like listening to.
                                         
                                         That's good.
                                         
                                         All right.
                                         
                                         So Anders, we'll get back to you in a few minutes.
                                         
                                         But first, we have a couple of news articles to talk about.
                                         
                                         So feel free to comment on any of these.
                                         
    
                                         Okay.
                                         
                                         So the first news item today is a new report by the U.S.
                                         
                                         Cyber Security and Infrastructure Security Agency, also known as CISA, about software security.
                                         
                                         It actually came out, I think, three or four weeks ago,
                                         
                                         but what made me aware of it was another article
                                         
                                         on the internet on the Newstack, which linked to that.
                                         
                                         And then I looked at the original report.
                                         
                                         So it is the strongest stance yet from the US government
                                         
    
                                         to call to abandon C and C++ or move from C and C++ to memory-safe languages like Rust.
                                         
                                         Yeah, kind of their calls are getting louder and stronger
                                         
                                         as time goes by.
                                         
                                         And so now they're basically saying that, you know,
                                         
                                         anyone who is like still writing in memory-unsafe languages
                                         
                                         or writing memory-unsafe code basically, unsafe code basically is negligent.
                                         
                                         I think I can interpret it as that.
                                         
                                         I can quote from the original report.
                                         
    
                                         It says, the development of new product lines for use and service of critical infrastructure
                                         
                                         in a memory unsafe language, as such a C or C++, where there are readily available alternative
                                         
                                         memory safe languages that could be used is dangerous and significantly elevates risk to national security, national economic
                                         
                                         security, and national public health and safety.
                                         
                                         For existing products that are written in memory-unsafe languages, not having a published
                                         
                                         memory safety roadmap by January 1st, 2026, which is just over a year from now, is dangerous
                                         
                                         and significantly elevates risk to national security, et cetera, et cetera.
                                         
                                         So the clock is ticking.
                                         
    
                                         They're saying basically either move away from C and C++ within a year or make your
                                         
                                         C and C++ somehow magically memory safe within a year or risk being labeled as negligent.
                                         
                                         That is a pretty strong stance there.
                                         
                                         So what do you think about that?
                                         
                                         I don't know if I'm looking at your notes here.
                                         
                                         I don't know if this is paraphrased or copied verbatim,
                                         
                                         but it says move away from C slash C++.
                                         
                                         That would be quite easy because that doesn't exist.
                                         
    
                                         So maybe that's the way out.
                                         
                                         So the quote in the notes is from the original report.
                                         
                                         So it says, for example, C or C++.
                                         
                                         So it's talking about memory unsafe languages in general.
                                         
                                         Right.
                                         
                                         The way I read the intro here, at least,
                                         
                                         on the webpage is more
                                         
                                         if you're doing Greenfield stuff,
                                         
    
                                         then maybe don't do C++,
                                         
                                         which is fine, I guess.
                                         
                                         And if you are doing C++, have a roadmap.
                                         
                                         And their roadmap doesn't have to
                                         
                                         be like, take all
                                         
                                         of Sean Baxter's work now.
                                         
                                         It could be like, set up sanitizers and fuzzers or
                                         
                                         whatever so yeah it's all a bit vague like yeah i think that the other article that we're gonna put
                                         
    
                                         a link to that in the notes as well says like maybe interprets it quite strictly they say like
                                         
                                         you're basically negligent if you're not doing this and you're gonna get sued or whatever and
                                         
                                         maybe that's not the only possible interpretation maybe that's not what the report actually says i
                                         
                                         have to admit i didn't read the whole thing i kind of just skimmed it i only read the intro as well
                                         
                                         so yeah yeah well they don't seem to be like introducing any hard regulation yet but i don't
                                         
                                         know maybe they do and i didn't see it in the report but yeah but each one seems
                                         
                                         to be getting stronger and stronger so maybe it's a rather true luxury although um i don't want to
                                         
                                         talk too much about this but uh mostly for the benefit of people coming back and listening to
                                         
    
                                         this in the future as we record this this week there has been a change in the government in the
                                         
                                         u.s so we're not going to talk about that. But I do wonder whether that may have some impact down the line.
                                         
                                         Maybe they'll take their eye off this.
                                         
                                         I don't know.
                                         
                                         Probably not.
                                         
                                         So the actual report came out in October 16th.
                                         
                                         So that was like three and a half weeks ago.
                                         
                                         So that was before the US election that happened this week.
                                         
    
                                         Yeah, it would take a while for that to have any impact, if any.
                                         
                                         But you never know.
                                         
                                         Right.
                                         
                                         So we're not going to talk about politics on the show.
                                         
                                         Definitely not.
                                         
                                         I'm sure we all have our thoughts on that, but let's leave them for later.
                                         
                                         Continuing on the topic of software safety,
                                         
                                         Clang 20 comes with a new feature, C++ Safe Buffers.
                                         
    
                                         So, yeah, that is meant to harden your C++ code against buffer overflows,
                                         
                                         which is one of the main sources
                                         
                                         of security vulnerabilities in C++ today.
                                         
                                         It's kind of a multi-pronged approach.
                                         
                                         It says, well, there's a bunch of prerequisites,
                                         
                                         so you have to use a libc++
                                         
                                         that was compiled with a hardening on.
                                         
                                         So there's a bunch of hardening modes.
                                         
    
                                         So you need to use at least the fast mode, libc++ that was compiled with a hardening on. So there's a bunch of hardening modes.
                                         
                                         So you need to use at least the fast mode,
                                         
                                         which enables the kind of buffer overflow hardening for like containers and like vectors and span and stuff.
                                         
                                         And you also need to compile a library built
                                         
                                         with this flag libcpp-abi-bounded-iterators,
                                         
                                         which I think kind of makes,
                                         
                                         it hardens iterators somehow.
                                         
                                         Haven't looked in detail into how that works,
                                         
    
                                         but yeah, it's another build mode or flag
                                         
                                         or something you can do now.
                                         
                                         And then when you do that,
                                         
                                         you can enable this new warning,
                                         
                                         minus W unsafe buffer usage.
                                         
                                         And that's going to fire
                                         
                                         whenever you perform any unsafe buffer operations on a raw pointer,
                                         
                                         which includes any kind of array indexing with square bracket, like indexing into any
                                         
    
                                         kind of like raw array that you got from a pointer, any form of pointer arithmetic,
                                         
                                         any bounce unsafe C functions like memcpy, et cetera, any unsafe smart pointer operations like indexing into
                                         
                                         a unique pointer or, I guess, get the rule pointer out or something like that, because
                                         
                                         they can't be made safe because of how the language works.
                                         
                                         So on all of those, you now get a compiler warning, which you can turn into an error
                                         
                                         if you want to be really hardcore about this.
                                         
                                         And in order to avoid that, what you need to do is you need to encapsulate any raw buffer usage,
                                         
                                         anything where you access data through a raw pointer that is like an array underneath.
                                         
    
                                         You have to encapsulate that into like a safe container or a safe view such as
                                         
                                         vector or span with the hardened mode on. Otherwise, the compiler is going to park it here.
                                         
                                         So that's the new feature.
                                         
                                         That sounds interesting.
                                         
                                         There's probably going to be a lot of code that's not going to compile
                                         
                                         when you turn that on.
                                         
                                         But another useful tool.
                                         
                                         And I think this is a good demonstration of this sort of many-pronged attack
                                         
    
                                         on the whole safety issue.
                                         
                                         As we mentioned last time, there's the two primary approaches.
                                         
                                         Do we fix up the language or do we introduce things
                                         
                                         that are going to make existing usage of the language safer?
                                         
                                         And that's not just the committee's responsibility,
                                         
                                         but tools can also give us useful tools like this to help.
                                         
                                         And it's one of a steady stream of such tools that are coming out.
                                         
                                         So it's worth keeping on top of what your compiler can do to help you.
                                         
    
                                         So I actually think this is kind of a bit similar,
                                         
                                         like what Rust does, but like safe and unsafe blocks,
                                         
                                         but obviously just for buffer overflow
                                         
                                         and not for any of the other kinds of UB.
                                         
                                         But I guess if you have a class that uses a raw buffer underneath,
                                         
                                         like you have your own container or your own smart pointer or whatever,
                                         
                                         some people do things like that.
                                         
                                         I guess you can just stare at that code long enough
                                         
    
                                         to convince yourself that it's fine
                                         
                                         and then basically disable the error just on that one.
                                         
                                         But then use that everywhere yeah and yeah
                                         
                                         you're supposed to i think you're supposed to really use the standard library containers and
                                         
                                         views in the hardened mode and not roll your own i guess that's kind of a part of the point that
                                         
                                         they're trying to make here yeah no matter what approach we take there's always going to be a
                                         
                                         point where we have to distrust something.
                                         
                                         It's like this part,
                                         
    
                                         we're just going to say this is fine.
                                         
                                         And this becomes the axioms that we can build everything else on.
                                         
                                         Right.
                                         
                                         So while,
                                         
                                         you know,
                                         
                                         the US government keeps warning us about using C and C++ and C and C++
                                         
                                         tool vendors are coming up with new,
                                         
                                         new tools to make it safer.
                                         
    
                                         There's also other languages around C++ or that want to make it safer or replace it with something safer or just, you know, interrupt with it or provide a safe alternative.
                                         
                                         So there's a lot of that also going on. two things, CppFront, which is Herb's pet project, which is kind of this new kind of wrapper around C++,
                                         
                                         kind of new successor language slash a kind of like new syntax
                                         
                                         on top of C++ that compiles to C++ or transpiles to C++.
                                         
                                         So that's now out in a version 0.8.
                                         
                                         So it's still very much pre-version 0, use at your own risk,
                                         
                                         but it now is available with a new license, which is Apache 2.0 with LLVM exception, which for the first time allows commercial use.
                                         
                                         So Herb is saying that's now stable enough for that.
                                         
    
                                         It's still at your own risk, but like it's kind of now, you know, you could contemplate actually using it in some kind of real project.
                                         
                                         So that's interesting. kind of now, you know, you could contemplate actually using it in some kind of real project. Yeah.
                                         
                                         So that's interesting.
                                         
                                         There's also a bunch of new features, like regularized function syntax.
                                         
                                         He has decltype now.
                                         
                                         He has this hashable meta function.
                                         
                                         There's lots of other stuff.
                                         
                                         I'm not going to list all of that.
                                         
    
                                         You can read it yourself.
                                         
                                         But yeah, development on that is ongoing.
                                         
                                         Yeah, and I think that's the interesting point, that this is being actively developed still.
                                         
                                         Yeah, and there's a bunch of contributors as well.
                                         
                                         So it's not just Herb.
                                         
                                         There's a bunch of people actively submitting pull requests and driving this forward.
                                         
                                         I think it's still very much like a hobby effort at this point still.
                                         
                                         I don't think there's anybody backing it with money at this point.
                                         
    
                                         At least I'm not aware of it.
                                         
                                         But let's see.
                                         
                                         Let's see how it goes.
                                         
                                         It's certainly an interesting project.
                                         
                                         And then our final news item is something that you just dug out, Phil, isn't it?
                                         
                                         So do you want to talk about that one?
                                         
                                         Yeah.
                                         
                                         So actually, just to be transparent on this, I only saw this sort of 10 minutes before
                                         
    
                                         we started recording.
                                         
                                         So I haven't read it in depth, but I thought it was, it sort of fit in with what we've
                                         
                                         just been talking about so well.
                                         
                                         We couldn't really not mention it and this is um the the swift c++ interoperability which we we mentioned before particularly when
                                         
                                         doug regger was on that's something that is still an ongoing effort and they have added
                                         
                                         some new features to that and there's a there's an article on the the swift forums which will
                                         
                                         put a link to safe and efficient c++ interoperability
                                         
                                         via non-escapable types and lifetimes so this this fits right into what we've been talking about
                                         
    
                                         with uh you know lifetime management but from the perspective of interoperability with with swift
                                         
                                         and just a couple of choice quotes from the article so i haven't read it in depth but i
                                         
                                         think this gives you a flavor but right at the start it says safely interacting with unsafe code is challenging i don't
                                         
                                         think anybody's going to disagree it's an understatement i would say yeah but um but a
                                         
                                         bit later goes on to say we propose using annotations to express lifetime information
                                         
                                         for c++ apis and one of those is a Clang attribute, Clang lifetime bound.
                                         
                                         There may be some others, as I say, I haven't read it fully,
                                         
                                         but actually these are things that you can use today.
                                         
    
                                         And it talks about how you can use these annotations to mark up your code
                                         
                                         so that you can use it safely from Swift.
                                         
                                         And the interesting bit is this non-escapable stuff.
                                         
                                         And so I haven't read the article in depth, but I know from my own knowledge of Swift is this non-escapable stuff. And so I haven't read the
                                         
                                         article in depth, but I know from my own knowledge of Swift that a non-escapable type is one where
                                         
                                         if you have a Lambda or Clojure in Swift, but we know in C++, we have the problem of
                                         
                                         that the lifetime of the Lambda can outlive the data that it has references to. And you can get
                                         
                                         these dangling references you have to be very careful of.
                                         
    
                                         Well,
                                         
                                         in Swift,
                                         
                                         they solved that problem by having this non,
                                         
                                         or escapable or escaping attribute to say this closure escapes the scope
                                         
                                         that it was created in.
                                         
                                         So there may be lifetime issues.
                                         
                                         And then the language can actually work on that for you and introduces
                                         
                                         them overhead with copying.
                                         
    
                                         But it only does that work when it needs to, you put this this annotation in obviously we don't have
                                         
                                         that in c++ so that's that's where these uh these annotations are coming in to sort of give you back
                                         
                                         that ability to to say when the lifetime of a lambda or a closure actually escapes the scope
                                         
                                         that it was created in and why you may need to address these lifetime issues. So I thought that was quite interesting
                                         
                                         and definitely a nod towards using Swift
                                         
                                         as potentially a safer successor language
                                         
                                         for C++ and interoperating with it.
                                         
                                         That's interesting.
                                         
    
                                         But yeah, it strikes me that all of these attempts
                                         
                                         at somehow introducing memory safety
                                         
                                         kind of fall into three camps, right?
                                         
                                         So there's only like a limited amount of approaches possible,
                                         
                                         it seems.
                                         
                                         So the first one seems to be just track all the like memory at runtime,
                                         
                                         like address sanitizer,
                                         
                                         or you can do it in hardware now with something like Sherry, right?
                                         
    
                                         Like tag pointers.
                                         
                                         So either do that or change the object model to like track track that stuff
                                         
                                         statically at compile time to not allow you to have you know things that escape a certain scope
                                         
                                         or mutable shared state or anything like that like the basically the rust borrow checker or
                                         
                                         something very similar to that right that's like second approach and the third approach seems to be
                                         
                                         these um lifetime annotations where you kind of take
                                         
                                         code and just annotate it with you know this outlives that or you know this must be uh like
                                         
                                         non-zero here or whatever and then and then again let the compiler figure it out yeah i think
                                         
    
                                         everything i see is like kind of a repetition of one of these three approaches which is just
                                         
                                         interesting so this seems to be like the annotation approach.
                                         
                                         Yes.
                                         
                                         Well, let's see which one wins.
                                         
                                         Right.
                                         
                                         Okay.
                                         
                                         So I think we talked enough about safety.
                                         
                                         Let's talk about unsafety.
                                         
    
                                         Yeah.
                                         
                                         Let's move on to our main guest for today, Anders.
                                         
                                         Hello again.
                                         
                                         Thank you very much for being on the show with us today.
                                         
                                         Yeah.
                                         
                                         Hello, and thanks for inviting me. So last time you were on the show, this is not the. Thank you very much for being on the show with us today. Yeah, hello everyone. Thanks for inviting me.
                                         
                                         So last time you were on the show, this is not the first time you're here. Last time you were on the show, it was back in 2018 when Rob and Jason were still running it. And you talked about
                                         
                                         your cppquiz.org suite of CPP quizzes. So we can talk about that again today, but also you have a
                                         
    
                                         new book out, right? It's called C++ Brain Teasers.
                                         
                                         Yeah.
                                         
                                         Is that somehow related to cppquiz.org and how did that happen?
                                         
                                         Can you give us a bit of context here?
                                         
                                         Yeah, so I wasn't really planning on writing that book,
                                         
                                         but the pragmatic programmers, they have this series on C brain teasers
                                         
                                         and Rust and Python and all these brain teasers,
                                         
                                         and they were looking for someone to do the c++ book in that series and then it was francis bontempo who had just published a book i
                                         
    
                                         think with pregprog and then she just introduced me to the publisher and then yeah we decided to
                                         
                                         write this book so that's how it came about and it is related to the cpp which i don't think it
                                         
                                         would have happened if i didn't have that site.
                                         
                                         But yeah, it's not just a printed form of the website.
                                         
                                         It's different to that, but it's kind of based on the thing I'm doing there as well.
                                         
                                         So all of the brain teasers in there, are they new or are some of them based on what you have on cppquiz.org?
                                         
                                         A few of them are based on the website, but most of them are new.
                                         
                                         And all the explanations are new and much longer.
                                         
    
                                         Because it's like a 120 pages or so long book with only 25 questions in it.
                                         
                                         So it's not just a quiz book.
                                         
                                         The main thing is that you have this question to get people to wonder about a certain thing.
                                         
                                         And then you have some pages explaining how exactly does this language actually work here and why is it like
                                         
                                         this and uh trying to trick people into learning something yeah yeah are you able off the top of
                                         
                                         your head to sort of sketch out an example i know that's hard on an audio podcast but is there
                                         
                                         anything you can like give a flavor of sort of questions you might have in there yeah i can i can take i have the book in front of me like this one that's easy
                                         
                                         to explain without actually showing the code so this is one of the easier ones like the second
                                         
    
                                         one so we have like uh you have two overloads of a function called serialize one takes a void
                                         
                                         pointer and one takes a string ref so the ref, and then you call it with a string
                                         
                                         literal.
                                         
                                         Is that string ref?
                                         
                                         You mean string view or?
                                         
                                         No, a reference to a...
                                         
                                         Oh, a ref.
                                         
                                         Reference to language reference.
                                         
    
                                         Yeah, a reference to std string and the other one is a void pointer.
                                         
                                         And when you call it with a string literal, it prefers the void pointer overload instead
                                         
                                         of the string one.
                                         
                                         And so this is... A lot of people who have been writing c++ for a
                                         
                                         while understands that that's the case but then you have a few pages talking about okay how actually
                                         
                                         does overload resolution work and like what about why do we have all this or not why but at least
                                         
                                         explaining all this weak typing kind of things with oh it's very eager to do all implicit
                                         
                                         conversions and stuff like that and uh yeah so it's an excuse to talk about those things and then um yeah in some places it's like an undefined or an initialized
                                         
    
                                         variable on the stack and it like reuses the one from the last time you call that function
                                         
                                         and then it explains like on my particular system this is how the stack works and this is why you
                                         
                                         see that behavior but actually people that doesn't require that and like yeah
                                         
                                         so it's all sorts of like excuses to talk about try to like understand more about how the language
                                         
                                         works so it's very little about how does this library work or stuff like that it's more about
                                         
                                         understanding the fundamental things which is just what i happen to find interesting yeah this sounds
                                         
                                         like uh these are not just like dark corners of the language like um nobody would ever know this anyway but this is it's fun we've had that sometimes um i know because
                                         
                                         i've done some of your quizzes but this sounds much more practical this is like stuff we probably
                                         
    
                                         should know but they're sort of on the cusp of the border of what people actually know in practice
                                         
                                         yeah yeah i'm trying to try to keep it practical. So these have been selected to be,
                                         
                                         like you should learn something
                                         
                                         that's actually useful to know.
                                         
                                         And I have, I try to always have like,
                                         
                                         so this is a bad thing
                                         
                                         and you would avoid it by this particular warning
                                         
                                         or this sanitizer,
                                         
    
                                         or like here are some tools you can use
                                         
                                         to avoid these things.
                                         
                                         And I'm trying to,
                                         
                                         because cppquiz.org is full of like weird stuff
                                         
                                         because I have opened up for submissions. And when do you submit a question to a cppquiz.org is full of like weird stuff because i have opened up for submissions and when do you
                                         
                                         submit a question to a cppquiz site it's when you just discover something super weird like
                                         
                                         this is so strange i have to submit it to cppquiz so there's too many weird questions i think on the
                                         
                                         website so i'm trying to i've tried hard to not make the book be like that as well. So you just mentioned that people can submit suggestions to the quiz.
                                         
    
                                         How does that work?
                                         
                                         How can we get involved?
                                         
                                         How does that work?
                                         
                                         So if you just go to the site, on the right-hand margin,
                                         
                                         there's a submit your own question kind of thing.
                                         
                                         It's something I did because I wanted to save time
                                         
                                         to write these questions myself but
                                         
                                         then people start submitting all this weird stuff that i don't know and it's not just a question
                                         
    
                                         and answer thing it's like there's always an explanation with the reference to the standard
                                         
                                         saying like okay here are the relevant sections explaining exactly why this is the case why the
                                         
                                         answer is correct um so then i end up with all that work trying to understand these things that
                                         
                                         i've never heard about because someone submitted it so i'm not really saving time but i'm at least uh poked into getting new
                                         
                                         content out at least right right so how did how did you get the idea to start this in the first
                                         
                                         place like uh it was at the acu conference in 2012 or 13 or something then uh oliver maridol was having one of his pub quizzes
                                         
                                         and yeah then i was in the bar and i got a bit drunk and i figured someone has to make a website
                                         
                                         with this kind of stuff and then i went to my room and started like drunk coding some stuff in python
                                         
    
                                         and django which i kind of almost knew a little bit and yeah basically finished the first version then some nights at acu on the train and the plane back home so if you look at the source code for
                                         
                                         the website itself on github you will see that it's not very well implemented but it's been
                                         
                                         working now for 11 years or so um yeah and then i just asked for some ideas and then lots of people
                                         
                                         just sent me their stuff
                                         
                                         from their pub quizzes from other conferences and stuff,
                                         
                                         so that's how the site got started,
                                         
                                         and then I just kept adding stuff.
                                         
                                         And trying now to publish easier and more relevant things
                                         
    
                                         so that you can not only see these weird corner cases
                                         
                                         that some people dug up.
                                         
                                         Yeah.
                                         
                                         Right.
                                         
                                         So has your relationship with it changed over time
                                         
                                         then you have like a different goal in mind maybe for the website yeah yeah so first i published a
                                         
                                         lot of stuff and then i just stopped doing c++ for a few years and i kind of had it on the back
                                         
                                         burner for almost five years while i was doing something else but i wanted to keep it alive and then i got back to c++ again and then i've been trying to keep it a bit more
                                         
    
                                         alive now and yeah trying to get it to be more to have more relevant contents and you have like
                                         
                                         three difficulties on the question so you have like beginner intermediate and expert or something
                                         
                                         and beginner is like not totally beginner but you should know c++ a bit and then
                                         
                                         so i want to make some way to like filter out all the expert questions or something to make it a bit
                                         
                                         more beginner friendly and uh just the main work with that is just adding enough content to so that
                                         
                                         there's still lots to do with only the beginner-friendly questions displayed.
                                         
                                         Right.
                                         
                                         I mean, you've been running it for so many years now,
                                         
    
                                         you've seen many different C++ versions come and go.
                                         
                                         So you're constantly adding things from new language versions in there?
                                         
                                         Yeah.
                                         
                                         Yeah, so it's basically whatever comes to mind. If I see something interesting,
                                         
                                         or mostly nowadays people submitting stuff.
                                         
                                         But all the questions
                                         
                                         say according to c++ 23 what's the output of this question like and you either you say it's
                                         
                                         going to compile and you type in the answer uh or you say it's undefined behavior like you select
                                         
    
                                         from the drop down and yeah so the reason we just ported it to c++ 23 is that's i for each question
                                         
                                         you get an explanation with references to the standard, and I want it to be correct
                                         
                                         for whatever standard we have now.
                                         
                                         And so what I could do is just like,
                                         
                                         whenever I get a new question,
                                         
                                         I say, according to C++23,
                                         
                                         and then the old ones are still at 11 or whatnot.
                                         
                                         But then every time you go to a new question,
                                         
    
                                         it shows you a new version of the standard to think about.
                                         
                                         So I don't want that either.
                                         
                                         So what we did,
                                         
                                         I just exported the entire database
                                         
                                         to a github repo and then got the community to help me port it over the summer basically just
                                         
                                         updating everything and there were a couple of questions that actually changed the answer most
                                         
                                         of it is just like stuff moved around in the standard or there's a different way to reason
                                         
                                         about these things but a few things actually did change. Yeah, I was going to ask about that.
                                         
    
                                         Do you have an example at the top of your head
                                         
                                         of something that actually changed?
                                         
                                         I should have prepared something.
                                         
                                         I think we have something about the range for with rvalue kind of thing.
                                         
                                         I think there's a question about that.
                                         
                                         Yeah, there was a thing that if you have a range-based for loop and you're iterating over something which is a temporary that returns a temporary, then that temporary goes out of scope when that expression is evaluated.
                                         
                                         So you're iterating over something that doesn't exist anymore and you're in UBLand and you fix that in CSS 23. set in css 23 yeah but that actually changes behavior for example there are cases where
                                         
                                         that thing that you're iterating over like if you create it it takes a lock for example
                                         
    
                                         and then if you destroy it it like releases the lock it actually changes behavior so they're like
                                         
                                         uh interesting cases like that yeah yeah i think we had a question about that there's something in
                                         
                                         the book about this as well uh right about lifetimes uh there's several questions about lifetimes in in the book and yeah that doesn't
                                         
                                         surprise me so now now yeah now any temporary lives until you actually looped over that so
                                         
                                         yeah yeah i think over the years there were quite a few topics where like the standard changed like
                                         
                                         what it what it says or what it does like
                                         
                                         things like aggregate types i think the initialization for aggregates has changed
                                         
                                         i think in every standard and there's yeah there's other areas like that or like when
                                         
    
                                         a type is an aggregate and when when it's not an aggregate and things like that yeah i think like
                                         
                                         now you can actually inherit if you don't have any virtual functions or anything you can
                                         
                                         inherit from something and still be an aggregate and you couldn't before like yeah stuff like that
                                         
                                         yeah yeah there's a lot of stuff like that it's interesting that you chose superstars 23 because
                                         
                                         it only became the official standard like literally a few weeks ago and i think most
                                         
                                         people don't actually kind of use it in their day-to-day coding. So what motivated you to go to the latest standard so early?
                                         
                                         Avoiding work.
                                         
                                         Because it was on the 17th, and it's a lot of work to port everything.
                                         
    
                                         Like one question can take like one minute to just verify it's the same,
                                         
                                         or it can take an evening to figure out all the new stuff.
                                         
                                         So it's a lot of work to port it.
                                         
                                         And I never got around to port it to 20.
                                         
                                         And then people kept asking, can we please port it?
                                         
                                         C++ 17 is old now.
                                         
                                         And then I figured, okay, let's go straight to 23.
                                         
                                         Because I threw several person weeks of effort to port all of it.
                                         
    
                                         And I don't really have a lot of time to spend on this.
                                         
                                         So in order to not
                                         
                                         do that twice, we just went straight to
                                         
                                         23.
                                         
                                         But someone brought up the argument that we should do
                                         
                                         20 because no one uses 23.
                                         
                                         But the answers to
                                         
                                         all but one or two questions would be
                                         
    
                                         the same. It's just like the
                                         
                                         explanation is a bit different in 23 than it was
                                         
                                         in 20. And then I don't have to, three years from now,
                                         
                                         spend another several weeks to port everything again.
                                         
                                         Do you also incorporate new features,
                                         
                                         or is it just a matter of porting your existing database of questions?
                                         
                                         Yeah, when I port, I just port all the questions out there.
                                         
                                         I just dump everything to a GitHub repo.
                                         
    
                                         Then people help out.
                                         
                                         Shout out to there's a
                                         
                                         user on github uh their username is talkic and they did a lot of the work so uh yeah thanks
                                         
                                         thanks for that um but yeah then we just port everything and we just dump everything back into
                                         
                                         the database and then but then that enables me to now be able to start adding stuff that's new that
                                         
                                         wasn't there before because sometimes i get submissions or ideas for new things but i can't do it yet because to say
                                         
                                         site is still on 17 or whatever so there's no c++ 23 specific questions in just yet but i don't
                                         
                                         think you added anything yeah so now we can that's it yeah i was just trying to think of
                                         
    
                                         something i think there are a few nasty things
                                         
                                         with deducing this where like i was thinking that uh like it i mean not nasty it's a great feature
                                         
                                         but like it's a little bit odd if you haven't used it yet um so i think that's one where you
                                         
                                         could probably come up with interesting questions yeah is it is it more like language stuff that you
                                         
                                         do there or more like library stuff uh the language stuff at least is things i do because that's what i happen to find interesting
                                         
                                         and it's kind of timeless knowledge just like have a better gut feeling of how the language
                                         
                                         actually works when you try to learn something new or there's a bug or something and well actually
                                         
                                         i know how this works like one layer below the layer i'm trying to understand and it's a bug or something. And well, actually, I know how this works, like one layer below the layer I'm trying to understand,
                                         
    
                                         and it's a lot easier to figure it out.
                                         
                                         But yeah, there's some library stuff as well.
                                         
                                         Right.
                                         
                                         Yeah, I don't think we have that many new language features
                                         
                                         in C++ 23, actually.
                                         
                                         I think deducing this is like the main one I can think of.
                                         
                                         Multidimensional subscript operator.
                                         
                                         Right, yeah.
                                         
    
                                         Right.
                                         
                                         But that's kind of one where there's a bear
                                         
                                         trap that you could yeah could be maybe there is i just don't know about it yeah well given that
                                         
                                         it's come from c++ 17 um previously so you could have overloaded the the karma operator
                                         
                                         and now that won't work as of 20 and then in 23 it has a new meaning so could be something there but also but also you you
                                         
                                         haven't covered you didn't cover c++ 20 before so you could add stuff about like modules and
                                         
                                         concepts and core routines and yep what was the fourth one or the um spaceship operator
                                         
                                         the spaceship changes the meaning of some existing code, doesn't it? Oh, the spaceship operator. Yes, yes.
                                         
    
                                         I have to say, I haven't actually used or seen it in the wild,
                                         
                                         the spaceship operator.
                                         
                                         You haven't seen a spaceship in the wild?
                                         
                                         I've used it just for some simple structs that just wrap some other type,
                                         
                                         and then they're just like spaceship equals default.
                                         
                                         That's, I think, all I've used it for.
                                         
                                         Yeah, I use it in some of my testing material.
                                         
                                         It's quite useful to be able to just quickly add all the conditional operators to a type.
                                         
    
                                         Right.
                                         
                                         Have you run into any unexpected stuff with that yet, or does it just do what it says
                                         
                                         on the tin?
                                         
                                         I suppose sometimes it doesn't work the way I expected it to, mostly because I haven't
                                         
                                         internalized the syntax.
                                         
                                         But no, nothing that breaks anything.
                                         
                                         Well, that's good.
                                         
                                         Yeah.
                                         
    
                                         So you mentioned that you had some time away from C++.
                                         
                                         Yeah.
                                         
                                         Was that before the last time you were on the show?
                                         
                                         Because I think you said in 2018 you'd just come back.
                                         
                                         Yeah, yeah, that's right.
                                         
                                         That's when I just came back after five years doing something else.
                                         
                                         So what brought you back?
                                         
                                         Did you get enough of C++?
                                         
    
                                         The reason I went back to C++ was because I quit the other job I had after five years.
                                         
                                         It wasn't really going anywhere.
                                         
                                         And then I had done some C++ in the past, and there's a lot of cool stuff that happens with C++.
                                         
                                         Never a dull day.
                                         
                                         Yeah, but there's so many cool things people make with it.
                                         
                                         So I don't particularly think C++ is a great language.
                                         
                                         It's fine.
                                         
                                         It gets the job done.
                                         
    
                                         Yeah, I think it's fine.
                                         
                                         For some definition of fine.
                                         
                                         There's the languages people complain about
                                         
                                         and the languages nobody uses.
                                         
                                         Yeah.
                                         
                                         And I don't have all the issues that people complain about with C++ all the time.
                                         
                                         I don't think they come up day to day that much, that they really annoy me that much.
                                         
                                         So I think it's fine.
                                         
    
                                         But people do so many cool things.
                                         
                                         So when I quit my job and wanted to go back to doing C++ i interviewed with a lot of companies in in oslo
                                         
                                         like people i ended up in civet doing 3d cameras uh which is uh lots of really cool stuff to do
                                         
                                         and then like we have cisco in oslo doing all their video conferencing stuff and uh cute is in
                                         
                                         oslo remarkable that they weren't then but like there are so many cool things to include os
                                         
                                         they didn't have the chance to hire anyone but that was the coolest interview i've been to
                                         
                                         so if you're not familiar with include os it was a project where you just like basically say hash
                                         
                                         include os at the top of your file you compile it and it becomes an operating system yeah that
                                         
    
                                         runs your code wait what it's like uh it's a micro kernel or whatever they call it
                                         
                                         the thing you just compile your program into like an image that you can run and it only has the part
                                         
                                         of the os that you actually use you can run on what on a like a on a virtual machine hypervisor
                                         
                                         or like whatever you can have like you make like a network switching thing in c++ and you just compile
                                         
                                         it down to an os that can run on a vm and the entire os is then like 14 kilobytes or something
                                         
                                         including your application and it has zero zero attack surface there is no bash there is no nothing
                                         
                                         right so you can't really attack it either so it's it's pretty cool and it can boot in like 10 milliseconds whoa whoa whoa okay okay
                                         
                                         wait wait um okay i guess i need to look into that like how does that work like do you need
                                         
    
                                         like a kind of a kernel that does stuff is that just all completely modular is that like based
                                         
                                         on linux is that like written from scratch what is that i think most of it that written from scratch? What is that? I think most of it was written from scratch.
                                         
                                         They had a bootloader and
                                         
                                         TCP IP stack and some
                                         
                                         web server
                                         
                                         stuff and
                                         
                                         kernel and everything.
                                         
                                         Then you just
                                         
    
                                         compile your program and you link it and everything you don't use
                                         
                                         just doesn't get included.
                                         
                                         There's nothing more to the OS
                                         
                                         than exactly what you use in your program program so it's it's pretty cool they went under uh they due to lack of funding
                                         
                                         oh no at some point uh but that was a really cool uh project yeah episode 63 back in 2016
                                         
                                         was all about include os all right go listen to that one if you want to know more all right yeah yeah that's cool what i was was saying was like why c++ it's just because people
                                         
                                         do so many cool things with it that's basically uh why i keep doing c++ yeah no i think that's
                                         
                                         one of the things that keeps me motivated as well just this week we had a um so i live in helsinki
                                         
    
                                         we have a monthly meetup here that I'm running.
                                         
                                         And like every month we are somewhere else, right?
                                         
                                         And depending on who can host us.
                                         
                                         And this week we were at Remedy,
                                         
                                         which is one of the big video game studios here.
                                         
                                         And obviously they do everything in C++.
                                         
                                         And just being there and then like seeing how they develop
                                         
                                         like really cool video games.
                                         
    
                                         And I'm like, yeah, okay.
                                         
                                         I mean, yes, you know, working with C++ sometimes it's painful but that's what comes out like how cool is that
                                         
                                         yeah you can't really do that on that scale and like in another programming language that's pretty
                                         
                                         cool remedy that's the old demos in people or it used to be at least i think uh i mean the games that they did were it's like was it uh max pain alan wake yeah yeah there are some people from the 90s yeah
                                         
                                         i think i think yeah yeah i've actually been approached by someone i can't talk too much
                                         
                                         about it because it's proprietary but um they want me to do some training for people who have
                                         
                                         been doing c-sharp and they want to learn c++ and they're going to port all that code base over. So some of that's going in the other direction. It's quite interesting.
                                         
                                         So porting something from C-sharp to C++. Yes. Why would you want to do that?
                                         
    
                                         I presume the performance matters in the particular industry that they're in.
                                         
                                         That's usually the reason. Right. That reminds me, Anders,
                                         
                                         you actually mentioned when we
                                         
                                         were preparing this episode, you mentioned that you
                                         
                                         actually also recently imported something from
                                         
                                         Rust, I believe, to C++.
                                         
                                         What was that about? Why would
                                         
                                         anybody do that?
                                         
    
                                         To get a click-baity title for a
                                         
                                         podcast.
                                         
                                         No, the idea
                                         
                                         was that we had a new thing that we were using internally,
                                         
                                         and someone prototyped it in Rust because they like Rust.
                                         
                                         And I think it's also because that's the language where they knew how to make a user interface
                                         
                                         because they happen to know a library.
                                         
                                         And then that was proving that we should try to do this thing.
                                         
    
                                         And then we wanted to make it more integrated into all the other stuff we do.
                                         
                                         And we integrate a lot with the LLVM
                                         
                                         and that's a C++ API.
                                         
                                         So we just figured it's easier to do our thing
                                         
                                         in C++ as well,
                                         
                                         because it's a startup kind of thing.
                                         
                                         So we have to do things quickly
                                         
                                         and then like, okay,
                                         
    
                                         so let's just use those LLVM types
                                         
                                         internally in our entire system
                                         
                                         instead of wrapping everything
                                         
                                         and like making a nice API boundary
                                         
                                         like we don't have time to
                                         
                                         do that kind of stuff we just need to get something
                                         
                                         working quickly
                                         
                                         and then just embrace LLVM and then use
                                         
    
                                         the C++ types so that was the reason
                                         
                                         and that worked
                                         
                                         out fine but I think it was also nice
                                         
                                         that this other I did it in Rust first because that's worked just worked out fine but i think it was also nice to that uh
                                         
                                         this other i did it in rust first because that's what he wanted to do and just previous point and
                                         
                                         then like okay let's do this and then we fortunate to see plus yeah i mean this reminds me of kind of
                                         
                                         something that somebody said whom we had on the show i'm not going to mention any names but like
                                         
                                         a conversation i had recently about how this whole thing about safety maybe is
                                         
    
                                         a little bit kind of misunderstanding what c++ is about it is really all about the performance
                                         
                                         right because it lets you do things that like you could maybe do with c and assembler but that
                                         
                                         doesn't scale in the same way because it doesn't let you it doesn't have these abstraction mechanism
                                         
                                         mechanisms that c++ has yeah and and that's really what the language is
                                         
                                         about and and like there is an opinion which is not the majority opinion right now i guess if you
                                         
                                         read the the news at the moment or like if you look at the news items that we had lately but
                                         
                                         it is an opinion that some people hold that i kind of can sympathize with is that you know
                                         
                                         trying to make c++ memory save or like adding all of these checks
                                         
    
                                         and making it more like Rust
                                         
                                         with like the borrow checker or whatever.
                                         
                                         That's not what C++ is about.
                                         
                                         You know, if you want to do that,
                                         
                                         just go into Rust, you know,
                                         
                                         C++ is about performance.
                                         
                                         So I think I can get behind that.
                                         
                                         I don't know if the US government can though.
                                         
    
                                         Yeah, it's also like not only about performance with what you use it for so
                                         
                                         this thing that we're doing here is like we have to memory map a lot of stuff into these exact
                                         
                                         places in memory and there's a jit so we jit our own assembly language over to x86 and we execute
                                         
                                         some stuff in a jit and that can do whatever it wants like and that the simulated process has
                                         
                                         access to the simulator so we can like modify
                                         
                                         each other's memory and like i don't care if someone writes outside of a vector boundary or
                                         
                                         something that's not that's not one that's what's gonna cause me bugs uh like there are way worse
                                         
                                         things going on that's gonna cause a bug so i don't really need memory safety that much for
                                         
    
                                         this particular project i think so i think it's very similar to the kind of things that i you know was working on in the past or have seen how things are made
                                         
                                         like if you're writing you know a piece of music software or a video game or even an ide i guess
                                         
                                         like the bits that are actually safety and security relevant but you like log in and talk
                                         
                                         to the server they're not written in c++ anyway right they're like kind of written in something else and then when it comes to like rendering things
                                         
                                         uh or like the stuff that has to be fast if it crashes occasionally that's not great but
                                         
                                         like kind of the that's not the main focus the main focus is to make it fast right
                                         
                                         the main focus is to render as many frames as possible so it looks cool and if you
                                         
                                         can't do that you're not gonna you're not gonna have a product right so maybe that's kind of what
                                         
    
                                         zsus is about i don't know it's difficult to say because it's obviously also used in lots of like
                                         
                                         critical infrastructure and like operating system channels and telecommunication and whatever
                                         
                                         um yeah i don't know let's not get into this whole safety discussion again it's kind of a bit like a
                                         
                                         a black hole it keeps sucking you in because everybody everybody talks about this all the time
                                         
                                         yeah well let's change the topic a bit then because um and as you were a speaker at sea
                                         
                                         flood bus on sea this year yeah you're talking about symbols yes which is a an interesting
                                         
                                         take i mean what is it we need to know about symbols? Why did you feel you needed to give a talk about it?
                                         
                                         It's like most of my talks is just I'm at work and I need to figure something out.
                                         
    
                                         And I discover some corner that hasn't been talked that much about.
                                         
                                         And like, this should be a talk.
                                         
                                         And so, yeah, if I come back next year, it's probably going to be memory models because that's what I'm working on now.
                                         
                                         Okay.
                                         
                                         And it's like, I like to figure out how something works and then submit a proposal for a talk about it because then I really have to understand it properly.
                                         
                                         So for me, it's like the best way to learn something.
                                         
                                         Yeah, I've done that before.
                                         
                                         Yeah, and the symbols thing was just because we also had several really weird things going on
                                         
    
                                         with symbols in the place i used to work back then and uh when i wrote the talk and just figured out
                                         
                                         this is probably useful to some people and a lot of people have said things like oh so that's how
                                         
                                         it works now i understand this error message or or oh now i think i'm linking these things wrong
                                         
                                         or like yeah so so you said you have some
                                         
                                         some weird stuff happening with symbols can you say any more about that more specifically
                                         
                                         yeah so one thing was that we were shipping a library and we were using some other library
                                         
                                         that we included and then we had some cmake stuff to make sure we hide all our symbols.
                                         
                                         But then we didn't compile that other library entirely ourselves.
                                         
    
                                         So they had already exported some symbols.
                                         
                                         And then when we linked them, they were still exported
                                         
                                         and then they leaked out.
                                         
                                         So I don't remember the library,
                                         
                                         but then users had a different version of the same library.
                                         
                                         And then they sometimes found our version of the symbol
                                         
                                         and sometimes found their own.
                                         
                                         That was the easiest one to explain the other one was just because we were linking all our subprojects in a stupid way so some some things ended up both in the executable and the shared
                                         
    
                                         library that we were using so like the global logger pointer you had suddenly two instances of
                                         
                                         the global logger pointer and then only one two instances of the global logger pointer. And then only one of them were initialized.
                                         
                                         And depending on like which code path you took to get there, you get like one or the other.
                                         
                                         Yeah, I've been bitten by that one.
                                         
                                         And then there was a CppCon talk saying like, this is how you solve it.
                                         
                                         So then we did that.
                                         
                                         And then it turned out that didn't work on Windows.
                                         
                                         It was, yeah, it was when you take, you put an inline pointer in your header file instead
                                         
    
                                         of having it in this.fp file, then according to the standard, then you should only get
                                         
                                         one copy of that symbol.
                                         
                                         But the standard doesn't know about shared libraries.
                                         
                                         So like what happens if you have one of them in your executable and one in the standard
                                         
                                         and the shared library, then like, well, according to toolchains on Linux, you get
                                         
                                         only one, but according to toolchains on Windows,
                                         
                                         you get two.
                                         
                                         Yeah, I have been bitten by that
                                         
    
                                         in the past in
                                         
                                         real projects.
                                         
                                         And it's not very easy to fix
                                         
                                         either without re-architecting
                                         
                                         a lot of things.
                                         
                                         Yeah, most of my talks
                                         
                                         are just I have to figure something out
                                         
                                         and then I turn it into a talk
                                         
    
                                         hoping that others will
                                         
                                         benefit from the same.
                                         
                                         Thank you for that.
                                         
                                         That's like a public service
                                         
                                         because I don't think we get enough talks
                                         
                                         about these sort of things,
                                         
                                         but we do tend to get bitten by them.
                                         
                                         Both Tamer and I said
                                         
    
                                         we've been bitten by that one.
                                         
                                         Yeah.
                                         
                                         Keep it up. Looking forward to been bitten by that one. Yeah. Keep it up.
                                         
                                         Looking forward to your memory model talk now.
                                         
                                         Yeah.
                                         
                                         Oh, you have a memory model talk?
                                         
                                         Yeah, I did one at NDC Tech Town.
                                         
                                         Oh, I missed NDC Tech Town this year.
                                         
    
                                         I'm so sorry.
                                         
                                         Like, it's such a cool conference.
                                         
                                         I didn't make it this year, unfortunately.
                                         
                                         Yeah.
                                         
                                         Yeah, so on the topic of, like, being an ambassador for us, though,
                                         
                                         I think NDC Tech Town is a very cool conference to have in a small place this year, unfortunately. Yeah. So on the topic of being an ambassador for Oslo,
                                         
                                         I think NDC Tech Town is a very cool conference to have in a small place like this.
                                         
                                         Yes, I can confirm.
                                         
    
                                         I was there once and I had a great time
                                         
                                         and I hope I can come back again.
                                         
                                         It is a pretty awesome conference.
                                         
                                         Although technically, of course,
                                         
                                         it's not in Oslo itself.
                                         
                                         No, but for everyone who's not from Norway,
                                         
                                         it's in Oslo.
                                         
                                         But for us, it's like far away.
                                         
    
                                         It's like an entire hour on the train.
                                         
                                         It's really far from Oslo.
                                         
                                         Yeah.
                                         
                                         I think it's closer to two hours.
                                         
                                         Yeah, maybe it's like one and a half hours.
                                         
                                         But from the airport, it's a bit longer.
                                         
                                         But yeah, one and a half hours maybe on the train.
                                         
                                         But it's a lot of Oslo people going there because kongsberg is a very very small town
                                         
    
                                         oslo is kind of small but kongsberg is a lot smaller yeah okay so we talked about a lot of
                                         
                                         stuff uh and i think it's time for our traditional closing question which is is there anything else
                                         
                                         in the world of civil stuff going on right now that you find particularly interesting or exciting
                                         
                                         i kind of i'm looking forward to the senders receivers kind
                                         
                                         of thing i haven't properly read up on it yet but i we mentioned earlier i was doing something else
                                         
                                         for five years and that was mainly c-sharp and a language that we were developing as well so we did
                                         
                                         a lot of rx and observables and and stuff so i think for the right use case i think that approach is really nice yeah so i'm
                                         
                                         looking forward to that and uh also pattern matching uh because i i haven't done rust for
                                         
    
                                         like six or seven years i did it for a few days only but like that was one of the things that was
                                         
                                         like this is really nice we should do something like this in c++ and then right then now it's
                                         
                                         coming so i think yeah those are the things i'm excited about. Otherwise, I tend to just in time learn C++ things.
                                         
                                         That's how it should be, really.
                                         
                                         Yeah, I mentioned we're a startup,
                                         
                                         so we have done DevOps.
                                         
                                         It's super simple.
                                         
                                         We're always on the latest Ubuntu
                                         
    
                                         and then get whatever tools are there
                                         
                                         because no one has taken the time to do something more fancy.
                                         
                                         So just recently I got deducing this.
                                         
                                         I'm like, yeah, now I can write one overload instead of two overloads and i'm like yeah but yeah centers receivers and
                                         
                                         and pattern matching and uh yeah otherwise like i'm looking for something i also find cool is uh
                                         
                                         is the circle stuff that the short vector is doing it's just like so impressive what it's doing alone
                                         
                                         uh so i just whether any of that will ever land in c++ i have no idea but i just follow it with a
                                         
                                         interest because it's cool yeah absolutely yeah that's interesting i think you're one of very
                                         
    
                                         few people this year who haven't mentioned reflection so thank you for that um it's
                                         
                                         interesting that you mentioned pattern matching because I'm not sure it's actually going.
                                         
                                         Yeah, I think that's less likely to make it into 26 at this point.
                                         
                                         I think we'll have to wait.
                                         
                                         It's not off the table yet.
                                         
                                         It's not off the table,
                                         
                                         but I think it's becoming increasingly unlikely
                                         
                                         we're going to get it in sixes.
                                         
    
                                         I haven't been paying attention.
                                         
                                         But yeah, I think senders receivers
                                         
                                         are already in a working draft.
                                         
                                         And I mean, there's already kind of a bunch of libraries just out there that are doing things like that.
                                         
                                         We had an episode about that.
                                         
                                         I think my prediction is coming true that senders receivers can become the new coroutines in terms of all the conference talks and things about it.
                                         
                                         And lots of interest, even though nobody really understands it.
                                         
                                         Yeah.
                                         
    
                                         Yeah.
                                         
                                         I mean, I have to say, like I said this before, like I find it really hard to understand.
                                         
                                         And I think when we did the episode on the topic,
                                         
                                         we got feedback from other people who also thought like,
                                         
                                         I don't understand how this works.
                                         
                                         So I think there will be definitely a need for people like the two of you,
                                         
                                         just kind of breaking it down and explaining to everybody
                                         
                                         what this is actually about,
                                         
    
                                         because it seems like it's a really powerful tool
                                         
                                         going to make things a lot easier, but it's just not.
                                         
                                         Like the learning curve is not particularly, how do you say?
                                         
                                         I think we need the second wave of talks, I think, to start to make it more accessible.
                                         
                                         I think like for learning a lot of these things, like I don't really, I haven't looked much at Co-Routine either, but all of this thing, I think it's easier if you have done something similar in like C sharp or JavaScript or something where it's just like,
                                         
                                         it's a lot easier because you have garbage collection and other things that
                                         
                                         can like make the implementation less mysterious kind of.
                                         
                                         And if you have like,
                                         
    
                                         then you kind of have the intuition that you can,
                                         
                                         it might be easier to learn it than just trying to learn it from scratch in
                                         
                                         super plus.
                                         
                                         Yeah.
                                         
                                         It's,
                                         
                                         I mean,
                                         
                                         for me it's difficult because I come from audio where you just have
                                         
                                         callbacks you just pass pointers around you have callbacks this is the world i come from
                                         
    
                                         so i i know how to navigate that but anything that kind of does something else kind of breaks
                                         
                                         my brain a little bit it's just very hard to for me to understand yeah we we used a lot of rx in
                                         
                                         in c sharp and a previous job and like the entire domain model
                                         
                                         and the UI was like everything was like reactive
                                         
                                         and debugging became
                                         
                                         super hard
                                         
                                         this button is suddenly disabled
                                         
                                         why like no one knows
                                         
    
                                         you just try to put a breakpoint and like it is somewhere
                                         
                                         into some Microsoft DLL
                                         
                                         that's where the call came from
                                         
                                         and it's
                                         
                                         really great for some things,
                                         
                                         but it can definitely go wrong as well.
                                         
                                         It's probably going to be even harder in C++
                                         
                                         because it's harder to make it work correctly
                                         
    
                                         and it's harder to make tools and everything.
                                         
                                         It's just harder.
                                         
                                         Okay, then I think it's time to wrap up.
                                         
                                         So is there anything else you want to tell us,
                                         
                                         Anders, where people can reach you or how they can
                                         
                                         get involved with cpp quiz yeah so to reach me just uh i'm on like all the social medias like
                                         
                                         waiting for one to win uh so macedon and blue sky and twitter and yeah so you can just find me on
                                         
                                         any of those places yeah and if you want to get involved with cpp quiz then uh there's it's the code for
                                         
    
                                         the site itself is on github and we have some open issues that would be good to get some help with
                                         
                                         especially around porting to django 5 and stuff so if you know python or django
                                         
                                         don't hesitate to just pick up some small issues to get started with like making an rss feed and
                                         
                                         uh yeah some simple things and some more complicated stuff as well.
                                         
                                         I might actually have a look at that myself.
                                         
                                         Yeah, cool.
                                         
                                         Okay, well, thank you for joining us today, Anders,
                                         
                                         and telling us about your new book.
                                         
    
                                         There'll definitely be a link to, in the show notes,
                                         
                                         cppquiz.org, of course,
                                         
                                         and all the other stuff you've been working on in C++.
                                         
                                         Thanks for coming on.
                                         
                                         Yeah, thanks for having me on. Thanks so much for listening in as working on in C++. Thanks for coming on. Yeah, thanks for having me on.
                                         
                                         Thanks so much for listening in as we chat about C++.
                                         
                                         We'd love to hear what you think of the podcast.
                                         
                                         Please let us know if we're discussing the stuff that you're interested in,
                                         
    
                                         or if you have a suggestion for a topic, we'd love to hear about that too.
                                         
                                         You can email all your thoughts to feedback at cppcast.com.
                                         
                                         We'd also appreciate it if you can follow CppCast at CppCast on X or at Mastodon at CppCast.com on Mastodon and leave us a review on iTunes.
                                         
                                         You can find all of that info and the show notes on the podcast website at CppCast.com.
                                         
                                         The theme music for this episode was provided by podcastthemes.com.
                                         
