Modula-3

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 17 mars 2021; verifiering kräver 1 redigering .
Modula-3
Semantik imperativ , strukturell , modulär , objektorienterad , generisk
Språkklass programmeringsspråk , objektorienterat programmeringsspråk och imperativt programmeringsspråk
Utförandetyp sammanställt
Framträdde i 1986 - 1988
Författare DEC SRC , Olivetti
Utvecklaren Digital Equipment Corporation
Släpp 5.8.6 (14 juli 2010 ) ( 2010-07-14 )
Typ system strikt, statisk
Stora implementeringar CM3 , PM3 , EzM3 , HM3
Blivit påverkad Algol , Modula-2 , Modula-2+ , Oberon , Pascal
påverkas C# , Java , Ocaml , Python , Nim
Hemsida module3.org

Modula-3 (Modula-3, M3) är ett systemprogrammeringsspråk , utveckling av Modula-2- språket . Utvecklad vid DEC :s System Research Center (SRC) med Olivetti .

Utvecklare: Luca Cardelli, Jim Donahue, Mick Jordan, Bill Kalsow och Greg Nelson. Språket används inte i stor utsträckning inom industrin, även om det används inom akademin. Under utvecklingen påverkades språket kraftigt av Modula-2+-språket som sedan användes av SRC för att skriva mjukvara för DEC Firefly -arbetsstationen med flera processorer .

Huvudfunktionerna i Modula-3 är: enkelhet, typsäkerhet och möjligheten att använda för att skriva systemprogramvara . Modula-3 stöder generisk programmering , multitasking , automatisk minneshantering ( sopsamling ), undantagshantering , objektorienterad programmering (inklusive att dölja data och metoder). Utvecklarna av språket eftersträvade målet att komplettera Modula-2 med nya funktioner i moderna programmeringsspråk. Samtidigt inkluderades inte potentiellt farliga och komplexa funktioner, såsom multipelt arv och operatörsöverbelastning , i språket.

Historik

Utvecklingen av Modula-3 började 1986. Maurice Wilkes skrev till Niklaus Wirth med några idéer för en ny version av modulen. Wilkes, som tidigare hade arbetat för DEC, återvände till England och tog ett jobb på Olivetti Research Centre. Wirth var upptagen med att utveckla det nya programmeringsspråket Oberon vid denna tidpunkt , men vägrade inte hjälp från Wilkes. Modula-3-beskrivningen färdigställdes i augusti 1988 och reviderades i januari 1989. Samtidigt dök det upp kompilatorer från DEC SRC och Olivetti, och kompilatorer från tredjepartsföretag började också dyka upp.

På nittiotalet av XX-talet blev Modula-3 utbredd främst i den akademiska miljön, som ett språk för undervisning i programmering, och användes nästan aldrig i industrin. Anledningen till detta kan vara döden av DEC, språkets huvudutvecklare. Samtidigt föreslogs den kommersiella kompilatorn CM3 och den integrerade utvecklingsmiljön Reactor av Critical Mass Corporation. År 2000 gick Critical Mass i konkurs. Modula-3 stöds för närvarande av Elego Software Solutions GmbH, som har ärvt källkoden för CM3-kompilatorn från Critical Mass. Reactor IDE har nu bytt namn till CM3 IDE och distribuerats med källkod. I mars 2002 fick Elego källkoden för PM3-kompilatorn, som tidigare utvecklats vid Ecole Polytechnique de Montreal.

Språkfunktioner

Hantera undantag i TRY ... EXCEPT ... END och TRY ... FINALLY ... END block. EXCEPT-konstruktionen implementeras på liknande sätt som CASE-konstruktionen. Modula-3 stöder även en LOOP...EXIT...END-loop.

Implementerat stöd för objektorienterad programmering . Objekttypen är OBJECT. Denna typ skiljer sig från poster (RECORD) genom att den är en referenstyp och låter dig skapa procedurer förknippade med typen (metoder), och stöder även metodöverbelastning. Alla metoder är virtuella. Till exempel konstruktionen:

TYP A = OBJEKT a: HELTAL; METODER p():=AP END;

definierar en objekttyp som innehåller ett fält a av en heltalstyp och en metod p. AP-proceduren är en implementering av p-metoden och har följande form:

PROCEDUR AP(själv: A) = BEGIN … END AP;

Metoden kallas så här: op();, där o är en variabel (objekt) av typ A.

REVEAL-konstruktionen tillhandahåller en enkel men mycket kraftfull mekanism för att dölja objektimplementeringsdetaljer från klienter.

Modula-3 är ett av få språk som kräver att programmeringsenheter som importeras från externa moduler är strikt kvalificerade. Till exempel, om modul A använder variabeln x från modul B, bör referensen till denna variabel skrivas i denna form: Bx Med andra ord tillåter Modula-3 dig inte att importera alla objekt som exporteras av någon modul. På grund av detta är det nästan omöjligt att inaktivera programmet genom att lägga till ny funktionalitet till det. Ett stort antal användare kan samtidigt utöka programmet utan rädsla för att detta kommer att leda till misslyckanden. Modula-3 skiljer också mellan att deklarera en metodsignatur (METODS-blocket) och att överbelasta den (OVERSKRIDNING-blocket).

Språkegenskaper

  • Moduler består av ett gränssnitt (GRÄNSSNITT) och en kropp (MODUL);
  • Moduler som innehåller osäker kod är märkta med nyckelordet UNSAFE;
  • Automatisk minneshantering ( sopsamling );
  • Stark typning , sammansatta (RECORD) och utdragbara (OBJECT) typer;
  • Hantering av exceptionella situationer;
  • Stöd för flera trådar;
  • Generika (GENERISK, analog till C++-mallar).

Exempel

Hej världen! kan se ut så här:

MODUL Huvud; IMPORTIO; BÖRJA IO.Put("Hello World\n") END main.

eller så här (med utgångsströmmodulen):

MODUL Hej EXPORT Huvudsaklig; IMPORTERA Wr, Stdio; BÖRJA Wr.PutText(Stdio.stdout, "Hej världen!\n"); Wr.Close(Stdio.stdout); SLUT Hej.

Vissa moduler ingår i standardbiblioteket

I likhet med C-språket är de flesta av procedurerna för att skriva program i Modul-3 implementerade i standardbiblioteket. I/O-operationer är också implementerade i standardbiblioteket.

  • IO - input-output gränssnitt.
  • Rd/Wr är gränssnitt som implementerar läs/skrivströmmar.
  • Text är ett gränssnitt för att arbeta med strängar (TEXT-typ).
  • Word - procedurer för att arbeta med osignerade heltal.
  • Fmt - Formatering av olika typer av data för utskrift.

Standardbiblioteket innehåller även gränssnitt för att arbeta med flyttal, ordböcker, listor m.m.

Lågnivåprogrammering

Modula-3, förutom referenser , stöder även pekare . ADDRESS-typen är C - motsvarigheten till void*-typen . En pekare till en variabel av heltalstyp skulle se ut så här:

TYP IntPtr = OSPÄRAD REF INTEGER;

För att få adressen till en variabel, använd den inbyggda ADR()-funktionen, som är analog med operatorn & i C. Sopsamlaren håller inte reda på pekare (detta indikeras med ordet UNTRACED). Alla pekare måste deallokeras manuellt med den inbyggda DISPOSE-proceduren.

Modula-3 stöder också alla datatyper som är tillgängliga på C-språket. På grund av detta kan Modulo-3-kod fritt kopplas till C-kod. Alla typdefinitioner finns i Ctypes-modulen.

Stora implementeringar

De flesta kompilatorer är öppen källkod.

  • DEC SRC M3 är DEC:s ursprungliga Modula-3-kompilator.
  • Critical Mass CM3 är den mest avancerade efterföljaren till DEC SRC M3.
  • Polytechnique Montreal Modula-3 PM3 är ytterligare en efterträdare till DEC SRC M3 (nu sammanslagna i CM3).
  • EzM3 är en lättvikts oberoende kompilator byggd ovanpå PM3. Utvecklad tillsammans med CVSup
  • HM3 är efterföljaren till PM3 (version 1.1.15), med stöd för POSIX Threading (NPTL).

Alla implementeringar stöder ett stort antal plattformar (fler än 20). Datatyperna är binärt kompatibla med C-språktyper, vilket gör att de två språken kan användas tillsammans.

Litteratur

Några av dessa böcker finns i utländska nätbutiker. De flesta av dem är tillgängliga gratis på Internet.

  • Greg Nelson, red. Systemprogrammering med Modula-3 Den definitiva referensen om Modula-3-språket med intressanta artiklar om objektorienterad systemmjukvarukonstruktion och en dokumentation av diskussionen som leder till språkets sista egenskaper.
  • Samuel P. Harbison, Modula-3 Lättanvänd klasslärobok.
  • Robert Sedgewick, Algoritmer i Modula-3
  • Laszlo Boszormenyi & Carsten Weich, Programmering i Modula-3: En introduktion till programmering med stil
  • Renzo Orsini, Agostino Cortesi Programare i Modula-3: introduzione alla programmazione imperativa ea oggetti en italiensk bok om språket som förklarar dess huvuddrag.

Projekt som använder Modula-3

  • Operativsystemet SPIN ( sv ) skrevs i Modul-3. Kärngränssnitt är kompatibla med DEC Unix.
  • CVSup  är ett program för synkronisering av repositories, även skrivet i Modul-3.

Anteckningar

Länkar