Algorithms + Data Structures = Programs - Episode 140: 🇨🇦 CppNorth Live 🇨🇦 Victor Ciura, Andreas Weis & More!
Episode Date: July 28, 2023In 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)
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...
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?
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,
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.
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
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.
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.
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?
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.
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
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.
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.
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.
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
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.
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.
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.
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
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.
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
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?
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.
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.
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.
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.
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.
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?
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?
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.
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
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
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
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.
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?
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.
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.
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?
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.
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
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.
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
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.
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.
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,
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.
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.
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
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.
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.
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,
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.
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...
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,
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?
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.
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
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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?
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.
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,
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.
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.
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
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.
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
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,
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
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
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
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,
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.
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
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,
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.
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.
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
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.
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.
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.
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,
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,
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.
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?
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.
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
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?
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
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?
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?
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?
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
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
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.
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,
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,
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,
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.
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.
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.
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.