 So good morning As Dirk said, I'm Jean-Pierre Ozen from a company called Edelog Which is a company doing mostly his business with Edda, so you may Think oh that guy will tell you how nice Edda is because that's his business. So let's be clear I still in a previous life. I was Teaching in an engineering school Compilation languages and so on and I thought Edda was a good language And I made my business on Edda because I thought it was my business. So it's Edda that drove me to having business With it not the other way around. Okay, of course, I have about 45 minutes So I won't tell you everything about Edda I just try to give you another view of the spirit of the language and how it's Different from other languages. Okay, there are some things it looks like regular languages with Usual feature, but as you dig into it, you'll see that it's more different than one may think first so The name Edda is not an acronym It's it comes from Edda Byron who is supposed to be the first programmers She wrote a program for the Babbage machine. I don't know if you heard about that She could never run her programs because the machine was never built But her programs have been rewritten in PL one Later and they are said to have worked Right from the start So the first programmer was a lady and the first program had no bugs things have changed on both these aspects The first version of the language has been issued in 1983 So it was quite advanced for its time with advanced feature Like exception generics and tasking it was there was and there still are no new features no things invented especially for Edda. It's rather Gathering together the best ideas from other languages. So everything you have in Edda existed in previous languages It's just a synthesis of the best ideas that appeared in various languages Due to the evolution of software of hardware also, there was a major Improvement in 1995 with introduction of object-oriented programming Protected objects which are a mechanism for synchronizing between tasks well Task is our term for threads actually in 1983 that was a common name for those things It's later that the term threads was coined and hierarchical libraries Which is a way to organize modules Note that Edda was the first standardized object-oriented languages in 1995 The second one was C++ three years later Then language is evolved while you know that you always have different version and in 205 the main addition was interfaces like Java or C-sharp interfaces and A built-up point improved in general existing features, but it was less of a big bang as happened in 1995 and the story goes on we had a new version in 2012 and it's going more and more formal more towards Program proofs. So we have invariant precondition post-condition and things to make compiler able to prove behavior and more sophisticated checks at runtime and Regarding this evolution I would stress that we went From a big bang in 1995 where it was a big rewrite of the whole standard to a more continuous evolution where we gradually had more libraries and evolved features and less Complete changes. So it's a in a sense a sign a sign of maturity So we are in a free software event here And it's important to note that Free software does not like to depend on proprietary technologies. Edda belongs to nobody Okay, it's an international standard There is no big pocket that owns it which is a problem because we have no nobody to pay for advertisements, okay, so it's We're happy to be here to get the word through because it's hard because nobody had the money to pay for big So we have free compilers well first so it's an international standard and It's the standard is freely available The standard has been published by a springer springer is not exactly in the free anything business however, here is an excerpt from the copyright from a springer book that Says that this document may be copied in who are in part. I Get that the only book at springer with that kind of copyright Okay The whole either effort has always been completely open The standard can be downloaded in HTML and PDF in every form you need it You have free compilers and proprietary compilers. Why not? And many free resources. So here are some pointers and you Well, you can type add add something on the net and you you certainly find any anything you need also a community with So news groups the first one is in English the second one in French and Danish I think Jacob is not here. Okay. And oh, how are you? I didn't see don't don't we have a Danish one Okay, and while the various channels, you know I We don't hear much of Ada. So who is using it actually many people are using Ada and You don't always know that you are running on Ada. For example, if you take a TV all the Mechanisms that control the speed of the train the the needles and all the safety Part of it are written in Ada There are a lot of Ada in the a380 and also in the a 400 m This is the automated subway in Paris line 14 and now line one they're running on Ada This is Rosetta, okay, 14 years in space walk up and work perfectly as expected fully in Ada And This is a luxury yachts the king cat also fully written in Ada When you buy that kind of baby, you don't want to be stuck in the middle of the ocean due to a software bug, okay So why would you use Ada? First of all we say when failure is not an option There is a huge stress on writing safe and secure software And that's why most of the example where I showed you where safety critical however Other systems should not fail either and in a sense I Claimed that it has should be used more Inansity critical system when you build a safety critical system You have plenty of money to check everything. So even if you write in a crazy language You'll have the money to make sure that it works Now if you are not in that business, you don't have that money So it's important to have tools that will ensure you the same level of quality as required for safety critical systems without having to pay the price of course So some buffer overflows are impossible Okay, you you we have a way to dimension the side of a buffer according to what will be put in it So it's impossible to have another flow All arithmetic overflows and all that stuff is checked. So they are all impossible and Many of these things can be checked at compile time. I'll give you an example in a token small token but 12 if you're interested in that but very often Something doesn't compile and you realize that it doesn't compile big for because your design is inconsistent the language is close to the design if the design is wrong it won't compile So that's difficult to measure of course, but that's a very Interesting effect of using Ada. It is not just Translating Something into machine code Ada is about checking and ensuring that everything's consistent. So the idea is That what's important in a language is not what it allows All people tell you by language can do this and this and this We are the only ones to say you the language Prevents you from doing things from doing bad thing. So what's important is what it forbids not what it allows So for free software generally we need a reach a consistent language Here is a small picture on the basis You have a classical procedural language a syntax is based on Pascal there were requirements and one main requirement who are that the language has to be readable and on the point of view of readability The Pascal basis is likely to be the best starting point With a very strong typing system, but truly very strong many languages claim to be very strongly typed but here The typing system is really the backbone of all the language. I'll give you examples with specialized features packages To make clean proper modules that separate Specification from implementation strange enough most languages nowadays don't have a clear notion of module a Class is something that's too small To represent the modules often you need sets of classes that work together and so on and that's something You don't have a syntactic structure for that in most languages that the package Exceptions now they are quite common in programming languages For handling anything that can happen at runtime in Ada anything bad is translated into an exception Okay Well, sorry generics for a use something like templates if you want I'll go over that Multitasking is built into the language now you have Java C sharp a certain name of languages have built in multitasking, but that was quite new when it has started and A bridge to low-level programming. I'll show you an example of that also how you can have access to low-level features While still being in a high-level view of what you are doing and All of these is intended to serve programming methodologies That's very important nowadays many people everybody will tell you Well, what's important is to have good methodologies Nobody will dare saying the opposite And people say well if you have a good method Then who cares what the programming language when it comes to coding in Ada? We say no there is no reason to stop the methodological effort When you turn into the coding phase the coding phase should be should continue the methodological effort the coding phase should translate the object of the methods and the Connection between the code and the objects of the method of the method should be very clear So don't give up the methodological aspects when you come to Coding including of course at least since 1995 or object-oriented methodology then you have some Little dog houses here. These are the specialized annex. It's just No, I shouldn't say extension. There are complainants to the language for a very specialized feature They are optional because not everybody needs the same thing So this is for example some extra packages for real-time or for high Criticality systems or for business systems distributed and so on so that's just a set of Specialized I'd say complainants So all of this looks like a classical language But I told you it's more different that in season at first few Another thing that's special to Ada is the building block approach We'll see there is no syntactic construct called a class in Ada why because The approach is to provide reusable stuff that you Assemble to build what you need The idea is well, you know the difference between play mobile and Lego Okay, play mobile allow you have very nice Pieces very specialized if you take a box There is nothing from a box You can use to play with a completely different box because they are all specialized very nice for one purpose You can do anything else with them The legal approach is to have building box What can you do with one box? Nothing. It's not interesting. Nobody plays with one Lego box Okay, but when you assemble them, then you can build very simple things like that Or very sophisticated like that or even this So the other approach is definitely the Lego Okay, we have building box when you put the box together you build a class when you put the box some differently you built something the statements are look like what you have in most languages with Certain number of security features for example in a for loop And that that every statement is ended by and and you repeat the keyword That makes it a lot more readable and helps you to understand what's how what's happening The C here that controls the loop for the world of the language. It's a constant so you cannot change change it and It's a local constant to the loop so it doesn't exist when you exit the loop So you cannot cheat you cannot change it in the middle of the loop You cannot access it once you have exited the loop when you have When you see that It is formally Provable that see will take all values from the type color Okay, and nobody will cheat You have a while loop you can have named loops with that allow you to exit the loop on certain conditions The power of expression of Eda is Is quite good by the way since we are talking free software here remember Readability is important The principle of free software is many eyeballs The software should be readable by anybody Okay, so having a readable language is something important for free software So this is an example. I think you can understand this one It is important to know that in the case statement is like the C switch if you want But here given that we are strongly typed We know the type of I and the type is a set of values therefore the compiler knows the set of values and will check that every possible value Is given here in the when closing the various branches if you omit the when others that the else or the otherwise if you want then you know the Compiler with check the full coverage and it's a very nice feature because if you change the type of I The first time you recompile Every place where you forgot to change your code. It will not compile anymore. So you'll say oh, thank you Nice compiler. You tell me where I forgot to do something rather than having the values simply ignored and you're chasing bird bugs for house also Structured types have values like Any other type and therefore it's important to express them So we have syntax for example to express directly Arrays and matrices. That's how you can write a unit matrix in Ada from a point of view of readability that Here I'm creating Small linked Lift so you see a new node whose value is 10,000 and next is a new node Whose value is 209 and next is no and so on so I can the idea is to describe globally the structures and Not to always return to the deepest level and the individual machine words that the idea you try to work globally So what about strong typing? Here I first define a type called an H the age of a person for example So the lower bound is clearly zero the upper bound while we can discuss it But 125 should be enough all the flaws in a building go to minus five with some parking Flaws to 15 These are conceptually completely different So you can declare a variable of those types as I'm correct value to them But if you try to write my age colonic pull my flaw the compiler will tell you no This is of type floor. This is of type age. This assignment is not allowed It seems So obvious I mean that you cannot add Apples and oranges But as far as I know Ada is that the only language that allows you to declare Numerical types that are Incompatible so you preserve that different thing. It's not because they are represented by numbers that it's the same thing Okay, the idea actually Is that if you design something? You have a problem level Where you define? Things that are completely different Independent like a need a floor and etc You have a machine level Machines deal with bytes in float whatever these are machine types In a good design what you have to do is first to analyze your problem And then make the translation into machine types with other languages The types that are provided by the language are machine types Therefore you have to do the mapping between the high-level problem level type and Machine type what's new in Ada is that you work? You describe your problem at the problem level and the compiler is in charge of doing the mapping So a client tells you oh, I have something that goes to zero to 250 fine Oh, no, it was not 250 into us 260 no problem. I changed 250 to 260 and this will not break anything in my program Behind us in all your types will move from one to two bytes, but that's done by the compiler There are dependency rules that Ensure that everything that needs to be recompiled will be recompiled So you see it's not a problem in it. So packages here are The way to control visibility In general you have what you expect to tell your client if you want it's an approach where you are Have a provider of a software component and a user So you have the user view which is abstract and you can define a type as private meaning Okay, there is a type. I don't tell you what it is. I keep it for me And in the private part there you will have to give the full definition and Maybe constants for Here I have declared constant, but I cannot give the value because the type is private So in the private part then you tell to the compiler because the compiler needs to know What the actual definitions are so you have a Completely abstract view where you don't know how it is represented in machine and then you define the representation oops And then you have a body and in the body of the package you have of course to provide all the bodies the implementation of What you have announced in the specification so in a sense it works a bit like a dot H and a dot C file but There is no guarantee that That you use a dot H just a convenience Having in clothes in C nothing forces you to have Inconsistent heaters or whatever Okay here everything's checked by a compiler and then you can use them here I have redefined operation like multiply and divide on colors by a real factor and so I can use them normally so the idea is to enforce abstraction in the sense that type that reflect the problem domain independently of the implementation and Also, when you use a package or anything else by the way you have to name it in a ways clause This means that when whenever a module depends on another module This dependency is always explicit Written in the source file So it's very easy in a data program to know what depends on what If I change that modules what which modules will be impacted and so on you just have to follow a very simple graph something also that I Know often no other language is the idea of discriminated types in a sense a type can have a discriminant which is a kind of parameter and The straight the data structure the shape of the data structure Will depend on the value of the parameter. That's called a discriminant So here I have an example. I have a student recalled so Each student has a major let us science of technology grades are that the French grading system from zero to 20 and Everybody has a name and an English a grade in English in math and Depending on the major it will include a grade in late in or physics and chemistry or technology or something like that so it's a bit like having Union in a strict, but it's fully controlled. You can if your Major is in letters. You cannot access Not in say a grade in physics Okay, because it's really a variable shape data Object-oriented programming is a typical example of building box. So We've seen that packages support encapsulation limitation of visibility There are a special kind of types called tag types that support dynamic dispatching so a class is An encapsulation of types with dynamic dispatching So it's a programming pattern Where you have a tag type declared in a package? so a typical Example a widget not very original You define a tag type So that's a naming convention. You can call it instance and you give the name of the class to the package So you would write widget dot instance if you want an instance of the class widget Okay, and you declare operations. So it's called the primitive operation in Ada It's a method if you want in the all the operation on Your instance declared in the same package and then you can derive a new Type from an existing one Adding some new components and redefine operation so that the usual way of doing object orientation I didn't talk about pointers There is no need to have pointers When you need object orientation Ada since 1983 has always been able To a to allocate variables of dynamic size on the stack Why Do all the languages need pointers as soon as it's come to object orientation Well, some people hide that under beautiful theoretical concerns The real reason if as soon as you don't do object orientation you have polymorphism So you don't know the size of the objects and that so you cannot declare them on the stack But in Ada we have dynamically sized objects So we have no reason to be in any way connected to pointers in practice. Of course you often need pointers to objects because you have lists of Objects or things like that, but you need pointers because you have lists not because you have objects okay, and Something that's also very special to Ada is that we make the difference between a node in a tree I'm talking about a hierarchy of types. Okay, that defines a tree and Because we are very strongly type a specific type is just That type and we have what we called a So here I have widget window menu a pop-up window and Why do I have two arrows here? That's an arrow and a scroll down menu and so on that makes a tree Okay, an object declared of type widget can hold only values of type widget nothing else and We make the difference with the whole tree a node in a tree Generates a tree So it's a different type in Ada called widget to class Which is in a sense the union up command here The union of all the values from widget and all types that inherit from widget And so we make a clear difference between a node and the tree That's generated by that node. So that's also something quite original It has a number of implications Well, I won't have today the time to discuss everything here, but it's certainly very interesting and it's Bring something new to the object orientation To have that distinction and so I can for example have a procedure move that applies equally to any widget So it's parameter is type win jet the class. So it means it can accept any value In the tree so it can be a window. I mean you pop up whatever whatever you want, okay And well you can use it normally and since 205 we are a lot It's the same trick as in Python for example The first parameter can go in front if you want the object dot method notation, okay Interfaces were Added to that into a five So you can derive from one type tab and several interfaces Just a small improvement or an interface has only abstract methods or no method We have method that do nothing you have no diamond problem because they are all equivalent And so I can have a persistent type eat something that offers Read and write, okay These are more convenient functions. So But exceptions the only thing important is to note that Everything that can happen at runtime generates an exception in C++ for example exceptions were added quite late in the history of language and There is also that ID that the compiler should not do Something that's not written by the programmer. I Understand that position. It's not the adas position. That's all so in Ada Opposition is that if anything goes wrong the Program has to be aware of that So in C++ if you have another flow, nobody knows what happens. Okay, it's not defined by the standard In Ada an exception is raised because the exception are built into the language and anything bad that happens generates an exception Every exception can be handled Because if you are writing software for my Missile for example, you don't turn after it to hit control out there. Okay? It has the software has to take care of anything And that's an old problem. So once you've taken care of the unexpected remember to take care of the unexpected unexpected Generics Time is running. So I'll go faster Is a way to have it's like templates in a sense to reuse Algorithm that can work on every type. So this is Generic from Private type and from this model in a sense you can instantiate a real procedure By providing the the type Tasking is built in to the language. So Fred's there are high-level object that can be passed to sub-programmed and things. So we have Ways of communicating high-level communications through rendezvous that are between task and protected objects and So I don't have time to give the details But asking is easy to you that's important you just declare a task object and you have your task it starts and finishes as appropriate and In general people use p thread only when forced to while in it out we have such a convenient asking model that Well, if we can use tasking we do it just not more difficult than anything else. I Like to be show you this because it's important Here how do we access the low level from a high-level approach? First imagine this and represent some hardware Register something like that. Okay. I give a description as a record like a strike if you want and Then you can have what is called a representation close That will tell you bit by bit where the various components are So this syntax mean that on that Boolean is beat zero That count is beats one to seven and status beats eight to fifteen exactly at a bit and then you still use the high-level statements Indexing that's an array and that's all and at the lowest level you get exactly the machine you want so some people say well, I need a low-level language because I have to Make low-level access In Ada, we say you describe the low level Therefore you can keep a high-level approach and get what you want at the low level Well, that's it how to access bare memory time is running There are features to include machine code is our features to handle interrupts. It's pretty post you will have example later today You have really Ways to access the low level the only thing in Ada is that It's not forbidden to do low-level programming, but you have to state it clearly If you want to you these things Somewhere you'll say that you depend on interrupt or that you depend on things that allow to Somehow time circumvent the typing space I Gave you a small idea on annexes so for system programming real-time Distributed system a very interesting model would work It would be worth several cars in itself information systems and numerics and of course safety and security Ada is really portable which means it's really a same code All these ought to make and throw on our ways to patch according to the variation. It's not potability okay, and There is a validation suite to ensure that all compilers Compile exactly the same language and Tell me believe me. I have a number of programs. I never have different version between line x windows or whatever. It's 100% same code Well, okay to be honest sometimes you need one package that will Include if you have dependency explicit dependencies on the system, but that would be confined to one package either writing is also important and we have Since the compiler has much information We are lucky to be able to give to have compiler that give very good error messages And that saves a lot of time right fixing if you misspell one of your own variable the compiler can tell There is variable that's almost the same. Maybe you wanted this one and so on Well, save a lot of time Of course as I said you are protected from many mistakes Strong typing in the first time you try it. You are angry at the compiler Why does that damn compiler don't accept that and then you realize? Oh, I made a mistake. Thank you gentle compiler So you spend your time on designing that's better You than is chasing bugs It can interface with other languages. It has also a number of things that are unique to Ada so You can expect at that time that I tell you you should use it up. I Won't tell you that you are grown-ups. You are nice people. You are able to Know what you have to do. Okay. Now what I want just to tell you is please try it See how it works. You have three compilers free for downloading Use it you have a community that is willing to help you in the first step and then you can judge for yourself Thank you Yeah You are talking about Yes, and there is even Subset of Ada which you had the same time a kind of a super set Because there are some extension in the form. Well, I won't be into detail called spark That's a formally provable part of Ada with tools. Do we have something about spark? So you'll be interested in that Thank you