Conor

How many times were you on CBB guest? Uh two times at least. And that was the before Phil uh Teamur era, correct? Uh yes, that was the good era.

Bryce

Oh my! You just blew the game. Phil teamur, I I am so I am so sorry. I am so sorry.

Conor

I'm sure he just means good because it used to be weekly back then, and now it's bi-weekly. Is that what you meant?

Bryce

Oh yes, that's what you meant.

Conor

I must have meant because they invited me. Welcome to ADSP the podcast, episode 205, recorded on October 11th, 2024. My name is Connor, and today with my co-host Bryce, we record live from C Under the Sea. In this episode, we interview Phil Nash and Jonathan Mueller. Alright, we're here live from the inaugural edition of C Under the Sea 2024. I'm here with Bryce, and we are standing across from the Nemesis organizer of the conference, C on C.

Bryce

He's a very lovely film, actually. It's a very lovely fellow.

Conor

But he's got a rival conference now. I'm not sure what he's doing here. I mean, he he just finished speaking on a talk he might tell us a little bit about, but my guess is that you're doing recon or some kind of sabotage tactics. I'm gonna hand the mic over to Bryce and you can conduct this interview.

Bryce

We are here in lovely Breda? Brita? How do we say it?

Conor

I think it's Brita, but uh let's ask Phil.

Bryce

So, Phil, what's what's your story? What are you doing here?

Phil Nash

Well, you've sort of given the game away. This is a bit of a reconnaissance mission, so I need to see what I'm up against. No, no, I'm uh I'm really supportive of this brand new conference. Seems to be going really well. Glad to be a part of the first edition. I actually did a workshop yesterday as well, so um what was your workshop? It was on coroutines.

Bryce

It sold out, so a lot of interest. Yeah, sure. A sold-out workshop. How many people did you have in your workshop? Uh 20. What why do you think people are so interested in learning about coroutines?

Phil Nash

Uh it's interesting you asked that because I asked them at the start of the day, what are you actually here for? What are you looking to get out of it? And uh everyone had a different story. Some of them were just interested in it, uh, somebody had specific use cases in mind, and others just wanted to see if it was going to help with their particular project. And there's one or two people that had some misconceptions that we needed to clear up as well. So uh the usual mix.

Bryce

I probably could have used that workshop because every time I look at curative teams and try to understand how the machinery works, my my head explodes. It's very, it's very complex, Phil. It's very complex.

Phil Nash

Yeah, there's not a lot of complexity there, and where it is complex, that's to match the complexity of the problem you're trying to solve. The problem is there's just so many moving parts and things you need to understand before you can actually get it to work. So my approach, which is not unique to me, I've seen other people do this as well, is just use the compiler to tell you what the next thing you need to implement is. Even if you don't actually understand what it's for yet, it gets you to that point where you can see something running and then start to page fault in all of the other knowledge.

Bryce

Can you do you know what symmetric transfer is? Lewis talks about symmetric transfer a bunch, and I I don't really understand it.

Phil Nash

Yeah, it's actually a fairly simple concept. So at the point that you are suspended, there's a certain function called await suspend that gets called on your awaiter. And the return type of await suspend dictates what happens next. So if you return void or um a Boolean with the true value, then it says um okay, we can we can suspend return control back to the cooler. That's what usually happens, that's like the default. If you turn false and it says don't suspend, and it goes back to the to the coroutine. But you can also return the coroutine handle of another coroutine. And then what it'll do is it will just resume that coroutine while this one is suspended. And very often that coroutine ball sort of had a symbiotic relationship and resume the first one again, so they go maybe in a cycle, there may be a whole chain of them, or there may be an external scheduler perhaps in the waiter. However, you do it, you can sequence coroutines together without consuming any additional stack space without the overhead of calling back up the stack to the caller who's going to do it all from there anyway.

Bryce

Curoutines resuming coroutines. Yeah, it's the cycle, the cycles of the coroutines that always throws me off. It's a little hard to think about. Have you tried using coroutines, Connor?

Conor

I have not. I'm waiting for library support. I saw I think generator. That shipped.

Phil Nash

We have generator. And I demonstrated it yesterday.

Conor

Yeah, I I haven't figured it out. I've heard library support's coming. It's I feel like it's a I don't think it's actually similar to Lambdas, because Lambdas were understandable even though they were only half baked in 11, and then once we got to 14, it was fully. I feel like in this case, coroutines are this complicated language feature that honestly we aren't expecting most people to use as a language feature. We're gonna have library implementers that are gonna be shipping library features, and then it's gonna be much easier for folks to consume coroutine-esque and you know things that are built on top of it. That's what I wait for.

Bryce

What are the other library pieces that you think are missing?

Phil Nash

So a generator is a particular type of coroutine that has co-yield in it, usually in a loop. And that generalizes really easily. And even that was actually quite complex to standardize for reasons. But the other type of coroutine we usually call a task, although it's a bit more general than that. It's not just called task. The trouble is there's no single semantic for what that task actually is. So sometimes it's just going to be something you can um suspend and resume at different points, maybe cooperatively multi-task with other tasks. Or it could be that it's waiting for a resource to load over the network or from a file system or user input, uh, whatever it's awaiting on. You can even use uh coroutines to await on std optional or std expected and use it as a way to do monadic error handling. Because coroutines themselves actually model monads, so monads are effectively interchangeable in that sense. So lots of different uses. That's why it's really hard to really pin down a specific implementation for the standard.

Bryce

We're gonna need at least So this uh this uh task thing, which has also been called std lazy at some points. So what is it? Is it an awaitable? Is it a uh you know a co-routine itself? Like what sort of thing is it? How would somebody use this thing? Like what would be a use case for it?

Phil Nash

Yeah, that's this is where getting into what it actually is starts to reveal some of that complexity under the hood.

Bryce

Wait, wait, wait, wait. So we we want this thing, but we don't really know what this thing is.

Phil Nash

Once we have it, once we have standard versions, as long as it matches the semantics, you want you won't have to worry about what's under the hood anymore. But to understand what it's doing right now, you do have to. So the task itself is something you write, and it's really just your interface to the coroutine. So the low-level interface is the coroutine handle, and you also get this thing called the promise type that sort of serves two roles, so the coroutine machinery calls into that, but you can also store things in there and get things out again. So it's like where you store things shuffling to and from a coroutine. But rather than expose all that low-level complexity to the end user, you wrap it all up in this task type, and that gives you a nice sort of semantic-driven interface that matches what you want to do.

Bryce

So it is an abstraction around the coroutine handle. The coroutine handle and the promise type. And and the promise thing.

Conor

I think the best solution here is next time you see Phil's name or even another individual giving a training session or a workshop at a conference. You just gotta go sign up, go to the conference. Speaking of which, you are the organizer we mentioned of the Arch nemesis. I mean, I'm not sure if the conference is our rivals, but at least in ADSP lore, they will be now.

Bryce

Can we even mention the name of his conference or will they kick us out of this one?

Conor

Oh no, we definitely can do whatever we want. It's our podcast. Uh so C on C, which is actually the last time I believe we interviewed you, uh, was live at that conference. Since then, you've also launched two more conferences, I believe. C online. So C on C was in Folkestone, still is in Folkestone. It just finished happening, I believe, in June. And you also have now C online, which is an online conference, and I actually don't know what the name of the Swift conference is. I'm gonna guess it's Swift something.

Phil Nash

Yes, so uh launched uh Swift something this year. Why is Swift conference? Uh well first of all it's Swift Craft. Swift C is the name. And I I did a lot of Swift some years ago now. Well, I started with Objective C uh writing writing. My sympathies. Objective C is very misunderstood. It's got some good stuff. But most of that good stuff actually transferred to Swift, so that's good. Not all of it. Uh we're still missing some stuff. But um no, Swift was a great language when it came out. But those of us sort of watching for it couldn't believe how good it was compared to what we had before. Uh so I really got into it in the early days, maybe a little bit too much, got a bit burnt by the um the bugs in the early support and lack of features, uh, and then stopped doing that as a side project for a while. So I drifted away from it and trying to get back into it. But I built up connections in the Swift community, I know lots of people there. Uh there's some it's a great community as well, and uh there's some some great talks in that community, so I just wanted to bring that back to uh the Southeast UK area where there used to be an iOS conference that went away pre-pandemic, uh, and there seems to be a bit of a gap in the market.

Conor

I was Phil and I were talking last night, and I've got this project that I want to start, and I'd like to use Tristan's Flux library, but my question was, you know, what should I what should I do? Because I I'm dearly missing pattern matching, uh proper language, some type, Stedvarian doesn't cut it. And uh I asked, you know, what should I do if I want to stay in C, and what did you tell me, Phil?

Phil Nash

I said USwift.

Conor

And I said, the the question was about C. And and Phil said, no, yes, my answer is USwift. And uh there you go, folks. Uh he's the runner of two C. And we failed to mention the current co-host of CPPCast and the former co-host of like multiple other C podcasts. Link in the show notes if you want to go listen to the backlog. Uh to wrap this up, what can you tell us? Uh I I I know uh you said things haven't launched, but this is gonna be released in probably two weeks. So today is October 10th, 17th, 24th, so probably in the last week of October. Just keep that in mind based on when this is gonna come out.

Phil Nash

So, what was the question again?

Conor

Uh so like what can you tell us about uh C online? Because I know that's was in February last year, is call for papers, uh registration. You know, what is the uh state of conferences that you will be organizing in 2025 for folks listening to this in October slash November of 2024?

Phil Nash

Right, yeah, so C online, by the time you hear this, the call for speakers should be open. Technically, it's actually online right now. If you go to speak.cpponline.uk, uh you can actually register and submit your proposals now.

Conor

With secret link.

Phil Nash

Yeah, with secret link. There you go. Same as last year, so not that secret. But uh it just hasn't been formally announced yet because we just haven't got around to it. Because I've been preparing for this workshop and this conference. So next week, that should go out. Uh that'll be all online. Um should be running the last week of February, if I remember that right off the top of my head. C on C will open a bit later. Currently, as we speak here, October 10th, ACCU call for speakers is also.

Bryce

Yeah, I just saw that, yeah. A little early this year, I think.

Phil Nash

Um so we've opened it earlier than last year, but that was mostly because last year we opened a bit late.

Bryce

Ah, I understand, I understand. Now, is CPP on C this year not going to be over a major US holiday weekend?

Phil Nash

Uh no, it's the last week in June.

Bryce

Okay, the last week in June.

Conor

Uh was it was it uh was it uh what do you call that, America Day, Independence?

Bryce

It was July 4th, and flights were too expensive for rice, which is saying something.

Conor

Yeah. I mean, was Sean was how I mean uh how was uh 2024 CVP on C? Was Sean there? Because I remember we had a great time interviewing Sean. Still one of the highlights of the podcast.

Bryce

It is probably my favorite C conference right now.

Conor

Whoa, look at that. Look at that. That is breaking news, folks. I didn't even know that.

Phil Nash

Yeah, well I guess my vote. Uh no, Sean wasn't there last uh this year. Um maybe he'll be there next year.

Bryce

Well, maybe maybe we'll all maybe we'll interview you again at CPP on C.

Conor

Yeah, we'll have to we'll have to do a reunion at some point. Yeah. Get Sean, the three of us back together. We'll have uh wine like we did last time. Wait, wait, there was wine? Do you remember we got kicked when we had dinner? We got kicked out of the place because they were they were wrapping up and uh and like we were taking our wine.

Bryce

Oh god, I do remember that. I tweeted pictures.

Conor

I had a uh reasonable amount of wine, and then Sean took the wine bottle and was like, nah, you gotta have some more there. And uh still one of the highlights of uh of my professional career. It was very professional.

Bryce

Sean Parent trying to get you drunk was one of the highlights of your career.

Conor

It was a it was a great night. It was a great night. Uh and we he like silently launched without letting people know was it Val, now Hilo?

Bryce

Something, yeah, I think so, yeah. There are C talks as well. There are also C talks. There's very good content at the conference, which is why I like it.

Conor

The hallway track is always the best track, though, folks. Especially the more and more conferences you go to, it becomes the thing that is most unique. Because at some point you've seen the talk about X and talk about Y. If it's your first conference, you'll be thrilled by the talks. But then after your fifth, sixth conference, it's the hallway track that's always like unique to each conference.

Bryce

You should definitely, you should definitely go to more C conferences, especially C on C. And Phil only pays us a very reasonable commission to say all these nice things about its conference. Well, you're not to say that.

Conor

Alright, we've got 10 minutes.

Bryce

We've got 10 minutes, we gotta go.

Conor

So, yeah, we'll see you around, Phil. Thanks for being interviewed. And um we will either go find Kuhn now or Flores Bob. But yeah, we'll see you around, Phil. We're here with ThinkSell employee Jonathan.

Bryce

In front of the ThinkCell booth.

Conor

Yeah, how's it going?

Jonathan Müller

It's going great. Have you seen any talks or have you been just busy? No, I've seen the keynote and then I spent the second time slot writing a paper since I was told the deadline is coming up. Wow, that's efficient use of your time.

Bryce

The deadline is c the deadline is in fact coming up. What was your paper?

Jonathan Müller

So I'm working on a paper to uh decouple the meta header from reflection from the rest of the standard library to make it more widely used in context where people don't like the standard library. I'm just gonna give it a shot.

Bryce

What does that even mean, decouple it from the standard library?

Conor

Also, should we back up for two seconds? Because technically you do get mentioned in one of the guest lists, I think on the C on C interview chaotic thing we did like a year and a half ago. But that like, I think you had all of half of a sentence, but I thought it was worth putting you like in the guest interviewed. We asked you a question and you had like a four-word answer. But other than that, I don't think we've actually ever interviewed you. So introduce yourself, then we'll go back to this meta decoupling paper writing thing.

Jonathan Müller

Are we gonna cut that or is this just an out-of-order podcast? Out-of-order podcast, okay. I'm Jonathan, you know me from the four center four words I said on the previous episode on the C podcast. Must have been very important. Now I work at Things and I'm a software engineer, you know me from a blog, Furnathan.net or something. I I'm assuming Does your audience know me?

Conor

Yes. I think 80% of the audience does know you because you've also been uh a one-time, two-time guest on C Bvcast, three time? How many times were you on C Bvcast? Uh two times at least. And that was the before Phil uh teamer era, correct? Uh yes, that was the good era.

Bryce

Oh my! You just blew the game. Phil teamer, I I am so I am so sorry. I am so sorry.

Conor

I'm sure he just means good because it used to be weekly back then, and now it's bi-weekly. Is that what you meant?

Bryce

Oh yes, that's what you meant.

Conor

I must have meant because they invited me.

Bryce

You're you're not gonna get you're not gonna get invited back a fourth time. I don't think. So what does uh what does ThinkCell do? You were explaining this to me at dinner last night, and you did a pretty good job.

Conor

Aren't we supposed to go back to the meta well okay now we're doing just out of the state? Because it's his introduction there, right?

Bryce

You know, he said he works at ThinkCell. People don't know what that is.

Jonathan Müller

Yeah, we uh sell a plugin for PowerPoint that makes it like easier to create slides and charts. We're like the standard for all the consultants and everybody who you know makes a living doing PowerPoint slides because it's just so much faster to create slides with a product. And I think I've said slides enough to earn my salary for this month.

Bryce

You you are here with like the marketing and recruiting part of your company. Alright, so back to back to your paper. So the standard library the the C standard doesn't say anything about the structure of the standard library. That's left up to the implementation. What do you mean by decoupling meta from the rest of the library? Do you mean like removing dependencies?

Jonathan Müller

Uh yes, it's about dependencies. So like meta is one of those headers that you cannot implement yourself. You need like compiler built-ins for that. And there are like many people that don't use the standard library yet still want to use reflection. For example, the the function like members of or whatever is the current name with all the private shenanigans going on, I haven't kept up with that. Returns a vector of meta info objects. It does it at compile time, so like you don't have to pay any dynamic memory allocation, but you still pull in the entire include of the vector and require like an implementation of vector, even at compile time. Um and there's also some concerns by like implementers that it's like because essentially the thing wraps like a compiler built-in that just gives you like a point under size, and then you have to somehow turn that into a vector, and this is quite expensive. The advantage is that you then can call pushback on it, but in the vast majority of cases you just need it as a range and iterator with, so it doesn't really have to be a vector. It can be like an implementation-defined type.

Bryce

Okay, that's fine. You so you essentially you want it to be more of like a freestanding header.

Jonathan Müller

I want it to be more freestanding. Technically, like vector at compile time is freestanding, but like it's it's still like a thing that people have to do. Um the more controversial parts is uh stuff like whether name of should return a string view or a char pointer. Uh and things like that.

Bryce

It should review uh a string view or a char pointer?

Jonathan Müller

Right now it returns the string view, and I'm proposing that it returns a char pointer and just having that poll and see what happens.

Bryce

I mean, I think we do have some other interfaces lower like what is what is source location return?

Jonathan Müller

Yeah, exactly. Source location returns a const char pointer. I don't know what contract does.

Bryce

Uh I don't that's not real yet. So um so so what was the reason that source since source location is fairly new. What was the reason that it returns uh uh const cow char?

Jonathan Müller

Uh I'm assuming it's to avoid pulling in string view.

Bryce

Yeah, I'm pretty sure that that's right. Yeah, and I think it may have also been something about the implementation concerns too. And it was like considered fine because it's a uh it's just like a string constant, like a compile time constant. It's always what it is. Yeah, I don't know, you might you might win that particular set of uh debates.

Jonathan Müller

Yeah, yeah, we have to see. Like you can like some of the API like the the the adding like some of the APS they're they keep adding are like really tricky and they pull in like a whole bunch of ranges machinery, and changing that in a way without having to pull in the ranges machinery is a bit tricky. And if like if you're pulling in ranges, then what's the point about SpringView anyway? So there is some uh as I said, I like started writing this paper like an hour ago.

Conor

So will will uh there be a paper number by October 24th for us to include in the show notes?

Bryce

There probably already is a paper number.

Conor

There already is a paper number. If if you walk a bit over there, I can let's walk. Also, do we win any of this free stuff?

Bryce

I've already you know, I already have so many ThinkSell socks. I'm just not taking any more ThinkSell socks.

Phil Nash

You can get them.

Conor

We don't just get them?

Bryce

I'm I'm good, I've already got them.

Conor

The paper number is uh 4329. 4329, folks. And if you don't know the trick, it's wg21.link slash p and then the paper number. Or is it P slash the paper number?

Bryce

I remember I remember before there were P numbers.

Jonathan Müller

I remember 4,000 papers ago before it's news to me that Vice was born when there were before P numbers.

Conor

Alright, we got three minutes until the next talk. It's lunchtime, folks, in case we haven't mentioned. Uh we were actually trying to get Jason Turner, the first keynote speaker of the day, but because he is leaving quickly after the conference ends, the final keynote. So we only have the break at three o'clock, I believe, till three thirty local time to hunt him down. Thank you so much, Jonathan, for being on the podcast for more than just a single sentence. Any final words to share with our C slash non-c listeners? The mic is yours.

Jonathan Müller

I'm kind of regretting this because I now have to finish writing the paper.

Conor

Well, you already had the number, so whether it got into this mailing, it would have got into a mailing at some point, but. And no, not if you never press submit. I've forgotten a couple of numbers.

Bryce

Every committee member has a collection of paper numbers that they haven't submitted more. And you and you know it too, because every now and then, like, you see like a like P like0700 gets published, and it's like next to like all the 4,000 papers, and you're like, what happened here? And it's like, oh well, somebody had an idea back in 2018 and they just never got around to it.

Jonathan Müller

Yeah. I actually, when I like opened the GitHub repository with my papers, I saw a bunch of like completely unstaged papers that I've started writing like over a year ago, and I have absolutely no memory of me doing that.

Bryce

I I also save some good paper numbers, so I got a I got a couple good ones, and like I just I have my old paper numbers that I reserved, I've just like they're just now now reserved, like in case I need like to publish some really impactful paper, so people will have a good number. I got s and sometimes I email the uh the admin chairs and like, hey, like can you give me this paper number? So I got some of the good ones.

Conor

Alright, folks, you heard it here. The broken process of uh paper number, you know. I don't know what to say. We'll see you around at the conference. Hopefully, I don't know, you'll be at the final keynote at least, I imagine. Uh yeah?

Jonathan Müller

Uh yeah, I don't plan on leaving until tomorrow.

Bryce

Okay.

Conor

We'll see you around then.

Jonathan Müller

I can pretend to be Jason Turner if you can't find him.

Bryce

I would like to hear your Jason Turner impression.

Jonathan Müller

I'm getting my life choices.

Conor

Be sure to check these show notes either in your podcast app or at adspthepodcast.com for links to anything we mentioned in today's episode, as well as a link to a GitHub discussion where you can leave thoughts, comments, and questions. Thanks for listening. We hope you enjoyed and have a great day.

Bryce

Low quality, high quality, that is the tagline of our podcast.

Conor

It's not the tagline. Our tagline is chaos with sprinkles of information.