mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-04-27 07:33:57 +00:00
[ada/en] Fix Markdown linting issues
Signed-off-by: Azeem Sajid <azeem.sajid@gmail.com>
This commit is contained in:
parent
5a91556483
commit
208cba9026
91
ada.md
91
ada.md
@ -6,15 +6,35 @@ contributors:
|
|||||||
- ["Fernando Oleo Blanco", "https://github.com/Irvise"]
|
- ["Fernando Oleo Blanco", "https://github.com/Irvise"]
|
||||||
- ["Fabien Chouteau", "https://github.com/Fabien-Chouteau"]
|
- ["Fabien Chouteau", "https://github.com/Fabien-Chouteau"]
|
||||||
- ["Manuel", "https://github.com/mgrojo"]
|
- ["Manuel", "https://github.com/mgrojo"]
|
||||||
|
- ["Azeem Sajid", "https://github.com/iamazeem"]
|
||||||
---
|
---
|
||||||
|
|
||||||
Ada is a strong statically typed imperative, [object-oriented](https://ada-lang.io/docs/arm/AA-3/AA-3.9), [real-time](https://ada-lang.io/docs/arm/AA-D), [parallel](https://ada-lang.io/docs/arm/AA-9) and [distributed](https://ada-lang.io/docs/arm/AA-9) programming language from the Pascal/Algol family of languages, but nowadays, it only has a passing resemblance to Pascal, with the only remnants left being the ```begin/end``` keyword pair, the ```:=``` assignment symbol, records and ```if/case``` control statement structures.
|
Ada is a strong statically typed imperative,
|
||||||
|
[object-oriented](https://ada-lang.io/docs/arm/AA-3/AA-3.9),
|
||||||
|
[real-time](https://ada-lang.io/docs/arm/AA-D),
|
||||||
|
[parallel](https://ada-lang.io/docs/arm/AA-9) and
|
||||||
|
[distributed](https://ada-lang.io/docs/arm/AA-9) programming language from the
|
||||||
|
Pascal/Algol family of languages, but nowadays, it only has a passing
|
||||||
|
resemblance to Pascal, with the only remnants left being the `begin/end` keyword
|
||||||
|
pair, the `:=` assignment symbol, records and `if/case` control statement
|
||||||
|
structures.
|
||||||
|
|
||||||
Ada was originally designed to be an [object-based](https://ada-lang.io/docs/arm/AA-3/AA-3.3) language and to replace 100's of languages in use by the US government. This means that all entities are objects, not in the object-oriented sense. The language became [Object-Oriented](https://ada-lang.io/docs/arm/AA-3/AA-3.9) in 1995, and added [interfaces](https://ada-lang.io/docs/arm/AA-3/AA-3.9#Subclause_3.9.4) derived from Java in 2005. [Contract based](https://ada-lang.io/docs/arm/AA-13/AA-13.1#Subclause_13.1.1) programming was introduced with Ada 2012.
|
Ada was originally designed to be an
|
||||||
|
[object-based](https://ada-lang.io/docs/arm/AA-3/AA-3.3) language and to replace
|
||||||
|
100's of languages in use by the US government. This means that all entities are
|
||||||
|
objects, not in the object-oriented sense. The language became
|
||||||
|
[Object-Oriented](https://ada-lang.io/docs/arm/AA-3/AA-3.9) in 1995, and added
|
||||||
|
[interfaces](https://ada-lang.io/docs/arm/AA-3/AA-3.9#Subclause_3.9.4) derived
|
||||||
|
from Java in 2005. [Contract
|
||||||
|
based](https://ada-lang.io/docs/arm/AA-13/AA-13.1#Subclause_13.1.1) programming
|
||||||
|
was introduced with Ada 2012.
|
||||||
|
|
||||||
Ada was designed to be easy to read and learn, even for non-programmers, e.g. management within an organisation, therefore programs written in the language tend to be a bit more verbose.
|
Ada was designed to be easy to read and learn, even for non-programmers, e.g.
|
||||||
|
management within an organization, therefore programs written in the language
|
||||||
|
tend to be a bit more verbose.
|
||||||
|
|
||||||
Ada is a modern programming language, and now has a package manager like other modern languages, Alire, see below.
|
Ada is a modern programming language, and now has a package manager like other
|
||||||
|
modern languages, Alire, see below.
|
||||||
|
|
||||||
```ada
|
```ada
|
||||||
-- Comments are written with a double hyphen and exist until the end of
|
-- Comments are written with a double hyphen and exist until the end of
|
||||||
@ -111,7 +131,7 @@ package body Stuff is
|
|||||||
Right := Temp;
|
Right := Temp;
|
||||||
end Swap;
|
end Swap;
|
||||||
begin
|
begin
|
||||||
-- If we need to initialise something within the package, we can do it
|
-- If we need to initialize something within the package, we can do it
|
||||||
-- here.
|
-- here.
|
||||||
Do_Something;
|
Do_Something;
|
||||||
end Stuff;
|
end Stuff;
|
||||||
@ -133,7 +153,7 @@ procedure LearnAdaInY is
|
|||||||
-- gradual typing.
|
-- gradual typing.
|
||||||
|
|
||||||
-- The standard types would only really be a good starting point for binding
|
-- The standard types would only really be a good starting point for binding
|
||||||
-- to other languages, like C. Ada is the only language with a standardised
|
-- to other languages, like C. Ada is the only language with a standardized
|
||||||
-- way to bind with C, Fortran and COBOL! See the links in the References
|
-- way to bind with C, Fortran and COBOL! See the links in the References
|
||||||
-- section with more information on binding to these languages.
|
-- section with more information on binding to these languages.
|
||||||
|
|
||||||
@ -168,8 +188,8 @@ procedure LearnAdaInY is
|
|||||||
Blue_Hue : Primaries := Blue; -- A variable.
|
Blue_Hue : Primaries := Blue; -- A variable.
|
||||||
Red_Hue : constant Primaries := Red; -- A constant.
|
Red_Hue : constant Primaries := Red; -- A constant.
|
||||||
Yellow_Hue : constant Hues := Yellow;
|
Yellow_Hue : constant Hues := Yellow;
|
||||||
Colour_1 : constant Hues := Red_Hue;
|
Color_1 : constant Hues := Red_Hue;
|
||||||
-- Colour_2 : constant Primaries := Yellow_Hue; -- uncomment to compile.
|
-- Color_2 : constant Primaries := Yellow_Hue; -- uncomment to compile.
|
||||||
|
|
||||||
-- You can force conversions, but then you are warned by the name of the
|
-- You can force conversions, but then you are warned by the name of the
|
||||||
-- package that you may be doing something unsafe.
|
-- package that you may be doing something unsafe.
|
||||||
@ -196,7 +216,7 @@ procedure LearnAdaInY is
|
|||||||
|
|
||||||
-- You can have normal Latin 1 based strings by default.
|
-- You can have normal Latin 1 based strings by default.
|
||||||
Str : constant String := "This is a constant string";
|
Str : constant String := "This is a constant string";
|
||||||
-- When initialising from a string literal, the compiler knows the bounds,
|
-- When initializing from a string literal, the compiler knows the bounds,
|
||||||
-- so we don't have to define them.
|
-- so we don't have to define them.
|
||||||
|
|
||||||
-- Strings are arrays. Note how parentheses are used to access elements of
|
-- Strings are arrays. Note how parentheses are used to access elements of
|
||||||
@ -208,7 +228,7 @@ procedure LearnAdaInY is
|
|||||||
Char : constant Character := Str (Str'First); -- "'First" is a type
|
Char : constant Character := Str (Str'First); -- "'First" is a type
|
||||||
-- attribute.
|
-- attribute.
|
||||||
|
|
||||||
-- Ada 2022 includes the use of [] for array initialisation when using
|
-- Ada 2022 includes the use of [] for array initialization when using
|
||||||
-- containers, which were added in Ada 2012.
|
-- containers, which were added in Ada 2012.
|
||||||
|
|
||||||
-- Arrays are usually always defined as a type.
|
-- Arrays are usually always defined as a type.
|
||||||
@ -246,7 +266,7 @@ procedure LearnAdaInY is
|
|||||||
-- There are dynamic length strings (see references section) available in
|
-- There are dynamic length strings (see references section) available in
|
||||||
-- the standard library.
|
-- the standard library.
|
||||||
|
|
||||||
-- We can make an object be initialised to its default values with the box
|
-- We can make an object be initialized to its default values with the box
|
||||||
-- notation, "<>". "others" is used to indicate anything else that has not
|
-- notation, "<>". "others" is used to indicate anything else that has not
|
||||||
-- been explicitly initialized.
|
-- been explicitly initialized.
|
||||||
Null_Entity : constant Entities := (others => <>);
|
Null_Entity : constant Entities := (others => <>);
|
||||||
@ -361,34 +381,45 @@ exception
|
|||||||
end LearnAdaInY;
|
end LearnAdaInY;
|
||||||
```
|
```
|
||||||
|
|
||||||
Now, that's a lot of information for a basic intro to Ada, and I've only touched the surface, there's much more to look at in the references section below. I haven't even touched on dynamic memory allocation which includes [pools](https://ada-lang.io/docs/arm/AA-13/AA-13.11), this is because for the most part, Ada programs don't need it, you can do a lot without it.
|
Now, that's a lot of information for a basic intro to Ada, and I've only touched
|
||||||
|
the surface, there's much more to look at in the references section below. I
|
||||||
|
haven't even touched on dynamic memory allocation which includes
|
||||||
|
[pools](https://ada-lang.io/docs/arm/AA-13/AA-13.11), this is because for the
|
||||||
|
most part, Ada programs don't need it, you can do a lot without it.
|
||||||
|
|
||||||
As I stated above, Ada barely looks like Pascal and if you look at the original [Green specification](https://apps.dtic.mil/sti/trecms/pdf/ADB950587.pdf) (Warning: Huge 4575 page scanned PDF - starting on page 460), it looks nothing like it at all (page 505 of that PDF).
|
As I stated above, Ada barely looks like Pascal and if you look at the original
|
||||||
|
[Green specification](https://apps.dtic.mil/sti/trecms/pdf/ADB950587.pdf)
|
||||||
|
(Warning: Huge 4575 page scanned PDF - starting on page 460), it looks nothing
|
||||||
|
like it at all (page 505 of that PDF).
|
||||||
|
|
||||||
The above source code will compile, but also will give warnings showing the power of the strong static type system.
|
The above source code will compile, but also will give warnings showing the
|
||||||
|
power of the strong static type system.
|
||||||
|
|
||||||
## Download this source
|
## Download this source
|
||||||
|
|
||||||
If you already have the GNAT toolchain installed, you can cut and paste the above into a new file, e.g. ```learn-ada-in-y.ada``` and then run the following:
|
If you already have the GNAT toolchain installed, you can cut and paste the
|
||||||
|
above into a new file, e.g. `learn-ada-in-y.ada` and then run the following:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ gnatchop learn-ada-in-y.ada # This breaks the program into its specification ".ads" and body ".adb".
|
gnatchop learn-ada-in-y.ada # This breaks the program into its specification ".ads" and body ".adb".
|
||||||
$ gnatmake empty.adb # gnatmake takes care of compilation of all units and linking.
|
gnatmake empty.adb # gnatmake takes care of compilation of all units and linking.
|
||||||
$ gnatmake hello.adb
|
gnatmake hello.adb
|
||||||
$ gnatmake learnadainy.adb
|
gnatmake learnadainy.adb
|
||||||
```
|
```
|
||||||
|
|
||||||
Or, download [Alire](https://alire.ada.dev), copy it to somewhere in your PATH and then do the following:
|
Or, download [Alire](https://alire.ada.dev), copy it to somewhere in your PATH
|
||||||
|
and then do the following:
|
||||||
|
|
||||||
**N.B.** Alire will automatically install the toolchain for you if you don't have one installed and will ask you to select which you want to use.
|
**N.B.** Alire will automatically install the toolchain for you if you don't
|
||||||
|
have one installed and will ask you to select which you want to use.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ alr search learnadainy
|
alr search learnadainy
|
||||||
$ alr get learnadainy
|
alr get learnadainy
|
||||||
$ cd learnadainy
|
cd learnadainy
|
||||||
$ alr run empty
|
alr run empty
|
||||||
$ alr run hello
|
alr run hello
|
||||||
$ alr run learnadainy
|
alr run learnadainy
|
||||||
```
|
```
|
||||||
|
|
||||||
## Further Reading
|
## Further Reading
|
||||||
@ -410,7 +441,9 @@ $ alr run learnadainy
|
|||||||
|
|
||||||
Multi-line comments are not allowed as they are error prone.
|
Multi-line comments are not allowed as they are error prone.
|
||||||
|
|
||||||
> Such comments would require a closing comment delimiter and this would again raise the dangers associated with the (unintentional) omission of the closing delimiter: entire sections of a program could be ignored by the compiler without the programmer realizing it
|
> Such comments would require a closing comment delimiter and this would again
|
||||||
|
> raise the dangers associated with the (unintentional) omission of the closing
|
||||||
|
> delimiter: entire sections of a program could be ignored by the compiler
|
||||||
|
> without the programmer realizing it
|
||||||
>
|
>
|
||||||
> [Ada 83 Rationale](http://archive.adaic.com/standards/83rat/html/ratl-02-01.html#2.1)
|
> [Ada 83 Rationale](http://archive.adaic.com/standards/83rat/html/ratl-02-01.html#2.1)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user