Modula-3

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 17. marts 2021; verifikation kræver 1 redigering .
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 ) ( 2010-07-14 )
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.

Historie

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.

Sprogfunktioner

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).

Sprogegenskaber

  • Moduler består af en grænseflade (INTERFACE) og en krop (MODUL);
  • Moduler, der indeholder usikker kode, er markeret med nøgleordet UNSAFE;
  • Automatisk hukommelseshåndtering ( affaldsopsamling );
  • Stærk skrivning , sammensatte (RECORD) og udvidelige (OBJECT) typer;
  • Håndtering af ekstraordinære situationer;
  • Multithreading støtte;
  • Generisk (GENERISK, analog af C++ skabeloner).

Eksempler

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.

Nogle moduler inkluderet i standardbiblioteket

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.

  • IO - input-output interface.
  • Rd/Wr er grænseflader, der implementerer henholdsvis læse/skrive-streams.
  • Tekst er en grænseflade til at arbejde med strenge (TEXT type).
  • Word - procedurer til at arbejde med usignerede heltal.
  • Fmt - Formatering af forskellige typer data til udskrivning.

Standardbiblioteket indeholder også grænseflader til at arbejde med flydende kommatal, ordbøger, lister mv.

Programmering på lavt niveau

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.

Større implementeringer

De fleste compilere er Open Source.

  • DEC SRC M3 er DECs originale Modula-3 compiler.
  • Critical Mass CM3 er den mest avancerede efterfølger til DEC SRC M3.
  • Polytechnique Montreal Modula-3 PM3 er endnu en efterfølger til DEC SRC M3 (nu fusioneret til CM3).
  • EzM3 er en letvægts uafhængig compiler bygget oven på PM3. Udviklet sammen med CVSup
  • HM3 er efterfølgeren til PM3 (version 1.1.15), med POSIX Threading (NPTL) understøttelse.

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.

Litteratur

Nogle af disse bøger kan findes i udenlandske netbutikker. De fleste af dem er tilgængelige gratis på internettet.

  • Greg Nelson, red. Systemprogrammering med Modula-3 Den definitive reference om Modula-3-sproget med interessante artikler om objektorienteret systemsoftwarekonstruktion og en dokumentation af diskussionen, der fører til sprogets sidste funktioner.
  • Samuel P. Harbison, Modula-3 Let at bruge klasse lærebog.
  • Robert Sedgewick, Algoritmer i Modula-3
  • Laszlo Boszormenyi & Carsten Weich, Programmering i Modula-3: En introduktion til programmering med stil
  • Renzo Orsini, Agostino Cortesi Programmare in Modula-3: introduzione alla programmazione imperativa ea oggetti en italiensk bog om sproget, der forklarer dets hovedtræk.

Projekter, der bruger Modula-3

  • Operativsystemet SPIN ( en ) blev skrevet i modul-3. Kernel-grænseflader er kompatible med DEC Unix.
  • CVSup  er et program til synkronisering af repositories, også skrevet i Modul-3.

Noter

Links