SlideShare a Scribd company logo
A quick tour of Ada 2012
Edmond Schonberg
November 4, 2015
Ada 2012 has been here for 3 years !
The labor of a cast of thousands!
The latest in language design!
300 Ada Issues addressed! (and another 178 already created for Ada
2012)
For details: http://www.ada-auth.org and John Barnes book
For the gory details:
http://www.ada-auth.org/standards/12aarm/html/AA-TTL.html
For the history of the gory details:
http://www.ada-auth.org/AI05-SUMMARY.HTML
Highlights of Ada 2012
Program Correctness: programming by contract
• Pre- and Post-conditions for subprograms
• Type invariants, subtype predicates
– Iterators, generalized indexing and implicit dereference
– Bounded containers, proper concurrent queues, holder container
– Conditional and case expressions, expression functions
– Quantified expressions
– New concurrency constructs for multicores
– Better accessibility rules for anonymous access types
Program Correctness
• Need a general mechanism to introduce new checkable properties of entities :
subprograms, types, subtypes.
• Checking may be static (compiler) or dynamic (assertions)
• RM 6.1.1 (AI05-0145) Pre- and Postconditions
• RM 7.3.2 (AI05-0146) Type Invariants
• RM 3.2.4 (AI05-0153) Subtype predicates
• One general syntactic mechanism for all of the above, and more:
• RM 13.1.1 (AI05-0183) Aspect Specifications
Pre- and Postconditions
generic
type Item is private;
package Stack_Interfaces is
type Stack is interface;
function Is_Empty (S : Stack) return Boolean is abstract;
function Is_Full (S : Stack) return Boolean is abstract;
procedure Push (S : in out Stack; I : in Item) is abstract
with Pre'Class => not Is_Full (S),
Post'Class => not Is_Empty (S);
private
…
end Stack_Interfaces;
Pre- and Postconditions (2)
• Unified syntax for aspect specifications
• Semantic analysis of conditions is done at end of current list of
declarations or at freeze point of subprogram
• Conditions can be verified dynamically like assertions, or statically by
analysis tools and/or clever compilers
• Can specify classwide conditions and type-specific conditions.
Classwide conditions are inherited by the corresponding primitive of
each descendant type.
• Dynamic condition checking is controlled by assertion mode
• Check can be in caller or in callee.
Aspect Specifications
• General mechanism to replace most attribute definition clauses and
assorted pragmas.
type Bit_Vector is array (natural range <>) of Boolean
with pack;
function Square (x : Integer) return Integer
with inline => True;
Overlay : Some_Type
with address => Some_Object’address,
atomic => False;
Pre- and postconditions (3)
• New Attributes, for use in postconditions (illegal in any other context)
• X’Old denotes the value of X before subprogram starts execution (X
can be an arbitrary expression)
procedure Incr (X : in out Integer)
with
post => (X = X’Old + 1);
• F’Result denotes the result of the current function call.
function Sin (X : Float) return Float
with
post => (Sin’Result <= 1.0);
Type invariants
package Q is
type T(...) is private
with Type_Invariant => Is_Valid (T);
function Is_Valid (X : T) return Boolean; -- analyzed later
type T2(...) is abstract tagged private
with Type_Invariant'Class => Is_Valid (T2);
function Is_Valid (X2 : T2) return Boolean is abstract;
private
…
end Q;
Type Invariants (2)
• For private types and type extensions.
• Classwide invariants and type-specific invariants
• Inheritance follows Liskov’s rules
• Invariants are checked:
– On object initialization
– On conversion to the type
– On return from function that creates object of the type
– On return from subprogram that has (in)- out parameter of the type
• Not bullet-proof:
– Still possible to modify object through access values
– If invariant for private extension depends on visible inherited component,
invariant is at risk.
Invariants and inheritance
• Aspect Type_Invariant for T is type-specific
• Aspect Type_Invariant’class for T applies to all descendants of T
type Root is private
with Type_Invariant’class => Root_OK (Root);
-- boolean function
type Child is new Root and private
with Type_Invariant’class => Child_OK (Child);
type Grandchild is new Child and private
with Type_Invariant => Details_OK (Grandchild);
• Upon creation of an object of type Grandchild, Root_OK, Child_OK
and Details_OK are checked.
Subtype Predicates
• Applies to all subtypes:
type Rec is record
A : Natural;
end record;
subtype Decimal_Rec is Rec
with Dynamic_Predicate => Decimal_Rec.A mod 10 = 0;
• A predicate can be specified for any subtype
• A predicate is not a constraint (akin to a null exclusion)
• Most common use: non-contiguous enumeration types.
• Two varieties: Static and Dynamic (GNAT conflates them)
Static predicates
• Predicate composed of predefined comparison operators, literals, scalar
ranges, and membership tests : can be evaluated statically on scalar
operands.
subtype T3 is Positive
with Static_Predicate =>
T3 in 1 .. 10 or else T3 in 50 .. 60 or else T3 = 100;
-- could be a single Ada 2012 membership test.
If a static predicate evaluates statically to False it is an error (as for a static
expression that raises Constraint_Error)
No_Way : constant T3 := 70; -- illegal
Dynamic predicates
• Predicate is an arbitrary expression:
subtype Prime is positive
with Dynamic_Predicate => Clever_Primality (Prime);
• Cannot apply ‘first, ‘last, ‘range to subtype with predicate
• ‘pred and ‘succ give value of base type (as usual)
• Cannot use subtype with predicate as index_type, as choice in
named_array_aggregate, or as loop parameter specification (anything
that would imply some sequential processing to find next value)
Major topics
• Program correctness
• Containers
• Constructs for expressiveness
• Visibility mechanisms
• Concurrency and real-times
• Anonymous access types and storage management
• Syntactic sweeteners
Containers
• The Ada2005 library is sparse, compared with those of other
languages, and with the state of the art in data-structure design.
• RM A.18.19 - A.18-25 Bounded containers
• RM A.18.18 Holder container
• RM A.18.17 Multiway tree container
• RM A.18.27 – A 18.31 Queue containers
• Throughout : Accessors and Iterators for Containers
Bounded containers
• Existing containers use dynamic memory allocation: not
convenient in high-integrity applications
• Introduce stack-allocated containers with defined maximum
capacity:
• type Vector (Capacity : Count_Type) is tagged private;
Holder container
• Cannot create an object of an indefinite type that can hold any value of the
type:
• X : T’class; -- illegal without initialization
• (can use access type and indefinite designated type).
• Better to define container that can hold single indefinite item:
generic
type Element_Type (<>) is private;
with function "=" (Left, Right : Element_Type) return Boolean is <>;
package Ada.Containers.Indefinite_Holders is
type Holder is tagged private;
pragma Preelaborable_Initialization (Holder);
Empty_Holder : constant Holder;
…
Multiway trees
• What, no trees in the library?
• Multiway trees are threaded every which way:
• Node has sequence of descendants, traversal functions include
– Parent, First_Child, Last_Child
– Next_Sibling, Previous_Sibling
• Can search and iterate over whole tree, over subtree, over children
• Can insert and delete elements, children, subtrees
• Indefinite and bounded versions also available
Queue containers
• Considered too trivial to bother with in Ada 2005
• Less trivial if must be task-safe
• Provide common interface:
generic
type Element_Type is private;
package Ada.Containers.Synchronized_Queue_Interfaces is
type Queue is synchronized interface; -- isn’t Ada2005 great?
procedure Enqueue
(Container : in out Queue; New_Item : in Element_Type) is abstract
with Synchronization => By_Entry;
procedure Dequeue ….
…
• Implement interface in bounded queues, unbounded queues, and priority
queues.
Major topics
• Program correctness
• Containers
• Constructs for expressiveness
• Visibility mechanisms
• Concurrency and real-time
• Anonymous access types and storage management
• Syntactic sweeteners
Programming expressiveness
• More powerful functions
• Better iterators on all containers
• RM 5.5.2 (AI05-0139) Iterators
• AI05-0142 Explicitly aliased parameters
• AI05-0143 In Out parameters for functions
• AI05-0144 Detecting dangerous order dependences
• AI05-0177 expression functions
Iterator machinery
• Generalized reference
• Generalized indexing
• Change to freezing rules for incomplete types
• All of this is invisible to the user who just wants to iterate over
containers:
• for Item of My_Bag loop Mangle (Item); end loop;
Generalized reference
• Can define aspect on type with an access discriminant:
type Wrapper (Data : access Integer) is null record
with Implicit_Dereference => Data;
function Find (From : aliased in out Box; Key : String)
return Wrapper;
find (My_Box, “green”) := 15;
-- equivalent to find (My_Box, “green”).Data.all
Generalized indexing
• Another aspect that generalizes the indexed component notation of arrays.
– Array => Container
– Index => Cursor
• We want My_Bag (That_One) to be analogous to Arr (N)
type Bunch is tagged null record
with Variable_Indexing => Reference;
function Reference (Obj : Bunch; S : String)
return Wrapper; -- returns a reference type
My_Bag (“Nines”) := 999;
-- equivalent to Reference (My_Bag, “nines”).data.all := 999;
Putting it together: iterators
• An iterator wraps a pointer to a container, and has iteration operations (first,
next, last):
generic
type Cursor; -- formal incomplete type
with function Has_Element (Position : Cursor) return Boolean;
package Ada.Iterator_Interfaces is
pragma Pure;
type Forward_Iterator is limited interface;
function First (Object : Forward_Iterator) return Cursor is abstract;
function Next (Object : Forward_Iterator; Position : Cursor) return Cursor is abstract;
…
 Instantiation has to provide concrete cursor
Uniform structure for predefined
containers:
with Ada.Iterator_Interfaces;
…
generic
type Element_Type is private;
…
package Ada.Containers.Doubly_Linked_Lists is
…
type List is tagged private
with
Constant_Indexing => Constant_Reference,
Variable_Indexing => Reference,
Default_Iterator => Iterate,
Iterator_Element => Element_Type;
type Reference_Type (Element : not null access Element_Type) is private
with Implicit_Dereference => Element;
…
function Reference (Container : aliased in out List; Position : Cursor) return Reference_Type;
function Iterate (Container : List) return List_Iterator_Interfaces.Reversible_Iterator'Class;
At the end: simple syntax for
generalized loops
for Cursor in Iterate (Container) loop
Container (Cursor) := Container (Cursor) + 1;
end loop;
-- container (cursor) means
-- reference (container, cursor).Element.all
for Thing of Box loop Modify (thing); end loop;
-- cursor is implicit
Both forms apply to arrays and containers.
(no iteration over holder containers or queues)
In-out parameter for functions and their price:
Detecting dangerous order dependences
• In-out parameters for functions and unspecified order of evaluation
are a bad combination!
• F (Obj) + G (Obj)
• Is problematic if F and/or G have side-effects on their actuals
• New rule provides a precise statically checkable definition of
identity and overlap between objects. Compiler can then verify that:
• in a complex expression involving a function call with a modifiable
parameter, there is no other component of the expression that
denotes the same object or a portion of it.
Programming expressiveness (2)
• Flexible syntactic forms for predicates in contracts and elsewhere
• AI05-0147 Conditional expressions
• AI05-0158 Generalizing membership tests
• AI05-0176 Quantified expressions
• AI05-0177 expression functions
• AI05-0188 Case expressions
• AI05-0191 Aliasing predicates
Conditional Expressions
Value:= (if X > Y then F (X) else G (Y));
• If result type is Boolean, else_part can be omitted.
• Generally parenthesized
• Must work with classwide types and anonymous access types
(some complication when branches have different types)
Extending membership
operations
• The argument of a membership test can be a set of values:
if (C not in 'A' | 'B' | 'O’) then
Put_Line ("invalid blood type");
raise ER_Error;
else
Perform_Transfusion (500 * cc);
end if;
Expression functions
• To simplify the writing of pre/postconditions and predicates, allow
expression functions (aka function bodies in package specs):
• function Cube (X : integer) return Integer is (X ** 3) ;
• Can be used as completions
• Not quite a new idea (FORTRAN had function statements half-a-
century ago)
Quantified expressions
Predicate states that A is sorted in increasing order:
(for all J in A'First .. T'Pred(A'Last) =>
A (J) <= A (T'Succ (J)))
Predicate asserts that N is composite:
(for some X in 2 .. N / 2 => N mod X /= 0)
Computation is short-circuited.
some is a new reserved word
Non-intuitive boundary case:
• (for all X in empty_set => P (X)) is always True
• (for some X in empty_set => P (X)) is always False
• Common convention in set theory, arbitrary but settled
• Want to preserve identity:
for all X in S => P (x) = not (for some X in S => not P (X))
Putting it together:
• Specifying the behavior of a linear search function:
function Test_Recovery_Highest (S : Set) return Integer
with post =>
(for all Cu in S =>
Test_Recovery_Highest'Result >= Element (Cu));
Major topics
• Program correctness
• Containers
• Constructs for expressiveness
• Visibility mechanisms
• Concurrency and real-time
• Anonymous access types and storage management
• Syntactic sweeteners
Visibility mechanisms
• Need more flexible ways to name entities in the complex
environment in which a unit is compiled.
• Incomplete types can be useful in additional contexts
• RM 8.4 (AI05-0150) Use all type clause
• RM 3.10.1 (AI05-0151) Allow incomplete types as parameter and
result types
• RM 3.10.1 (AI05-0162) Allow incomplete types to be completed by
partial views
More uses for use (and more uses
for all)
package P is
type T is new Integer;
function Nth (X : T; Expon : Natural) return T;
end P;
package body P is … end P;
X : T; -- illegal without use package clause
Y : P.T := X * 25; -- illegal without use type clause
Z : P.T := Nth (X, 5); -- illegal without use all type clause
Major topics
• Program correctness
• Containers
• Constructs for expressiveness
• Visibility mechanisms
• Concurrency and real-time
• Anonymous access types and storage management
• Syntactic sweeteners
Concurrency and real-time
features
• Need to address the multicore revolution
• Better scheduling tools justify more elaborate constructs
• Mostly real-time annex and shared variable control
• Mostly suggestions from IRTAW
• RM D.16 (AI05-0167) Managing affinities on multiprocessors
• C.6 (AI05-0117) Memory barriers and Volatile objects
• D.14.2 (AI05-0169) Defining group budgets for multiprocessors
• D.13 (AI05-0171) Ravenscar Profile for Multiprocessor Systems
• RM D.2.4 (AI05-0166) non-preemptive dispatching (Yield operations)
• RM D.10 (AI05-0168) Extended suspension objects
• RM D.14.3 (AI05-0170) Monitoring the time spent in Interrupt Handlers
• RM D.10.1 (AI05-0174) Task barriers
Managing affinities
• Construct to map tasks to processing units (core/chip)
package System.Multiprocessors is
type CPU_Range is range …
…
package System.Multiprocessors.Dispatching_Domains is
type Dispatching_Domain (<>) is limited private;
function Create (First, Last: CPU) return Dispatching_Domain;
procedure Set_CPU (CPU : in CPU_Range; T : in Task_Id := Current_Task);
function Get_CPU (T : in Task_Id := Current_Task) return CPU_Range;
…
Implementation must describe how ranges map to actual silicon (hot topic)
Synchronous barriers
• More flexible than using a protected type, and usually supported by
OS
package Ada.Synchronous_Barriers is
subtype Barrier_Limit is Positive range 1 .. Implementation_defined-
type Synchronous_Barrier (Release_Threshold : Barrier_Limit)
is limited private;
procedure Wait_For_Release
(The_Barrier : in out Synchronous_Barrier; Notified : Boolean);
Major topics
• Program correctness
• Containers
• Constructs for expressiveness
• Visibility mechanisms
• Concurrency and real-time
• Anonymous access types and storage management
• Syntactic sweeteners
Anonymous access types and
storage management
• Need to simplify accessibility rules for anonymous types
• Need more flexible storage reclamation mechanisms
• AI05-0148 Accessibility of anonymous access stand-alone objects
• AI05-0149 Access types conversion and membership
• The heart of darkness (RM 3.10.2) !
• AI05-0152 Restriction No_Anonymous_Allocators
• AI05-0189 Restriction No_Allocators_After_Elaboration
• AI05-0190 Global storage pool controls
• AI05-0193 Alignment of allocators
Major topics
• Program correctness
• Containers
• Constructs for expressiveness
• Visibility mechanisms
• Concurrency and real-time
• Syntactic sweeteners
Syntactic sweeteners
• What, no “continue” statement?
• Where are pragmas legal?
• RM 2.8 (AI05-0100) Placement of pragmas
• RM 2.8 (AI05-0163) Pragmas instead of null
• RM 5.1(120 (AI05-0179) Labels at end of a
sequence_of_statements
The language design imperative
• “You boil it in sawdust: you salt it in glue: You condense it with 
locusts and tape:Still keeping one principal object in view— To 
preserve its symmetrical shape.”
The Hunting of the snark
Discards
• AI05-0074-2 Allowing an explicit "end private;" in a package spec
• AI05-0074-3 Deferred instance freezing
• AI05-0135 Integrated nested packages
• AI05-0140-1 Identity functions
• AI05-0175-1 Cyclic fixed point types
• AI05-0187-1 Shorthand for assignments with expressions naming target ( a += 1)
• (but stay tuned for Ada 2020)
• Check definition of “the software present tense”
• Active testbed for proposed language extensions
GNAT does it all!

More Related Content

What's hot

An Introduction to ANTLR
An Introduction to ANTLRAn Introduction to ANTLR
An Introduction to ANTLR
Morteza Zakeri
 
Refactoring to Java 8 (Devoxx UK)
Refactoring to Java 8 (Devoxx UK)Refactoring to Java 8 (Devoxx UK)
Refactoring to Java 8 (Devoxx UK)
Trisha Gee
 
Metaprogramming in Ruby
Metaprogramming in RubyMetaprogramming in Ruby
Metaprogramming in Ruby
Volodymyr Byno
 
Beyond PITS, Functional Principles for Software Architecture
Beyond PITS, Functional Principles for Software ArchitectureBeyond PITS, Functional Principles for Software Architecture
Beyond PITS, Functional Principles for Software Architecture
Jayaram Sankaranarayanan
 
Known XML Vulnerabilities Are Still a Threat to Popular Parsers ! & Open Sour...
Known XML Vulnerabilities Are Still a Threat to Popular Parsers ! & Open Sour...Known XML Vulnerabilities Are Still a Threat to Popular Parsers ! & Open Sour...
Known XML Vulnerabilities Are Still a Threat to Popular Parsers ! & Open Sour...
Lionel Briand
 
"Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,...
"Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,..."Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,...
"Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,...Vladimir Ivanov
 
Logic gates (part i)
Logic gates (part i)Logic gates (part i)
Logic gates (part i)
RIYAPAL10
 
2012-02-15 jfokus2012 - regex applied
2012-02-15 jfokus2012 - regex applied2012-02-15 jfokus2012 - regex applied
2012-02-15 jfokus2012 - regex applied
Staffan Nöteberg
 
Preparing for Scala 3
Preparing for Scala 3Preparing for Scala 3
Preparing for Scala 3
Martin Odersky
 
Introduction to functional programming, with Elixir
Introduction to functional programming,  with ElixirIntroduction to functional programming,  with Elixir
Introduction to functional programming, with Elixir
kirandanduprolu
 
Java Review
Java ReviewJava Review
Java Review
pdgeorge
 
iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 03)
iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 03) iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 03)
iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 03)
Jonathan Engelsma
 
Intro to java 8
Intro to java 8Intro to java 8
Intro to java 8
John Godoi
 
Improving Automated Tests with Fluent Assertions
Improving Automated Tests with Fluent Assertions Improving Automated Tests with Fluent Assertions
Improving Automated Tests with Fluent Assertions
TestingCR
 
Test-driven language development
Test-driven language developmentTest-driven language development
Test-driven language developmentlennartkats
 
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Raffi Khatchadourian
 
C# 3.0 and LINQ Tech Talk
C# 3.0 and LINQ Tech TalkC# 3.0 and LINQ Tech Talk
C# 3.0 and LINQ Tech Talk
Michael Heydt
 
Lambda/Streams Hands-On Lab
Lambda/Streams Hands-On LabLambda/Streams Hands-On Lab
Lambda/Streams Hands-On Lab
Maurice Naftalin
 
Chapter one
Chapter oneChapter one
Chapter one
kiran acharya
 
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...lennartkats
 

What's hot (20)

An Introduction to ANTLR
An Introduction to ANTLRAn Introduction to ANTLR
An Introduction to ANTLR
 
Refactoring to Java 8 (Devoxx UK)
Refactoring to Java 8 (Devoxx UK)Refactoring to Java 8 (Devoxx UK)
Refactoring to Java 8 (Devoxx UK)
 
Metaprogramming in Ruby
Metaprogramming in RubyMetaprogramming in Ruby
Metaprogramming in Ruby
 
Beyond PITS, Functional Principles for Software Architecture
Beyond PITS, Functional Principles for Software ArchitectureBeyond PITS, Functional Principles for Software Architecture
Beyond PITS, Functional Principles for Software Architecture
 
Known XML Vulnerabilities Are Still a Threat to Popular Parsers ! & Open Sour...
Known XML Vulnerabilities Are Still a Threat to Popular Parsers ! & Open Sour...Known XML Vulnerabilities Are Still a Threat to Popular Parsers ! & Open Sour...
Known XML Vulnerabilities Are Still a Threat to Popular Parsers ! & Open Sour...
 
"Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,...
"Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,..."Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,...
"Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,...
 
Logic gates (part i)
Logic gates (part i)Logic gates (part i)
Logic gates (part i)
 
2012-02-15 jfokus2012 - regex applied
2012-02-15 jfokus2012 - regex applied2012-02-15 jfokus2012 - regex applied
2012-02-15 jfokus2012 - regex applied
 
Preparing for Scala 3
Preparing for Scala 3Preparing for Scala 3
Preparing for Scala 3
 
Introduction to functional programming, with Elixir
Introduction to functional programming,  with ElixirIntroduction to functional programming,  with Elixir
Introduction to functional programming, with Elixir
 
Java Review
Java ReviewJava Review
Java Review
 
iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 03)
iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 03) iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 03)
iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 03)
 
Intro to java 8
Intro to java 8Intro to java 8
Intro to java 8
 
Improving Automated Tests with Fluent Assertions
Improving Automated Tests with Fluent Assertions Improving Automated Tests with Fluent Assertions
Improving Automated Tests with Fluent Assertions
 
Test-driven language development
Test-driven language developmentTest-driven language development
Test-driven language development
 
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
 
C# 3.0 and LINQ Tech Talk
C# 3.0 and LINQ Tech TalkC# 3.0 and LINQ Tech Talk
C# 3.0 and LINQ Tech Talk
 
Lambda/Streams Hands-On Lab
Lambda/Streams Hands-On LabLambda/Streams Hands-On Lab
Lambda/Streams Hands-On Lab
 
Chapter one
Chapter oneChapter one
Chapter one
 
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
 

Viewers also liked

Aula 6 diagramas de atividade e colaboração1 (1)
Aula 6   diagramas de atividade e colaboração1 (1)Aula 6   diagramas de atividade e colaboração1 (1)
Aula 6 diagramas de atividade e colaboração1 (1)
Tiago Vizoto
 
Hr Managers Employed & Wages In USA
Hr Managers Employed & Wages In USAHr Managers Employed & Wages In USA
Hr Managers Employed & Wages In USA
James Baker, SPHR Retired, MAS
 
ALbum de Fotografias Curso UCA Florianópolis
ALbum de Fotografias Curso UCA FlorianópolisALbum de Fotografias Curso UCA Florianópolis
ALbum de Fotografias Curso UCA FlorianópolisJomari
 
Tc's resume final 2
Tc's resume final  2Tc's resume final  2
Tc's resume final 2
Trang Cao
 
Caravaggio , his life, his style, his first masterpiece
Caravaggio , his life, his style, his first masterpiece Caravaggio , his life, his style, his first masterpiece
Caravaggio , his life, his style, his first masterpiece
giovannacasaretto
 
Internet Safety for Parents
Internet Safety for ParentsInternet Safety for Parents
Internet Safety for Parents
Scott Burnett
 
Toxic Tort Attorneys New York
Toxic Tort Attorneys New YorkToxic Tort Attorneys New York
Toxic Tort Attorneys New York
Peter Parkar
 
A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01
Reinaldo Junior
 
Writing your thesis chapter by chapter
Writing your thesis chapter by chapterWriting your thesis chapter by chapter
Writing your thesis chapter by chapter
Roger Watson
 
Евгений Руднев: "Programmers Approach to Error Handling"
Евгений Руднев: "Programmers Approach to Error Handling"Евгений Руднев: "Programmers Approach to Error Handling"
Евгений Руднев: "Programmers Approach to Error Handling"
Anna Shymchenko
 
Language as a tool for communication
Language as a tool for communicationLanguage as a tool for communication
Language as a tool for communication
Anjali Sharma
 
Studio_di_retribuzione_Property_&_Construction
Studio_di_retribuzione_Property_&_ConstructionStudio_di_retribuzione_Property_&_Construction
Studio_di_retribuzione_Property_&_ConstructionFederica Spurio Pompili
 

Viewers also liked (13)

Aula 6 diagramas de atividade e colaboração1 (1)
Aula 6   diagramas de atividade e colaboração1 (1)Aula 6   diagramas de atividade e colaboração1 (1)
Aula 6 diagramas de atividade e colaboração1 (1)
 
Hr Managers Employed & Wages In USA
Hr Managers Employed & Wages In USAHr Managers Employed & Wages In USA
Hr Managers Employed & Wages In USA
 
melissagaddis_resume2
melissagaddis_resume2melissagaddis_resume2
melissagaddis_resume2
 
ALbum de Fotografias Curso UCA Florianópolis
ALbum de Fotografias Curso UCA FlorianópolisALbum de Fotografias Curso UCA Florianópolis
ALbum de Fotografias Curso UCA Florianópolis
 
Tc's resume final 2
Tc's resume final  2Tc's resume final  2
Tc's resume final 2
 
Caravaggio , his life, his style, his first masterpiece
Caravaggio , his life, his style, his first masterpiece Caravaggio , his life, his style, his first masterpiece
Caravaggio , his life, his style, his first masterpiece
 
Internet Safety for Parents
Internet Safety for ParentsInternet Safety for Parents
Internet Safety for Parents
 
Toxic Tort Attorneys New York
Toxic Tort Attorneys New YorkToxic Tort Attorneys New York
Toxic Tort Attorneys New York
 
A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01
 
Writing your thesis chapter by chapter
Writing your thesis chapter by chapterWriting your thesis chapter by chapter
Writing your thesis chapter by chapter
 
Евгений Руднев: "Programmers Approach to Error Handling"
Евгений Руднев: "Programmers Approach to Error Handling"Евгений Руднев: "Programmers Approach to Error Handling"
Евгений Руднев: "Programmers Approach to Error Handling"
 
Language as a tool for communication
Language as a tool for communicationLanguage as a tool for communication
Language as a tool for communication
 
Studio_di_retribuzione_Property_&_Construction
Studio_di_retribuzione_Property_&_ConstructionStudio_di_retribuzione_Property_&_Construction
Studio_di_retribuzione_Property_&_Construction
 

Similar to Tech Days 2015: A quick tour of Ada 2012

Learning core java
Learning core javaLearning core java
Learning core java
Abhay Bharti
 
08 subprograms
08 subprograms08 subprograms
08 subprograms
baran19901990
 
chapter 5.ppt
chapter 5.pptchapter 5.ppt
chapter 5.ppt
ThedronBerhanu
 
Subprogram
SubprogramSubprogram
Subprogram
baran19901990
 
Java platform
Java platformJava platform
Java platform
Visithan
 
Datatype
DatatypeDatatype
Datatype
baran19901990
 
SFDC Introduction to Apex
SFDC Introduction to ApexSFDC Introduction to Apex
SFDC Introduction to Apex
Sujit Kumar
 
332 ch07
332 ch07332 ch07
332 ch07YaQ10
 
Pushing the Boundary of Mostly Automatic Program Proof
Pushing the Boundary of Mostly Automatic Program ProofPushing the Boundary of Mostly Automatic Program Proof
Pushing the Boundary of Mostly Automatic Program Proof
AdaCore
 
Type Systems
Type SystemsType Systems
Type Systems
Jordan Parmer
 
Esoft Metro Campus - Programming with C++
Esoft Metro Campus - Programming with C++Esoft Metro Campus - Programming with C++
Esoft Metro Campus - Programming with C++
Rasan Samarasinghe
 
Introduction to c
Introduction to cIntroduction to c
Introduction to c
Ajeet Kumar
 
Functions
FunctionsFunctions
Functions
Gaurav Subham
 
pl12ch6.ppt
pl12ch6.pptpl12ch6.ppt
pl12ch6.ppt
BrandonGarcia294013
 
9781305078444 ppt ch02
9781305078444 ppt ch029781305078444 ppt ch02
9781305078444 ppt ch02
Terry Yoast
 
L2 datatypes and variables
L2 datatypes and variablesL2 datatypes and variables
L2 datatypes and variables
teach4uin
 
Java 8 - Project Lambda
Java 8 - Project LambdaJava 8 - Project Lambda
Java 8 - Project Lambda
Rahman USTA
 

Similar to Tech Days 2015: A quick tour of Ada 2012 (20)

Learning core java
Learning core javaLearning core java
Learning core java
 
08 subprograms
08 subprograms08 subprograms
08 subprograms
 
chapter 5.ppt
chapter 5.pptchapter 5.ppt
chapter 5.ppt
 
Subprogram
SubprogramSubprogram
Subprogram
 
Java platform
Java platformJava platform
Java platform
 
Datatype
DatatypeDatatype
Datatype
 
Generics in dot net
Generics in dot netGenerics in dot net
Generics in dot net
 
SFDC Introduction to Apex
SFDC Introduction to ApexSFDC Introduction to Apex
SFDC Introduction to Apex
 
332 ch07
332 ch07332 ch07
332 ch07
 
Pushing the Boundary of Mostly Automatic Program Proof
Pushing the Boundary of Mostly Automatic Program ProofPushing the Boundary of Mostly Automatic Program Proof
Pushing the Boundary of Mostly Automatic Program Proof
 
Type Systems
Type SystemsType Systems
Type Systems
 
Esoft Metro Campus - Programming with C++
Esoft Metro Campus - Programming with C++Esoft Metro Campus - Programming with C++
Esoft Metro Campus - Programming with C++
 
Introduction to c
Introduction to cIntroduction to c
Introduction to c
 
Generics
GenericsGenerics
Generics
 
Functions
FunctionsFunctions
Functions
 
pl12ch6.ppt
pl12ch6.pptpl12ch6.ppt
pl12ch6.ppt
 
06.1 .Net memory management
06.1 .Net memory management06.1 .Net memory management
06.1 .Net memory management
 
9781305078444 ppt ch02
9781305078444 ppt ch029781305078444 ppt ch02
9781305078444 ppt ch02
 
L2 datatypes and variables
L2 datatypes and variablesL2 datatypes and variables
L2 datatypes and variables
 
Java 8 - Project Lambda
Java 8 - Project LambdaJava 8 - Project Lambda
Java 8 - Project Lambda
 

More from AdaCore

RCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standardsRCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standards
AdaCore
 
Have we a Human Ecosystem?
Have we a Human Ecosystem?Have we a Human Ecosystem?
Have we a Human Ecosystem?
AdaCore
 
Rust and the coming age of high integrity languages
Rust and the coming age of high integrity languagesRust and the coming age of high integrity languages
Rust and the coming age of high integrity languages
AdaCore
 
SPARKNaCl: A verified, fast cryptographic library
SPARKNaCl: A verified, fast cryptographic librarySPARKNaCl: A verified, fast cryptographic library
SPARKNaCl: A verified, fast cryptographic library
AdaCore
 
Developing Future High Integrity Processing Solutions
Developing Future High Integrity Processing SolutionsDeveloping Future High Integrity Processing Solutions
Developing Future High Integrity Processing Solutions
AdaCore
 
Taming event-driven software via formal verification
Taming event-driven software via formal verificationTaming event-driven software via formal verification
Taming event-driven software via formal verification
AdaCore
 
RCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standardsRCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standards
AdaCore
 
Product Lines and Ecosystems: from customization to configuration
Product Lines and Ecosystems: from customization to configurationProduct Lines and Ecosystems: from customization to configuration
Product Lines and Ecosystems: from customization to configuration
AdaCore
 
Securing the Future of Safety and Security of Embedded Software
Securing the Future of Safety and Security of Embedded SoftwareSecuring the Future of Safety and Security of Embedded Software
Securing the Future of Safety and Security of Embedded Software
AdaCore
 
Spark / Ada for Safe and Secure Firmware Development
Spark / Ada for Safe and Secure Firmware DevelopmentSpark / Ada for Safe and Secure Firmware Development
Spark / Ada for Safe and Secure Firmware Development
AdaCore
 
Introducing the HICLASS Research Programme - Enabling Development of Complex ...
Introducing the HICLASS Research Programme - Enabling Development of Complex ...Introducing the HICLASS Research Programme - Enabling Development of Complex ...
Introducing the HICLASS Research Programme - Enabling Development of Complex ...
AdaCore
 
The Future of Aerospace – More Software Please!
The Future of Aerospace – More Software Please!The Future of Aerospace – More Software Please!
The Future of Aerospace – More Software Please!
AdaCore
 
Adaptive AUTOSAR - The New AUTOSAR Architecture
Adaptive AUTOSAR - The New AUTOSAR ArchitectureAdaptive AUTOSAR - The New AUTOSAR Architecture
Adaptive AUTOSAR - The New AUTOSAR Architecture
AdaCore
 
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
AdaCore
 
Software Engineering for Robotics - The RoboStar Technology
Software Engineering for Robotics - The RoboStar TechnologySoftware Engineering for Robotics - The RoboStar Technology
Software Engineering for Robotics - The RoboStar Technology
AdaCore
 
MISRA C in an ISO 26262 context
MISRA C in an ISO 26262 contextMISRA C in an ISO 26262 context
MISRA C in an ISO 26262 context
AdaCore
 
Application of theorem proving for safety-critical vehicle software
Application of theorem proving for safety-critical vehicle softwareApplication of theorem proving for safety-critical vehicle software
Application of theorem proving for safety-critical vehicle software
AdaCore
 
The Application of Formal Methods to Railway Signalling Software
The Application of Formal Methods to Railway Signalling SoftwareThe Application of Formal Methods to Railway Signalling Software
The Application of Formal Methods to Railway Signalling Software
AdaCore
 
Bounded Model Checking for C Programs in an Enterprise Environment
Bounded Model Checking for C Programs in an Enterprise EnvironmentBounded Model Checking for C Programs in an Enterprise Environment
Bounded Model Checking for C Programs in an Enterprise Environment
AdaCore
 
Multi-Core (MC) Processor Qualification for Safety Critical Systems
Multi-Core (MC) Processor Qualification for Safety Critical SystemsMulti-Core (MC) Processor Qualification for Safety Critical Systems
Multi-Core (MC) Processor Qualification for Safety Critical Systems
AdaCore
 

More from AdaCore (20)

RCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standardsRCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standards
 
Have we a Human Ecosystem?
Have we a Human Ecosystem?Have we a Human Ecosystem?
Have we a Human Ecosystem?
 
Rust and the coming age of high integrity languages
Rust and the coming age of high integrity languagesRust and the coming age of high integrity languages
Rust and the coming age of high integrity languages
 
SPARKNaCl: A verified, fast cryptographic library
SPARKNaCl: A verified, fast cryptographic librarySPARKNaCl: A verified, fast cryptographic library
SPARKNaCl: A verified, fast cryptographic library
 
Developing Future High Integrity Processing Solutions
Developing Future High Integrity Processing SolutionsDeveloping Future High Integrity Processing Solutions
Developing Future High Integrity Processing Solutions
 
Taming event-driven software via formal verification
Taming event-driven software via formal verificationTaming event-driven software via formal verification
Taming event-driven software via formal verification
 
RCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standardsRCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standards
 
Product Lines and Ecosystems: from customization to configuration
Product Lines and Ecosystems: from customization to configurationProduct Lines and Ecosystems: from customization to configuration
Product Lines and Ecosystems: from customization to configuration
 
Securing the Future of Safety and Security of Embedded Software
Securing the Future of Safety and Security of Embedded SoftwareSecuring the Future of Safety and Security of Embedded Software
Securing the Future of Safety and Security of Embedded Software
 
Spark / Ada for Safe and Secure Firmware Development
Spark / Ada for Safe and Secure Firmware DevelopmentSpark / Ada for Safe and Secure Firmware Development
Spark / Ada for Safe and Secure Firmware Development
 
Introducing the HICLASS Research Programme - Enabling Development of Complex ...
Introducing the HICLASS Research Programme - Enabling Development of Complex ...Introducing the HICLASS Research Programme - Enabling Development of Complex ...
Introducing the HICLASS Research Programme - Enabling Development of Complex ...
 
The Future of Aerospace – More Software Please!
The Future of Aerospace – More Software Please!The Future of Aerospace – More Software Please!
The Future of Aerospace – More Software Please!
 
Adaptive AUTOSAR - The New AUTOSAR Architecture
Adaptive AUTOSAR - The New AUTOSAR ArchitectureAdaptive AUTOSAR - The New AUTOSAR Architecture
Adaptive AUTOSAR - The New AUTOSAR Architecture
 
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
 
Software Engineering for Robotics - The RoboStar Technology
Software Engineering for Robotics - The RoboStar TechnologySoftware Engineering for Robotics - The RoboStar Technology
Software Engineering for Robotics - The RoboStar Technology
 
MISRA C in an ISO 26262 context
MISRA C in an ISO 26262 contextMISRA C in an ISO 26262 context
MISRA C in an ISO 26262 context
 
Application of theorem proving for safety-critical vehicle software
Application of theorem proving for safety-critical vehicle softwareApplication of theorem proving for safety-critical vehicle software
Application of theorem proving for safety-critical vehicle software
 
The Application of Formal Methods to Railway Signalling Software
The Application of Formal Methods to Railway Signalling SoftwareThe Application of Formal Methods to Railway Signalling Software
The Application of Formal Methods to Railway Signalling Software
 
Bounded Model Checking for C Programs in an Enterprise Environment
Bounded Model Checking for C Programs in an Enterprise EnvironmentBounded Model Checking for C Programs in an Enterprise Environment
Bounded Model Checking for C Programs in an Enterprise Environment
 
Multi-Core (MC) Processor Qualification for Safety Critical Systems
Multi-Core (MC) Processor Qualification for Safety Critical SystemsMulti-Core (MC) Processor Qualification for Safety Critical Systems
Multi-Core (MC) Processor Qualification for Safety Critical Systems
 

Recently uploaded

Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 

Recently uploaded (20)

Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 

Tech Days 2015: A quick tour of Ada 2012

  • 1. A quick tour of Ada 2012 Edmond Schonberg November 4, 2015
  • 2. Ada 2012 has been here for 3 years ! The labor of a cast of thousands! The latest in language design! 300 Ada Issues addressed! (and another 178 already created for Ada 2012) For details: http://www.ada-auth.org and John Barnes book For the gory details: http://www.ada-auth.org/standards/12aarm/html/AA-TTL.html For the history of the gory details: http://www.ada-auth.org/AI05-SUMMARY.HTML
  • 3. Highlights of Ada 2012 Program Correctness: programming by contract • Pre- and Post-conditions for subprograms • Type invariants, subtype predicates – Iterators, generalized indexing and implicit dereference – Bounded containers, proper concurrent queues, holder container – Conditional and case expressions, expression functions – Quantified expressions – New concurrency constructs for multicores – Better accessibility rules for anonymous access types
  • 4. Program Correctness • Need a general mechanism to introduce new checkable properties of entities : subprograms, types, subtypes. • Checking may be static (compiler) or dynamic (assertions) • RM 6.1.1 (AI05-0145) Pre- and Postconditions • RM 7.3.2 (AI05-0146) Type Invariants • RM 3.2.4 (AI05-0153) Subtype predicates • One general syntactic mechanism for all of the above, and more: • RM 13.1.1 (AI05-0183) Aspect Specifications
  • 5. Pre- and Postconditions generic type Item is private; package Stack_Interfaces is type Stack is interface; function Is_Empty (S : Stack) return Boolean is abstract; function Is_Full (S : Stack) return Boolean is abstract; procedure Push (S : in out Stack; I : in Item) is abstract with Pre'Class => not Is_Full (S), Post'Class => not Is_Empty (S); private … end Stack_Interfaces;
  • 6. Pre- and Postconditions (2) • Unified syntax for aspect specifications • Semantic analysis of conditions is done at end of current list of declarations or at freeze point of subprogram • Conditions can be verified dynamically like assertions, or statically by analysis tools and/or clever compilers • Can specify classwide conditions and type-specific conditions. Classwide conditions are inherited by the corresponding primitive of each descendant type. • Dynamic condition checking is controlled by assertion mode • Check can be in caller or in callee.
  • 7. Aspect Specifications • General mechanism to replace most attribute definition clauses and assorted pragmas. type Bit_Vector is array (natural range <>) of Boolean with pack; function Square (x : Integer) return Integer with inline => True; Overlay : Some_Type with address => Some_Object’address, atomic => False;
  • 8. Pre- and postconditions (3) • New Attributes, for use in postconditions (illegal in any other context) • X’Old denotes the value of X before subprogram starts execution (X can be an arbitrary expression) procedure Incr (X : in out Integer) with post => (X = X’Old + 1); • F’Result denotes the result of the current function call. function Sin (X : Float) return Float with post => (Sin’Result <= 1.0);
  • 9. Type invariants package Q is type T(...) is private with Type_Invariant => Is_Valid (T); function Is_Valid (X : T) return Boolean; -- analyzed later type T2(...) is abstract tagged private with Type_Invariant'Class => Is_Valid (T2); function Is_Valid (X2 : T2) return Boolean is abstract; private … end Q;
  • 10. Type Invariants (2) • For private types and type extensions. • Classwide invariants and type-specific invariants • Inheritance follows Liskov’s rules • Invariants are checked: – On object initialization – On conversion to the type – On return from function that creates object of the type – On return from subprogram that has (in)- out parameter of the type • Not bullet-proof: – Still possible to modify object through access values – If invariant for private extension depends on visible inherited component, invariant is at risk.
  • 11. Invariants and inheritance • Aspect Type_Invariant for T is type-specific • Aspect Type_Invariant’class for T applies to all descendants of T type Root is private with Type_Invariant’class => Root_OK (Root); -- boolean function type Child is new Root and private with Type_Invariant’class => Child_OK (Child); type Grandchild is new Child and private with Type_Invariant => Details_OK (Grandchild); • Upon creation of an object of type Grandchild, Root_OK, Child_OK and Details_OK are checked.
  • 12. Subtype Predicates • Applies to all subtypes: type Rec is record A : Natural; end record; subtype Decimal_Rec is Rec with Dynamic_Predicate => Decimal_Rec.A mod 10 = 0; • A predicate can be specified for any subtype • A predicate is not a constraint (akin to a null exclusion) • Most common use: non-contiguous enumeration types. • Two varieties: Static and Dynamic (GNAT conflates them)
  • 13. Static predicates • Predicate composed of predefined comparison operators, literals, scalar ranges, and membership tests : can be evaluated statically on scalar operands. subtype T3 is Positive with Static_Predicate => T3 in 1 .. 10 or else T3 in 50 .. 60 or else T3 = 100; -- could be a single Ada 2012 membership test. If a static predicate evaluates statically to False it is an error (as for a static expression that raises Constraint_Error) No_Way : constant T3 := 70; -- illegal
  • 14. Dynamic predicates • Predicate is an arbitrary expression: subtype Prime is positive with Dynamic_Predicate => Clever_Primality (Prime); • Cannot apply ‘first, ‘last, ‘range to subtype with predicate • ‘pred and ‘succ give value of base type (as usual) • Cannot use subtype with predicate as index_type, as choice in named_array_aggregate, or as loop parameter specification (anything that would imply some sequential processing to find next value)
  • 15. Major topics • Program correctness • Containers • Constructs for expressiveness • Visibility mechanisms • Concurrency and real-times • Anonymous access types and storage management • Syntactic sweeteners
  • 16. Containers • The Ada2005 library is sparse, compared with those of other languages, and with the state of the art in data-structure design. • RM A.18.19 - A.18-25 Bounded containers • RM A.18.18 Holder container • RM A.18.17 Multiway tree container • RM A.18.27 – A 18.31 Queue containers • Throughout : Accessors and Iterators for Containers
  • 17. Bounded containers • Existing containers use dynamic memory allocation: not convenient in high-integrity applications • Introduce stack-allocated containers with defined maximum capacity: • type Vector (Capacity : Count_Type) is tagged private;
  • 18. Holder container • Cannot create an object of an indefinite type that can hold any value of the type: • X : T’class; -- illegal without initialization • (can use access type and indefinite designated type). • Better to define container that can hold single indefinite item: generic type Element_Type (<>) is private; with function "=" (Left, Right : Element_Type) return Boolean is <>; package Ada.Containers.Indefinite_Holders is type Holder is tagged private; pragma Preelaborable_Initialization (Holder); Empty_Holder : constant Holder; …
  • 19. Multiway trees • What, no trees in the library? • Multiway trees are threaded every which way: • Node has sequence of descendants, traversal functions include – Parent, First_Child, Last_Child – Next_Sibling, Previous_Sibling • Can search and iterate over whole tree, over subtree, over children • Can insert and delete elements, children, subtrees • Indefinite and bounded versions also available
  • 20. Queue containers • Considered too trivial to bother with in Ada 2005 • Less trivial if must be task-safe • Provide common interface: generic type Element_Type is private; package Ada.Containers.Synchronized_Queue_Interfaces is type Queue is synchronized interface; -- isn’t Ada2005 great? procedure Enqueue (Container : in out Queue; New_Item : in Element_Type) is abstract with Synchronization => By_Entry; procedure Dequeue …. … • Implement interface in bounded queues, unbounded queues, and priority queues.
  • 21. Major topics • Program correctness • Containers • Constructs for expressiveness • Visibility mechanisms • Concurrency and real-time • Anonymous access types and storage management • Syntactic sweeteners
  • 22. Programming expressiveness • More powerful functions • Better iterators on all containers • RM 5.5.2 (AI05-0139) Iterators • AI05-0142 Explicitly aliased parameters • AI05-0143 In Out parameters for functions • AI05-0144 Detecting dangerous order dependences • AI05-0177 expression functions
  • 23. Iterator machinery • Generalized reference • Generalized indexing • Change to freezing rules for incomplete types • All of this is invisible to the user who just wants to iterate over containers: • for Item of My_Bag loop Mangle (Item); end loop;
  • 24. Generalized reference • Can define aspect on type with an access discriminant: type Wrapper (Data : access Integer) is null record with Implicit_Dereference => Data; function Find (From : aliased in out Box; Key : String) return Wrapper; find (My_Box, “green”) := 15; -- equivalent to find (My_Box, “green”).Data.all
  • 25. Generalized indexing • Another aspect that generalizes the indexed component notation of arrays. – Array => Container – Index => Cursor • We want My_Bag (That_One) to be analogous to Arr (N) type Bunch is tagged null record with Variable_Indexing => Reference; function Reference (Obj : Bunch; S : String) return Wrapper; -- returns a reference type My_Bag (“Nines”) := 999; -- equivalent to Reference (My_Bag, “nines”).data.all := 999;
  • 26. Putting it together: iterators • An iterator wraps a pointer to a container, and has iteration operations (first, next, last): generic type Cursor; -- formal incomplete type with function Has_Element (Position : Cursor) return Boolean; package Ada.Iterator_Interfaces is pragma Pure; type Forward_Iterator is limited interface; function First (Object : Forward_Iterator) return Cursor is abstract; function Next (Object : Forward_Iterator; Position : Cursor) return Cursor is abstract; …  Instantiation has to provide concrete cursor
  • 27. Uniform structure for predefined containers: with Ada.Iterator_Interfaces; … generic type Element_Type is private; … package Ada.Containers.Doubly_Linked_Lists is … type List is tagged private with Constant_Indexing => Constant_Reference, Variable_Indexing => Reference, Default_Iterator => Iterate, Iterator_Element => Element_Type; type Reference_Type (Element : not null access Element_Type) is private with Implicit_Dereference => Element; … function Reference (Container : aliased in out List; Position : Cursor) return Reference_Type; function Iterate (Container : List) return List_Iterator_Interfaces.Reversible_Iterator'Class;
  • 28. At the end: simple syntax for generalized loops for Cursor in Iterate (Container) loop Container (Cursor) := Container (Cursor) + 1; end loop; -- container (cursor) means -- reference (container, cursor).Element.all for Thing of Box loop Modify (thing); end loop; -- cursor is implicit Both forms apply to arrays and containers. (no iteration over holder containers or queues)
  • 29. In-out parameter for functions and their price: Detecting dangerous order dependences • In-out parameters for functions and unspecified order of evaluation are a bad combination! • F (Obj) + G (Obj) • Is problematic if F and/or G have side-effects on their actuals • New rule provides a precise statically checkable definition of identity and overlap between objects. Compiler can then verify that: • in a complex expression involving a function call with a modifiable parameter, there is no other component of the expression that denotes the same object or a portion of it.
  • 30. Programming expressiveness (2) • Flexible syntactic forms for predicates in contracts and elsewhere • AI05-0147 Conditional expressions • AI05-0158 Generalizing membership tests • AI05-0176 Quantified expressions • AI05-0177 expression functions • AI05-0188 Case expressions • AI05-0191 Aliasing predicates
  • 31. Conditional Expressions Value:= (if X > Y then F (X) else G (Y)); • If result type is Boolean, else_part can be omitted. • Generally parenthesized • Must work with classwide types and anonymous access types (some complication when branches have different types)
  • 32. Extending membership operations • The argument of a membership test can be a set of values: if (C not in 'A' | 'B' | 'O’) then Put_Line ("invalid blood type"); raise ER_Error; else Perform_Transfusion (500 * cc); end if;
  • 33. Expression functions • To simplify the writing of pre/postconditions and predicates, allow expression functions (aka function bodies in package specs): • function Cube (X : integer) return Integer is (X ** 3) ; • Can be used as completions • Not quite a new idea (FORTRAN had function statements half-a- century ago)
  • 34. Quantified expressions Predicate states that A is sorted in increasing order: (for all J in A'First .. T'Pred(A'Last) => A (J) <= A (T'Succ (J))) Predicate asserts that N is composite: (for some X in 2 .. N / 2 => N mod X /= 0) Computation is short-circuited. some is a new reserved word
  • 35. Non-intuitive boundary case: • (for all X in empty_set => P (X)) is always True • (for some X in empty_set => P (X)) is always False • Common convention in set theory, arbitrary but settled • Want to preserve identity: for all X in S => P (x) = not (for some X in S => not P (X))
  • 36. Putting it together: • Specifying the behavior of a linear search function: function Test_Recovery_Highest (S : Set) return Integer with post => (for all Cu in S => Test_Recovery_Highest'Result >= Element (Cu));
  • 37. Major topics • Program correctness • Containers • Constructs for expressiveness • Visibility mechanisms • Concurrency and real-time • Anonymous access types and storage management • Syntactic sweeteners
  • 38. Visibility mechanisms • Need more flexible ways to name entities in the complex environment in which a unit is compiled. • Incomplete types can be useful in additional contexts • RM 8.4 (AI05-0150) Use all type clause • RM 3.10.1 (AI05-0151) Allow incomplete types as parameter and result types • RM 3.10.1 (AI05-0162) Allow incomplete types to be completed by partial views
  • 39. More uses for use (and more uses for all) package P is type T is new Integer; function Nth (X : T; Expon : Natural) return T; end P; package body P is … end P; X : T; -- illegal without use package clause Y : P.T := X * 25; -- illegal without use type clause Z : P.T := Nth (X, 5); -- illegal without use all type clause
  • 40. Major topics • Program correctness • Containers • Constructs for expressiveness • Visibility mechanisms • Concurrency and real-time • Anonymous access types and storage management • Syntactic sweeteners
  • 41. Concurrency and real-time features • Need to address the multicore revolution • Better scheduling tools justify more elaborate constructs • Mostly real-time annex and shared variable control • Mostly suggestions from IRTAW • RM D.16 (AI05-0167) Managing affinities on multiprocessors • C.6 (AI05-0117) Memory barriers and Volatile objects • D.14.2 (AI05-0169) Defining group budgets for multiprocessors • D.13 (AI05-0171) Ravenscar Profile for Multiprocessor Systems • RM D.2.4 (AI05-0166) non-preemptive dispatching (Yield operations) • RM D.10 (AI05-0168) Extended suspension objects • RM D.14.3 (AI05-0170) Monitoring the time spent in Interrupt Handlers • RM D.10.1 (AI05-0174) Task barriers
  • 42. Managing affinities • Construct to map tasks to processing units (core/chip) package System.Multiprocessors is type CPU_Range is range … … package System.Multiprocessors.Dispatching_Domains is type Dispatching_Domain (<>) is limited private; function Create (First, Last: CPU) return Dispatching_Domain; procedure Set_CPU (CPU : in CPU_Range; T : in Task_Id := Current_Task); function Get_CPU (T : in Task_Id := Current_Task) return CPU_Range; … Implementation must describe how ranges map to actual silicon (hot topic)
  • 43. Synchronous barriers • More flexible than using a protected type, and usually supported by OS package Ada.Synchronous_Barriers is subtype Barrier_Limit is Positive range 1 .. Implementation_defined- type Synchronous_Barrier (Release_Threshold : Barrier_Limit) is limited private; procedure Wait_For_Release (The_Barrier : in out Synchronous_Barrier; Notified : Boolean);
  • 44. Major topics • Program correctness • Containers • Constructs for expressiveness • Visibility mechanisms • Concurrency and real-time • Anonymous access types and storage management • Syntactic sweeteners
  • 45. Anonymous access types and storage management • Need to simplify accessibility rules for anonymous types • Need more flexible storage reclamation mechanisms • AI05-0148 Accessibility of anonymous access stand-alone objects • AI05-0149 Access types conversion and membership • The heart of darkness (RM 3.10.2) ! • AI05-0152 Restriction No_Anonymous_Allocators • AI05-0189 Restriction No_Allocators_After_Elaboration • AI05-0190 Global storage pool controls • AI05-0193 Alignment of allocators
  • 46. Major topics • Program correctness • Containers • Constructs for expressiveness • Visibility mechanisms • Concurrency and real-time • Syntactic sweeteners
  • 47. Syntactic sweeteners • What, no “continue” statement? • Where are pragmas legal? • RM 2.8 (AI05-0100) Placement of pragmas • RM 2.8 (AI05-0163) Pragmas instead of null • RM 5.1(120 (AI05-0179) Labels at end of a sequence_of_statements
  • 48. The language design imperative • “You boil it in sawdust: you salt it in glue: You condense it with  locusts and tape:Still keeping one principal object in view— To  preserve its symmetrical shape.” The Hunting of the snark
  • 49. Discards • AI05-0074-2 Allowing an explicit "end private;" in a package spec • AI05-0074-3 Deferred instance freezing • AI05-0135 Integrated nested packages • AI05-0140-1 Identity functions • AI05-0175-1 Cyclic fixed point types • AI05-0187-1 Shorthand for assignments with expressions naming target ( a += 1) • (but stay tuned for Ada 2020)
  • 50. • Check definition of “the software present tense” • Active testbed for proposed language extensions GNAT does it all!

Editor's Notes

  1. This template can be used as a starter file for presenting training materials in a group setting. Sections Sections can help to organize your slides or facilitate collaboration between multiple authors. On the Home tab under Slides, click Section, and then click Add Section. Notes Use the Notes pane for delivery notes or to provide additional details for the audience. You can see these notes in Presenter View during your presentation. Keep in mind the font size (important for accessibility, visibility, videotaping, and online production) Coordinated colors Pay particular attention to the graphs, charts, and text boxes. Consider that attendees will print in black and white or grayscale. Run a test print to make sure your colors work when printed in pure black and white and grayscale. Graphics, tables, and graphs Keep it simple: If possible, use consistent, non-distracting styles and colors. Label all graphs and tables.