Modula-3 | |
---|---|
Semantik | imperativ , strukturel , modulær , objektorienteret , generisk |
Sprog klasse | programmeringssprog , objektorienteret programmeringssprog og imperativt programmeringssprog |
Udførelsestype | kompileret |
Dukkede op i | 1986 - 1988 |
Forfatter | DEC SRC , Olivetti |
Udvikler | Digital Equipment Corporation |
Frigøre | 5.8.6 (14. juli 2010 ) |
Type system | streng, statisk |
Større implementeringer | CM3 , PM3 , EzM3 , HM3 |
Blev påvirket | Algol , Modula-2 , Modula-2+ , Oberon , Pascal |
påvirket | C# , Java , Ocaml , Python , Nim |
Internet side | modul3.org |
Modula-3 (Modula-3, M3) er et systemprogrammeringssprog , udvikling af Modula-2- sproget . Udviklet på DEC 's System Research Center (SRC) med Olivetti .
Udviklere: Luca Cardelli, Jim Donahue, Mick Jordan, Bill Kalsow og Greg Nelson. Sproget er ikke meget brugt i industrien, selvom det bruges i den akademiske verden. Under udviklingen blev sproget stærkt påvirket af Modula-2+-sproget, der derefter blev brugt af SRC til at skrive software til DEC Firefly -multiprocessor-arbejdsstationen .
Hovedfunktionerne i Modula-3 er: enkelhed, typesikkerhed og muligheden for at bruge til at skrive systemsoftware . Modula-3 understøtter generisk programmering , multitasking , automatisk hukommelseshåndtering ( affaldsindsamling ), undtagelseshåndtering , objektorienteret programmering (herunder at skjule data og metoder). Udviklerne af sproget forfulgte målet om at supplere Modula-2 med nye funktioner i moderne programmeringssprog. Samtidig var potentielt farlige og komplekse funktioner, såsom multipel arv og operatøroverbelastning , ikke inkluderet i sproget.
Udviklingen af Modula-3 begyndte i 1986. Maurice Wilkes skrev til Niklaus Wirth med nogle ideer til en ny version af modulet. Wilkes, som tidligere havde arbejdet for DEC, vendte tilbage til England og tog et job på Olivetti Research Centre. Wirth havde travlt med at udvikle det nye Oberon -programmeringssprog på dette tidspunkt , men nægtede ikke hjælp fra Wilkes. Modula-3-beskrivelsen blev afsluttet i august 1988 og revideret i januar 1989. Samtidig dukkede compilere fra DEC SRC og Olivetti op, og kompilatorer fra tredjepartsvirksomheder begyndte også at dukke op.
I halvfemserne af det XX århundrede blev Modula-3 udbredt hovedsageligt i det akademiske miljø, som et sprog til undervisning i programmering, og blev næsten aldrig brugt i industrien. Årsagen til dette kunne være døden af DEC, sprogets hovedudvikler. Samtidig blev den kommercielle CM3-kompiler og Reactor-integrerede udviklingsmiljø foreslået af Critical Mass Corporation. I 2000 gik Critical Mass ud af drift. Modula-3 er i øjeblikket understøttet af Elego Software Solutions GmbH, som har arvet kildekoden til CM3-kompileren fra Critical Mass. Reactor IDE er nu blevet omdøbt til CM3 IDE og distribueret med kildekode. I marts 2002 modtog Elego kildekoden til PM3-kompileren, som tidligere er udviklet ved Ecole Polytechnique de Montreal.
Håndtering af undtagelser i TRY ... EXCEPT ... END og TRY ... FINALLY ... END blokke. EXCEPT-konstruktionen implementeres på samme måde som CASE-konstruktionen. Modula-3 understøtter også en LOOP...EXIT...END loop.
Implementeret support til objektorienteret programmering . Objekttypen er OBJECT. Denne type adskiller sig fra poster (RECORD) ved, at den er en referencetype og giver dig mulighed for at oprette procedurer forbundet med typen (metoder), og understøtter også metodeoverbelastning. Alle metoder er virtuelle. For eksempel konstruktionen:
TYPE A = OBJECT a: HELTAL; METODER p():=AP END;definerer en objekttype, der indeholder et felt a af en heltalstype og en metode p. AP-proceduren er en implementering af p-metoden og har følgende form:
PROCEDURE AP(selv: A) = BEGIN … END AP;Metoden hedder sådan: op();, hvor o er en variabel (objekt) af type A.
REVEAL-konstruktionen giver en enkel, men meget kraftfuld mekanisme til at skjule objektimplementeringsdetaljer for klienter.
Modula-3 er et af de få sprog, der kræver, at programmeringsenheder importeret fra eksterne moduler er strengt kvalificerede. For eksempel, hvis modul A bruger variablen x fra modul B, skal referencen til denne variabel skrives på denne måde: Bx Med andre ord tillader Modula-3 dig ikke at importere alle de objekter, der eksporteres af noget modul. På grund af dette er det næsten umuligt at deaktivere programmet ved at tilføje ny funktionalitet til det. Et stort antal brugere kan samtidigt udvide programmet uden frygt for, at dette vil føre til fejl. Modula-3 skelner også mellem at erklære en metodesignatur (METODS-blokken) og at overbelaste den (OVERRIDES-blokken).
Hej verden! kan se sådan ud:
MODUL Main; IMPORTIO; BEGYNDE IO.Put("Hej verden\n") SLUT hoved.eller sådan her (ved hjælp af outputstream-modulet):
MODUL Hej EKSPORT Main; IMPORT Wr, Stdio; BEGYNDE Wr.PutText(Stdio.stdout, "Hej, verden!\n"); Wr.Close(Stdio.stdout); SLUT Hej.I lighed med C-sproget er de fleste af procedurerne til at skrive programmer i Modul-3 implementeret i standardbiblioteket. I/O-operationer er også implementeret i standardbiblioteket.
Standardbiblioteket indeholder også grænseflader til at arbejde med flydende kommatal, ordbøger, lister mv.
Modula-3, udover referencer , understøtter også pointere . ADRESSE-typen er C - modstykket til void*-typen . En pointer til en heltalstypevariabel ville se sådan ud:
TYPE IntPtr = USPORET REF HELTAL;For at få adressen på en variabel skal du bruge den indbyggede ADR() funktion, som er analog med operatoren & i C. Skraldesamleren holder ikke styr på pointere (dette er angivet med ordet UNTRACED). Alle pegepinde skal deallokeres manuelt ved hjælp af den indbyggede DISPOSE-procedure.
Modula-3 understøtter også alle tilgængelige datatyper på C-sproget. På grund af dette kan Modulo-3 kode frit forbindes med C-kode. Alle typedefinitioner er indeholdt i Ctypes-modulet.
De fleste compilere er Open Source.
Alle implementeringer understøtter et stort antal platforme (mere end 20). Datatyperne er binære kompatible med C-sprogtyper, hvilket gør det muligt at bruge de to sprog sammen.
Nogle af disse bøger kan findes i udenlandske netbutikker. De fleste af dem er tilgængelige gratis på internettet.
Programmeringssprog | |
---|---|
|