Ada
Ada
Ada ist eine Text-basierte Programmiersprache, welche in den 1970-er Jahren im Auftrag der US-Regierung entwickelt wurde. Sie findet u.a. Anwendung im Bereich der Luft- und Raumfahrttechnik und ist daher für sehr große und sehr langlebige Softwareprojekte geeignet. [2]
Die Programmiersprache wurde nach Lady Ada Lovelace (1815–1852) benannt. Sie war Mitarbeiterin von Charles Babbage (1791-1871), dem theoretischen Urgroßvater des Computers, und gilt als erste Programmiererin der Neuzeit.[3] [4]
Die Programmiersprache Ada ist in der ISO/IEC 8652:2012 genormt und in der LNCS 8339 hinterlegt.
Benötigte Pakete
Debian (Linux)
stretch (oldoldstable) | buster (oldstable) | bullseye | |
---|---|---|---|
1 | libgnat-6 (6.3.0-18+deb9u1) | libgnat-7 (7.4.0-6) | libgnat-10 (10.2.1-6) |
2 | libgnatvsn6 (6.3.0-18+deb9u1) | libgnatvsn7 (7.4.0-6) | libgnatvsn9 (9.3.0-22) |
3 | libgnatprj6 (6.3.0-18+deb9u1) | - | - |
4 | gnat-6 (6.3.0-18+deb9u1) | gnat-8 (8.3.0-6) | gnat-10 (10.2.1-6) |
Ubuntu 20.04
Ubuntu 20.04 (oder Linux Mint 20.3) basieren zwar auf Debian bullseye, funktionieren aber nicht mit den oben genannten Paketen. Statt dessen wird benötigt:
sudo apt install gnat make kate
Framework
Zum Erstellen eines lauffähigen Programms unter Linux muss der Quelltext, welcher kompiliert werden soll, in ein Framework eingefügt werden. Dieses besteht im Wesentlichen aus einer flachen Ordnerstruktur, in welcher neben Paket-Header-Dateien (engl: *.ads) und Paket-Implementierungs-Dateien (engl: *.adb) temporäre Dateien sortiert sind. Zur Kompilierung und zur Dateiverwaltung unter Verwendung des Steuerprogramms "make" genügt eine Steuerdatei namens "makefile" im Wurzelverzeichnis. Die Bedienung des Frameworks erfolgt unter Verwendung der Kommandozeile.
Die Ordner "work" und "../BACKUP" werden in der Steuerdatei "makefile" automatisch angelegt, wenn diese noch nicht vorhanden sind.
Ordner "ada_package"
In diesem Ordner werden alle Paket-Header-Dateien (engl: *.ads) abgelegt.
Ordner "ada_body"
In diesem Ordner werden alle Paket-Implementierungs-Dateien (engl: *.adb) abgelegt.
Ordner "work"
Hier werden während des Kompiliervorgangs temporäre Dateien erzeugt. Der Inhalt des Ordners muss weder bearbeitet noch archiviert werden.
Ordner "../BACKUP"
Es besteht die Möglichkeit, unter Verwendung der Steuerdatei Zwischenstände abzuspeichern. Die Quelltexte in den Ordnern "ada_body" und "ada_package" werden zusammen mit der Steuerdatei "makefile" in einer Zip-Datei archiviert. Der Name der Zip-Datei wird in der Steuerdatei unter Verwendung des Projektnamens, eines Datumstempels und eines Zeitstempels automatisch vergeben.
Steuerkommandos
make all
Kompiliere den Quelltext und erzeuge die Excutable. Der Name der Excutable muss in der Steuerdatei "makefile" in einer Variablen definiert werden.
make edit
Öffne alle relevanten Dateien in der IDE "kate". Diese verfügt über eine Kommandozeilen-Eingabe und unterstützt durch Texthervorhebung die Ada-Syntax.
make clean
Lösche alle temporäre Dateien und generierten Excutables.
make backup
Die Quelltexte in den Ordnern "ada_body" und "ada_package" werden zusammen mit der Steuerdatei "makefile" in einer Zip-Datei archiviert. Der Name der Zip-Datei wird in der Steuerdatei unter Verwendung des Projektnamens, eines Datumstempels und eines Zeitstempels automatisch vergeben.
Erstes Programm: Hallo Welt!
Dieses Programm gibt die Zeichenkette "Hallo Welt!" unter Verwendung der Bibliothek "Ada.Text_IO" in der Kommandozeile aus.
Des Weiteren wird ein Paket "Greetings_PKG" herangezogen und in diesem Paket die Prozedur "Goodby" ausgeführt.
ada_body/main.adb: Main-Implementierungs-Datei
main.adb |
---|
0001: with Ada.Text_IO; 0002: with Greetings_PKG; 0003: 0004: procedure main is 0005: use Ada.Text_IO; 0006: begin 0007: Put_Line( "Hallo Welt!" ); 0008: Greetings_PKG.Goodby; 0009: end main; 0010: |
ada_package/*.ads: Paket-Header-Dateien
Mit der Ausnahme der Main-Implementierungs-Datei "main.adb" benötigt jede Implementierungs-Datei eine gleichnamige Paket-Header-Datei.
In Paket-Header-Dateien (engl.: *.ads) wird definiert, aus welchen Elementen das jeweilige Paket besteht. Elemente können beispielsweise Variablen, Funktionen und Prozeduren sein. Das zu definierende Paket muss mit der Datei namensgleich sein, wodurch immer nur ein Paket in einer Paket-Header-Dateien definiert werden kann.
Hier besteht das Paket "Greetings_PKG" aus einer Prozedure mit der Bezeichnung "Goodby".
greetings_pkg.ads |
---|
0001: package Greetings_PKG is 0002: procedure Goodby; 0003: end Greetings_PKG; 0004: |
ada_body/*.adb: Paket-Implementierungs-Dateien
In den Paket-Implementierungs-Dateien wird der eigentliche Quelltext eingepflegt. Hier soll definiert werden, was die Elemente eines Paketes während der Programmausführung bewirken.
Hier wird die Prozedur "Goodby" ausformuliert: Sie gibt die Zeichenkette "Goodby" unter Verwendung der Bibliothek "Ada.Text_IO" in der Kommandozeile aus.
greetings_pkg.adb |
---|
0001: with Ada.Text_IO; 0002: 0003: package body Greetings_PKG is 0004: procedure Goodby is 0005: begin 0006: Ada.Text_IO.Put_Line("Goodby"); 0007: end Goodby; 0008: end Greetings_PKG; 0009: |
makefile
Die Steuerdatei "makefile" ermittelt dynamisch den Umfang an Implementierungs-Datein, welche im Framework hinterlegt sind. Somit muss die Steuerdatei nicht verändert werden, wenn das Framework um zusätzliche Paket-Header-Dateien oder zusätzliche Paket-Implementierungs-Dateien erweitert wird.
Die Variablen "PROJECT_NAME" und "TARGET_EXEC_NAME" müssen aber bei Projektstart definiert werden.
PROJECT_NAME
Die Variable sollte den Projektnamen beinhalten. Dieser wird für die Archivierung beim Steuerkommando "make backup" benötigt. Es handelt sich um eine Zeichenkette ohne Leerzeichen.
TARGET_EXEC_NAME
Die Variable sollte den Namen der zu generierenden Excutable beinhalten. Es handelt sich um eine Zeichenkette ohne Leerzeichen.
makefile |
---|
0001: # ############################################################################ 0002: # Copyright (C) 2022 by # 0003: # Christoph Stadelmann, M.Sc. # 0004: # # 0005: # This file is free software; you can redistribute it and/or modify # 0006: # it under the terms of the GNU General Public License as published by # 0007: # the Free Software Foundation; either version 2 of the License, or # 0008: # (at your option) any later version. # 0009: # # 0010: # This program is distributed in the hope that it will be useful, # 0011: # but WITHOUT ANY WARRANTY; without even the implied warranty of # 0012: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # 0013: # GNU General Public License for more details. # 0014: # # 0015: # You should have received a copy of the GNU General Public License # 0016: # along with this program; if not, write to the # 0017: # Free Software Foundation, Inc., # 0018: # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # 0019: # ############################################################################ 0020: 0021: PROJECT_NAME = ADA_PRGM_0000_hello_world 0022: 0023: TARGET_EXEC_NAME = hello_world.exec 0024: 0025: 0026: # ############################################################################ 0027: # all 0028: # ############################################################################ 0029: 0030: GNAT = gcc 0031: GNATBIND = gnatbind 0032: GNATLINK = gnatlink 0033: 0034: FOLDERS = work \ 0035: ../BACKUP 0036: 0037: ADA_BODIES = $(shell cd ada_body; ls *.adb) 0038: 0039: .PHONY: all 0040: all: $(FOLDERS) 0041: cp $(shell pwd)/ada_body/*.adb $(shell pwd)/ada_package/*.ads $(shell pwd)/work 0042: (cd $(shell pwd)/work; \ 0043: for item in $(ADA_BODIES); do \ 0044: $(GNAT) -c $$item; \ 0045: done ; \ 0046: $(GNATBIND) main; \ 0047: $(GNATLINK) main; \ 0048: cp main ../$(TARGET_EXEC_NAME)) 0049: @echo "all done" 0050: @echo "$(ADA_BODIES)" 0051: 0052: 0053: # ############################################################################ 0054: # $(FOLDERS) 0055: # ############################################################################ 0056: 0057: work: 0058: mkdir -p $@ 0059: 0060: ../BACKUP: 0061: mkdir -p $@ 0062: 0063: 0064: # ############################################################################ 0065: # edit, clean 0066: # ############################################################################ 0067: 0068: .PHONY: edit 0069: edit: 0070: kate makefile ada_body/*.adb ada_package/*.ads & 0071: @echo "edit done" 0072: 0073: 0074: .PHONY: clean 0075: clean: 0076: rm -f $(shell pwd)/*.exec 0077: rm -f $(shell pwd)/work/* $(shell pwd)/work/*.* 0078: @echo "clean done" 0079: 0080: 0081: # ############################################################################ 0082: # backup 0083: # ############################################################################ 0084: 0085: BACKUP_OBJECTS = makefile ada_body/*.adb ada_package/*.ads 0086: 0087: .PHONY: backup 0088: backup: $(FOLDERS) 0089: zip -r ../BACKUP/ZIP__$(PROJECT_NAME)__$$(date +"%Y_%m%d_%H%M%S" -u).zip $(BACKUP_OBJECTS) > ../BACKUP/ZIP__$(PROJECT_NAME)__$$(date +"%Y_%m%d_%H%M%S" -u).txt 0090: @echo "backup done" 0091: |
Liste von Standard-Bibliotheken
Ada
Name der Bibliotheken | Beschreibung |
---|---|
Ada.Command_Line |
Dieses Paket ermöglicht das Auslesen der Kommandozeilen-Argumente, welche dem Programm beim Start in im Terminal beigefügt wurden. Zu dem ermöglicht die Bibliothek das Setzten der Exit-Kodierung. [5] |
Ada.Text_IO |
Dieses Paket ermöglicht das Zugreifen in Dateien. [6] |
Ada.Numerics |
Diese Bibliothek ist ein Eltern-Paket für zahlreiche Bibliotheken zur Behandlung nummerischer Operationen. [7] |
Ada.Numerics.Generic_Elementary_Functions |
Dieses Paket stellt elementare mathematische Funktionen zur Verfügung. [8] |
... | ... |
GNAT
Name der Bibliotheken | Beschreibung |
---|---|
GNAT.Sockets |
Dieses Paket stellt u.a. einen Zugriff auf einen TCP/IP-Socket zur Verfügung. [9] |
... | ... |
FLEF
Stand: 2023_0101
Links und Quellen
- ↑ https://en.wikipedia.org/wiki/File:Ada_Lovelace_1838.jpg
- ↑ https://de.wikipedia.org/wiki/Ada_(Programmiersprache)
- ↑ https://en.wikipedia.org/wiki/Ada_(programming_language)
- ↑ https://en.wikipedia.org/wiki/Charles_Babbage
- ↑ http://www.ada-auth.org/standards/12rm/html/RM-A-15.html
- ↑ http://www.ada-auth.org/standards/12rm/html/RM-A-10-1.html
- ↑ http://www.ada-auth.org/standards/12rm/html/RM-A-5.html
- ↑ http://www.ada-auth.org/standards/12rm/html/RM-A-5-1.html
- ↑ https://en.wikibooks.org/wiki/Ada_Programming/Libraries/GNAT.Sockets