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 ) |
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.
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.
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).
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.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.
Standardbiblioteket innehåller även gränssnitt för att arbeta med flyttal, ordböcker, listor m.m.
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.
De flesta kompilatorer är öppen källkod.
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.
Några av dessa böcker finns i utländska nätbutiker. De flesta av dem är tillgängliga gratis på Internet.
Programmeringsspråk | |
---|---|
|