Programming Languages Today and Tomorrow

🔗 **Source:** [Programming Languages Today and Tomorrow](https://www.youtube.com/watch?v=Za1epSDmyH4)
> [!note]+ Document Notes
> # 🏷️ Title: Programming Languages Today and Tomorrow
> > **Current-agent capture.** The transcript is saved, but the full deep-read analysis is still pending (current-agent mode). The active Codex task must add the notes, topic tags, master highlights, and Reader-native inline highlights before this document is complete.
> ---
> ## Full Transcript
> [00:11] Hi folks. Hi everyone. I'm Vital<br>[00:14] Bragillski. I'm here today with uh this<br>[00:17] lecture which is called programming<br>[00:18] languages today and tomorrow. And I'm at<br>[00:23] PAS programming camp. And the original<br>[00:26] idea of this lecture is just just to<br>[00:28] talk to students of this programming<br>[00:30] camp. But then we realized that it's a<br>[00:32] good idea to have an open lecture and<br>[00:34] then to have online translation and<br>[00:36] stuff like that. But I believe that my<br>[00:39] main audience is this group of amazing<br>[00:42] students that we have here in Buffas for<br>[00:45] for this programming camp. And in the<br>[00:48] end I hope you will understand why why<br>[00:50] uh you are the the main audience here.<br>[00:54] Uh so uh I'm my my job role at Jet<br>[00:57] Brains is head of Rustico system. I will<br>[00:59] tell you more about that later in this<br>[01:01] talk. And I will actually start with<br>[01:03] sort of a anti-pattern of uh speaking<br>[01:08] like speaker sometimes likes to talk<br>[01:11] about themselves a lot and I usually<br>[01:14] don't do that but uh this case is kind<br>[01:17] of special because uh like who I am is<br>[01:21] actually why it makes sense to listen to<br>[01:23] me when I'm talking about programming<br>[01:26] languages. So my first exposure to<br>[01:29] coding was in 1992 like many many years<br>[01:32] ago. It was basic basic programming<br>[01:35] language and it was at some uh youth<br>[01:39] community center. There were classes on<br>[01:42] coding and I got there in the middle of<br>[01:46] the year and I remember till this day<br>[01:48] that the topic was arrays in basic and<br>[01:53] after that class I realized that<br>[01:55] programming is not for me because I<br>[01:57] didn't understand the word there. So I<br>[02:00] just dropped out after the first class<br>[02:02] like and it was decided programming is<br>[02:05] not for me. Then like in the local<br>[02:09] library I found a book which was also<br>[02:12] about programming and this book was<br>[02:16] actually covering three programming<br>[02:18] languages at once. There was forran<br>[02:20] there there was Pascal and there was<br>[02:22] basic<br>[02:24] and like for for a year year and a half<br>[02:26] I was reading this book. I didn't have a<br>[02:28] computer at that time. I was reading a<br>[02:31] book. I was writing like programs on<br>[02:34] paper that was enough for me.<br>[02:37] Then there was kind of like more proper<br>[02:40] education like at at school at the<br>[02:43] university and I've learned many<br>[02:45] different programming languages. I use<br>[02:48] some of them. I was developing websites<br>[02:51] in Pearl on PHP. I was learning<br>[02:53] JavaScript. I was learning uh Java, C<br>[02:57] all those languages like Object Pascal.<br>[02:59] It's a language of Deli uh programming<br>[03:01] system.<br>[03:03] And pretty soon like year 2000 I started<br>[03:07] teaching coding myself and during my<br>[03:10] career and I mostly work at universities<br>[03:13] uh I taught more than 20 programming<br>[03:16] languages<br>[03:18] like like full-blown courses on some<br>[03:20] programming languages or maybe just<br>[03:23] lecture or two about one of them. So uh<br>[03:25] like I taught really many programming<br>[03:28] languages. At some point like some way<br>[03:31] around 2005<br>[03:33] I started doing some Haskell<br>[03:36] and then after some years in that<br>[03:39] community I become a GHT Glasgow Huskell<br>[03:43] compiler steering committee member and<br>[03:46] like I was like part of the development<br>[03:49] of Huskell programming language and I<br>[03:52] wrote a book about Huskell Huskell in<br>[03:54] depth. It was published five years ago.<br>[03:57] uh a bit later 2008 uh I started uh<br>[04:03] learning about the theory of programming<br>[04:05] language. I was interested in lambda<br>[04:07] calculus a lot. I was interested in<br>[04:09] proof assistance in such languages as<br>[04:11] rock which used to be known as coke<br>[04:14] language or lean lean is extremely<br>[04:17] popular in that area right now. So I was<br>[04:20] translating some books. I was uh<br>[04:22] teaching about the theory of programming<br>[04:24] languages.<br>[04:26] Since 2022, I am a Rust developer<br>[04:30] advocate and I later moved to this role<br>[04:32] of head of Rust ecosystem at Jet Brains.<br>[04:35] Since this June, I am a the member of<br>[04:39] the Rust commercial network steering<br>[04:41] committee. I will tell you more about<br>[04:43] that in this lecture. But in fact,<br>[04:47] I talk to people in programming<br>[04:49] languages a lot. Like all these years, I<br>[04:54] talk to users of programming languages.<br>[04:56] I talk to developers of programming<br>[04:58] languages, developers of compilers, to<br>[05:01] language designers. So I talk a lot and<br>[05:04] I hear a lot of things. And because of<br>[05:06] that, I think I have some sort of<br>[05:09] understanding of what's going on in this<br>[05:11] area. Of course, not everything. And of<br>[05:14] course I'm not going to talk here about<br>[05:17] what was actually promised in this tweet<br>[05:20] by Jet Brains X account.<br>[05:24] So this is what they wrote on on Twitter<br>[05:27] on next um about this lecture. It's not<br>[05:31] what I'm going to talk about. Of course,<br>[05:34] this description was based on my<br>[05:36] description,<br>[05:38] but I never had those accents in my<br>[05:41] description. Like, and the main reason<br>[05:44] is that I don't know the future.<br>[05:47] And if someone tells you that they know<br>[05:49] future, they are lying.<br>[05:51] So, I don't know the future for sure.<br>[05:54] And I don't know trends. Like this<br>[05:57] lecture is mostly about my observations.<br>[05:59] like I see something, I hear something<br>[06:02] because I talk to people and then I have<br>[06:04] some ideas of what's going on. But I<br>[06:08] don't know. We'll see. It's just<br>[06:11] irrelevant what's going to be later like<br>[06:13] in six months. I don't know. And I don't<br>[06:16] care to be honest. So what this lecture<br>[06:19] is actually about,<br>[06:21] we'll talk about this symbol.<br>[06:25] Some people call it carrot or hat<br>[06:28] operator or circumlex.<br>[06:31] So this is like one of the main topics<br>[06:33] of this lecture. We'll also talk about<br>[06:36] this uh term word capability<br>[06:41] because it's kind of important these<br>[06:42] days capability.<br>[06:45] We'll also talk about safety. Another<br>[06:48] very important concept in programming<br>[06:50] languages safety. And you can combine<br>[06:54] these to like capability meaning like<br>[06:56] you are capable of doing something like<br>[06:59] if you are capable of doing only right<br>[07:01] things that's safety and if you are<br>[07:05] capable of doing some wrong things<br>[07:06] that's definitely unsafety. Okay. We'll<br>[07:10] also talk about LLMs in this lecture.<br>[07:13] Why? Because like these days if you are<br>[07:15] speaking on any IT topic avoiding LLMs<br>[07:18] is just impossible. It's unavoidable.<br>[07:22] And we will also talk about people<br>[07:24] because at the end at the end of the<br>[07:27] day, it's all about people. Everything<br>[07:30] that is going on with programming<br>[07:31] languages is about people, how they<br>[07:34] evolve, how they are developed. It's all<br>[07:37] about people, their decisions, their<br>[07:39] ideas. So these are five main topics of<br>[07:45] this lecture. And no trends, I promise.<br>[07:51] I will structure this lecture in this<br>[07:53] like several chapters. There will be<br>[07:55] five chapters if I'm on time or there<br>[07:58] will be four if I am not on time but<br>[08:00] we'll see. So programming languages in<br>[08:03] general. So what are programming<br>[08:04] languages?<br>[08:06] Uh of course it's always starts with the<br>[08:09] syntax. Syntax is like these days it's<br>[08:13] the least interesting thing about<br>[08:15] programming languages. Of course there<br>[08:17] is some grammar, there is some notation,<br>[08:20] how you write expressions, how you<br>[08:22] define functions that's not very<br>[08:25] interesting and like for 50 years we<br>[08:27] already like there are no really<br>[08:29] interesting topics in syntax. Then there<br>[08:32] is semantics. Semantics was always<br>[08:35] interesting. So what what those programs<br>[08:38] actually mean when they run like<br>[08:42] what is actually executed? How do we<br>[08:44] know that it's doing the right thing or<br>[08:47] maybe wrong thing? So this is semantics.<br>[08:49] This is interesting. There are a lot of<br>[08:51] ways of explaining like semantics of<br>[08:53] programming language.<br>[08:55] But I believe that even semantics is not<br>[08:58] that important as uh number three in<br>[09:02] this list because number three is about<br>[09:05] ideas.<br>[09:07] ideas.<br>[09:09] It it's a they are more much more high<br>[09:12] level than just some semantic rules or<br>[09:16] syntactic rules. Ideas are about<br>[09:19] properties of programming languages,<br>[09:21] properties of some features. It's about<br>[09:24] principles. It's about goals that uh<br>[09:28] developers of programming languages want<br>[09:30] to achieve. So these are much more<br>[09:32] important concepts than anything else<br>[09:36] and we'll try to focus more on ideas<br>[09:39] behind programming languages in this<br>[09:41] lecture.<br>[09:43] And then of course there are different<br>[09:45] other things there are tooling<br>[09:47] ecosystem. It's impossible to use a<br>[09:49] programming language without a compiler<br>[09:52] without a lot of like package managers<br>[09:55] other tools they should exist. Then<br>[09:58] there should be some sort of governance.<br>[10:01] Who is in charge of programming<br>[10:03] language? Which features go into into<br>[10:06] language? Which features are not going<br>[10:08] there? And it's also important to think<br>[10:11] about community around programming<br>[10:14] language, who is actually like using<br>[10:16] that language, how they can influence<br>[10:19] the development of a language. those are<br>[10:21] also like these days we can say that<br>[10:25] those are very important components of a<br>[10:27] programming language.<br>[10:30] Uh now let's try to to be a little bit<br>[10:33] more interactive. I will show you<br>[10:35] several slides one by one<br>[10:40] uh where I put some very important ideas<br>[10:44] behind some programming languages and<br>[10:48] your task is to guess which language is<br>[10:52] hiding behind those like three or four<br>[10:55] words<br>[10:59] like several languages several tasks but<br>[11:02] that's not an easy task Maybe like some<br>[11:05] languages are easily recognizable, some<br>[11:08] others are like much more difficult and<br>[11:11] I'm pretty sure that there will be a<br>[11:13] language that you don't know. So let's<br>[11:16] see. So my first uh slide here, zero<br>[11:21] overhead abstractions.<br>[11:24] Which language is that? Yeah, just<br>[11:28] >> Rust.<br>[11:30] [laughter] Other ideas?<br>[11:31] >> C++. C++ that's that is C++ and this is<br>[11:36] like a mantra moto that is like many<br>[11:39] times bes the design of C++ he repeats<br>[11:44] this thing C++ is about zero overhead<br>[11:48] abstractions so you build abstractions<br>[11:50] on top of your language you're building<br>[11:53] classes templates all that stuff but<br>[11:57] it's zero overhead at runtime<br>[12:01] so if you use something you pay for that<br>[12:03] with performance penalties of course but<br>[12:06] if you don't use something then you<br>[12:08] don't pay for that so this zero overhead<br>[12:11] idea is extremely important for C++<br>[12:14] and when folks think about how to<br>[12:16] develop C++ further this is for them is<br>[12:20] the main guiding principle<br>[12:22] so this is much more important than<br>[12:25] anything else in in in this language so<br>[12:29] is it zero overhead abstraction or lot.<br>[12:32] So ideas are more important here. All<br>[12:35] right. One uh uh next next language<br>[12:41] right uh second right once run anywhere.<br>[12:46] Yeah<br>[12:47] >> Java definitely Java like the motor<br>[12:49] which goes back to 1995.<br>[12:53] It's not true anymore.<br>[12:55] we have like much more platforms like<br>[12:58] there are I think there are some issues<br>[12:59] for Java on web assembly for example<br>[13:03] uh but yeah that's that's pretty<br>[13:04] well-known moto for for a programming<br>[13:06] language<br>[13:08] uh next example concise multi-platform<br>[13:13] fun<br>[13:19] it's Kotlin yeah it's Kotland if you go<br>[13:21] to the Kotlin website language that is<br>[13:23] developed by Jetbrain Means if you go to<br>[13:25] their website you will see that<br>[13:27] immediately on the main page concise<br>[13:30] which means more concise than Java<br>[13:33] usually multi-platform which means that<br>[13:36] you can target different platforms you<br>[13:38] can use you can use cotlin for iOS<br>[13:41] applications for web assembly and like<br>[13:45] our team which is doing web assembly<br>[13:48] compiler for cotlin they're very well<br>[13:51] known in general web assembly world for<br>[13:53] example so It's it's kind of important<br>[13:55] there and fun. Well, first because<br>[13:59] you're writing functions there. It's a<br>[14:00] keyword, but also because it's real fun<br>[14:03] to use that. All right. Maybe a bit more<br>[14:06] difficult task.<br>[14:09] Some languages define themsel as<br>[14:11] oppositions<br>[14:13] like no hidden control flow, no hidden<br>[14:16] memory allocations, no prep-processor,<br>[14:20] no macros.<br>[14:23] Zeke, thank you very much. It's Zeke<br>[14:25] really like if you go to the main page<br>[14:27] of Zeke website, it's right there. They<br>[14:29] say it's a simple language. You don't<br>[14:32] need to learn that much to use that<br>[14:34] language. And they define themselves<br>[14:36] through these ideas. So they don't have<br>[14:39] exceptions for example because<br>[14:41] exceptions is control flow that is<br>[14:44] hidden<br>[14:46] and they don't have a lot of other stuff<br>[14:48] but they they suggest ways to do the<br>[14:51] things differently. So that's ZIK<br>[14:53] definitely.<br>[14:55] Next language,<br>[14:57] a mostly functional, richly typed<br>[15:00] language that combines safety and<br>[15:03] convenience.<br>[15:06] What<br>[15:09] >> sorry?<br>[15:10] >> Really?<br>[15:13] Actually, there are two answers for<br>[15:15] that. Yeah. Go ahead.<br>[15:17] >> Scala. This is actually Scala because<br>[15:19] this phrase I just took it from Martin<br>[15:22] Adski uh talk about Scala uh like the<br>[15:27] talk was one year ago and it's like<br>[15:29] current definition of Scala programming<br>[15:31] language. There is another language<br>[15:33] which is actually like very like similar<br>[15:36] in that regard.<br>[15:39] It's different but uh so this is Scala<br>[15:42] that's the right answer. There is<br>[15:43] another language which is also like kind<br>[15:45] of like that.<br>[15:49] Okay, that's okamel. Okamel is also very<br>[15:52] close to this idea.<br>[15:55] Okay, and and I have last example<br>[15:59] fast, friendly,<br>[16:02] functional,<br>[16:07] >> go. No, no, definitely not. Go is not<br>[16:11] functional like at all.<br>[16:14] >> Yeah. F<br>[16:16] >> F other ideas?<br>[16:21] >> Sorry.<br>[16:23] >> I don't I don't hear<br>[16:26] >> elixir. Well, it's not alexir.<br>[16:31] >> Haskell is Haskell friendly? Is Haskell<br>[16:35] fast? I'm not sure to be honest.<br>[16:39] >> No, it's not Haskell. Definitely. No.<br>[16:42] Well, it's a it's a very well it's<br>[16:44] impossible task, you know. It is<br>[16:46] impossible. Yeah.<br>[16:48] >> Ag No, no, no. Agda is never like<br>[16:54] well not friendly like not it's<br>[16:57] impossible task. So this is a very new<br>[17:00] language uh which is called rock but not<br>[17:03] that rock that I already mentioned. It's<br>[17:05] like ro. If you Google these three words<br>[17:08] you will immediately find it. It's a<br>[17:10] very new language like it's its release<br>[17:13] 0.1.0<br>[17:15] zero is planned for this week maybe like<br>[17:18] next one<br>[17:20] but uh the author of this language<br>[17:23] Richard Feldman is well known in<br>[17:24] programming languages community because<br>[17:26] he's the author of Elm programming<br>[17:29] language<br>[17:30] and this is another new language from<br>[17:33] Richard Feldman and it's really fast<br>[17:36] there is an amazing hot reload feature<br>[17:39] there it's friendly it's easy to write<br>[17:41] code and it's singly paradigm language<br>[17:44] so it's only function<br>[17:45] nothing else. I recommend you looking at<br>[17:48] that language. Maybe like in 10 years it<br>[17:51] will be the main programming language in<br>[17:53] this world. Maybe not. I don't know. But<br>[17:55] it's just it's nice to see that new<br>[17:57] languages are coming all the time. Like<br>[18:00] we are getting a lot of new languages<br>[18:02] every day. Why? Because like it's it's<br>[18:07] interesting. It's fun to create<br>[18:08] programming languages.<br>[18:11] So like after this game we can say that<br>[18:14] every programming language is actually a<br>[18:17] set of bets about which ideas matter<br>[18:22] most. So this is very important. These<br>[18:25] ideas are important matter for this<br>[18:28] language and they they can be like<br>[18:31] really unrelated to some other<br>[18:33] programming language. So everyone is<br>[18:36] just this set of bets.<br>[18:38] And there is one other thing one one<br>[18:41] other way of thinking about programming<br>[18:43] languages. And here we'll show you some<br>[18:46] picture which is a very old meme. It uh<br>[18:49] dates back to 2009 actually December<br>[18:54] 2009. It was published at that time. It<br>[18:57] it kind of maybe maybe it's too small.<br>[18:59] So it's how developers on some<br>[19:02] programming languages are seen by fans<br>[19:05] of those programming languages<br>[19:08] like if you look at the diagonal here it<br>[19:11] means like like how Java developers are<br>[19:14] seen by Java fans. So this diagonal is<br>[19:17] is just amazing things but everything<br>[19:20] else is just kind of maybe questionable<br>[19:24] maybe not politically correct.<br>[19:27] So, except Haskell of course like I like<br>[19:30] this column about Haskell a lot. That's<br>[19:33] that's exactly what you should think<br>[19:35] about Huskell. That's exactly what<br>[19:36] everyone should think about Haskell. Uh<br>[19:40] but there is a lot of sense in this<br>[19:42] picture. Of course, it's a meme. It's a<br>[19:43] joke. But really like we can look at<br>[19:47] this picture for hours and see some<br>[19:49] interesting stuff. So there's there are<br>[19:52] a lot of deep concepts behind that.<br>[19:56] And speaking about deep consonants<br>[19:58] concepts in this chapter about like<br>[20:01] programming languages in general I would<br>[20:04] like to show you some trend let's call<br>[20:07] it this way they wanted trend so here is<br>[20:09] a trend.<br>[20:11] So one of the most important concepts in<br>[20:14] programming language languages is typing<br>[20:17] discipline.<br>[20:18] We have languages with dynamic typing<br>[20:21] where types are checked at runtime. And<br>[20:24] we have languages with static typing<br>[20:26] where types are checked at compile time.<br>[20:29] So before they actually executed and<br>[20:33] there are some examples in both camps.<br>[20:36] But what is really very visible these<br>[20:38] days is that industry want some shift<br>[20:44] here. Dynamic languages are known for<br>[20:48] being flexible.<br>[20:51] You don't need to think much in advance.<br>[20:53] You write some code and it just works.<br>[20:56] But these days we need more safety in<br>[21:01] our programs. So we need more types.<br>[21:04] This is a basic level of ensuring<br>[21:07] safety.<br>[21:08] And what we see, we see an emerging<br>[21:11] thing of gradual typing, which means<br>[21:15] some parts of our code are dynamically<br>[21:19] typed while some other parts of our code<br>[21:22] base are statically typed. And we have<br>[21:26] this in Python with a lot of actually<br>[21:28] tools much more than these two<br>[21:30] approaches for typing Python. And also<br>[21:33] we have Typescript which is like<br>[21:35] gradually typed uh wrapper over<br>[21:39] JavaScript. So we are moving from<br>[21:43] dynamically typed languages towards<br>[21:47] statically typed languages. This is a<br>[21:49] trend. This is something that is really<br>[21:51] observable<br>[21:53] and the folks in those language<br>[21:55] communities are working hard to uh<br>[21:57] provide tooling that supports these ways<br>[22:01] of developing programs. All right. So<br>[22:04] this is real trend. We are going with<br>[22:08] more and more types.<br>[22:12] All right.<br>[22:15] Next chapter<br>[22:17] that weird symbol. Do you remember the<br>[22:20] names like this carrot, circumflex, hat?<br>[22:26] So yeah,<br>[22:29] this symbol it has a lot of names and it<br>[22:32] has a lot of uses in programming<br>[22:34] languages. Here you can see some<br>[22:36] examples.<br>[22:38] So like uh excluded or operation or<br>[22:43] pointer types referencing in some<br>[22:45] languages or uh power<br>[22:49] uh operator or in regular expressions is<br>[22:54] negation and I'm pretty sure there are<br>[22:56] much more uses of this lang this symbol.<br>[22:59] Why I call it weird? Because like when<br>[23:02] you look at this symbol, when you see<br>[23:04] this symbol in the new programming<br>[23:06] language, you can never assume its<br>[23:08] meaning.<br>[23:10] It's just well, what does it mean? Like<br>[23:13] you need to to ask LLM<br>[23:16] or to read the reference. It's<br>[23:19] impossible to guess because this is like<br>[23:24] this is the problem with this symbol.<br>[23:26] And sometimes sometimes it's even like<br>[23:29] single carrot is not enough. Now to<br>[23:33] continue this lecture I need some<br>[23:35] addition to my outfit.<br>[23:38] One second.<br>[23:40] This one. And now now I have a question<br>[23:43] to you.<br>[23:45] Which programming language I'm going to<br>[23:47] talk about now?<br>[23:51] >> You might be not wrong. By the way, this<br>[23:54] is uh our Rust ecosystem.<br>[23:59] So this photo was taken at Rust week<br>[24:01] conference this year. This conference is<br>[24:03] run in Utre uh every May in Utre like<br>[24:07] the huge gathering of Rust folks. So you<br>[24:10] can see like everyone wears these cat<br>[24:13] ears and there is some story behind<br>[24:15] that. But actually I'm not going to talk<br>[24:18] about trust here.<br>[24:22] Any other ideas?<br>[24:25] Which language has this operator which<br>[24:28] is called cat ears? It's not rust. In<br>[24:32] rust, there is no such thing. Cat ears<br>[24:35] operator.<br>[24:39] This is funny not to get an answer in<br>[24:41] this audience.<br>[24:44] I'm going to talk about C++ here.<br>[24:51] But today and tomorrow maybe you know<br>[24:54] like yesterday's C++.<br>[24:57] So what they have in C++ right now is<br>[24:59] so-called reflection. C++ 26 reflection<br>[25:05] is implemented using this cat ears<br>[25:08] operator.<br>[25:10] So I have an example here. It's like<br>[25:13] very simplified example but I will show<br>[25:15] you what this operator is doing here in<br>[25:17] C++. So I have some like this is like<br>[25:20] first part of the code. So I have some<br>[25:23] headers included and look there is this<br>[25:26] experimental meta here. Uh I'm using<br>[25:30] name spaces. So there is some structure<br>[25:32] with uh two members<br>[25:35] string fame and integer count. All right<br>[25:40] there is some structure. Now second part<br>[25:43] of this code there is a main function<br>[25:48] and in that main function I am doing<br>[25:50] some compile time computations.<br>[25:54] You can see that those are compile time<br>[25:56] computations because I'm using const<br>[25:58] expert expressions there which means<br>[26:01] like they they can be computed at<br>[26:03] compile time. So I am getting access to<br>[26:06] some context like here in this line<br>[26:11] and then<br>[26:13] look so this is cat ears operator<br>[26:17] I am getting this is a reflection<br>[26:19] actually so I am getting some meta<br>[26:22] information about the type behind my ops<br>[26:27] structure<br>[26:30] so this is a very nice way to get<br>[26:32] information about type like we have some<br>[26:35] value, we have some structure and we can<br>[26:37] get information about members. Now I'm<br>[26:40] using some uh functions non-static data<br>[26:44] members of this type and then I put them<br>[26:48] in a static array with another function<br>[26:51] from that header which I included.<br>[26:54] And now data members is array of<br>[26:58] something which be information about<br>[27:03] members of my op structure. It's static<br>[27:06] array which means that it can be<br>[27:08] computed at compile time.<br>[27:12] Then I am using template for loop and<br>[27:15] template for loop makes this loop<br>[27:18] computable at compile time as well.<br>[27:22] So it's a loop over data members and I'm<br>[27:26] just doing some print line there.<br>[27:30] Uh<br>[27:32] print line. Do you know this nice<br>[27:34] function in C++<br>[27:38] very modern one you know it's workable<br>[27:41] example like in the previous slide there<br>[27:43] was a link to uh godbold.org or so it's<br>[27:47] a working example and it will print<br>[27:49] exactly this that in gray box you see<br>[27:51] member named f name member named count<br>[27:56] so<br>[27:58] all this code is computed at compile<br>[28:02] time<br>[28:04] there might be some loop in the compiled<br>[28:07] output in assembly but in this case I<br>[28:10] believe with some optimizations there<br>[28:12] will be no loop actually there will be<br>[28:13] two print lines print line this line<br>[28:16] that because we don't need runtime for<br>[28:18] that. Everything can be computed. But<br>[28:22] reflection gives you a way to look into<br>[28:25] your data types. It's like you are<br>[28:28] seeing something in your program while<br>[28:30] you are writing your program.<br>[28:33] So cat ears operator. So why reflection<br>[28:37] matters? Because reflection is part of<br>[28:41] meta programming and for C++ meta<br>[28:44] programming is extremely important.<br>[28:47] We have in C++ we have C pre-processor<br>[28:51] macros which is a terribly terrible<br>[28:54] thing. It's extremely important to get<br>[28:57] them right. Okay. They they allow you to<br>[29:00] write like very performant code in some<br>[29:03] cases and like we use them a lot like<br>[29:05] all C++ C++ programmers use that but<br>[29:08] it's like just textual substitution.<br>[29:11] There is no type safety at all. They're<br>[29:14] very fragile. They don't follow the<br>[29:16] rules of C++ in terms of scoping stuff<br>[29:19] like that like terrible terrible thing.<br>[29:22] There is also template meta programming<br>[29:25] which is amazing which is touring<br>[29:27] complete. You can do whatever you want,<br>[29:29] but it's it's like very slow to compile.<br>[29:33] Like compiler error messages are<br>[29:36] terrible. It's it's impossible to<br>[29:38] understand them. You need to know what's<br>[29:40] going on to to to read that error<br>[29:43] message.<br>[29:45] So very cryptic and<br>[29:48] not very convenient.<br>[29:51] Then we have these constax for constable<br>[29:54] things like constable it's a function<br>[29:56] that can be computed at compile time.<br>[29:59] They're much better because you are<br>[30:01] writing regular code like template with<br>[30:04] a programming is that is like yet<br>[30:05] another language on top of C++<br>[30:09] but with constax pro you're writing<br>[30:11] regular C++ although it is compiled at<br>[30:14] compile it is executed evaluated at<br>[30:17] compile time but there are very limited<br>[30:20] ways to look into your program and C++<br>[30:24] 26 reflection is actually a way to see<br>[30:28] what's going on a very new development<br>[30:30] in C++.<br>[30:32] But you can also like apart from seeing<br>[30:35] your code, you can also manipulate with<br>[30:38] your code. You can with another operator<br>[30:41] which is called splice, you can insert<br>[30:43] the results of your introspection<br>[30:46] and to generate some code uh at compile<br>[30:50] time and reflection. It's not fully done<br>[30:55] yet. Actually promise a lot to C++<br>[30:58] developers. Like these things will be<br>[31:01] possible when we get full C++<br>[31:05] reflection. Like these days it's very<br>[31:08] difficult to find like a particular<br>[31:10] compiler like you need some specific<br>[31:14] branch which is capable of compiling<br>[31:17] this sort of code. So it's kind of a<br>[31:20] future<br>[31:22] but it will be implemented at some<br>[31:25] point. It will be available in all other<br>[31:27] compilers. So the direction is clear.<br>[31:30] C++ folks want to have proper meta<br>[31:34] programming.<br>[31:36] And if you go to this talk, it's<br>[31:39] available on YouTube. Uh it was a<br>[31:41] keynote at CBP now conference this year.<br>[31:44] I think it was in March. uh Barry<br>[31:46] Revzen, one of the authors of uh C++<br>[31:49] reflection, he talks about reflection<br>[31:53] that is only half of this story and he<br>[31:56] gives like a long introduction into meta<br>[31:59] programming in C++ and he shows how it<br>[32:02] can be used in the future and he also<br>[32:05] shows examples from Swift and Rust<br>[32:09] because one of the uh very important<br>[32:13] topics in programming languages like if<br>[32:15] you are working with a programming<br>[32:16] language you need to know what's going<br>[32:18] on in other languages and bar in that<br>[32:22] talk is discussing the topic what can be<br>[32:25] borrowed from Russ what can be borrowed<br>[32:27] from swift to get nice code generation<br>[32:31] story for C++<br>[32:33] so this is somewhat very interesting<br>[32:37] development in C++ these days<br>[32:41] maybe at some point in 20 years it will<br>[32:44] reach competitive programming<br>[32:46] Maybe not. We'll see.<br>[32:51] Chapter three.<br>[32:53] I think I don't need cat ears for this<br>[32:55] chapter. So, sorry.<br>[32:59] Uh, memory safety. So,<br>[33:04] [laughter and cough]<br>[33:04] what is memory safety?<br>[33:07] This is interesting topic.<br>[33:11] Uh<br>[33:13] here I have one of the definitions.<br>[33:16] Uh in a memory safe programming<br>[33:19] language, memory logic bugs don't give<br>[33:22] the attacker control over all the all of<br>[33:26] memory.<br>[33:28] This definition is pretty new one.<br>[33:32] It's uh it was given by Philip Pasler,<br>[33:37] creator of a project compiler which is<br>[33:40] called Phil C. Have you heard about Phil<br>[33:43] C?<br>[33:45] It's like two years old project uh<br>[33:47] already. So uh he gave this talk at<br>[33:51] software should work conference which is<br>[33:53] amazing conference. If you go to YouTube<br>[33:55] and uh look for talks from uh software<br>[33:59] should work you will see a lot of them.<br>[34:01] They are all amazing.<br>[34:03] And Philip Pasler believes that memory<br>[34:07] safety is is not just something about<br>[34:10] like no crashes at runtime or no<br>[34:12] segmentation faults. No, memory safety<br>[34:16] is about exploitability.<br>[34:19] Like we can all agree that it's<br>[34:22] impossible to avoid all the memory logic<br>[34:26] bugs in our code. It's just impossible.<br>[34:30] What is possible and this is proved by<br>[34:33] Philillip.<br>[34:34] It is possible to avoid exploitability.<br>[34:38] It is possible to make sure that it's<br>[34:40] impossible to get control over memory to<br>[34:43] get read and write access to other parts<br>[34:46] of the code because of like buffer<br>[34:49] overruns or some other memory logic bugs<br>[34:53] like use after free double free things.<br>[34:58] It's impossible to avoid exploitability<br>[35:01] of those bots.<br>[35:04] Now with this definition in mind, I will<br>[35:06] show you some very hot story like from<br>[35:09] the recent month. It's it it all<br>[35:11] happened in July.<br>[35:14] Are you ready for this level of like<br>[35:16] being uh on top of the things?<br>[35:22] Uh we'll talk about Zeke programming<br>[35:24] language. Uh Andrew Kelly is a creator<br>[35:27] of Zik programming language very<br>[35:29] prominent developer very well-known uh<br>[35:32] figure in programming language community<br>[35:35] and recently he opened an issue on the<br>[35:37] ze repo on codeback<br>[35:40] uh about adding a so-called actually<br>[35:44] memory safe unlike rust compilation mode<br>[35:49] to zik<br>[35:52] and this phrase<br>[35:54] it created some kind of tension in<br>[35:58] programming language community like what<br>[36:00] what do you mean memory safe unlike Rust<br>[36:03] like do you assume that Rust is not<br>[36:05] memory safe and then people started like<br>[36:08] trigger triggered by this uh started to<br>[36:11] write comments in that uh issue and and<br>[36:15] they also saying things like on social<br>[36:18] media something like like Andrew Kelly<br>[36:21] is totally crazy and he hates Raz us<br>[36:25] because like recently ban JavaScript<br>[36:27] runtime was written from Zeke to RAS. So<br>[36:31] now he's just like going crazy about<br>[36:33] that mad. Well, the actual question is<br>[36:38] what is memory safety<br>[36:41] and maybe Rust is not memory safe with<br>[36:45] some sort of a definition. And in<br>[36:47] general, how do you measure safety<br>[36:49] guarantees in different programming<br>[36:51] languages? which language is more safe.<br>[36:55] So this is not about Andrew Kelly, not<br>[36:58] about memory safety. It's actually about<br>[37:01] people and people have different<br>[37:03] understandings of words like memory<br>[37:07] safety for someone can mean totally<br>[37:10] different thing for some other. So it's<br>[37:13] kind of interesting what is memory<br>[37:15] safety.<br>[37:17] Um and this discussion it was really<br>[37:20] heated like at some point Andrew Kelly<br>[37:22] wrote like literally something like if<br>[37:24] you don't have Zeke repos in this<br>[37:28] website or if you are not Philip Pasler<br>[37:31] you are not like your opinion does not<br>[37:34] matter in this discussion literally and<br>[37:38] then like the whole thread was blocked<br>[37:40] at some point like too heated and like<br>[37:44] it's impossible to block all the threads<br>[37:46] on Twitter of course and you can find a<br>[37:48] lot of them like it's really hot and the<br>[37:51] the the name of the issue was edited<br>[37:54] several times. It was edited four times<br>[37:58] actually like the the the next attempt<br>[38:01] like to making it smoother to make it it<br>[38:03] like more kind was I think it was like<br>[38:07] unlike borrow checking without<br>[38:09] mentioning rust<br>[38:12] and then uh there was a [laughter] other<br>[38:15] attempt I don't remember this is the the<br>[38:18] final name of that issue introduce a<br>[38:21] fully memory safe no escape hatches like<br>[38:25] in Rust compilation mode inspired by<br>[38:29] field C. So like almost politically<br>[38:33] correct and technically correct<br>[38:36] definition of what is actually going on.<br>[38:40] So now we see like Rust is not unsafe<br>[38:43] but in Rust there are sort of escape<br>[38:46] hatches that allows you to write non<br>[38:49] unsafe code and this compilation mode<br>[38:52] among others<br>[38:54] can prevent those kind of things.<br>[38:58] Now<br>[39:00] it's time to talk about like these<br>[39:03] approaches to memory safety.<br>[39:06] So in Rust we have so-called static<br>[39:11] borrow checking<br>[39:13] and this borrow checking enforces<br>[39:15] ownership at compile time. So every<br>[39:18] piece of memory is owned by some<br>[39:22] variable<br>[39:23] and it's impossible like almost<br>[39:25] impossible to have two variables own the<br>[39:28] same memory and when the variable goes<br>[39:31] out of scope this memory is<br>[39:34] automatically it it automatically goes<br>[39:37] back to the operating system or to like<br>[39:41] uh memory memory manager.<br>[39:44] So you don't have to have like garbage<br>[39:47] collection. You don't have to insert<br>[39:49] instructions for like freeing that<br>[39:51] memory because everything is done<br>[39:53] automatically based on the results of<br>[39:55] static borrow checking.<br>[39:58] But in Rust there is a possibility of<br>[40:01] unsafe code.<br>[40:03] It is used for talking to C++ binary<br>[40:08] libraries. For example, if you want to<br>[40:10] have like this foreign function<br>[40:12] interface, if you want to call some code<br>[40:14] from C, you need unsafe code. It's<br>[40:16] impossible to call it without that. And<br>[40:19] these unsafe blocks allows you to bypass<br>[40:22] some checks. Not every check, but some<br>[40:25] checks.<br>[40:26] And some patterns that Rust developers<br>[40:30] use in their code also require unsafe<br>[40:34] because it's impossible to prove<br>[40:36] something to borrow checker. Like if<br>[40:38] you're implementing some interesting<br>[40:40] data structures in many cases you will<br>[40:43] need to go to unsave block. You need to<br>[40:46] use it otherwise it's impossible to<br>[40:49] compile your code. But this is the<br>[40:51] nature of static analysis. It's<br>[40:54] impossible to do 100% correct static<br>[40:58] analysis. It's just impossible in terms<br>[41:00] of uncomputability.<br>[41:03] Like it's not computable,<br>[41:05] theoretically impossible. So there is<br>[41:08] this idea of having unsafe blocks. But<br>[41:11] once you have an unsafe block, you can<br>[41:15] do you can do whatever you want and you<br>[41:17] can get a lot of memory bugs in your<br>[41:20] code and those bugs can be exploited by<br>[41:24] the attackers and you can get a lot of<br>[41:27] problems even though you use you're<br>[41:29] using safe quote safe programming<br>[41:33] language.<br>[41:35] So uh Zeke gives you another approach.<br>[41:39] They have several compilation modes and<br>[41:43] there is the so-cal safe compilation<br>[41:45] mode where they introduce runtime checks<br>[41:49] for every operation with a pointer. Of<br>[41:52] course, it's slow like no like it's<br>[41:56] obvious it should be slow like every<br>[41:58] memory access and then you have some<br>[42:01] conditional operator checking that it<br>[42:03] actually correct. And if you want to<br>[42:06] write like without those checks without<br>[42:09] using safe compilation mode then you are<br>[42:12] supposed to do all the control<br>[42:15] explicitly. You need to write your<br>[42:17] conditionals by yourself. You need to<br>[42:20] check everything. You need to make sure<br>[42:21] that it actually safe code which is<br>[42:25] difficult and developers make mistakes<br>[42:28] and this is like we can do the same<br>[42:30] stuff in C but we know that well there<br>[42:34] are a lot of bugs in C code<br>[42:36] and then there is this very interesting<br>[42:39] and very new field C approach<br>[42:42] which was developed by Philip Pasot and<br>[42:46] he suggests using so-called invisible<br>[42:49] capabilities is and the idea behind that<br>[42:53] is to use sort of runtime tracking of<br>[42:56] every operation with pointers.<br>[43:00] And for every pointer when every pointer<br>[43:04] memory for every point is allocated<br>[43:07] he puts some additional<br>[43:11] um memory like like fields into memory<br>[43:15] with information about upper and lower<br>[43:19] memory address<br>[43:21] to show you okay using this pointer you<br>[43:23] can access memory from this to that and<br>[43:28] no more. So for every allocation like<br>[43:31] you put these additional uh fields into<br>[43:34] the memory and then for every memory<br>[43:37] access you read those members and check<br>[43:41] that the uh everything is correct.<br>[43:45] Of course there is a lot of like runtime<br>[43:47] overhead here. you have more locations<br>[43:51] but because of this every memory access<br>[43:55] is checked<br>[43:57] it's really unexploitable<br>[44:00] so your program will panic but any<br>[44:04] attacker cannot get any access to your<br>[44:08] memory so that's the idea<br>[44:11] so like once again invisible<br>[44:15] capabilities so every pointer goes with<br>[44:18] this invisible capability<br>[44:21] which really describes where this point<br>[44:24] is actually pointing from this part of<br>[44:26] memory to that part of me memory and<br>[44:28] then at runtime like every memory access<br>[44:31] is checked according to this capability<br>[44:34] it's impossible to forge anything<br>[44:39] and the way how Philip implemented that<br>[44:42] is just like some addition to LLVM M.<br>[44:48] So you have clunk compiler from a little<br>[44:51] VM suit and then that means that you can<br>[44:55] compile any C code, any C++ code and<br>[45:01] then with these additional passes you<br>[45:03] get this sort of memory safety.<br>[45:07] So it's a not a programming language<br>[45:09] because programming language is either C<br>[45:10] or C++. It's a compiler which makes it<br>[45:15] totally safe in terms of the definition<br>[45:18] which I gave you in the beginning like<br>[45:20] not exploitable.<br>[45:24] So you put anything from your existing<br>[45:27] CC++ code and then you get memory<br>[45:30] safety.<br>[45:32] There are some some issues like in many<br>[45:34] old C programs they don't use<br>[45:38] pointers because like they they keep<br>[45:41] memory address as an integer variables<br>[45:44] and then it's like really difficult to<br>[45:46] see that this is a pointer. So it<br>[45:48] doesn't work in that way. But still we<br>[45:52] know that it's impossible to guarantee<br>[45:55] memory safety at compile time like 100%<br>[45:59] guarantee is is impossible but we can<br>[46:03] prove it at runtime. We pay for that but<br>[46:06] we get that memory safety if you want.<br>[46:10] uh and it's actually possible to like in<br>[46:13] a recent talk uh Philip he showed like<br>[46:15] he compiled Libra office like completely<br>[46:18] it's a huge huge code huge code base it<br>[46:22] is compiled using uh fieldc it all works<br>[46:25] almost without modifications as he puts<br>[46:28] it<br>[46:30] so this is a fundamental tradeoff if you<br>[46:33] want safety that's one thing which means<br>[46:37] like safety means not really performing<br>[46:40] per moment. If you want real<br>[46:43] performance, you don't get that safety,<br>[46:45] but it will be very performant code.<br>[46:49] So, it's an access and we can put<br>[46:53] different languages on different parts<br>[46:55] of that access like some languages are<br>[46:59] more performance, some languages are<br>[47:01] more safe. So, where is Rust?<br>[47:04] So, if we are not using unsafe blocks in<br>[47:06] Rust, there's definitely safe language.<br>[47:10] But if you want to make it at some point<br>[47:13] like more performant, chances are you<br>[47:16] will need to use unsafe blocks and then<br>[47:19] it will be much less safe. It will be<br>[47:22] performant just as C and C++ but you<br>[47:26] will you might have some issues with<br>[47:28] performance or with the safety<br>[47:32] but it's not the only axis that we need<br>[47:34] to use here. Like speaking about trust,<br>[47:38] uh recently uh TypeScript compiler has<br>[47:42] been rewritten in Go and not in Rust<br>[47:45] notably like it was like several months<br>[47:48] ago we got this information that the<br>[47:50] TypeScript compiler is rewritten<br>[47:53] and there is a recent like this week<br>[47:55] maybe this Monday it was published the<br>[47:58] interview of Anders Hailsburg which is<br>[48:01] like very well-known guy in programming<br>[48:04] language community. He He's the guy<br>[48:06] behind Turba Pascal.<br>[48:09] It's like<br>[48:11] 1985.<br>[48:14] Uh he's a guy behind C. He's a creator<br>[48:17] of Typescript.<br>[48:19] And he answered this question, why did<br>[48:21] you choose Go over Rust? Like everyone<br>[48:24] is writing to Rust. Why did you choose<br>[48:26] Go?<br>[48:28] And his answer was like quite<br>[48:30] sophisticated. There were quite a lot of<br>[48:32] arguments there. why go is actually the<br>[48:35] language that was good enough for them.<br>[48:37] But this is the reason uh like one of<br>[48:40] the main reasons why it's not trust<br>[48:43] because<br>[48:45] they have a lot of circular structures<br>[48:48] like circular lists and if you want to<br>[48:51] implement them in rust you need to<br>[48:54] struggle like it's really complicated<br>[48:58] thing and they just decided that it<br>[49:01] doesn't worth it like it's better to not<br>[49:04] not to do that they they what they are<br>[49:08] speed up because they rewrote it in<br>[49:10] native language and go they have garbage<br>[49:13] collection like it it doesn't matter<br>[49:16] they didn't have to fight borrow checker<br>[49:20] so this is more about convenience it's a<br>[49:23] convenience argument so you might have<br>[49:25] like safety performance but then maybe<br>[49:28] you just don't want to do that stuff in<br>[49:30] that complicated language that's fine<br>[49:32] why not<br>[49:36] So there are diff different<br>[49:38] considerations here when you decide.<br>[49:42] So that was about memory safety. But<br>[49:45] memory safety is not all the safety that<br>[49:49] we might need.<br>[49:51] And in my next chapter I'm going to talk<br>[49:54] about safety in more general terms.<br>[49:59] And then surprisingly this is the<br>[50:01] chapter where I'm going to talk about<br>[50:04] LLMs and agentic development because it<br>[50:08] looks like these topics are really close<br>[50:10] to each other.<br>[50:13] But I will start with some idea like<br>[50:16] remember one of the words which I<br>[50:18] promised to talk about capability. We<br>[50:20] already uh saw them in the previous<br>[50:23] chapter. So what are capabilities?<br>[50:27] This is actually a very old idea. It is<br>[50:31] 60 years old<br>[50:33] and it originated in a like paper about<br>[50:38] like some system which was described in<br>[50:41] 1962. Uh they didn't have the word<br>[50:44] capability. They use the word code word<br>[50:47] code word some words with some<br>[50:50] additional information. And the word<br>[50:52] capability was introduced in 1966 by<br>[50:55] Dennis and Van Horn in some other paper.<br>[50:59] And the idea was like that capability is<br>[51:02] some token which is unforgeable like you<br>[51:05] cannot like do anything with that. And<br>[51:09] this token grants you access to some<br>[51:12] resource<br>[51:13] and resource can be like really like<br>[51:16] everything like part of memory some<br>[51:21] device<br>[51:23] network socket whatever resource<br>[51:27] sometimes like even CPU might be a<br>[51:31] resource or GPU might be a resource they<br>[51:33] didn't have GPU at that time but doesn't<br>[51:35] matter so token that grants you access<br>[51:38] to some resource<br>[51:40] and capability approach is actually one<br>[51:44] of the two available and widely uses<br>[51:47] approaches for<br>[51:50] security systems. We have ACL's which is<br>[51:54] called access control list<br>[51:57] and when you log into uh like Linux or<br>[52:02] Mac OS you're using ACL's because ACL is<br>[52:05] a list like you have usernames and then<br>[52:08] there are some permissions and ACL says<br>[52:12] okay this user has permission to do this<br>[52:15] this and that like for this file you can<br>[52:18] read it you can write it but you're not<br>[52:19] allowed to execute it for example<br>[52:22] So this is ACL and capability is if you<br>[52:26] possess something that proves that you<br>[52:29] have the permission and of course we can<br>[52:32] use some cryptography techniques to to<br>[52:34] to build those uh tokens but it's<br>[52:37] capability. You have something you you<br>[52:40] show it and then you are allowed to do<br>[52:43] something.<br>[52:45] So in general capabilities they are<br>[52:48] unforgeable<br>[52:50] they are composable because you can put<br>[52:53] two tokens together like token one token<br>[52:56] two token three and then you can you are<br>[52:59] allowed to do all that stuff and they<br>[53:02] are transferable so you can take them<br>[53:05] with you you can put it like bring it<br>[53:08] there bring it there bring it there so<br>[53:10] that's an idea<br>[53:13] now this all this old idea. So we saw<br>[53:16] some example of invisible capabilities.<br>[53:19] That's the same thing something<br>[53:21] additional that you add to your data to<br>[53:24] your variable which allows you to check<br>[53:27] whether you can access that memory or<br>[53:29] not. But this idea is implemented in<br>[53:32] much more general way in Scala.<br>[53:37] And in Scala they have this surprising<br>[53:42] operator which is called carrot or hat<br>[53:47] or circumflex<br>[53:51] and they use it for providing<br>[53:53] capabilities.<br>[53:55] This is a very simplified example and<br>[53:58] this is also work in progress in Scala.<br>[54:01] So it's quite difficult to set up your<br>[54:03] project to be able to compile stuff like<br>[54:06] that. So let's see what what what what<br>[54:08] what we have here.<br>[54:11] So we have a red lines red lines<br>[54:14] function. It takes a string name of the<br>[54:18] file<br>[54:20] and it takes like this using file system<br>[54:24] thing<br>[54:27] like which means like it is allowed to<br>[54:30] do some file system operations here.<br>[54:34] And then we also say that we are<br>[54:36] returning some list of strings<br>[54:40] with this capability.<br>[54:43] So it means like we got this list of<br>[54:45] links. We got this list of strings by<br>[54:50] using file system.<br>[54:54] Now it's a definition function<br>[54:56] definition. You use like some methods<br>[54:58] from this file system to get those<br>[55:00] lines. doesn't matter<br>[55:02] what we call here our resulting type<br>[55:05] actually captures file system<br>[55:08] capability.<br>[55:10] So this list of strings was produced by<br>[55:14] accessing file system.<br>[55:16] Now let's see at this uh let's look at<br>[55:19] this line.<br>[55:21] So variable on the left is list of<br>[55:23] strings with<br>[55:26] you see this hat and cap with minimal<br>[55:30] capability<br>[55:32] like minimal possible capability like no<br>[55:35] capabilities at all and it's impossible<br>[55:38] to assign to this list read lines it<br>[55:41] will be a compilation error because red<br>[55:45] lines gives you something which requires<br>[55:48] this capability.<br>[55:50] So if it would compile it means that<br>[55:53] capability escape somehow you are using<br>[55:56] it in a context where it is not expected<br>[56:00] and compiler can check those things. So<br>[56:03] we have these cap captured capabilities.<br>[56:06] We we we have them in types and we can<br>[56:09] control a lot of<br>[56:11] I realize that my explanation is too<br>[56:14] simp oversimplified. It's impossible to<br>[56:16] understand what capabilities in Scala<br>[56:19] are and you if you are interested you<br>[56:21] can look into like there uh I will give<br>[56:23] you recommendation for a talk here. So<br>[56:26] there there will be something uh like<br>[56:29] there's much more information about that<br>[56:32] but uh as a big picture.<br>[56:35] So<br>[56:37] if we don't have this capture capability<br>[56:41] checking then value can silently escape<br>[56:45] with whatever capability it holds which<br>[56:48] means like we can our file handles can<br>[56:50] go somewhere database connections. So we<br>[56:53] can uh leak some information<br>[56:57] and if we are using capture checking we<br>[56:59] allow the compiler we give the compiler<br>[57:01] a tool to check all those things and to<br>[57:06] disallow certain operations.<br>[57:09] So if you want to learn more about<br>[57:11] capabilities, the best way is to is in<br>[57:15] Scala to listen to watch this talk by<br>[57:18] Martin Adski, Scala's designer. Where<br>[57:21] are we with Scala's capabilities?<br>[57:25] It was like last year, it was in October<br>[57:28] I believe. Uh but now<br>[57:33] one interesting shift in a discussion<br>[57:36] that actually these capabilities idea is<br>[57:40] something where programming languages<br>[57:42] research meets agentic development.<br>[57:46] Martin Adski this May he published a<br>[57:49] paper which is called tracking<br>[57:50] capabilities for safer agents<br>[57:54] and it's a whole paper which is devoted<br>[57:57] to this simple question how we can<br>[58:00] provide additional guarantees to agent<br>[58:05] just to prohibit it from doing wrong<br>[58:08] stuff stuff that is not allowed here.<br>[58:12] So there is this general idea of a<br>[58:16] gentic harness<br>[58:18] and harness in this case gives agents<br>[58:21] tools how to what they allowed to do in<br>[58:25] the real world like if they want to<br>[58:27] access shell if they want to connect to<br>[58:29] database if they require some API keys<br>[58:32] or access to file systems. So there is<br>[58:36] this danger if if agent holds holds all<br>[58:41] the capabilities is allowed to do<br>[58:43] everything uncontrollably<br>[58:46] then we might get in trouble like we<br>[58:49] don't want to give access to everything.<br>[58:53] So what uh Adski says in that paper is<br>[58:57] that compiler can actually enforce<br>[59:00] capability discipline<br>[59:03] because you have this way of expressing<br>[59:05] for each function like what is it is it<br>[59:09] is allowed to touch and you use types<br>[59:12] with capabilities for that and then if<br>[59:15] some functions some programs violate the<br>[59:18] contract they those programs are<br>[59:21] rejected by type checker or they're not<br>[59:23] compiled. you get a compilation error.<br>[59:25] So you don't get any runtime surprises<br>[59:28] because of this capability safety that<br>[59:30] is ensured at compile time. And the<br>[59:33] general vision here in this in this<br>[59:36] approach is that we have a compiler if<br>[59:40] it is strict enough we can use it as a<br>[59:42] gentic harness.<br>[59:45] So we can guarantee that our agents<br>[59:47] cannot do something wrong.<br>[59:50] So agent tools in this approach are some<br>[59:54] sort of typed resources not just<br>[59:56] function calls and then we use<br>[59:59] capabilities to see that there are no uh<br>[60:02] leaks<br>[60:04] in all sorts of resource no some runtime<br>[60:06] exploits and this also means that if we<br>[60:10] have a stricter language like Rust with<br>[60:12] borrow checking or Scala<br>[60:15] it is actually safer to use them in this<br>[60:19] age of LLM. times<br>[60:21] because these languages control gives<br>[60:24] you they give you more control over<br>[60:27] what's going on at runtime<br>[60:30] and maybe this is one other trend that I<br>[60:33] see. So the problem is that like we know<br>[60:39] that for sure it's impossible to read<br>[60:42] and review all the AI generated code.<br>[60:46] Let's just admit that there will be much<br>[60:49] more code that we are like physically<br>[60:52] able to review which means that we need<br>[60:55] to send to production some code that is<br>[60:58] not reviewed<br>[61:00] and in a bad scenario it can execute a<br>[61:04] lot of bad stuff. So if we try to use<br>[61:08] safe languages for that, if we try well<br>[61:11] and our goal should be to add as as much<br>[61:16] like strict harness as possible and<br>[61:18] compiler can be really like good basic<br>[61:21] level for that harness and Scala<br>[61:24] capabilities is one approach of of doing<br>[61:26] that<br>[61:27] and maybe in the future we'll see more<br>[61:30] ways of ensuring safety maybe with<br>[61:33] capabilities maybe using other<br>[61:34] approaches I don't But there will be<br>[61:37] definitely something because<br>[61:40] we can cannot review all the generated<br>[61:44] code. And it's not like I think that<br>[61:47] it's a good thing. It's maybe it's a bad<br>[61:50] thing, but we we have no choice these<br>[61:53] days.<br>[61:57] I'm going to chapter five. And now uh<br>[62:01] for this chapter I will actually use<br>[62:03] Rust as the main example and I will talk<br>[62:07] about governance and community and we'll<br>[62:09] tell you about uh like I will tell you I<br>[62:12] will cover this topic of how programming<br>[62:15] languages are developed<br>[62:18] and I will use Rust as an example but uh<br>[62:21] all other languages they use like<br>[62:22] different systems for development and<br>[62:25] it's like they're really very different.<br>[62:28] So I was involved in some sense in<br>[62:31] developing Haskell years ago. Now I<br>[62:34] focus on Rust. I know something about<br>[62:37] how Kotlin is developed. I know<br>[62:39] something about Java and C++. I have<br>[62:42] friends<br>[62:43] uh telling me stories about that. But<br>[62:46] like here we'll focus on Rust because<br>[62:48] it's like the closest thing that I'm<br>[62:50] doing these days as part of my job<br>[62:52] actually.<br>[62:54] So when we are talking about trust<br>[62:56] governance, there are two main bodies.<br>[62:58] There is a RAS project which is not a<br>[63:01] formal thing. It's actually a group of<br>[63:04] individuals and they work on a compiler,<br>[63:07] standard library, some tooling. They are<br>[63:11] organized into teams. There is a<br>[63:13] leadership council. But at the end of<br>[63:15] the day is just group of people and<br>[63:18] anyone can join. If you show like some<br>[63:21] sort of dedication, knowledge, you can<br>[63:24] join that group and you can develop Rust<br>[63:31] and then there is this Rust Foundation<br>[63:35] and it's a nonprofit organization. It's<br>[63:37] independent.<br>[63:39] uh if you want to be a member you need<br>[63:41] to pay and you need to pay quite a lot<br>[63:44] like Jet Brains is a member but we are<br>[63:46] on a smaller level and there are like<br>[63:49] big players here AWS, Google, Microsoft,<br>[63:53] Meta, Huawei they are like big platinum<br>[63:56] members and they control Russ Foundation<br>[63:59] but like all of them together they<br>[64:01] cannot control anything because it's<br>[64:04] just like different uh companies and<br>[64:07] there are a lot of companies There we<br>[64:09] have a board of directors and there are<br>[64:11] directors which represent members and<br>[64:14] directors which represent project Ras<br>[64:17] project and the important thing about<br>[64:20] Russ foundation that it's not about<br>[64:22] control over language design language<br>[64:25] design tooling everything goes to Russ<br>[64:28] project and Russ foundation don't do<br>[64:31] that they do some things where it's<br>[64:35] difficult to find open source maint<br>[64:38] container like they they they do crates<br>[64:41] IO for example it's a a repository with<br>[64:44] all the libraries for us like they they<br>[64:48] make sure that it works like they they<br>[64:50] pay for the uh like uh course Rust<br>[64:54] foundation pays for development like<br>[64:57] development resources like if you need<br>[65:00] some GitHub actions Russ foundations<br>[65:02] pays for that stuff like that but they<br>[65:05] don't have any control<br>[65:07] So two bodies. So they are they have<br>[65:11] some connections because of project<br>[65:13] directors like they elected as from the<br>[65:15] project and they are represent project<br>[65:18] rust foundation and they talk a lot with<br>[65:21] each other.<br>[65:23] But there is one other thing here which<br>[65:25] was recently created and which was<br>[65:27] supposed to solve certain problems that<br>[65:30] is called Russ commercial network.<br>[65:33] So remember Ras Foundation it it uses<br>[65:36] this model with paid membership you need<br>[65:38] to pay. Ras commercial network is open<br>[65:41] for anyone for companies for the project<br>[65:46] for other open source projects for any<br>[65:48] individual<br>[65:50] and the idea behind trust commercial<br>[65:53] network is to identify are there any<br>[65:56] blockers in language in the compiler in<br>[65:59] tooling that prevent Rust adoption<br>[66:03] like everyone in Rust community want<br>[66:06] Rust to succeed to have more commercial<br>[66:09] adoption to have more companies to have<br>[66:11] more projects implemented with rust but<br>[66:13] if there are some blockers maybe we can<br>[66:16] discuss together and solve them so we<br>[66:19] have regular online meetings it's like<br>[66:22] the next one is August 31 please join if<br>[66:25] you are interested uh you just write<br>[66:28] like Russ commercial network you go to<br>[66:30] the website you will see an open<br>[66:32] calendar and all the information is<br>[66:34] available there and as part of Russ<br>[66:37] commercial network. What we are doing is<br>[66:39] like we having we have sort of<br>[66:41] initiatives<br>[66:43] which can lead to creating some working<br>[66:46] groups, interest groups or maybe<br>[66:48] consortiums in different areas like for<br>[66:51] example we have a fully functional<br>[66:53] network services working group right now<br>[66:57] like they meet regularly and they<br>[66:59] discuss which problems we have currently<br>[67:02] with network services with a sync code<br>[67:05] with stuff like that and they're<br>[67:07] discussing how to find money for<br>[67:10] developers doing what is actually<br>[67:13] needed. So it's like a lot of things<br>[67:16] going on right now. Like this is a new<br>[67:19] development but it's very important<br>[67:20] these days. Ras commercial network is<br>[67:23] also busy with funding.<br>[67:26] So this is something that businesses can<br>[67:29] do. For example like maintainers need<br>[67:31] money, someone needs to pay them. So we<br>[67:34] are trying to to find like common ground<br>[67:38] between maintainers and companies and<br>[67:41] companies have some money so they can<br>[67:43] they can give it to give them to<br>[67:45] maintainers.<br>[67:47] One other thing<br>[67:51] Rust community is also like something<br>[67:53] which is like apart from commercial<br>[67:56] network or Russ foundation or Russ<br>[67:58] project. So we have conferences<br>[68:02] uh we have meetups like local groups<br>[68:04] like I know a lot of Russ meetup group<br>[68:06] organizers like all over the world we<br>[68:10] have this discord server we have zulip<br>[68:13] do you use zulip<br>[68:16] zulip is the main thing for us folks<br>[68:19] like if you are into ras you have to use<br>[68:21] zulip I hate zulip it's a well it's it's<br>[68:24] like messenger it is so that<br>[68:30] but well we we use it in in rust. So if<br>[68:33] you want to participate in the like<br>[68:35] language design you have to use Zulip<br>[68:38] you go to this raslangzulip chat.com<br>[68:41] and then like it's open you can join it<br>[68:44] easily and then you can see how language<br>[68:47] decisions are actually uh uh taken how<br>[68:51] how they they discuss things<br>[68:54] or you can also go to GitHub for RAS<br>[68:56] language you can find source code of a<br>[68:58] compiler this is the place where Rust is<br>[69:01] developed and we a lot of discussions<br>[69:03] there as well because like like issues,<br>[69:07] pull requests, it's all there.<br>[69:10] So it is important to remember all the<br>[69:12] time that open source is not just code.<br>[69:16] It's it's people choosing to show up at<br>[69:20] the right time at the right place. So<br>[69:25] it's a fun thing to develop programming<br>[69:28] languages.<br>[69:30] So can a single person make a difference<br>[69:34] for a programming language? And I<br>[69:36] believe yes, it is possible. It's not<br>[69:39] that easy, but it's not that difficult.<br>[69:42] Like most programming languages, the<br>[69:45] majority of programming languages are<br>[69:46] developed in a very open way. So anyone<br>[69:51] can do a difference. And this is my<br>[69:54] message to those who may be thinking<br>[69:57] about like it's fun to develop<br>[70:00] programming language. Maybe maybe it's a<br>[70:02] good idea to participate and I tell you<br>[70:05] it is a very good idea and it's an<br>[70:07] amazing thing. So please join Ras<br>[70:10] developers or Huskell developers or<br>[70:14] Scala developers or C++ developers or<br>[70:18] cotlin developers. Please it's it's fun.<br>[70:24] Now I have this outro.<br>[70:27] Uh I would like to mention several<br>[70:29] different projects and I won't spend<br>[70:32] time on each of them. Once again those<br>[70:35] are just my observations. It's not<br>[70:37] everything that is going on right now in<br>[70:38] the area of programming languages but<br>[70:40] this is something that caught my<br>[70:42] attention. So I spent some time looking<br>[70:45] into that.<br>[70:47] I believe those are interesting things.<br>[70:50] So<br>[70:52] uh one important thing I mentioned<br>[70:56] partially that already. So we have these<br>[70:58] uh ports and rewrites.<br>[71:03] It's a trend these days to take some<br>[71:05] tool and rewrite it using some other<br>[71:08] programming language or using some other<br>[71:10] technologies. Uh and it works like for<br>[71:15] example UV. UV is a tool which like has<br>[71:20] reimagined the whole Python community.<br>[71:23] like UV is a package manager and in<br>[71:26] Python community they had tooling<br>[71:29] forever for package management but all<br>[71:32] of that tooling was implemented using<br>[71:34] Python mostly and when Charlie Marsh the<br>[71:38] guy behind UV decided to use Rust to<br>[71:41] implement package manager<br>[71:44] he literally created the new world of<br>[71:46] Python development because like<br>[71:48] everything became like like hundreds<br>[71:53] time faster<br>[71:56] like you don't need time to install new<br>[71:58] additional dependency for Python project<br>[72:00] because now it's really fast it's<br>[72:03] amazing for CI it's amazing for agents<br>[72:06] it's amazing for everything so it's a<br>[72:10] very important rewrite and now like UV<br>[72:13] and the company behind that this Charlie<br>[72:15] Marsh startup Astral it was recently<br>[72:18] acquired by open AI so basically open<br>[72:21] AAI now owns uh Python package<br>[72:25] management.<br>[72:27] So that's kind of scary thing for<br>[72:29] someone but it happens. Uh there is<br>[72:33] another project ban ban rewrite ban was<br>[72:36] a project by Jared SA and he used LLM's<br>[72:41] uh for rewriting it from zik to rust and<br>[72:46] some people say that it was a<br>[72:48] advertisement campaign for anthropic<br>[72:51] because bun belongs to anthropic and<br>[72:54] they show that it's possible to do these<br>[72:56] like huge things using their agents and<br>[73:01] their LLM times but it's uh like like if<br>[73:06] you are in social media if you're on<br>[73:08] Twitter like it's impossible to avoid<br>[73:10] this topic and it's still you can hear a<br>[73:13] lot of stuff about that right another<br>[73:15] example that I mentioned uh go<br>[73:19] TypeScript compiler it was written from<br>[73:21] JavaScript to go very interesting<br>[73:24] project no LLMs it was manual rewriting<br>[73:31] And the results of those rewrites they<br>[73:34] are faster and they are safer which is<br>[73:37] interesting.<br>[73:40] Another totally different example<br>[73:43] Cotlin LLM like if you go to uh like if<br>[73:47] you Google Cotlin LLM you will see this<br>[73:50] blog post um Cotlin blogs about Cotlin<br>[73:54] LLM and smart macros like research<br>[73:57] project like July 2026<br>[74:02] uh what they are doing is just like<br>[74:04] sometimes you<br>[74:06] uh don't want to implement some tedious<br>[74:10] code. So you just put in your code base<br>[74:13] like this as LLM uh macro and then write<br>[74:18] some instructions and then LLM during<br>[74:22] compilation will turn this description<br>[74:25] into cotlin code and it will be type<br>[74:28] checked<br>[74:30] and then you will get this code and you<br>[74:32] will commit it into your codebase. So<br>[74:34] you use LLM but only once and the<br>[74:36] results are in the codebase. So if you<br>[74:39] uh and they they they think that this<br>[74:42] smart micro idea is actually cool one.<br>[74:45] It's an interesting project. If you go<br>[74:46] there to just Google cotton LLM, you<br>[74:49] will look at the blog post like end of<br>[74:51] July like very recent development.<br>[74:54] Maybe you will find something<br>[74:56] interesting there.<br>[74:58] Now like much bigger project Java. Java<br>[75:02] is still extremely important language<br>[75:04] for industry for software development.<br>[75:08] And in Java for many years I keep<br>[75:11] hearing about these projects Loom<br>[75:14] Valhalla Panama.<br>[75:17] And this is another example of how we<br>[75:19] can reshape Java. Java is an old<br>[75:21] language. It's more than 30 years old.<br>[75:24] And what they are doing they are<br>[75:26] bringing a lot of very cool stuff to a<br>[75:29] very old language. It takes years to<br>[75:33] come up with the proposals to tweak them<br>[75:36] to implement them. But now we are<br>[75:38] started seeing like in new Java versions<br>[75:42] that some parts some components of those<br>[75:44] projects get into them. So<br>[75:48] like I like the project panama is my<br>[75:50] favorite one. It brings Java much closer<br>[75:54] to C code to native code which means<br>[75:56] like more performance interoperability<br>[75:59] between Java and the native world<br>[76:01] becomes much much much more easier. So<br>[76:04] it's an amazing development. If you are<br>[76:07] into Java, well, you have to know this<br>[76:10] stuff.<br>[76:13] Another industrial language C.<br>[76:16] in C in a recent uh we in a recent<br>[76:20] version which is not actually released<br>[76:21] fully released these days C# 15 they're<br>[76:25] getting so-called discriminated unions<br>[76:29] and this is an implementation of very<br>[76:32] old idea of algebraic data types which<br>[76:35] is well known since 1970s<br>[76:39] at some point like Kotlin have some<br>[76:42] version of that Scala has some version<br>[76:44] of that swift rust past and now they're<br>[76:47] going into C in C# they're getting<br>[76:50] exactly union types you see like well<br>[76:54] it's mainstream adoption of this very<br>[76:56] old idea from functional programming<br>[76:58] languages so good ideas they travel very<br>[77:01] slowly but that's fine they if they are<br>[77:04] really good they will arrive at some<br>[77:06] point so new development in C old<br>[77:10] development for some other languages but<br>[77:12] they are doing that they're adding that<br>[77:13] in a very like nice way. It's very<br>[77:16] difficult to bring some very new feature<br>[77:20] to an old language and it looks like<br>[77:22] they are doing the right thing that<br>[77:24] right now.<br>[77:27] Another example, code speak. Codespeak<br>[77:30] is a project by Andre Brislav. Andre<br>[77:33] Brislav is original designer of Kotlin<br>[77:35] and he's an amazing guy and like I love<br>[77:38] him. He's like I recommend watching his<br>[77:41] talks uh his interviews. he's just just<br>[77:44] great.<br>[77:46] And now he came up with an idea of how<br>[77:49] to reimagine software development in<br>[77:51] general. So he says, "Okay, we cannot<br>[77:55] review that code. It's it's un it's<br>[77:58] impossible. So what if we give<br>[78:01] developers some new like more highlevel<br>[78:04] way of describing their software using<br>[78:08] some specifications<br>[78:10] on top of your code base and then we'll<br>[78:13] use LLMs to go from specifications to<br>[78:16] code in some programming language.<br>[78:20] So this gives programmers the way to say<br>[78:23] what they mean using natural language<br>[78:27] and they don't have to say how to do<br>[78:29] that because well LLMs can do that for<br>[78:31] them.<br>[78:33] So it's a very interesting approach like<br>[78:35] I recommend watching some talk by Andre<br>[78:38] about that. But in general, like when<br>[78:42] the creator of a very good programming<br>[78:44] language turns to some new idea, it's<br>[78:47] it's it's always worth to pay attention<br>[78:50] because chances are this is a good idea<br>[78:52] as well because for me programming<br>[78:55] language creators are like the the<br>[78:58] smartest, the most brilliant folks in<br>[79:01] this world. Like they are really genius.<br>[79:04] So let's let's uh look at what they're<br>[79:08] doing right now.<br>[79:10] I'm about to finish my lecture.<br>[79:13] So I have several takeaways like if you<br>[79:17] if like I would be happy if you remember<br>[79:20] these takeaways after this lecture. So<br>[79:23] first thing programming languages are<br>[79:25] constantly evolving. They never stop.<br>[79:28] They never die. They are evolving.<br>[79:34] We are in a world of AI code generation<br>[79:37] and this world requires more automatic<br>[79:40] safety. Automatic as opposed to manual<br>[79:43] ensuring that we have some safety<br>[79:45] because people can't review everything.<br>[79:49] Unfortunately, safety has its costs in<br>[79:52] terms of performance. Well, we have to<br>[79:55] pay if you want that safety.<br>[79:59] And also programming language<br>[80:01] development is really it is an open<br>[80:04] club. Everyone can join and you can join<br>[80:10] and that's a very good like way to spend<br>[80:13] your free time or maybe at some point it<br>[80:15] will become your like<br>[80:18] job.<br>[80:20] And also this weird symbol carrot<br>[80:26] circumflex<br>[80:28] hat operator. It's really fun symbol.<br>[80:31] Maybe it's not weird at all. We can use<br>[80:33] it for very nice things.<br>[80:37] Thank you very much. If you have uh like<br>[80:41] some questions, you can ask them now or<br>[80:43] maybe we have like five minutes uh left<br>[80:46] here or you can always contact me on<br>[80:49] social media or by mail. Thank you.<br>[80:53] [applause]<br>[81:01] So questions. Do you have any questions?<br>[81:11] Go ahead.<br>[81:17] >> So my question is why ideas<br>[81:21] so slowly<br>[81:24] so enterprise focused.<br>[81:28] >> Yeah. So I I'll repeat the question for<br>[81:30] the translation. why ideas are adopted<br>[81:33] like so slowly like they were available<br>[81:36] like many years ago and only now they go<br>[81:38] to mainstream languages<br>[81:43] well it's uh<br>[81:45] I think it's because like some ideas are<br>[81:49] not needed like if you are programming<br>[81:52] language creator you might have<br>[81:54] brilliant ideas but they don't belong to<br>[81:56] your world to your time and it's fine<br>[81:59] like they're just not needed in<br>[82:01] mainstream languages and we we we saw<br>[82:04] that many times like lambda functions<br>[82:07] they they known like since 30s like<br>[82:10] before programming languages but we've<br>[82:13] got them in Java in 201 what eight or 10<br>[82:17] or 15 I don't remember like it's like<br>[82:19] many years garbage collection was first<br>[82:22] implemented for lisp in 50s<br>[82:26] like I think Java was the first<br>[82:28] mainstream language with garbage<br>[82:29] collection<br>[82:30] It's it's normal like before that we<br>[82:33] didn't need that but then if you're a<br>[82:35] programming language designer you need<br>[82:37] to know about those ideas<br>[82:40] like you need to know you need to learn<br>[82:42] about old languages<br>[82:45] it's interesting and it might be useful<br>[82:47] at some point it's fine it's not a<br>[82:50] problem to be honest we don't need these<br>[82:53] like features of esoteric esoteric<br>[82:55] languages in the mainstream languages<br>[82:57] why like Maybe in 50 years those ideas<br>[83:02] which we consider esoteric now they will<br>[83:04] be mainstream that's fine no problem at<br>[83:07] all so I don't know why it just happens<br>[83:09] like that but it's it's good thing<br>[83:13] and then it's good for us like we are<br>[83:14] interested in programming languages<br>[83:16] history like I'm interested in history<br>[83:18] programming languages and for me it's<br>[83:21] very nice to see okay now you are doing<br>[83:24] that okay that's funny that's that's<br>[83:26] good to So<br>[83:29] yeah, it's it's it's not an answer.<br>[83:31] Sorry. But that's that's what I think<br>[83:33] about it. Yeah. Other questions.<br>[83:40] Don't be scared.<br>[83:49] Do we have any questions in chat? maybe<br>[83:52] on the translation<br>[83:55] anything<br>[84:01] or maybe by the way like like I I know<br>[84:04] that I am right between uh like I am<br>[84:08] between the students of a camp and the<br>[84:11] dinner so maybe it's a good idea<br>[84:13] >> question<br>[84:15] >> okay yeah we have a question<br>[84:17] >> so the question is I am really<br>[84:19] struggling with languages syntax<br>[84:22] when they put types after arguments<br>[84:25] variables. Why is it so?<br>[84:28] >> I'm really struggling with the<br>[84:31] programming language syntax when they<br>[84:32] put types after variables.<br>[84:36] That's the question. Uh<br>[84:41] yeah, that's fine. You know, you know<br>[84:43] what? Uh I struggle with that as well to<br>[84:47] be honest.<br>[84:49] and uh uh like struggling with syntax is<br>[84:54] is something that we can uh we have a<br>[84:56] cure. We have LLMs.<br>[84:59] We don't need to think about syntax<br>[85:01] anymore. So that's a good news<br>[85:04] because LLMs will generate everything<br>[85:06] for us. They are good at syntax. They<br>[85:08] are amazing at syntax actually. But<br>[85:11] yeah, I have like like speaking about<br>[85:14] syntax, I have huge issues with Scala<br>[85:18] syntax.<br>[85:19] I just it's for me like I'm looking at<br>[85:22] Scala for maybe 15 years<br>[85:25] and like for me it's impossible to write<br>[85:28] Scala code. I don't know why they use<br>[85:31] all those like like parentheses,<br>[85:33] brackets, everything. And like for me to<br>[85:36] combine them like by by myself all those<br>[85:39] symbols is just impossible. I don't know<br>[85:41] why. Maybe it's just some psychological<br>[85:44] incompatibility<br>[85:45] maybe.<br>[85:49] All right. Any any questions from the<br>[85:51] audience?<br>[85:53] Well, I think we are done here. Thank<br>[85:56] you very much folks. Thank you. And<br>[86:00] [applause]<br>[86:02] and folks folks on YouTube. Bye-bye.
Unfortunately, Youtube does not provide subtitles for this video, Programming Languages Today and Tomorrow, YouTube, 01m0mzb7axx03g6w4rthxpqf3y.