Algorithms + Data Structures = Programs - Episode 140: 🇨🇦 CppNorth Live 🇨🇦 Victor Ciura, Andreas Weis & More!

Episode Date: July 28, 2023

In this episode, Conor and Ben Deane record live from CppNorth 2023 in Toronto, Canada and interview speakers!Link to Episode 140 on WebsiteDiscuss this episode, leave a comment, or ask a question (on... GitHub)TwitterADSP: The PodcastConor HoekstraBen DeaneGuests InterviewedBen DeaneVincent ZalzalVictor CuiraTristan BrindleAndreas WeisShow NotesDate Recorded: 2023-07-18Date Released: 2023-07-28CppNorthCppNorth 2023: Calendrical C++ - Ben DeaneCppNorth 2023: Keynote - Optimizing for Change - Ben DeaneC++Now 2023: Calendrical C++ - Ben DeaneCppNorth 2023: Composition Intuition - Conor HoekstraCppNorth 2023: And Then() Some(T) - Victor CiuraAll of Ben Deane’s ADSP EpisodesCppNorth 2023: Writing C++ to Be Read - Vincent ZalzalC# LINQC++20 std::views::iotaC++23 std::views::zipC++23 std::views::enumeratePython enumerateRust enumerateC++20 flux LibraryLambdaDays 2023: Composition Intuition - Conor HoekstraCppNorth 2023: Iteration Revisited - Tristan BrindleC++ On Sea 2023: Iteration Revisited - Tristan BrindleCppNorth 2023: Keynote - Steps to Wisdom for C++ Developers - Kate GregoryMind in Motion by Barbara TverskyCombinator Logic: Volume I by Curry & FeysCppNorth 2023: Building Interfaces That Are Hard to Use Incorrectly - Andreas Weis2023 Annual C++ Developer Survey “Lite” by ISOJetBrains C++ State of Ecosystem in 2022BlackBerry MovieIntro Song InfoMiss You by Sarah Jansen https://soundcloud.com/sarahjansenmusicCreative Commons — Attribution 3.0 Unported — CC BY 3.0Free Download / Stream: http://bit.ly/l-miss-youMusic promoted by Audio Library https://youtu.be/iYYxnasvfx8

Transcript
Discussion (0)
Starting point is 00:00:00 Ben is going to be temporarily replacing Bryce. I say every once in a while on the podcast that we do have to test out different co-hosts, you know, in case Bryce takes a tumble. Temporarily as far as Bryce knows. Of course, of course, like way better, way better. Like your subscriptions will double at least. I really like it. Honestly, it's my first conference both as attendee and speaker. The conference is awesome. So we're recording this at the end of the second day. Honestly, a really, really fantastic experience so far. I know, spreading the love for functional programming patterns and...
Starting point is 00:00:34 Hang on, this thing is actually a find if, or this thing is a count if, or that's a rotate. But definitely changes the way you think about code. So it's about shifting the way you approach code and design. You could imagine some god-like voice saying, and then there was the elementary identificator. We started with I. What about?
Starting point is 00:00:53 What do you mean, what about? It's about ducks, right? Ducks? It's not about ducks. Welcome to ADSP, the podcast episode 140 recorded on July 18th, 2023. My name is Connor. And today with my co-host Ben Dean, we record live from CPP North 2023 in Toronto, Canada. We interview several different speakers, Vincent Zaozao, Victor Ciara, Tristan Brindle, and Andreas Weiss. We are here live from C++ North, CPP North. I still messed it up. It's all right. With bending,
Starting point is 00:01:39 it is live 2023. Today is July 18th, second day of the conference, and you have finished both your talks. You gave one talk, Calendrical C++, It is live 2023. Today is July 18th, second day of the conference. And you have finished both your talks. You gave one talk, Calendrical C++, yesterday on Monday. And you just finished your keynote today, Optimizing for Change. It was absolutely fantastic. How's the conference been and how have your two talks been? The conference has been great. My two talks have both been great.
Starting point is 00:02:05 The Calendrical one was, that was the fifth time, I think the fifth or fourth time I've given that talk, so that was, that's a really fun talk, you know. It was originally scheduled later in the week, but with things being swapped around
Starting point is 00:02:16 with some folks had travel issues, it got swapped to yesterday. And then the keynote this morning, you know, I have this thing when I'm up on stage, I don't really remember what happens up on stage. I think it went well. I think I hit all the points I meant to hit.
Starting point is 00:02:30 And people seem to enjoy it. So that's a win. I personally thought, I mean, I can't speak for everyone at the conference. I thought it was fantastic. The links will be in the show notes, but probably actually by the time, I think keynotes, I don't actually know. The links, they might go up fairly soon. Keynotes typically go up first, so the keynote talk will definitely be linked.
Starting point is 00:02:53 And I think, I don't actually think your calendrical C++ one is out from C++ Now yet, but by the time this airs, it probably will be because I know that C++ Now is slowly rolling out. So there will be some links. Some will be live. Some will be live in the future. Outside of your two talks, what have you enjoyed most? Is it the food? Has it been another talk?
Starting point is 00:03:12 There's been lots of good stuff here. The food is good. The food's really great. The maple tarts came out just now. We just literally, like this break session. Did you have one? I did. I had one.
Starting point is 00:03:25 I was specifically looking for them. Apparently they, and I asked Mike about them from yesterday, and that's how I learned they'd be here right now. But the talks have been fantastic as well. Your talk, Composition Intuition, was just super fun, all about combinators. A passion project of mine. Link will be in that in the description that probably
Starting point is 00:03:46 won't be out for a couple months but uh all of them all the talks are being recorded so you'll be able to watch them online if you weren't here at the conference yeah absolutely um i've been just trying to go to talks that uh are new to me there's always a few at every conference where people you know because people make typically maybe one talk a year, maybe two, and they take them to different conferences. So there's a couple of talks here like would be at any conference that I'd seen before on YouTube or from ACCU or wherever it was given before. So I've been trying to hit talks that I haven't seen.
Starting point is 00:04:19 I really enjoyed Victor's talk. I enjoyed Timo's talk on safety, which I had seen an earlier version of, I think, but people also have all their talks, so that was great. Victor's talk was fantastic. It was what, and? And then some tea, I think.
Starting point is 00:04:37 And then some tea? Yeah, and then, paren, paren, some, paren, paren, tea. It was about, what was it about? It was about, what was it about? It was about... Functional patterns with optional and expected. And maybe some other things I don't remember because I'm on the mic. Yeah, that was basically my recollection as well. I mean, it had an odd title.
Starting point is 00:05:01 It could have had a different title that was like, you know, yeah, exactly what you just said. Functional patterns with optional and expected. And it alluded, there was a bit of Haskell code, talked a little bit about functional programming, my favorite kind of, you know, sprinkling code from different languages, show how we stole ideas, and
Starting point is 00:05:18 how to use them well in C++. About right? Yeah, that sounds about right to me. Alright, I think the goal is now, you are going to be my replacement for Bryce, my traditional co-host, co-host for the moment, but being replaced by Ben himself. And also, too, I keep the stats, and maybe we're probably in a bad place, because now that I realize, we're standing right in front of the coffee. We could step down into the more upholstered area where there's less hard surfaces.
Starting point is 00:05:45 That's exactly what we're going to do. And it's for the moment, Bryce, I'm going to hand the mic to Ben. Ben's going to do the interviewing. I'm going to do the audio adjusting. And the point is, Ben is going to be temporarily replacing Bryce. I say every once in a while on the podcast that we do have to test out different co-hosts, you know, in case Bryce takes a tumble. Temporarily as far as Bryce knows, yes. And that was what I was going to say.
Starting point is 00:06:08 We'll see how Bryce reacts. Well, I have all the power, so if I want you to be co-host for the day, you get to be co-host for the day. I was going to say is I think you are the number two most featured guest by podcast edits, like by podcast numbers. Sean is number one. I believe when this is released, it'll be like 11 podcasts across four interviews.
Starting point is 00:06:32 And I think you are at like seven or eight across two interviews. I think it's just that we talk for so long when we interview and you split it up for like maybe four or five. Like I've only actually talked to you twice, but you don't tend to have guests very frequently maybe you're wrapping that up a bit but yeah it's actually i think it's three times now because the most recent uh you and tristan that was the third we did a solo one
Starting point is 00:06:55 with you that was like four and then we did the you and tony live from c++, virtual 2020 or 2020. Was it virtual? It was definitely virtual, I think. I think that was the 2020. It was the first virtual conference, right? I think it was canceled in 20, and it must have been 21 when it came back. That definitely sounds right, actually, yeah. I think 2019 was the last in-person one pre-COVID. 2020 was canceled, and then 2021, I think that was completely virtual.
Starting point is 00:07:28 And then Tony showed up halfway through. Right, right, because we were in that, I forget the name of it. Gather Town, Gather Town. Gather Town, yes, yeah. All right, now we're hunting. We've talked to Kate Gregory and Jessica Kerr, two of our keynotes. One has spoken on Monday, Jessica speaking tomorrow. They both agreed to chat with us tomorrow. But right now they're both preparing for lightning talks, which are going to
Starting point is 00:07:48 be taking place in less than 45 minutes or so. Vincent, do you want to be interviewed? All right. I'm handing the mic over to Ben. You're in charge now. And Bryce, let's hope he doesn't do too well because your tenure here could be on limited here. All right. So here we have Vincent Zalzal. You just gave a talk that I was in just now, and it was about how to write readable code. How did it go?
Starting point is 00:08:19 I did better than I thought I would. Really, I'm happy with how it went. And I hope that it's a nice intro talk for anyone that wants to learn to use the C++ core guidelines and choose the right parameter types, the right code that every team member can understand clearly. And, yeah, I just hope that it gets shared in the end. Right on, yeah. How's the conference been in general? I really like it. Honestly, it's my first conference both as attendee and speaker.
Starting point is 00:08:53 So I really like it. I like seeing all the people I've looked at on the Internet before, like you, actually, and listen to the podcast. So, yeah, I'm very happy and surprised actually to now be on the podcast so yeah so this is the first time you've been to any c++ conference did you say it is it is it's my first time yeah you think you're going to come back to this one or to any others yeah maybe maybe the stress level was quite, so I have to calm down first. But yeah, I think so.
Starting point is 00:09:28 Well, great. We have a new speaker on the circuit. We have Vincent. That's fantastic. And I'll follow up with a question. Just for the listeners, where are you based out of and what do you do for work? So I'm based in Montreal, Canada, and I work in the computer vision industry so I've done 3D reconstruction and sensor calibration so camera calibration think about removing distortion from images taking world measurements from pixels converting all of that, maybe confirming that a mechanical object is to specs, that kind of stuff.
Starting point is 00:10:09 So computer vision in general. Awesome. How long have you been programming C++? I've been using C++ professionally for 15 years, a little more than that before at school, say. And I've used some other languages, but mainly C++ at work. I've done some C Sharp too for two years.
Starting point is 00:10:27 And on the side, some MATLAB, Python, some Rust. And how modern is the C++ you get to use? What standard are you on? It depends. Unfortunately, I've been capped to C++ 14 for a very long while. So it's actually by looking at those conferences, those talks that I could keep up to date and by doing side projects and that kind of stuff. And in the last two years, I've been doing C Sharp.
Starting point is 00:10:58 So yeah, I felt almost like an imposter now not being at the forefront and not using C++ in the last two years, but I think I've kept enough up to date to be on par, at least to be a speaker. C Sharp has the benefit that Link came in, what, C Sharp 3 or something?
Starting point is 00:11:16 I don't know anything about C Sharp, but I know that the equivalent of C++ 20 ranges stuff has been in C Sharp for many versions now, so my guess is that you have access to that kind of stream fusion composable function stuff, which is great for C Sharp for many versions now. So my guess is that you have access to that kind of stream fusion, composable function stuff, which is great for C Sharp. We love that, right?
Starting point is 00:11:30 Honestly, Link in C Sharp is pretty neat. I find it really nice to use. And it's, you know, the fact that you can use the dot syntax or you can use the SQL syntax if you prefer. You have like two different syntax to use that depending on which you're more comfortable with. But there are also things that I really dislike about C Sharp.
Starting point is 00:11:53 So yeah, I'm glad to be back to C++ now. Cool. I need to tell you, by the way, that the global API injection pattern is usable in 14. It's not just for 17. Even though I showed it with a variable template, which is 17, you can do it with a function template
Starting point is 00:12:11 with return type deduction, right? 11 doesn't have return type deduction, so you can't specialize the function template in the same way, but it works on 14. So if you are still stuck on 14, you can still use it. I'm looking forward, actually, to look at that code, understand it calmly can still use it I'm looking forward actually to look at that code, understand it calmly
Starting point is 00:12:28 and yeah I'm very curious to know because it's a very common problem having global APIs I think everybody has that problem so if there's a nice pattern that we could encapsulate and propagate it would be so nice so yeah I'm looking forward to try it
Starting point is 00:12:44 Cool Alright thank you so much Vincent we will definitely link would be so nice. So, yeah, I'm looking forward to try it. Cool. Awesome. All right. Thank you so much, Vincent. We will definitely link your YouTube talk when it comes out in the show notes. And if you're on the socials, I'll find you and link your stuff so people can follow you. I'm not sure if Twitter, Mastodon, Threads, you know.
Starting point is 00:13:01 It's a confusing time for social media. But I will track you down if you have it, and we'll link it in the show notes. Thanks for being on the pod. Thank you. All right. We are going to go find, maybe we should talk to Victor. Seeing as we were talking about his talk, I see the back of his head right there. Victor, do you want to be on the podcast?
Starting point is 00:13:17 What about? What do you mean, what about? Are you telling me you don't listen to ADSP, the podcast? It's about travel. It's about ducks, right? Ducks? It's not about ducks. It's about the travels of Bryce and Connor.
Starting point is 00:13:30 Yeah, that's true. It's a C++. Do you want to come? Or do you have to get approved by you've got to talk to Satya Nandela? Hopefully not. Hopefully not. We're going to hand Mike once again off to Ben, our replacement for Bryce. Replacing Bryce.
Starting point is 00:13:46 And he's doing great so far. It's not looking good for Bryce. Here you go, Ben. Well, let me tell you my travels in the last month. Yeah. You have walnut furniture. I was Slovenian. You're going to be editing this, right, Gunnar?
Starting point is 00:14:00 I mean, I think I'm going to leave that part in. That's fantastic. Let's see. At the beginning of each interview, we should roast Bryce a little bit. I love that. Okay, so Victor Chura, you're at Microsoft, right? Yep, that's what they say.
Starting point is 00:14:15 And so what kind of, I mean, what's your position? What kind of C++ are you doing day to day? I'm in the IDE productivity team and the IDE experience group, and I work on tooling. Stuff I've been working on for many, many years now, even before joining Microsoft. I've always done
Starting point is 00:14:31 developer tools, SDKs, libraries, productivity stuff for devs mostly. So I keep doing that and helping to improve hopefully the tool I've been using for 20 years now. Nice. And so hopefully the tool I've been using for 20 years now. Visual Studio.
Starting point is 00:14:46 Nice. And so you had more than one talk or just one talk? You had a talk yesterday here and then some tea, which was about optional, expected, functional patterns. Yep. Can you tell us a bit about that? So it was one of the talks in my long arch on spreading the love for functional programming patterns and embracing writing more clean and readable and composable code
Starting point is 00:15:19 and borrowing concepts from functional programming languages and figuring out how to use them in day-to-day C++. And most of the examples were centered around monadic extensions for standard optional and patterns in using the new standard expected. So I saw interest in the crowd. I had quite a few questions after the talk. So people seem to be interested in that kind of stuff, and that makes me happy.
Starting point is 00:15:50 And hopefully the talk was well received, and people will be inspired to learn more about these kind of things. I've done quite a few functional programming style of talks, so maybe I'll keep doing that. Do you use a lot of functional programming in of talks so um yeah maybe i keep doing that do you use a lot of functional programming in your day job uh not a lot but um i i i tend to be inspired by that style of of thinking and mostly by decomposing problems in that way and structuring, composing computation and structuring programs in that way. It's not something that resembles a lot in what you've seen in the slides, but definitely changes the way you think about code.
Starting point is 00:16:39 So it's about shifting the way you approach code and design. I agree wholeheartedly. That is my experience as well, I would say. So C++ code won't look like Haskell code. But yeah, Connor... And it won't look like APL either, Connor. I mean, it definitely won't look like APL, but the range of stuff, you know,
Starting point is 00:16:59 the range of stuff is getting pretty Haskell-y, if you ask me. Yeah, yeah. And I like how you did the progressive transition from rust to c++ where it was half rust half c++ mixed and and when he kept the the the captures in the lambdas in rust style and because it looked better that was cheating that was don't uh don't tell anyone but that that was the lunch break in the prior talk slot. Adding all of those slides was like over the last three days.
Starting point is 00:17:28 And I wasn't sure I'd have time to get all those animations, but it looked so nice. What's the name for Enumerate? And then I think, Ben, you were the only one that got it because everyone said Iota. It's Enumerate in 23, right? Exactly, yeah. But even I forget about it. For so long, I have been using Zip with Iota because it was the very, very last range adapter to get in because I believe it was quarantine.
Starting point is 00:17:49 It had been working for so long to change the API a little bit, but then they just decided to throw it out. They had something that was working. But anyways, it went in at the 11th hour, and it's always at the bottom of the list of the stuff that people list off. Anyways. I didn't know about Enumerate, honestly. I mean, I've never used it. I just
Starting point is 00:18:08 know about it from somewhere because I read cppreference.com every day. I mean, it's a weird hobby. It's a perfectly good hobby for a C++ programmer. I'm still miffed that they didn't call it zipwith.
Starting point is 00:18:23 I actually really wanted zipwith.iota, but Sc't call it zip with. I actually really wanted like zip with IOTA, but Scala calls it zip with index, which I actually, I was having this debate with someone yesterday that they said, oh, but enumerate's the right word for it. And I was like, eh. I think index is more explicit. I mean, it's more honest in what it does.
Starting point is 00:18:40 Whereas enumerate, you kind of have to know what it does. Yeah, I mean, other languages, there are some other languages that call it enumerate, you kind of have to know what it is. Yeah, I mean, other languages, there are some other languages that call it enumerate, right? Yeah, definitely Python is the most popular. Rust calls theirs enumerate as well. And I think Rust kind of borrowed it from. But I think the most common, it's not like filter or map where there's almost, you know,
Starting point is 00:19:00 a universal agreement on what it's called. Except C++. Yeah, except for C++ when it comes to map. That was also the other joke of enumerate's enumerate, filter's filter, map is transform. But I think enumerate is the most common, and then it's kind of across the board.
Starting point is 00:19:16 It's either enumerate or something kind of that every language chooses something else. But, you know, what can you do? You know, we'll learn to love it. I think it's odd, though, that Enumerate doesn't have an overload that takes a starting value because the spelling of it sometimes is almost shorter because you have to do a map with a plus one. It's almost easier to just zip with Iota because Iota has an overload that can take...
Starting point is 00:19:40 Exactly. I find that just interesting is, like, the mental arithmetic of, like, Enumerate's only useful when really you want zero or you're going to be calling a map right afterwards. Anyways, check it out in C++23, folks. Good stuff is coming. Speaking of good stuff,
Starting point is 00:19:57 let me do interviewer now. So I'm curious. I saw a lot of folks approach you after your presentation today and I was curious, how did a lot of folks approach you after your presentation today, and I was curious, how did they embrace the combinators and all that good stuff that you showed? Did you get a lot of questions around figuring out, learning, understanding that kind of code when you see it for the first time?
Starting point is 00:20:22 What was the reaction? I really think this is the inflection point for array languages. I can really see BQN and APL entering the top 20 languages, I think, after this. No, I'm just kidding. What are you drinking? I think there's definitely, maybe at this conference, it's more, it piques people's curiosity. I mean, Tristan, who we're about to talk to. I mean, Tristan, you can come up here.
Starting point is 00:20:47 Well, yeah, Tristan, come on over. Well, I'll finish answering Victor's question in a second. But Tristan asked a question, or not asked a question, but made a comment how he sees how introducing maybe these combinators not in the same library, but like how it could increase the flexibility of a ranges-like or flux-like library. And more interestingly is that I gave this same talk at Lambda Days in Poland back in June, a month ago. And that was a functional crowd. And I heard from maybe not a double-digit number of people, but I had, at the end of my talk sort of put the URLs for the
Starting point is 00:21:26 BQM pad and try APL and a bunch of folks had like immediately gone. But I think they are so much more ready because they're already in Haskell or Scala or Clojure. So, you know, APL and BQM, it's a much smaller step. It's still a big step, but they see that and they're like, oh, cool. I want to take it for a spin. Because I think also that they're coming from Haskell. They're already familiar with a lot of these ideas, so it's less of a mental jump. But I think there's definitely, it piques people's curiosity. I don't think folks are going to be switching to a new language.
Starting point is 00:21:54 Anyways, let's bring Tristan into the conversation. Yeah, I'll just do a quick intro for Tristan. Friend of this podcast, author of Flux, Tristan Brindle, C++ trainer, based in London, right? All correct, yes. Hello. And I just realized this is the in-person trio that we just did a podcast interview, several episodes, may have been two months at this point since we released it.
Starting point is 00:22:19 We did it on Zoom, and now here we all are, plus Victor. And Victor, where are you based out of? I'm in Prague now. So look at that. We're global here. We've got a Canadian, someone in America, someone in the UK, someone in Prague. Awesome. So tell us about the conference, Tristan.
Starting point is 00:22:34 The conference is awesome. So we're recording this at the end of the second day. We're just about to have the lightning talks. It's been honestly a really, really fantastic experience so far. So I haven't given my talk yet that's coming tomorrow uh hopefully that's going to go well uh but so far the conference has been great and um especially the talks by uh by ben and connor and i'm not just saying that because ben's holding the microphone no pitch your talk pitch your talk for tomorrow yeah what's your
Starting point is 00:23:01 talk about tomorrow so my talk tomorrow is uh it's kind of a well it's about my flux library that uh long-time listeners of adsp will already be familiar with um so it's about kind of the motivation why i wrote this new library what i'm intending what the goals are and then some sort of usage examples and some information about how you can use it and the cool things you can do. Great. So practical advice. Well, getting started advice, I guess. Anecdotally, we just interviewed you very briefly.
Starting point is 00:23:43 You got listed in the guest interviewed, but your interview was all of about 30 seconds at C++ on C, which was two or three weeks ago now. And you gave the same talk, but since then, I'm not sure how many other talks, if you did a tally, mentioned or showed Flux code in their talks. I think it might have been zero other than yours. But now here we are, less than a month later, and you've had two talks at this conference outside of your own that you haven't given yet that have mentioned Flux.
Starting point is 00:24:01 I don't know if it's going to be an error. What, four? Three? Three. What was the third one? Timur, apparently. So it was, yeah, Victor's was the first. It sounds like Timur in his talk showed some Flux code. He mentioned it. He didn't show Flux. That still counts. That's zero to three.
Starting point is 00:24:18 Is it going to be arithmetic? Is it going to be geometric? This is what happens at conferences, right? You come and then you've got, if you're a speaker, you've got a talk that you're giving and you watch talks and then things occur to you and you sort of react to the talks as you go through the conference. It happens all the time.
Starting point is 00:24:36 Yep. So, yeah. Flux is... Spreading like wildfire. Flux is an idea whose time has come. Well, I mean, I think so. I think it's a great idea. I hope I can persuade other people of that as well.
Starting point is 00:24:48 Cool. All right. I mean, should we ask? We've got Victor, we've got Tristan. Should we ask anything else while favorite talks or, you know, what should the listeners of the podcast do after listening to this episode? Again, I'm going to bust up Ben because he's standing right next to me. But genuinely, your keynote today, that was a really, really excellent talk.
Starting point is 00:25:10 Other sessions, I mean, Kate's keynote was fantastic. You don't really have to say that. You could just say, well, Kate Gregory gave the keynotes. I really, I mean, I'm just, I really enjoyed Victor's talk. I really enjoyed Connor's talk. I really enjoyed Connor's talk. You know, it's just been a great experience all round. I agree.
Starting point is 00:25:29 Victor, any final words? So most mind-blowing talk was combinators. Yeah. Unsurprisingly. Yeah. I'm still going to digest that one. And so on that one, I'm one, should I be thinking about birds? Should I be thinking about letters?
Starting point is 00:25:48 How should I form a coherent view of combinators, Connor? You should be thinking of composition patterns. Hooks. Yeah, but what name should I use? I'm thinking I'll just go with birds. I mean, birds is fine. I, like, the strongest semantic attachment of this concept to a word that I have is combinators, specifically the combinatory logic combinators that I showed in that Venn diagram. But birds is fine.
Starting point is 00:26:16 Composition patterns is fine. Honestly, like, the birds, the letters, they're all attached, and it's more just the pattern of, like, I didn't mention this in the talk, but, like, think if you have a binary function and a unary function, a function that takes two arguments and a function that takes one argument. How many different ways can you compose those? Is this, like, a Catalan number problem? No, it's not really a Catalan. It's just, like, start to think, like, we covered the B1, the blackbird,
Starting point is 00:26:43 which is apply the binary first and then pass that to the unary. The psi combinator is apply the unary twice to each argument and then pass the results of those to the binary. The S combinator is apply the unary to the second argument, but leave the first argument alone. The sigma is the reverse of that. Apply the unary to the first argument. Okay. So you just like combinatorially explore the space there, and each one is a different combinator.
Starting point is 00:27:07 And what's interesting is the first time I came across it where the S is reversed, where you're applying the unary function to the first argument instead of the second, the second one is the S combinator. It's in the S-K-I combinator logic. But I hadn't seen anywhere where it was applied to the first until Marshall Lockbaum's I programming language, which he did in 2012, where they call S in J hook, and then he implemented what he called the back hook, which is basically just that missing combinator, which is what it doesn't have a letter.
Starting point is 00:27:37 So I made one up, and I just called it sigma because there were some Greek letters. And so S has the corollary sigma, and then D, which I never explained, has a corollary delta. But just this, if you start to play this game of, it's the same thing with algorithms, when you have find, which takes a value, find if, which takes a unary predicate, adjacent find, which takes a binary predicate. It's like, there are
Starting point is 00:27:57 certain algorithms that are missing the unary predicate version. It's like the standard model in particle physics. You anticipate new combinators based on symmetries and missing things. The arrow can point the other way.
Starting point is 00:28:11 Yeah, exactly. Yeah, someone was saying... New elements, new particles. Exactly, the periodic table. Did you say that earlier? It's like a periodic table where originally
Starting point is 00:28:19 there were gaps but you infer the existence. It's this... We were having a similar conversation yesterday about this book, where I was the one that mentioned the book called Mind in Motion by Barbara Tversky,
Starting point is 00:28:29 which she makes this sort of push for this idea that like thought is not based on language like Noam Chomsky says, but it's based on visualizations. And like she described a couple of things of like taking this text or, you know, if it's these combinators, but then you visualize it, you put it in this kind of hierarchy and then you see missing gaps and it's
Starting point is 00:28:48 like i would never have seen that just by looking at the lambda definitions and say oh s like where is the where's the version of s that has it over here but like you see this graph that's missing like a node and then you're like shouldn't something be there and then you're just like reverse engineering what's missing it's really so one one of the takeaways I got from your talk was that it's a bit like if you start off just writing for loops, right? And then you kind of get to recognize the patterns of, oh, hang on, this thing is actually a find if, or this thing is a count if, or that's a rotate. And then you start to reckon, hang on, that's actually what I'm doing. And I think it's probably the same thing with these combinators
Starting point is 00:29:27 that you just write the lambda and it does the right thing but then you do it enough and you start to recognise the patterns of, hey, no, actually I'm composing these functions in this way. And the hidden combinators are an interesting thing where you have algorithms like inner product and similar things where you don't actually see it but it's part of how it's constructed it's part of you know and how you use it so it's it's it's not visible you have to understand and to identify the pattern so it's it's it's hidden it's not visible it's it's not a function or a macro that you see there like
Starting point is 00:30:01 in in your face you have to understand it i've got a final question for you connor do you have a copy of of the book the combinatorial logic volume one it is not in print and it is actually it's very hard to find on the internet however i do have not a legally obtained copy because my eyes go sideways. Of the first volume, I have both a PDF version and some other, I have no idea what the dot, sort of,
Starting point is 00:30:32 it's not Moby, but it's something. So I do have a copy. If you look hard enough, it is online. And that's actually where, like, I never found an article that mentioned the elementary combinators.
Starting point is 00:30:42 And I haven't read the text in full because it's very dense. But I skimmed through it. And in chapter five, that's when they actually get to, like, introducing the elementary combinators and i haven't read the text in full because it's very dense but i skimmed through it and in chapter five that's when they actually get to like introducing the different combinators and there's this great section where you know it starts introducing them and it's like you could imagine some like god-like voice saying and then there was the elementary identificator we started with i and then it goes on like paragraph to paragraph and i'm reading this just being like oh my goodness like like this is fantastic i mean probably other people would be like what is he he talking about? But like for me personally, you know, it's probably the similar when you're doing your calendar research and you stumble
Starting point is 00:31:09 across some factoid and you're just like, oh, this is great. You know, it's, uh, it's what we do for fun. We love it. We absolutely love it. I got to say the combinator that I miss most is Kestrel. I find myself needing that all the time, especially in type-based programming. Kestrel is the K combinator, correct? Yeah, const in Haskell. Yeah, that is I mean, when I first saw it,
Starting point is 00:31:35 I think I said that in the talk, I and K, my first thoughts were both of these, like, this is stupid. Who needs a function that returns its argument and then K is just throwing one away and keeping the other. Like, who needs that? Yeah, you don't realize the need for it when you first see it cold until you actually start using combinators and you figure it's incredibly valuable.
Starting point is 00:31:53 They are very, very useful, and it only becomes apparent once you, like Tristan was saying, once you start to name these or just recognize these patterns, they're all over the place. And I don't think I actually said it in the talk, but like my, one of my sort of evolutions of my thought or like I, my assertion is that like these composition patterns are like more fundamental than like binary mathematical operations.
Starting point is 00:32:18 Like we learn symbols for plus, symbols for time, symbol for divide and minus. And then we stop there and we don't do anything for min and max, except if you learn APL or BQN or J. But, like, these things, they apply to, you know, the space of math and numbers, but not really outside of that, whereas composition applies to every kind of function. Like, passing an argument, you know, the same argument twice, that applies, there's no, like, domain that that's limited to, right? Like, any function you can do that with, and, you know, maybe people prefer their parentheses and stuff, but, like, once you start to see it, it's like, it's like when you
Starting point is 00:32:54 see something in another language, and then you come back to C++, and you miss it. Like, when I am coding without these little patterns, it breaks my heart, especially, too, even in Haskell, like, you've got to use four characters, five characters for some of these things. Like, yeah. Like symbol symbol is it's massive. Like the fact that W or C like flip or join are just a single character really influences the way that you will reach for these things. Cause it's, cause it's just one thing. It's just one character. Yeah. I mean, in Haskell, I'm, I come from Haskell originally before, you know, you came from Combinators to this. I came from Haskell to this. And so I know them as Flip and Const and Join, as you say.
Starting point is 00:33:36 So now I've got to rewire my brain to think about the birds instead. I'm being a terrible host now because Victor asked a question and then, you know, it's like a... Well, also, I don't know how long you wanted to go with this recording or when the lightning talks are. terrible host now because because victor asked a question and then you know it's like yeah well also i don't know how long you wanted to go with this recording or when the lightning talks are uh lightning talks are in 17 minutes so we'll probably do 10 more minutes but we'll we'll we'll thank tristan and victor and we will pivot to to andreas andreas vice uh you work at woven planet thank you tristan and thanks thanks victor thanks tristan i i'm standing here for bryce on the You work at Woven Planet. Thank you, Tristan. Thanks, Victor. Thanks, Tristan. I'm standing in for Bryce on the podcast.
Starting point is 00:34:08 Anything bad or any, you know, you want to say anything bad or how great of a co-host Ben is. Would you like to hear Ben more as a co-host? Of course, of course. Like, way better, way better. Like, your subscriptions will double at least. Oh, Bryce. If that's the truth, we might need to see some numbers.
Starting point is 00:34:26 But if that's the truth, let's hope if this one gets twice as many views as we do regularly, we might have to consider this. So, Andres, you gave a talk here yesterday. Can you tell us about it? Yeah, I was talking about interface design, the famous Scott Myers guideline, make your interfaces easy to use correctly, hard to use incorrectly. And I was demonstrating some techniques,
Starting point is 00:34:52 how you can use the type system to make that work for you. Very nice. Something very close to my own heart. What C++ standard were you targeting with that talk? That's a good question. I think I had mostly stuff that should work with 17. I think the only thing from 20 that I had in there was the designated initializers,
Starting point is 00:35:14 which is a feature that I like very much. But that was just one example. So most of the stuff should work with not quite that recent standards as well. Great, great. Yes, I think pretty much most people are close to 17, if not on 17. A lot of folks at conferences are now.
Starting point is 00:35:33 A lot of folks are wanting to get to 20. I mean, I'm on C++23, but we will link. That's because I'm in research. I mean, technically, I'm on C++23 when it suits me and then Circle when C++23 doesn't suit me. But we will leave a link in the show notes to, I think there's a JetBrains one. And is there a separate ISO C++ or like C++ foundation? Sorry, JetBrains what?
Starting point is 00:35:54 JetBrains survey that does the actual analysis. And I think probably the median is C++17. Yeah, I think so. So how's the conference in general? Any favorite talks? Oh, yeah, it's very nice. It's my first time in Toronto, actually. I really like Kate's keynote.
Starting point is 00:36:14 That was great, yeah. That's the kind of talks, like she really pulls that off like no other. So, yeah, I really enjoyed that one. Great. Well, we've really enjoyed that one. Great. Well, we've got lightning talks tonight. Are you giving a lightning talk? Oh yeah, I'm giving a lightning talk
Starting point is 00:36:31 and my lightning talk has more slides than my main talk so that's going to be interesting. How many slides? 60. 60? There you go, you've got six minutes. Are you kidding? Your lightning talk has 60 slides?
Starting point is 00:36:45 You've got to stretch it to six minutes. Is that like 55 slides of animation or something? Yeah, there's some animation in there and some stuff that you're not supposed to read. It's only there for the effect. I am very intrigued. Give us a little teaser. I mean, the lightning talks will be recorded
Starting point is 00:37:01 and will be online as well at some point, but for the listener, give them a little, and also for us because we're about to watch them, give us a little teaser of what we can expect. Yes, it's about complexity, runtime complexity analysis, how you do that. Hmm, interesting. I support the notion of having slides for effect and not talking about them at all. I like to do that in some of my talks occasionally I mean, six minutes is what?
Starting point is 00:37:30 360 seconds? Yeah, well, Lani talks of five minutes if you can stretch that I just went to six minutes because you said 60 slides but yes Right, I mean, good luck So it's five seconds a slide then?
Starting point is 00:37:45 Right, yeah. I did a couple of test runs. Like my best one, I was 30 seconds under. The worst one, I was 30 seconds over. So it's... Oh, you're right in the ballpark there. Oh, we're going to see Tony for the first time tonight. He's hosting Lightning Talks, right?
Starting point is 00:38:03 This is true. For folks that have not met Tony Van Eerd in person, he is local to Ontario, not exactly Toronto. He lives outside, I believe, in Kitchener, which is just outside Waterloo. If folks have seen the new Blackberry movie, that's where that takes place, Kitchener-Waterloo. And he famously does not make any appearances
Starting point is 00:38:20 until after his talk because he's holed up in his hotel working on his slides. I think actually he's even maybe been feeling a bit under the weather. He's been unwell, I think, last couple of days. So I hope he's feeling well again and able to do lightning talks tonight. So it'll be a good sign if he's hosting the lightning talks because that means he's feeling well enough to host them. But if we don't see him tonight, we're hopefully going to see him tomorrow. And then hopefully we'll be able to grab dinner with him afterwards because we're on day two tomorrow's day three and then the conference wraps so it's going to be a short a short debut uh from from tony yeah um anything to to say more under address or is that
Starting point is 00:38:57 it also tell the listeners uh where are you based out of and uh you know yeah how'd you get here oh yeah i mean we know we took the plane probably. Swam. Yes, I'm currently still based in Munich, Germany. So also still helping with running the user group there for C++. And yeah, I just flew in first time flying into Canada and I'm having a blast. It's a great conference. Cool.
Starting point is 00:39:23 Did you have any travel problems? There were several folks who had connection problems through New York. Yeah, no. I had a direct flight so fortunately I was spared. Alright. And that's enough about travel. Yeah, enough about travel. If Bryce isn't here, we're nipping that in the bud. And I guess, so if you're in Germany,
Starting point is 00:39:40 last question. I assume probably on your horizon is the Meeting C++ conference, because that's just a stone's throw away in Berlin. Are you going to be there, and are you going to be speaking? Unfortunately not this year. So they had to, usually the conference was always in the end of the week, and this year they had to put it in the beginning of the week,
Starting point is 00:40:00 and now it actually overlaps with the ISO meeting in Kona. And because of the huge time shift from Kona, it's basically impossible to get there in time unless you leave the ISO meeting early. So I probably won't be able to make it. I didn't submit any talks because of that. Interesting, interesting. And so that means, well, I guess the CFP, I was going to say this would be a great opportunity if there's some new speakers because probably it's going to take out of the rotation a bunch of speakers,
Starting point is 00:40:26 but probably the CFP is closed long by now. They just started the voting on the talks last week. So, yeah, CFP is closed. Well, hopefully we'll get to see some new speakers at the conference, because, yeah, if it collides with the committee meeting, I don't know what the overlap is, but it's definitely like 25% or 50% of committee members have also given a talk at some point in time. All right. All right.
Starting point is 00:40:53 Is that a wrap for now? That's a wrap for now. We'll be back on day three. We've got two people lined up. We definitely wanted to get Kate, who's been mentioned, and Jessica, who's giving the keynote tomorrow morning. I think we mentioned earlier, they're both given lightning talks alongside Andreas here. So we're going to get excited for those. And I mean, the listener, probably this is going to be mid-episode.
Starting point is 00:41:14 So they're going to snap of the fingers and they're listening to Kate right now. Yeah, we have to wait another 12, 18 hours and it's coming right up for you. Thanks, Andreas. Thank you for having me. Awesome. Be sure to check these show notes either in your podcast app or at ADSPthepodcast.com for links to any of the topics or talks that we talked about in today's episode, as well as a link to a GitHub discussion where you can leave comments, thoughts, or questions.
Starting point is 00:41:40 Thanks for listening. We hope you enjoyed, and have a great day. Low quality, high quantity. That is the tagline of our podcast. Thanks for listening. We hope you enjoyed and have a great day.

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