Modula-3
Modula-3 ist eine imperative, objektorientierte Programmiersprache. Sie versteht sich als Nachfolger von Pascal, Modula-2, Modula-2+ und Cedar und wurde von DEC und Olivetti entwickelt. Sie wurde in der Tradition der Sprachen von Niklaus Wirth unter den Gesichtspunkten der Einfachheit und Strenge entwickelt, an der Entwicklung war Wirth allerdings nur als Berater beteiligt. Die Einfachheit bezieht sich hierbei auf den Sprachumfang (Die Sprachdefinition von Modula-3 umfasst 60 Seiten) und nicht auf die Länge der Programme oder auf eine Orientierung an persönlichen Programmiergewohnheiten.
Eigenschaften
Modula-3 besitzt folgende Eigenschaften:
- eine saubere und robuste Syntax
- strenge und statische Typen
- Ordinale Typen: Ganze Zahlen, Aufzählungen, Zeichen, Wahrheitswerte
- Unterbereiche ordinaler Typen
- Mengen über ordinalen Typen
- Felder mit ordinalen Typen als Indizes
- Gleitkommazahlen
- Texte
- Datenverbünde und Objekte
- Unterprogramme und Funktionen
- Module
- Generische Module (templates)
- teilweise Aufdeckung von Untertypbeziehungen (partial revelation)
- automatische Speicherbereinigung (garbage collection)
- Ausnahmebehandlung (exceptions)
- nebenläufige Programmierung (threads)
- Trennung von sicheren und unsicheren Programmteilen
Die oben genannten Konzepte wurden regelrecht minimalistisch umgesetzt. Dies erleichtert die Einarbeitung für jemanden, der mit diesen Konzepten vertraut ist.
- Objektorientierung besteht im Wesentlichen aus dem Typ OBJECT.
<syntaxhighlight lang="modula2">
TYPE
T = OBJECT
a: INTEGER;
METHODS
m (arg: CHAR;) := P;
END;
</syntaxhighlight>
- Dies definiert den Typ T für Objekte, welche die Objektvariable a und die Methode m enthalten. Die Methode m wird implementiert, indem man ihr eine Prozedur P zuweist. Diese muss die Signatur
PROCEDURE P (self: T; arg: CHAR; );
- besitzen.
- Es gibt keine ausgezeichneten Methoden wie Konstruktoren und Destruktoren. Allerdings lassen sich Objektvariablen per Typdefinition in einen definierten Anfangszustand versetzen.
- Kapselung wird durch die von Modula-2 bekannte Trennung in Schnittstelle und Implementation erreicht. Durch die teilweise Aufdeckung von Untertypbeziehungen (REVEAL) können darüber hinaus beliebig feine Abstufungen von Zugriffsmöglichkeiten definiert werden. Dies ist in gewisser Weise eine Verallgemeinerung der public-protected-private-Hierarchie und der friends-Vereinbarungen von C++.
- Mit Typen parametrisierte Datenstrukturen lassen sich mit generischen Modulen realisieren. Generische Module unterscheiden sich von normalen Modulen durch Modul-Parameter. In gewisser Weise kann man damit ausgewählte IMPORT-Anweisungen variabel halten. Nachteil dieser einfachen Realisierung ist, dass generische Module nicht direkt übersetzt werden können, sondern nur ihre Ausprägungen.
Entwicklung
Die DEC wurde 1998 an Compaq verkauft; diese wiederum ging 2002 in Hewlett-Packard auf. Pflege und Weiterentwicklung der Quellen der wichtigsten Modula-3-Compiler wurde von Elego Software Solutions übernommen. Seit der Übernahme wird vor allem Critical Mass Modula-3 stetig weiterentwickelt. Die Quellen sowie Binärpakete für eine Reihe von Betriebssystemen können frei (unter einer wenig restriktiven Lizenz etwa im Vergleich zur GPL) heruntergeladen werden.
Weblinks
- Modula-3-Ressourcen mit FAQ, Bibliographie und Links zu verschiedenen Implementierungen
- Modula-3: Tutorial zum leichten Einstieg
- Modula-3: Installation unter Windows
- Newsgroup zu Modula-3
- <templatestyles src="Webarchiv/styles.css" />{{#if:19970814162826
| {{#ifeq: 19970814162826 | *
| {{#if: Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples | {{#invoke:WLink|getEscapedTitle|Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples}} | {{#invoke:Webarchiv|getdomain|http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|19970814162826}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples | {{#invoke:WLink|getEscapedTitle|Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples}} | {{#invoke:Webarchiv|getdomain|http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|19970814162826}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples | {{#invoke:WLink|getEscapedTitle|Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples}} | {{#invoke:Webarchiv|getdomain|http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples | {{#invoke:WLink|getEscapedTitle|Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples}} | {{#invoke:Webarchiv|getdomain|http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples | {{#invoke:WLink|getEscapedTitle|Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples}} | {{#invoke:Webarchiv|getdomain|http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html}} }} ({{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples | {{#invoke:WLink|getEscapedTitle|Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples}} | {{#invoke:Webarchiv|getdomain|http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html}} }}
}}}}}}}}{{#if:
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:19970814162826|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html}}
|| {{#if: || }}
}}{{#if: Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples
| {{#if: {{#invoke:WLink|isBracketedLink|Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming in Style: program examples}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}}
{{#ifeq: s | p | | {{#if: 4294172-6 | |
}} }}{{#ifeq:||{{#if: | [[Kategorie:Wikipedia:GND fehlt {{#invoke:Str|left|{{{GNDCheck}}}|7}}]] }}{{#if: | {{#if: | | }} }} }}{{#if: | {{#ifeq: 0 | 2 | | }} }}{{#if: | {{#ifeq: 0 | 2 | | }} }}{{#ifeq: s | p | {{#if: 4294172-6 | | {{#if: {{#statements:P227}} | | }} }} }}{{#ifeq: s | p | {{#if: 4294172-6 | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P227}} | | }} }} }} }}{{#ifeq: s | p | {{#if: | | {{#if: {{#statements:P244}} | | }} }} }}{{#ifeq: s | p | {{#if: | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P244}} | | }} }} }} }}{{#ifeq: s | p | {{#if: | | {{#if: {{#statements:P214}} | | }} }} }}{{#ifeq: s | p | {{#if: | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P214}} | | }} }} }} }}Vorlage:Wikidata-Registrierung
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Archiv-URL
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Linktext fehlt
- Wikipedia:GND fehlt
- Wikipedia:Normdaten-TYP falsch oder fehlend
- Wikipedia:GND in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:GND in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Wikipedia:LCCN in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:LCCN in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Wikipedia:VIAF in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:VIAF in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Objektorientierte Programmiersprache