Modula-3

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. március 17-én felülvizsgált verziótól ; az ellenőrzéshez 1 szerkesztés szükséges .
Modula-3
Szemantika kötelező , strukturális , moduláris , objektumorientált , általános
Nyelvóra programozási nyelv , objektum-orientált programozási nyelv és kötelező programozási nyelv
A végrehajtás típusa összeállított
Megjelent 1986-1988 _ _
Szerző DEC SRC , Olivetti
Fejlesztő Digital Equipment Corporation
Kiadás 5.8.6 (2010. július 14. ) ( 2010-07-14 )
Típusrendszer szigorú, statikus
Főbb megvalósítások CM3 , PM3 , EzM3 , HM3
Befolyásolt Algol , Modula-2 , Modula-2+ , Oberon , Pascal
befolyásolta C# , Java , Ocaml , Python , Nim
Weboldal module3.org

A Modula-3 (Modula-3, M3) egy rendszerprogramozási nyelv , a Modula-2 nyelv fejlesztése . A DEC Rendszerkutató Központjában (SRC) fejlesztették ki Olivettivel .

Fejlesztők: Luca Cardelli, Jim Donahue, Mick Jordan, Bill Kalsow és Greg Nelson. A nyelvet nem használják széles körben az iparban, bár a tudományos körökben használják. A fejlesztés során a nyelvet erősen befolyásolta a Modula-2+ nyelv, majd az SRC használta a DEC Firefly többprocesszoros munkaállomás szoftverének írásához .

A Modula-3 főbb jellemzői a következők: egyszerűség, típusbiztonság és rendszerszoftver írására való használhatóság . A Modula-3 támogatja az általános programozást , a multitaskingot , az automatikus memóriakezelést ( szemétgyűjtés ), a kivételkezelést , az objektumorientált programozást (beleértve az adatok és módszerek elrejtését). A nyelv fejlesztői azt a célt tűzték ki, hogy a Modula-2-t a modern programozási nyelvek újdonságaival egészítsék ki. Ugyanakkor a potenciálisan veszélyes és összetett funkciók, mint például a többszörös öröklődés és az operátor túlterhelése , nem szerepeltek a nyelvben.

Történelem

A Modula-3 fejlesztése 1986-ban kezdődött. Maurice Wilkes írt Niklaus Wirthnek néhány ötlettel a modul új verziójával kapcsolatban. Wilkes, aki korábban a DEC-nél dolgozott, visszatért Angliába, és az Olivetti Kutatóközpontban helyezkedett el. Wirth ebben az időben az új Oberon programozási nyelv fejlesztésével volt elfoglalva , de nem utasította vissza Wilkes segítségét. A Modula-3 leírása 1988 augusztusában készült el, és 1989 januárjában felülvizsgálták. Ezzel egy időben megjelentek a DEC SRC és az Olivetti fordítói, és megjelentek a külső cégek fordítói is.

A XX. század kilencvenes éveiben a Modula-3 főként az akadémiai környezetben terjedt el, mint programozásoktatási nyelv, az iparban pedig szinte soha nem használták. Ennek oka a nyelv fő fejlesztőjének, DEC-nek a halála lehet. Ugyanakkor a CM3 kereskedelmi fordítóprogramot és a Reactor integrált fejlesztői környezetet javasolta a Critical Mass Corporation. 2000-ben a Critical Mass megszűnt. A Modula-3-at jelenleg az Elego Software Solutions GmbH támogatja, amely a CM3 fordító forráskódját a Critical Mass-tól örökölte. A Reactor IDE-t most átnevezték CM3 IDE-re, és forráskóddal terjesztették. 2002 márciusában az Elego megkapta a PM3 fordítóprogram forráskódját, amelyet korábban az Ecole Polytechnique de Montrealban fejlesztettek ki.

Nyelvi funkciók

Kivételek kezelése a TRY ... EXCEPT ... END és TRY ... FINALLY ... END blokkban. Az EXCEPT konstrukció a CASE konstrukcióhoz hasonlóan valósul meg. A Modula-3 támogatja a LOOP...EXIT...END hurkot is.

Megvalósított támogatás az objektum-orientált programozáshoz . Az objektum típusa OBJECT. Ez a típus abban különbözik a rekordoktól (RECORD), hogy referenciatípus, és lehetővé teszi a típushoz (metódusokhoz) társított eljárások létrehozását, valamint támogatja a metódusok túlterhelését. Minden módszer virtuális. Például a konstrukció:

A TÍPUS = a OBJEKTUM: INTEGER; MÓDSZEREK p():=AP VÉGE;

definiál egy objektumtípust, amely egy egész típusú a mezőt és egy p metódust tartalmaz. Az AP eljárás a p metódus megvalósítása, és a következő formájú:

ELJÁRÁS AP(saját: A) = BEGIN … END AP;

A metódust így hívjuk: op();, ahol o egy A típusú változó (objektum).

A REVEAL konstrukció egyszerű, de nagyon hatékony mechanizmust biztosít az objektum megvalósítás részleteinek elrejtésére az ügyfelek elől.

A Modula-3 azon kevés nyelvek egyike, amelyhez a külső modulokból importált programozási egységek szigorú minősítése szükséges. Például, ha az A modul a B modul x változóját használja, akkor erre a változóra való hivatkozást a következő formában kell megírni: Bx Más szóval, a Modula-3 nem teszi lehetővé az összes modul által exportált objektum importálását. Emiatt szinte lehetetlen letiltani a programot új funkciók hozzáadásával. Nagyszámú felhasználó egyidejűleg bővítheti a programot anélkül, hogy félne attól, hogy ez meghibásodásokhoz vezet. A Modula-3 különbséget tesz a metódusaláírás deklarálása (a METHODS blokk) és a túlterhelés (az OVERRIDES blokk) között is.

Nyelvi tulajdonságok

  • A modulok egy interfészből (INTERFACE) és egy törzsből (MODULE) állnak;
  • A nem biztonságos kódot tartalmazó modulok az UNSAFE kulcsszóval vannak megjelölve;
  • Automatikus memóriakezelés ( szemétgyűjtés );
  • Erős gépelés , összetett (RECORD) és bővíthető (OBJECT) típusok;
  • Rendkívüli helyzetek kezelése;
  • Többszálú támogatás;
  • Generics (GENERIC, a C++ sablonok analógja).

Példák

szia világ! így nézhet ki:

MODUL Fő; IMPORTIO; KEZDŐDIK IO.Put("Hello World\n") END fő.

vagy így (a kimeneti adatfolyam modul használatával):

MODUL Hello EXPORT Főoldal; IMPORT Wr, Stdio; KEZDŐDIK Wr.PutText(Stdio.stdout, "Hello, World!\n"); Wr.Close(Stdio.stdout); VÉGE Hello.

Néhány modul a szabványos könyvtárban

A C nyelvhez hasonlóan a 3. modulban a legtöbb programírási eljárás a szabványos könyvtárban valósul meg. Az I/O műveletek a szabványos könyvtárban is megvalósulnak.

  • IO - input-output interfész.
  • Az Rd/Wr olyan interfészek, amelyek olvasási/írási adatfolyamokat valósítanak meg.
  • A szöveg egy felület a karakterláncokkal való munkavégzéshez (TEXT típusú).
  • Word - eljárások előjel nélküli egész számokkal való munkavégzéshez.
  • Fmt - Különféle típusú adatok formázása nyomtatáshoz.

A szabványos könyvtár interfészeket is tartalmaz a lebegőpontos számok, szótárak, listák stb.

Alacsony szintű programozás

A Modula-3 a hivatkozásokon kívül a mutatókat is támogatja . A ADDRESS típus a void* típus C megfelelője . Egy egész típusú változóra mutató mutató így néz ki:

TÍPUS IntPtr = NYOMTALAN REF INTEGER;

Egy változó címének megszerzéséhez használja az ADR() beépített függvényt, amely analóg a & operátorral a C-ben. A szemétgyűjtő nem tartja nyilván a mutatókat (ezt az UNTRACED szó jelzi). Minden mutatót manuálisan kell felszabadítani a DISPOSE beépített eljárással.

Ezenkívül a Modula-3 támogatja a C nyelven elérhető összes adattípust. Emiatt a Modulo-3 kód szabadon összekapcsolható C kóddal. Az összes típusdefiníciót a Ctypes modul tartalmazza.

Főbb megvalósítások

A legtöbb fordító nyílt forráskódú.

  • A DEC SRC M3 a DEC eredeti Modula-3 fordítója.
  • A Critical Mass CM3 a DEC SRC M3 legfejlettebb utódja.
  • A Polytechnique Montreal Modula-3 PM3 a DEC SRC M3 (most a CM3-ba egyesült) utódja.
  • Az EzM3 egy könnyű, független fordító, amely a PM3 tetejére épül. A CVSup-pal együtt fejlesztve
  • A HM3 a PM3 utódja (1.1.15-ös verzió), POSIX Threading (NPTL) támogatással.

Minden megvalósítás nagyszámú (több mint 20) platformot támogat. Az adattípusok binárisan kompatibilisek a C nyelvtípusokkal, ami lehetővé teszi a két nyelv együttes használatát.

Irodalom

E könyvek egy része külföldi webáruházakban is megtalálható. Legtöbbjük ingyenesen elérhető az interneten.

  • Greg Nelson, szerk. Rendszerprogramozás Modula-3 segítségével A végleges hivatkozás a Modula-3 nyelvre érdekes cikkekkel az objektum-orientált rendszerszoftverek felépítéséről, valamint a nyelv végső jellemzőihez vezető vita dokumentációjával.
  • Samuel P. Harbison, Modula-3 Könnyen használható osztálytankönyv.
  • Robert Sedgewick: Algoritmusok a Modula-3-ban
  • Boszormenyi László és Carsten Weich, Programozás a Modula-3-ban: Bevezetés a stílusos programozásba
  • Renzo Orsini, Agostino Cortesi Programare in Modula-3 : introduzione alla programzione imperativa ea oggetti egy olasz könyv a nyelvről, amely elmagyarázza annak főbb jellemzőit.

Projektek Modula-3 használatával

  • Az operációs rendszer SPIN ( en ) a Modul-3-ban íródott. A kernel interfészek kompatibilisek a DEC Unixszel.
  • A CVSup  egy program a lerakatok szinkronizálására, szintén a Modul-3-ban íródott.

Jegyzetek

Linkek