Modula-3

In der Informatik ist Modula-3 eine Programmiersprache konzipiert als ein Nachfolger einer beförderten Version von Modula-2 bekannt als Modula-2 +. Während es in Forschungskreisen einflussreich gewesen ist (das Beeinflussen der Designs von Sprachen wie Java, C#, und Pythonschlange), ist es weit in der Industrie nicht angenommen worden. Es wurde von Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan (vor am Softwaretechnologielaboratorium von Olivetti), Bill Kalsow und Greg Nelson an Digital Equipment Corporation (DEC) Systems Research Center (SRC) und Olivetti Research Center (ORC) gegen Ende der 1980er Jahre entworfen.

Die Haupteigenschaften von Modula-3 sind Einfachheit und Sicherheit, während sie die Macht einer Systemprogrammiersprache bewahren. Modula-3 hat zum Ziel gehabt, die Tradition von Pascal der Typ-Sicherheit fortzusetzen, während er neue Konstruktionen für die praktische wirkliche Programmierung eingeführt hat. In besonderem Modula-3 hat Unterstützung für die allgemeine Programmierung (ähnlich Schablonen), Nebenläufigkeit, das Ausnahme-Berühren, die Müll-Sammlung, die objektorientierte Programmierung, die teilweise Enthüllung und das ausführliche Zeichen des unsicheren Codes hinzugefügt.

Die Designabsicht von Modula-3 war eine Sprache, die die wichtigsten Eigenschaften von modernen befehlenden Sprachen in ziemlich grundlegenden Formen durchführt. So angeblich wurden gefährliche und komplizierende Eigenschaften wie Mehrfachvererbung und Maschinenbediener, der überlädt, weggelassen.

Historische Entwicklung

Das Modula-3-Projekt hat im November 1986 angefangen, als Maurice Wilkes Niklaus Wirth mit einigen Ideen für eine neue Version von Modula geschrieben hat. Wilkes hatte im DEZ gerade vor diesem Punkt gearbeitet, und war nach England zurückgekehrt und hatte sich dem Forschungsstrategie-Ausschuss von Olivetti angeschlossen. Wirth war bereits Oberon weitergegangen, aber hatte keine Probleme mit der Mannschaft von Wilkes, die Entwicklung unter dem Namen von Modula fortsetzt. Die Sprachdefinition wurde im August 1988, und eine aktualisierte Version im Januar 1989 vollendet. Bearbeiter vom DEZ und Olivetti sind bald, und 3. Parteidurchführungen danach gefolgt.

Sein Design war schwer unter Einfluss der Arbeit am Modula-2 + Sprache im Gebrauch an SRC und am Computerforschungszentrum von Acorn (KREISBOGEN, späterer BUTZKOPF, als Olivetti Acorn ausgezahlt hat) zurzeit, der die Sprache war, auf der das Betriebssystem für den Leuchtkäfer-Mehrverarbeiter im DEZ VAX Arbeitsplatz geschrieben wurde, und in dem der Bearbeiter von Acorn für Acorn Modula-2 Verlängerte Sprache (KAMEL) AM KREISBOGEN für den ARX das Betriebssystemprojekt des ARMS Reihe von Acorn Archimedes von Computern gestützt hat, wurden geschrieben. Wie der revidierte Modula-3-Bericht feststellt, war die Sprache unter Einfluss anderer Sprachen wie Mesa, Zeder, Object Pascal, Oberon und Euklid.

Während der 1990er Jahre hat Modula-3 beträchtliche Währung als eine lehrende Sprache gewonnen, aber es wurde für den Industriegebrauch nie weit angenommen. Das Beitragen dazu kann die Besitzübertragung des DEZ, ein Schlüssel Modula-3 Unterstützer gewesen sein (besonders, als es aufgehört hat aufrechtzuerhalten, wurde es effektiv mehr vor dem DEZ an Compaq 1998 verkauft). Jedenfalls, trotz der Einfachheit und Macht von Modula-3, scheint es, dass es wenig Nachfrage nach einer kompilierten Verfahrenssprache mit der eingeschränkten Durchführung der objektorientierten Programmierung gab. Einige Zeit wurde ein kommerzieller Bearbeiter genannt CM3, der durch einen der implementors Hauptvorherigen im DEZ SRC aufrechterhalten ist, wer vor dem DEZ angestellt wurde, der an Compaq, eine einheitliche Entwicklungsumgebung genannt der Reaktor und ein ausziehbares Java Virtuelle Maschine wird verkauft (lizenziert im binären und den Quellformaten und buildable mit dem Reaktor) von Critical Mass, Inc angeboten. Aber diese Gesellschaft hat aktive Operationen 2000 aufgehört und hat einige der Quellen seiner Produkte zu elego Software Solutions GmbH gegeben. Modula-3 wird jetzt in Universitäten größtenteils in vergleichenden Programmiersprache-Kursen unterrichtet, und seine Lehrbücher sind vergriffen. Im Wesentlichen ist der einzige korporative Unterstützer von Modula-3 elego Software Solutions GmbH, die die Quellen von der Kritischen Masse geerbt hat und mehrere Ausgaben des CM3 Systems in der Quelle und binären Form seitdem gemacht hat. Der Reaktor-IDE ist offene Quelle befreit nach mehreren Jahren gewesen, die es nicht mit dem neuen Namen CM3-IDE hatte. Im März 2002 elego hat auch das Behältnis eines anderen aktiven Modula-3 Vertriebs, PM3 übernommen, der bis dahin am École Polytechnique de Montréal aufrechterhalten ist, aber der später fortgesetzt durch die Arbeit an HM3 verbessert im Laufe der Jahre später, bis es obsoleted war.

Syntax

Ein allgemeines Beispiel einer Syntax einer Sprache ist das Hallo Weltprogramm.

Wichtiges MODUL;

IMPORT IO;

BEGINNEN SIE

IO.Put ("hallo World\n")

Wichtiges ENDE.

</Quelle>

Alle Programme in Modula-3 haben mindestens eine Modul-Datei, während am meisten auch eine Schnittstelle-Datei einschließen, die von Kunden verwendet wird, um auf Daten vom Modul zuzugreifen. Wie auf anderen Sprachen muss ein Modula-3 Programm ein Hauptmodul exportieren, das entweder eine Datei genannt der Wichtige m3 sein kann, oder eine Datei rufen kann, um das Hauptmodul zu exportieren.

Modul-Dateinamen werden angedeutet, dasselbe als der wirkliche Modul-Name zu sein, aber der Bearbeiter wird Sie nur warnen, wenn sie verschieden sind.

Andere Vereinbarung in der Syntax schließt das Namengeben des exportierten Typs einer Schnittstelle ein, da Typen gewöhnlich durch ihre vollen Namen qualifiziert werden, so wird ein Typ innerhalb eines Moduls genannt Foo genannt. Das Helfer in der Lesbarkeit. Eine andere ähnliche Tagung nennt einen öffentlichen Gegenstand als in den OOP Beispielen oben.

Spracheigenschaften

Modularität

In erster Linie sind alle Kompilationseinheiten entweder oder Durchführung s, von einem Geschmack oder einem anderen.

Eine Schnittstelle-Kompilationseinheit, mit dem Schlüsselwort, beginnend

definiert Konstanten, Typen, Variablen, Ausnahmen und Verfahren.

Das Durchführungsmodul, mit dem Schlüsselwort beginnend, stellt den wirklichen Code und zur Verfügung

weitere Konstanten, Typen oder Variablen mussten die Schnittstelle durchführen.

Standardmäßig wird ein Durchführungsmodul die Schnittstelle desselben Namens, durchführen

aber ein Modul kann ausführlich zu einem Modul nicht von demselben Namen.

Zum Beispiel exportiert das Hauptprogramm ein Durchführungsmodul für die Hauptschnittstelle.

MODUL wichtige EXPORTE von HelloWorld;

IMPORT IO; BEGINNEN SIE IO.Put ("hallo World\n") Wichtiges ENDE.</Quelle>

Jede Kompilationseinheit kann andere Schnittstellen, und unter der Programmierer-Kontrolle,

die Sachen in der Schnittstelle enthalten.

Gewöhnlich einzige Importe die Schnittstelle und der Gebrauch die 'Punkt'-Notation, um auf die Sachen innerhalb der Schnittstelle zuzugreifen

(ähnlich dem Zugreifen auf die Felder innerhalb einer Aufzeichnung).

Ein typischer Gebrauch soll eine Datenstruktur (Aufzeichnung oder Gegenstand) pro Schnittstelle zusammen mit irgendwelchen Unterstützungsverfahren definieren.

Hier wird der Haupttyp den Namen 'T' bekommen, und man verwendet als in MyModule. T.

Sicher gegen den unsicheren

Etwas Fähigkeit wird unsicher gehalten, wo der Bearbeiter nicht mehr versichern kann, dass die Ergebnisse (zum Beispiel entsprechen werden, wenn sie in die C Programmiersprache verbinden werden).

Das Schlüsselwort, das davor vorbefestigt ist, oder, kann verwendet werden, um dem Bearbeiter zu sagen, bestimmte Eigenschaften der niedrigen Stufe der Sprache zu ermöglichen.

Zum Beispiel umgeht eine unsichere Operation das Typ-Systemverwenden, um die Bit einer ganzen Zahl in eine Schwimmpunkt-Zahl zu kopieren.

Eine Schnittstelle, die ein unsicheres Modul importiert, muss selbst unsicher sein.

Eine sichere Schnittstelle kann durch ein unsicheres Durchführungsmodul exportiert werden.

Das ist der typische Gebrauch, wenn es zu Außenbibliotheken, verbindet

wo zwei Schnittstellen (ein unsicherer, der andere Safe) gebaut werden.

Generics

Eine allgemeine Schnittstelle und sein entsprechendes allgemeines Modul,

Präfix oder Schlüsselwort mit,

und nehmen Sie als formelle Argumente andere Schnittstellen.

So (wie C ++ Schablonen) kann man leicht definieren und abstrakte Datentypen, verwenden

aber verschieden von C ++ ist die Körnung am Modul-Niveau.

Zum Beispiel konnte man GenericStack definieren, ihn dann mit, oder sogar Verweisungen auf Gegenstände realisieren.

Ein Schnittstelle-Modul würde zur allgemeinen Schnittstelle und den Durchführungsmodulen als wirkliche Argumente und der passiert

Bearbeiter wird konkrete Module erzeugen.

Tracability

Jeder Bezeichner kann zurück dazu verfolgt werden, wo er verschieden von der 'einschließen' Eigenschaft anderer Sprachen entstanden ist.

Eine Kompilationseinheit muss Bezeichner von anderen Kompilationseinheiten mit einer Behauptung importieren.

Sogar Enumerationen machen von derselben 'Punkt'-Notation, wie verwendet, Gebrauch, wenn sie auf ein Feld einer Aufzeichnung zugreifen.

SCHNITTSTELLE A;

TYP-Farbe = {schwarz, braun, rot, orange, gelb, grün, blau, violett, grau, weiß};

ENDE A;

</Quelle>

MODUL B;

IMPORT A;

VON EINER IMPORT-Farbe;

VAR

aColor: A.Color; (* Gebrauch der Modul-Name als ein Präfix *)

theColor: Farbe; (* hat den Modul-Namen als ein Präfix * nicht)

anotherColor: A.Color;

BEGINNEN SIE

aColor: = A.Color. Braun;

theColor: = Farbe. Rot;

anotherColor: = Farbe. Orange; (* Kann Orange * nicht einfach verwenden)

ENDE B.

</Quelle>

Dynamische Programmierung

Modula-3 unterstützt die Zuteilung von Daten an der Durchlaufzeit.

Es gibt zwei Arten des Gedächtnisses, das zugeteilt werden kann und.

Der Unterschied, der ist, wenn der Müllmann es sehen kann oder nicht.

NEU wird verwendet, um Daten von jeder dieser Klassen des Gedächtnisses zuzuteilen.

In einem Modul, ist für das freie unverfolgte Gedächtnis verfügbar.

Orientierter Gegenstand

Orientierte Programmiertechniken des Gegenstands können in Modula-3 verwendet werden, aber ihr Gebrauch ist nicht erforderlich. Viele der anderen Eigenschaften, die in Modula-3 (Module, generics) zur Verfügung gestellt sind, können gewöhnlich den Platz der Gegenstand-Orientierung nehmen.

Gegenstand-Unterstützung wird zu seinen einfachsten Begriffen absichtlich behalten.

Eine Objektart (Genannt hat eine "Klasse" in anderem Gegenstand Sprachen orientiert) wird mit der Behauptung, eingeführt

der im Wesentlichen dieselbe Syntax wie eine Behauptung, hat

obwohl eine Objektart ein Bezugstyp ist, wohingegen AUFZEICHNUNGEN in Modula-3 nicht (ähnlich structs in C) sind.

Exportierte Typen werden gewöhnlich T durch die Tagung genannt, und schaffen einen getrennten Typ "Public", um die Methoden und Daten auszustellen.

Zum Beispiel:

SCHNITTSTELLE-Person;

TYP T

Das definiert eine Schnittstelle mit zwei Typen, und, der als ein Gegenstand mit zwei Methoden definiert wird, und. wird als ein Subtyp durch den Gebrauch definiert

Um einen neuen Gegenstand zu schaffen, verwenden wir das gebaute im Verfahren mit der Methode als

VAR jim: = NEU (Person. T).init ("Jim", 25);

</Quelle>

Die Konstruktion von Modula-3 stellt begrifflich einfach und sauber noch sehr starker Mechanismus zur Verfügung, um Durchführungsdetails vor Kunden mit willkürlich vielen Niveaus "der Freundlichkeit" zu verbergen.

Wir verwenden, um die volle Durchführung der Schnittstelle von oben zu zeigen.

MODUL-Person;

OFFENBAREN SIE T = Publikum hat GEBRANDMARKT

GEGENSTAND

TEXT des Namens:; (* Diese zwei Variablen *)

Alter: GANZE ZAHL; (* sind privat. *)

ÜBERREITET

getAge: = Alter;

init: = Init;

ENDE;

VERFAHREN-Alter (selbst: T): GANZE ZAHL =

BEGINNEN SIE

GEBEN SIE self.age ZURÜCK;

END-Alter;

VERFAHREN Init (selbst: T; TEXT des Namens:; Alter: GANZE ZAHL): T =

BEGINNEN SIE

self.name: = Name;

self.age: = Alter;

KEHREN SIE selbst ZURÜCK;

ENDE Init;

BEGINNEN SIE

END-Person.

</Quelle>

Bemerken Sie den Gebrauch des Schlüsselwortes, das Gegenstände "brandmarkt", sie einzigartig zu machen, um Strukturgleichwertigkeit zu vermeiden. kann auch eine Schnur als ein Argument nehmen, aber wenn weggelassen, wird eine einzigartige Schnur für Sie erzeugt.

Modula-3 ist eine der wenigen Programmiersprachen, die dass externe Verweise von einem verlangt

Modul ausschließlich qualifiziert werden. D. h. eine Verweisung im Modul zum vom Modul exportierten Gegenstand muss die Form annehmen. Es ist nicht

möglich in Modula-3, "alle exportierten Namen" von einem Modul zu importieren.

Wegen der Voraussetzungen der Sprache an die Namenqualifikation und das Methode-Überlaufen ist es unmöglich, ein Arbeitsprogramm einfach durch das Hinzufügen neuer Behauptungen zu einer Schnittstelle (jede Schnittstelle) zu brechen. Das macht es möglich für große Programme, gleichzeitig von vielen Programmierern ohne irgendwelche Sorgen über das Namengeben von Konflikten editiert zu werden; und es macht es auch möglich, Kernsprachbibliotheken mit den festen Kenntnissen zu editieren, dass keine vorhandenen Programme im Prozess "gebrochen" werden.

Ausnahmen

Das Ausnahme-Berühren basiert auf... Block-System, das seitdem üblich geworden ist. Eine Eigenschaft, die auf anderen Sprachen, mit den bemerkenswerten Ausnahmen von Delphi, Pythonhttp://www.python.org/doc/faq/general/#why-was-python-created-in-the-first-place, Scalahttp://scala.epfl.ch und Visuell Basic.NET nicht angenommen worden ist, ist, dass die Konstruktion einen Pseudofall mit jeder möglichen Ausnahme als ein Fall in einem AUßER der Klausel definiert hat. Modula-3 unterstützt auch...... Konstruktion dass Schleifen bis zu einem Vorkommen, eine Struktur, die zu einer einfachen Schleife innerhalb... Klausel gleichwertig ist.

Mehrgewinde-

Die Sprache unterstützt den Gebrauch der Nebenläufigkeit und die Synchronisation zwischen Fäden.

Einer eingebauten Datenstruktur und der Behauptung zu sein, lässt sich schließen.

Die Modula-3 Durchlaufzeit kann von einem getrennten Faden für die Müll-Sammlung Gebrauch machen.

Es gibt ein Standardmodul innerhalb der Laufzeitbibliothek (libm3) genannt Faden,

der den Gebrauch von Mehrgewindeanwendungen unterstützt.

Zusammenfassung

In der Zusammenfassung, den Spracheigenschaften:

Modula-3 ist eine der seltenen Sprachen, deren Evolution von Eigenschaften dokumentiert wird.

In der Systemprogrammierung mit Modula-3 werden vier wesentliche Punkte des Sprachdesigns intensiv besprochen. Diese Themen sind: strukturell gegen die Namengleichwertigkeit, Regeln, allgemeine Module und Parameter-Weisen wie subtippend.

Standardbibliothekseigenschaften

Das Fortsetzen einer Tendenz hat mit der C Programmiersprache, vielen der Eigenschaften angefangen, die erforderlich sind zu schreiben, dass echte Programme aus der Sprachdefinition selbst ausgeschlossen und stattdessen über mehrere Standardbibliotheken zur Verfügung gestellt wurden. Die meisten Schnittstellen werden unten im Detail in beschrieben

Standardbibliotheken, die die folgenden Eigenschaften zur Verfügung stellen. Das wird Normanschlüsse genannt und ist erforderlich (muss zur Verfügung gestellt werden) auf der Sprache.

  • Text: Operationen auf unveränderlichen Schnur-Verweisungen, genannt s
  • Faden: Operationen in Zusammenhang mit dem Einfädeln, dem Umfassen, der Bedingungsvariable und dem Faden-Pausieren. Die einfädelnde Bibliothek stellt Vorkaufsfäden zur Verfügung, die umschalten
  • Wort: Operationen von Bitwise auf nicht unterzeichneten ganzen Zahlen (oder Maschinenwörter). Normalerweise durchgeführt direkt durch den Bearbeiter
  • Schwimmpunkt verbindet

Einige empfohlene Schnittstellen, die in den verfügbaren Durchführungen durchgeführt sind, aber sind nicht erforderlich

  • Lex: Um Zahl und andere Daten grammatisch zu analysieren
  • Fmt: Formatierung verschiedenen datatypes, um zu drucken
  • Pkl (oder Essiggurke): Gegenstand-Anordnung irgendwelcher Bezugstypen, die durch den Müllmann erreichbar
sind
  • Tisch: Allgemeine Module für Karten

Als in C wird Eingabe/Ausgabe auch über Bibliotheken, in Modula-3 genannt zur Verfügung gestellt und. Das objektorientierte Design des Rd und Wr (Leser und Schriftsteller beziehungsweise) Bibliotheken wird im Detail im Buch von Greg Nelson bedeckt. Ein interessanter Aspekt von Modula-3 ist, dass es eine von wenigen Programmiersprachen ist, deren Standardbibliotheken formell nachgeprüft worden sind, um verschiedene Typen von Programmfehlern einschließlich sich schließen lassender Programmfehler nicht zu enthalten. Das wurde unter der Schirmherrschaft von Larch/Modula-3 getan (sieh Lärche-Familie), und Verlängerte statische Überprüfungsprojekte am Systemforschungszentrum im DEZ.

Durchführungen

Mehrere Bearbeiter sind verfügbar, die meisten von ihnen öffnen Quelle.

  • DEZ-SRC M3, das Original.
  • Olivetti Research Center (ORC) Modula-3 Werkzeug, ursprünglich ein Bearbeiter, jetzt verfügbar als eine Bibliothek für die syntaktische, lexikalische und semantische Analyse von Modula-3 Programmen.
  • Kritischer Massen-CM3, ein verschiedener Nachfolger des DEZ-SRC M3
  • Polytechnik Montreal Modula-3 PM3, ein Nachfolger des DEZ-SRC M3, zurzeit sich mit CM3 verschmelzend
  • EzM3, eine unabhängige leichte und leicht tragbare Durchführung, hat sich im Zusammenhang mit CVSup entwickelt
  • HM3, ein Nachfolger der pm3-1.1.15 Ausgabe von PM3, mit der Unterstützung des heimischen einfädelnden Verwendens NPTL
  • CM3, der Nachfolger Kritischen Massen-CM3. Das ist die einzige aktuelle, aufrechterhaltene und entwickelte Durchführung. Ausgaben sind von http://www.opencm3.net/releng/verfügbar.

Da der einzige Aspekt von C Datenstrukturen, der von Modula-3 vermisst wird, der ist

Vereinigungstyp, alle vorhandenen Modula-3 Durchführungen sind im Stande, gute binäre Vereinbarkeit mit Typ-Behauptungen der c Sprache der Reihe und structs zu versorgen.

Bücher

Keines dieser Bücher ist noch im Druck, obwohl verwendete Kopien erreichbar sind und einige digitalisiert oder teilweise digitalisiert werden und einige Kapitel von einem sie vorherige oder spätere Versionen erreichbar als Forschungsberichte vom Web haben.

  • Greg Nelson, Hrsg.-Systemprogrammierung mit Modula-3 Die endgültige Verweisung auf der Modula-3 Sprache mit interessanten Artikeln über den objektorientierten Systemsoftwareaufbau und einer Dokumentation der Diskussion, die zu den Endeigenschaften der Sprache führt. Es gibt einige vorher (sieh für das Kapitel zwei, für das Kapitel vier, für das Kapitel fünf, für das Kapitel sechs), und einige später (sieh für das Kapitel ein und mehr aktualisierte zwei, so sowohl vorheriger Versionen der Sprachdefinition als auch, für das Kapitel drei und für das Kapitel sieben), Versionen der Mehrheit seiner acht Kapitel zu veröffentlichen, die individuell vom vorherigen DEZ Systems Research Center (SRC) als Forschungsberichte für das Download verfügbar sind.
  • Samuel P. Harbison, Modula-3, der leicht ist, Klassenlehrbuch zu verwenden.
  • Robert Sedgewick, Algorithmen in Modula-3
  • Laszlo Boszormenyi & Carsten Weich, in Modula-3 programmierend: Eine Einführung in der Programmierung mit dem Stil
  • Renzo Orsini, Agostino Cortesi Programmare in Modula-3: Introduzione alla programmazione imperativa e ein oggetti ein italienisches Buch der Sprache, die seine Haupteigenschaften erklärt.

Projekte mit Modula-3

  • Die DREHUNG Betriebssystem wurde mit Modula-3 als seine Programmiersprache durchgeführt.
  • Das CVSup Behältnis-Synchronisationsprogramm wurde in Modula-3 durchgeführt.
  • Die Obliq Programmiersprache, die Modula-3 Netzgegenstand-Fähigkeit verwendet, Gegenstände über lokale Netze durchsichtig abzuwandern, eine verteilte Fähigkeit dem orientierten Modula-3-Gegenstand erlaubend, Paradigma programmierend. Es ist verwendet worden, um verteilte Anwendungen, Computerzeichentrickfilme und Webprogrammieranwendungen in der Form der scripting Erweiterung auf Modula-3 zu bauen.

Links


Lee Morgan / Stephen Harper
Impressum & Datenschutz