WEBVTT

00:00.000 --> 00:15.240
So, I think we are on time to get a started or maybe one minute, no, it's already

00:15.240 --> 00:16.240
0.5.

00:16.240 --> 00:19.280
So, let's get a start.

00:19.280 --> 00:24.520
So since we didn't have a bedroom in the past few years, a lot of people have probably

00:24.520 --> 00:30.280
thought of as Ada just kind of being there alone, I'm not having many changes, but that's

00:30.280 --> 00:35.160
why not true, and even within the Ada community a lot of people don't know some of the new

00:35.160 --> 00:41.080
features that the language has gained in the past few years, so I wanted to update this a

00:41.080 --> 00:42.080
little bit.

00:42.080 --> 00:48.680
So, what we are going to see today is the new Ada 2022 standard that came out a couple of

00:48.680 --> 00:57.000
years ago, the new wish compiler that we have, which has added a couple of new cool features,

00:57.000 --> 01:01.920
some spark improvements, I will tell you what that is, some tooling improvements, and some

01:01.920 --> 01:08.560
Ada users, some users of the language, one of which hopefully will catch your attention

01:08.560 --> 01:10.200
quite a bit.

01:10.200 --> 01:16.920
So, Ada 2022 new features, the language is not there, it's still in a lot of the new standard

01:16.920 --> 01:26.600
is being worked on already, some features we gain, some functionality, some features with

01:26.600 --> 01:33.280
some iterator filters and the reduce attribute for arrays and for for loops.

01:33.280 --> 01:37.920
We have declare expressions, one of the things people hate about Ada is the introduction

01:37.920 --> 01:43.800
of new variables, it is very straight where you can declare new variables and where you can

01:43.800 --> 01:48.600
input them, the declare expressions will hopefully aid that a little bit, when you just

01:48.600 --> 01:53.320
need a quick variable to use in a quick expression.

01:53.320 --> 01:58.880
We also gain static expressions, so when you have a functional expression and you add the static

01:58.880 --> 02:05.720
attribute, it's compile time evaluatable, so we also gain some basic compile time evaluation

02:05.720 --> 02:12.120
which will be worked on in future abitions, also if you use the declare expression with

02:12.120 --> 02:17.680
a theme, a functional expression, you can create fairly complex functions that are

02:17.680 --> 02:22.360
compile time evaluatable.

02:22.360 --> 02:28.080
The image attribute, that's something people don't like about Ada, the way we print values

02:28.080 --> 02:32.880
to strings, the way we transform them, well now the compiler will automatically declare

02:32.880 --> 02:37.880
the image attribute for all data types, even composite data types, like structures, arrays,

02:37.880 --> 02:38.880
etc.

02:38.880 --> 02:44.800
And if you don't like the default one, there is the input image attribute for your types,

02:44.800 --> 02:53.120
so you can just tell your telly to use your custom printing procedure, some basic quality

02:53.120 --> 02:59.360
of life improvements in Ada, Delta aggregates very cool feature, when you have an object

02:59.360 --> 03:05.040
and array complex data structure and you just want to update several fields of it, instead

03:05.040 --> 03:12.040
of having to do several assignments each different change you want to do, just use Delta,

03:12.040 --> 03:17.720
the Delta operator and voila, you just say the small changes you want, this is going to

03:17.720 --> 03:22.920
be used to copy data from one attribute in a new one with just a small changes, it's

03:22.920 --> 03:30.960
a huge life improvement, index parameters for arrays and also the assignment target name,

03:31.000 --> 03:36.920
you can now use the add symbol to refer to the left hand side, so in Ada we are, it is

03:36.920 --> 03:41.920
well known to have very long names and people don't like to type them, so if you want

03:41.920 --> 03:48.720
to just use a short change to your data you can use the add symbol to do that.

03:48.720 --> 03:54.160
Also that's the changes to the syntax, we have some changes to the libraries, we gain

03:54.200 --> 04:02.200
a big into your support, we will get a big into your talk later, it's a different

04:02.200 --> 04:08.800
implementation for cryptography, constant time evaluation, whatever, the one in the standard

04:08.800 --> 04:16.800
library is up to the compiler to decide, we also gain atomic operations and we already had atomic

04:17.720 --> 04:23.480
platatimes in Ada but we didn't have a package specific to deal with them, so now we have

04:23.480 --> 04:28.080
a support for biatic C functions, Ada is wonderful when it comes to interoperability

04:28.080 --> 04:33.440
we see with foreground, with coval and again, you can even interface with Pascal if you

04:33.440 --> 04:39.080
want, but one of the main points was where biatic functions as Ada does not support them,

04:39.080 --> 04:44.520
well now there is a quality of life improvement if you have to deal with those in Ada,

04:44.520 --> 04:48.920
the non-blocking aspect, if you are into real time operating systems, if you have high

04:48.920 --> 04:54.680
performance stuff, like we hear games, they are very useful, if you know what profiles are,

04:54.680 --> 05:00.120
great, if you don't, don't worry about it. And first class, a parallel support we gain

05:00.120 --> 05:07.000
a new keyword, the parallel, it's meant to make parallel loops and iterators, etc, much faster,

05:07.000 --> 05:13.240
just throw it around and let the compiler paralyze your code, it's still not supportive in the

05:13.240 --> 05:19.720
compilers. All the other features are available in DCC, Genet, and GenetLBN. Actually there are

05:19.720 --> 05:25.800
more features that are all very supportive for the new standards, going to come out, some

05:25.800 --> 05:29.960
of them are really nice, but I didn't want to mention them today, I will let you read the

05:29.960 --> 05:35.720
change locks of the compilers that I used to write. Also, reminder, the Ada reference manual,

05:35.720 --> 05:41.240
the standard is free for everybody and like SQL or C++ or C, where you have to pay hundreds

05:41.320 --> 05:48.840
of euros, this Ada, we try to make things open for everybody. So, that's all for the language,

05:48.840 --> 05:51.800
let's go, we're going to have a VM, which, yes, one question.

05:57.080 --> 06:01.800
So, the question was whether the app symbol is, I'm just doing this for the online people,

06:03.400 --> 06:10.120
whether it's a textual change of the data or a reference, etc. It's just a textual

06:11.480 --> 06:15.160
replacement of the left hand side of the assignment, simple and easy.

06:28.440 --> 06:34.440
Yes, so if it has side effects, it will happen, though we need that we hate those, so careful

06:34.440 --> 06:38.680
with that, but you can use the app symbol for example in function calls, so you have left hand side,

06:38.680 --> 06:46.360
some function called app. So, yes, it will happen at the side effects. So, Gnatil VM, we have now

06:46.360 --> 06:52.920
a new compiling in town, it's not really new, it's the Gnat, the DCC front end, bolted into the

06:52.920 --> 06:59.080
LBN infrastructure, you may be asking yourself, why do these? Well, LVM has some features,

06:59.080 --> 07:05.560
there are not available in DCC, mainly web assembly support and Morello sharing support,

07:05.640 --> 07:13.640
also some cooler things that I will talk about later. And we have some people of the community

07:13.640 --> 07:22.040
have already used the web assembly support for to create web apps and just work with them.

07:22.040 --> 07:28.520
One of them is this little, I think I left the, it's not the interactive one.

07:28.520 --> 07:33.720
Oh, to bring this lights, I had to use a picture because I couldn't use the website,

07:33.720 --> 07:39.080
but you can go into the link, I have the D enough, and this is a gliding navigation system,

07:40.680 --> 07:46.120
and it runs directly in your browser, the guide that did it is from here from Brussels,

07:46.120 --> 07:56.360
and he runs his own glider in his Raspberry Pi in his Google Chrome browser, and it has like

07:56.360 --> 08:02.680
real-time information from like wind providers, similar to some simulation support, it's pretty

08:03.000 --> 08:08.760
pretty cool. As part, for those of you who do not know Spark, Spark is the very

08:08.760 --> 08:16.520
fibrill subset of Heda, although that's no longer wide true. Spark in the past few years has

08:16.520 --> 08:22.680
gained a lot of new features, and it's no longer done much of a subset of Heda, it's mostly

08:22.680 --> 08:28.440
all of Heda. So in 2019, we gained the borrowed checker support, so Spark is fully memory safe,

08:29.400 --> 08:34.760
previously you couldn't do dynamic memory in Spark, it was written now, you can't

08:34.760 --> 08:39.960
using the borrowed checker as it takes place in Rust. Actually, there is a sliding

08:39.960 --> 08:44.600
improvement, lifetimes are inferred because Spark is a full-param analysis, so you don't have to

08:44.600 --> 08:49.400
annotate your things with Spark. And last year, we gained exceptional support, an exceptional

08:49.400 --> 08:54.840
support in Spark, which was another big mission feature from Heda, so now the creation,

08:54.840 --> 09:00.680
transmission, the handling of your exception throughout your entire program is proveable,

09:00.680 --> 09:04.600
you can prove that you are doing things correctly, some termination analysis improvements,

09:04.600 --> 09:09.800
that's really cool, some people are like, can proveers that show determination of programs,

09:09.800 --> 09:15.560
well, in some cases, now they can do so automatically. And of course, some improvements to the

09:15.560 --> 09:21.480
Provers, that they are underlying technology that does the proving for you, that they do the

09:22.440 --> 09:28.680
have anything. Also, wonderful new, new library, Sparkly, Sparkly is basically a

09:28.680 --> 09:34.680
formerly verified standard library, so you have maps, sets, everything, it's fully memory correct,

09:34.680 --> 09:41.880
it's fully run, what we call a-art, so absence of runtime errors, it's fully correct, you can

09:41.880 --> 09:49.080
formally use it, it's great, it has abandoned variants of the features, so if you want to do dynamic

09:49.160 --> 09:53.960
stuff, you can, big names, and also a large part of the aid standard library, that's something

09:53.960 --> 09:58.920
a lot of people don't know, in Genet, has been also formally verified, so if you do, like,

09:59.640 --> 10:04.120
use the matrix package, everything is annotated to make sure that if you feed it correct data,

10:04.120 --> 10:09.320
you will get correct data, it will not handle incorrect data, you will get as soon as possible

10:10.040 --> 10:15.880
missed an error in Sparkly Provers. Tools, earlier, a lot of people don't know it, it's the

10:15.960 --> 10:22.920
aid as package manager, it's modeled after Rust's cargo, and last year, it had our version 2.0 release,

10:22.920 --> 10:28.360
with the earlier install commands, so now you can install your aid apperums at the system level,

10:28.920 --> 10:34.360
it has some positive-life improvements, some tool chains, some arm, especially in the max sections,

10:34.360 --> 10:41.720
some arm improvements there, and we are trying to get expand the arm support in our

10:41.720 --> 10:48.120
layer, because we are using GitHub runners for edit 3 ones, these like a couple of weeks ago,

10:48.120 --> 10:54.280
they entered public beta, so we will try to get the tool chains built as soon as possible for you,

10:54.280 --> 10:59.720
and also again out at the end, and always help us welcome to improve the packages there.

11:01.080 --> 11:08.440
Very news in my humble opinion, and at the core, finally, stop their distribution of the compiler,

11:08.600 --> 11:13.720
that was discussing a lot of issues within the community, a lot of confusion, because people thought,

11:13.720 --> 11:19.160
hey, that company is the one providing the compiler, and it's DPL on the, what's happening,

11:19.160 --> 11:25.800
wasn't this supposed to be like the LGPL like normal GCC stuff, and that was discussing a lot of

11:25.800 --> 11:31.480
confusion, so they decided to stop doing that, and mostly because now since we have earlier,

11:31.480 --> 11:37.000
if you wanted to use all the tools that they provide, they have been packaged there, so now you

11:37.000 --> 11:42.680
can just install them for your own project and go ahead with them, so great. Also, it's not like

11:42.680 --> 11:48.920
they have stopped, a lot of the libraries they provided were GPL, they've changed their licenses

11:48.920 --> 11:55.000
to Apache, this is a bit of a philosophical thing, but a lot of people tend to refer Apache for low-level

11:55.000 --> 12:02.120
libraries, so that's an improvement, and of course, they have kept on improving the Genaut Studio

12:02.120 --> 12:08.360
ID for a data language server, which also supports we are going to superfair to use it.

12:10.120 --> 12:16.680
And of course, the rest of the community has been updating their stuff, we have embedded systems,

12:16.680 --> 12:23.720
compilers, BHD, compilers, bullcann, bindings, et cetera, so feel free to just use whatever.

12:24.760 --> 12:30.040
In terms of community, a lot of you may not be aware, but there is a new community website that

12:30.040 --> 12:36.200
tries to modernize the aid experience that's aid along, and it has instructions how to quickly

12:36.200 --> 12:41.640
get started with aid out, how to set it up, it has tutorials, it has a huge form that's

12:41.640 --> 12:47.240
wide active, and I think a lot of us here active there, so if you have questions or anything,

12:47.240 --> 12:52.840
please come and join and we will try to help you. Also, the aid-a user society, it's trying to be

12:52.920 --> 13:01.400
a global institution, as Derek presented the European side of things, some people fell left out,

13:01.400 --> 13:07.880
so we wanted to also have an institution that would provide them home to be part of and take

13:07.880 --> 13:13.960
part in the discussions of the aid at the development. So if you have feedback for Ada, the Ada

13:13.960 --> 13:19.480
repertoire rule, which is hosted, it's kind of close to the Ada user society, you can go into

13:19.560 --> 13:23.720
the GitHub, I'm proposing new changes to the language, and they will discuss them with you,

13:23.720 --> 13:28.840
and if they like them, they will propose them for you. So we are trying to also get the Ada

13:28.840 --> 13:37.960
standard a little bit more of a community feedback. Also, last year, NSA recommended Ada, as a memory

13:37.960 --> 13:43.560
safe programming language, which is a bit of a surprise, because Ada is not, members of Ada Spark,

13:44.520 --> 13:51.880
however, it kind of makes sense, Ada was developed by design to be safe in a lot of areas,

13:51.880 --> 13:58.360
not just memory safe, and the language design and the features that it has helped you get everything

13:58.360 --> 14:04.280
correct. It has control types, limited types, these features tend to be quite advanced, and people tend

14:04.280 --> 14:09.000
to forget the day exists, but they are in the language, and the compiler, just by the design,

14:09.080 --> 14:15.720
types, and etc. Dynamic, implicit dynamic, and allocation in the allocation will get you quite far.

14:15.720 --> 14:20.520
Also, memory pools, a lot of people don't know we have them, they are known as memory arenas,

14:20.520 --> 14:27.480
in a lot of languages, we have those, custom allocators, by default, everything is in the language,

14:27.480 --> 14:33.640
but of course, if you need 100% memory safety, just go ahead and use Spark, also you will get

14:33.720 --> 14:40.120
runtime safety, exceptional safety, everything safety, not just memory. How many of you knew

14:40.120 --> 14:46.440
that Nvidia was using Ada Spark? If you are using a new Nvidia graphics card, you are probably

14:46.440 --> 14:54.520
running Spark. Since 2019, they decided to go with Ada Spark, because they need to get their hardware

14:54.520 --> 15:00.280
under software certified for safety critical applications like self-driving cards, and they did an

15:00.280 --> 15:05.160
assessment on what languages they should use. They looked at C, because it had some

15:05.160 --> 15:10.760
verified tool chains, they looked at RAS2, and they decided that Spark was going to be the

15:10.760 --> 15:15.560
Ada Spark was going to be there. They liked it so much that they even contracted

15:15.560 --> 15:23.160
an ADICOR to develop ACCODA binding so that you can perform CUDA directly from ADA, but it's not fully

15:23.160 --> 15:28.120
open. The libraries, you can go ahead and see what you can take a look at. There are tutorials

15:28.360 --> 15:33.800
on how to use it, but the two things are not really that open. We know they liked it. Why?

15:33.800 --> 15:39.640
Because Nvidia has a white hat hacker team inside their company, and they tried to break their

15:39.640 --> 15:48.280
own software, and they went to DevCon to tell their stories on how it went to their adventures

15:48.280 --> 15:54.520
when trying to break Ada. Their first DevCon DevCon 29, they gave up and they broke the risk

15:54.520 --> 16:01.240
5 ISA instead. It was easier. Hardware was the weakest link. DevCon 30, they probably got

16:01.240 --> 16:08.120
much better, and they found they started to find some issues in the ADICOR and they compared

16:08.120 --> 16:13.320
them to safety critical secret that they had and the Spark code. You can watch the videos.

16:13.320 --> 16:17.960
You didn't have to trust me, but they found that the quality was much better. Also, a lot of

16:17.960 --> 16:27.640
information they gave about Spark has become updated. Although everything looks good, there are

16:27.640 --> 16:34.120
some challenges ahead. I think we need to improve the tools wide a lot of experience, learning

16:34.120 --> 16:41.880
experience, the tutorials, etc. It needs to be heavily improved compared to other languages,

16:41.880 --> 16:48.040
but we are working on that. Also, if you would like to learn Ada, you don't even have to

16:48.040 --> 16:53.240
install the compiler. It has interactive compilation boxes where you can type Ada and solve the

16:53.240 --> 17:01.000
exercises and see how things break or not. It has some courses. They added some intermediate

17:01.000 --> 17:08.520
courses, learning things. If you are coming from embedded team, they have a specific course for you.

17:08.600 --> 17:15.800
Miss Rossi, C++, Yava. If you have any of those backgrounds, go ahead and look at the specific

17:16.840 --> 17:22.600
sections because you will have a much better experience with them as they target your previous experience.

17:23.160 --> 17:28.920
So that's everything from me. Thank you for your attention. I'm open to questions here now or my

17:28.920 --> 17:36.600
inbox is more than an open and hopefully we'll see some of you take on the ADICOR language. Thank you.

17:38.680 --> 17:48.280
So, we have some time for questions. If you have them, feel free to ask them. If not,

17:48.280 --> 17:53.880
we can add a started with me here. With the next talk, which will be how to get a started with Ada

17:53.880 --> 18:02.440
in like two minutes, five minutes. No, I know we want to start there, but in case you didn't know

18:02.440 --> 18:07.720
the experience, especially how to get a started has become a lot easier thanks to some packages

18:08.280 --> 18:17.880
that have been created. So, I encourage you to take on Ada. If you have issues with the language,

18:18.520 --> 18:24.760
come to the community, we are here to help. Also, I'm a bit of an issue that the Ada community has.

18:25.160 --> 18:30.440
We tend to just tell new people, oh, here's the standard. Go and read it and people don't like that,

18:30.440 --> 18:35.880
especially new people because they are not used to it. Fun fact, the Ada standard has been

18:35.880 --> 18:40.840
written in such a way that anybody can write a read it, not just compiler developers. So,

18:40.840 --> 18:45.400
don't be afraid to use, don't be afraid to open it and go into the different sections and discover

18:45.400 --> 18:51.320
what the language has to offer. And it has a lot of small details that most people don't know.

18:51.320 --> 18:56.440
And that's something I'm trying to improve. Some people don't know, we have control types,

18:56.440 --> 19:02.520
finalizable types that's coming this year, limited types. And most people don't have these features

19:02.600 --> 19:08.600
in other languages, so they don't know, they exist in Ada. So, we are working on that to improve

19:08.600 --> 19:12.680
your experience. Okay? So, yes, another question?

19:13.320 --> 19:22.920
You start with your talk. I'm so good at max. So, I work with you. You have a lot of videos,

19:22.920 --> 19:30.920
you're so pretty max. The Ada world of max is, it's a little bit. One thing.

19:31.880 --> 19:39.720
You know, stay. Yes, stay. And there is no big data in the model. To my knowledge.

19:39.720 --> 19:45.800
And so, I'm wondering what the thing was going on in this area, back to the left and the proper

19:45.800 --> 19:54.520
leave in the banks and the read-up of language. So, another tool, what is the stage thing? Is there

19:54.520 --> 20:00.520
something worth people on that? So, the question was, for the unlike people, what's the state of

20:00.520 --> 20:06.680
Ada mode in email? Because it's a little bit broken. And the answer is yes, the container is very

20:06.680 --> 20:12.120
old and he decided to step down. And a lot of people don't know, the Ada mode was one of the first

20:12.120 --> 20:20.920
modes to take place. And it hasn't been, and it's architecture is ancient. It's huge, actually.

20:20.920 --> 20:27.240
It's one of the biggest modes of the Ada of the AMAX ecosystem. We are updating it to have the new

20:27.240 --> 20:36.040
3-seater system to use the new 3-seater system in email. It's a lighter version and we are working

20:36.040 --> 20:44.200
for new containers. Also, I also would like to encourage people to use the new Ada language server,

20:44.200 --> 20:50.520
the ALS, using the new Microsoft technology for language servers, which is available. You can just

20:50.520 --> 20:55.800
install it with failure and get started with your favorite editor. So, if your editor supports

20:55.800 --> 21:03.960
the language server, which most editors do nowadays, including Max, you can use it. The ALS has a

21:03.960 --> 21:10.600
bit of a few bugs in it too. It's very new. The guy mounting it, it's trying not to get killed by missiles.

21:10.600 --> 21:16.200
And you can, luckily, that things are working. Another thing I forgot to mention with

21:16.360 --> 21:21.240
India, the reason I added in India here, it's not because it's a big large company. It is.

21:21.960 --> 21:27.000
It's because they make it public that they use Ada. One of the biggest issues that I'm trying to

21:27.000 --> 21:32.600
change out a lot of people that you say that don't communicate that they use Ada. And they don't want

21:32.600 --> 21:39.640
people, no, you say that. And here, missiles in Ukraine, some of them are developed in Ada from people

21:40.360 --> 21:46.200
Sweden. Financial systems also use Ada, but they don't necessarily, they don't want people

21:46.200 --> 21:51.000
knowing that they use Ada. That's, it's a bit of a problem I'm trying to have that. So,

21:51.000 --> 21:57.800
just as a as an added bonus. So, we have people working on that and things are, it's lowly

21:57.800 --> 22:05.080
moving. So, be patient and we're looking for developers. That's mostly it. And the Ada community,

22:05.160 --> 22:11.240
that's in open source community, it's growing slowly. Because the company, especially

22:11.240 --> 22:16.840
some companies want to take a back seat and they want the community to come in. And that takes

22:16.840 --> 22:22.680
time. Sorry about that, but hopefully it's a temporary, it's a transition just.

22:24.680 --> 22:28.680
And we have one more minute if someone has any questions, if not.

22:29.560 --> 22:35.720
Yes. I think Ada has to really pay a lot. So, use a bill, spell that one question,

22:36.360 --> 22:44.440
what's your marketing story against us? And so, the question is, what's the marketing

22:44.440 --> 22:52.920
story of Ada compared to us? I encourage you to stay here for the rest of the day, you just read the

22:52.920 --> 22:57.480
code. And one of the beautiful things I'm thinking that's told me about Ada's, you don't have to

22:57.480 --> 23:03.880
know Ada, you can read Ada. And even a bunch code, that's impressive. And I also have a

23:03.880 --> 23:10.120
later talk, that's quite a bunch. And I encourage you to watch it because even a bunch of concepts

23:10.120 --> 23:16.280
are very easy to understand. We have a formal proofs and that's way more powerful than just memory

23:16.280 --> 23:20.520
safety. People don't realize that. And there is a reason why safety critical systems is still

23:20.600 --> 23:25.720
use Ada. And in video, I encourage you to watch a video from, from media, why they did

23:26.840 --> 23:31.560
turn to Rust and they decided to go with Ada. And that's one of the things, don't believe my

23:31.560 --> 23:37.480
words, believe that people that actually have invested millions in this thing. So, they have

23:37.480 --> 23:44.760
even more incentives. So, it's readability, it's actual like true correctness, not just memory

23:44.840 --> 23:53.240
correctness, and it's very stable syntax. You can just get Ada 83, and it works today.

23:54.120 --> 24:01.080
It's not broken. It has a slower pace of development. The features, there is a wonderful talk

24:01.080 --> 24:08.920
from a past, either the room from 2021, from Paul Gerett, where he compares C++, the features of

24:09.000 --> 24:14.920
C++, and Ada. And one of the greatest points you may is the Composibility of the Language.

24:14.920 --> 24:19.880
Ada has a lot of keywords, and people think it's very verbose, but every keyword has its meaning,

24:19.880 --> 24:25.080
and it's very concise. And you can then build your own infrastructure on top of them. And that

24:25.080 --> 24:31.080
is a wonderful thing instead of like Rust, where you have a lot of like optionals and a lot of

24:31.080 --> 24:36.520
syntax to do a lot of stuff. But the language is all over the place and you have like seven,

24:36.520 --> 24:43.880
eight different types of strings, and we only have two. It's normal strings and buttons once.

24:45.560 --> 24:52.200
I encourage you to try the language. So, time's up. Yes, and we are working on that.

24:52.200 --> 24:58.040
And Rust, I have to say they are doing a wonderful job in terms of communication tutorials

24:58.840 --> 25:04.040
and improvements towards disability, and we are working on that. So, thank you.

