Modula-3

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 17 martie 2021; verificarea necesită 1 editare .
Modula-3
Semantică imperativ , structural , modular , orientat pe obiecte , generic
Clasa de limba limbaj de programare , limbaj de programare orientat pe obiecte și limbaj de programare imperativ
Tipul de execuție compilate
Aparut in 1986 - 1988
Autor DEC SRC , Olivetti
Dezvoltator Digital Equipment Corporation
Eliberare 5.8.6 (14 iulie 2010 ) ( 14.07.2010 )
Tip sistem strict, static
Implementări majore CM3 , PM3 , EzM3 , HM3
A fost influențat Algol , Modula-2 , Modula-2+ , Oberon , Pascal
influențat C# , Java , Ocaml , Python , Nim
Site-ul web module3.org

Modula-3 (Modula-3, M3) este un limbaj de programare a sistemului , dezvoltarea limbajului Modula-2 . Dezvoltat la Centrul de Cercetare a Sistemelor (SRC) al DEC cu Olivetti .

Dezvoltatori: Luca Cardelli, Jim Donahue, Mick Jordan, Bill Kalsow și Greg Nelson. Limba nu este folosită pe scară largă în industrie, deși este folosită în mediul academic. În timpul dezvoltării, limbajul a fost puternic influențat de limbajul Modula-2+ folosit apoi de SRC pentru a scrie software pentru stația de lucru multiprocesor DEC Firefly .

Principalele caracteristici ale Modula-3 sunt: ​​simplitatea, siguranța tipului și capacitatea de utilizare pentru scrierea software-ului de sistem . Modula-3 acceptă programare generică , multitasking , gestionarea automată a memoriei ( colectare de gunoi ), gestionarea excepțiilor , programare orientată pe obiecte (inclusiv ascunderea datelor și a metodelor). Dezvoltatorii limbajului și-au urmărit obiectivul de a completa Modula-2 cu noi caracteristici ale limbajelor de programare moderne. În același timp, caracteristicile potențial periculoase și complexe, cum ar fi moștenirea multiplă și supraîncărcarea operatorului , nu au fost incluse în limbaj.

Istorie

Dezvoltarea Modula-3 a început în 1986. Maurice Wilkes i-a scris lui Niklaus Wirth cu câteva idei pentru o nouă versiune a Modulului. Wilkes, care lucrase anterior pentru DEC, s-a întors în Anglia și s-a angajat la Centrul de Cercetare Olivetti. Wirth era ocupat cu dezvoltarea noului limbaj de programare Oberon în acest moment , dar nu a refuzat ajutorul lui Wilkes. Descrierea Modula-3 a fost finalizată în august 1988 și revizuită în ianuarie 1989. În același timp, au apărut compilatori de la DEC SRC și Olivetti, și au început să apară și compilatori de la companii terțe.

În anii nouăzeci ai secolului XX, Modula-3 s-a răspândit mai ales în mediul academic, ca limbaj de predare a programării, și nu a fost aproape niciodată folosit în industrie. Motivul pentru aceasta ar putea fi moartea lui DEC, principalul dezvoltator al limbajului. În același timp, compilatorul comercial CM3 și mediul de dezvoltare integrat Reactor au fost propuse de Critical Mass Corporation. În 2000, Critical Mass a încetat. Modula-3 este susținut în prezent de Elego Software Solutions GmbH, care a moștenit codul sursă pentru compilatorul CM3 de la Critical Mass. Reactor IDE a fost redenumit în CM3 IDE și distribuit cu codul sursă. În martie 2002, Elego a primit codul sursă pentru compilatorul PM3, dezvoltat anterior la Ecole Polytechnique din Montreal.

Caracteristici ale limbii

Gestionarea excepțiilor în blocurile TRY ... EXCEPT ... END și TRY ... FINALLY ... END. Construcția EXCEPT este implementată în mod similar construcției CASE. Modula-3 acceptă și o buclă LOOP...EXIT...END.

S- a implementat suport pentru programarea orientată pe obiecte . Tipul de obiect este OBJECT. Acest tip diferă de înregistrări (RECORD) prin faptul că este un tip de referință și vă permite să creați proceduri asociate tipului (metode) și, de asemenea, acceptă supraîncărcarea metodei. Toate metodele sunt virtuale. De exemplu, construcția:

TIP A = OBIECTUL a: INTEGER; METODE p():=AP END;

definește un tip de obiect care conține un câmp a de tip întreg și o metodă p. Procedura AP este o implementare a metodei p și are următoarea formă:

PROCEDURA AP(self: A) = BEGIN … END AP;

Metoda este numită astfel: op();, unde o este o variabilă (obiect) de tip A.

Construcția REVEAL oferă un mecanism simplu, dar foarte puternic pentru a ascunde detaliile de implementare a obiectelor de la clienți.

Modula-3 este unul dintre puținele limbaje care necesită ca unitățile de programare importate din module externe să fie strict calificate. De exemplu, dacă modulul A folosește variabila x din modulul B, referința la această variabilă ar trebui scrisă în această formă: Bx Cu alte cuvinte, Modula-3 nu vă permite să importați toate obiectele exportate de niciun modul. Din acest motiv, este aproape imposibil să dezactivați programul prin adăugarea de noi funcționalități. Un număr mare de utilizatori pot extinde simultan programul fără teama că acest lucru va duce la eșecuri. Modula-3 distinge, de asemenea, între declararea unei semnături de metodă (blocul METHODS) și supraîncărcarea acesteia (blocul OVERRIDES).

Proprietăți limbii

  • Modulele constau dintr-o interfata (INTERFATA) si un corp (MODULU);
  • Modulele care conțin cod nesigur sunt marcate cu cuvântul cheie UNSAFE;
  • Gestionarea automată a memoriei ( colectare gunoi );
  • Tipuri de tastare puternică , compus (RECORD) și extensibil (OBJECT);
  • Gestionarea situațiilor excepționale;
  • Suport multithreading;
  • Generic (GENERIC, analog de șabloane C++).

Exemple

Salut , lume! ar putea arata asa:

MODUL Principal; IMPORTIO; ÎNCEPE IO.Put(„Bună ziua, lume\n”) END principal.

sau așa (folosind modulul de flux de ieșire):

MODUL Bună ziua EXPORTURI Principal; IMPORT Wr, Stdio; ÎNCEPE Wr.PutText(Stdio.stdout, „Bună, lume!\n”); Wr.Close(Stdio.stdout); SFÂRȘIT Bună ziua.

Unele module incluse în biblioteca standard

Similar cu limbajul C, majoritatea procedurilor de scriere a programelor din Modulul-3 sunt implementate în biblioteca standard. Operațiunile I/O sunt, de asemenea, implementate în biblioteca standard.

  • IO - interfață intrare-ieșire.
  • Rd/Wr sunt interfețe care implementează fluxuri de citire/scriere, respectiv.
  • Textul este o interfață pentru lucrul cu șiruri (tip TEXT).
  • Word - proceduri pentru lucrul cu numere întregi fără semn.
  • Fmt - Formatarea diferitelor tipuri de date pentru imprimare.

Biblioteca standard include și interfețe pentru lucrul cu numere în virgulă mobilă, dicționare, liste etc.

Programare la nivel scăzut

Modula-3, pe lângă referințe , acceptă și pointeri . Tipul ADDRESS este omologul C al tipului void* . Un pointer către o variabilă de tip întreg ar arăta astfel:

TYPE IntPtr = NUMĂR ÎNTREG REF FĂRĂ CURS;

Pentru a obține adresa unei variabile, utilizați funcția încorporată ADR(), care este analogă cu operatorul & din C. Colectorul de gunoi nu ține evidența indicatorilor (acest lucru este indicat de cuvântul UNTRACED). Toate pointeriile trebuie dealocate manual folosind procedura încorporată DISPOSE.

De asemenea, Modula-3 acceptă toate tipurile de date disponibile în limbajul C. Din acest motiv, codul Modulo-3 poate fi legat liber cu codul C. Toate definițiile de tip sunt conținute în modulul Ctypes.

Implementări majore

Majoritatea compilatoarelor sunt Open Source.

  • DEC SRC M3 este compilatorul original Modula-3 al lui DEC.
  • Critical Mass CM3 este cel mai avansat succesor al DEC SRC M3.
  • Polytechnique Montreal Modula-3 PM3 este un alt succesor al DEC SRC M3 (acum fuzionat în CM3).
  • EzM3 este un compilator independent ușor construit pe baza PM3. Dezvoltat împreună cu CVSup
  • HM3 este succesorul PM3 (versiunea 1.1.15), cu suport POSIX Threading (NPTL).

Toate implementările acceptă un număr mare de platforme (mai mult de 20). Tipurile de date sunt compatibile binare cu tipurile de limbaj C, ceea ce permite ca cele două limbi să fie utilizate împreună.

Literatură

Unele dintre aceste cărți pot fi găsite în magazinele online străine. Cele mai multe dintre ele sunt disponibile gratuit pe Internet.

  • Greg Nelson, ed. Programarea sistemelor cu Modula-3 Referința definitivă asupra limbajului Modula-3 cu articole interesante despre construcția software-ului sistemelor orientate pe obiecte și o documentare a discuției care duce la caracteristicile finale ale limbajului.
  • Samuel P. Harbison, Modula-3 Manual de clasă ușor de utilizat.
  • Robert Sedgewick, Algoritmi în Modula-3
  • Laszlo Boszormenyi & Carsten Weich, Programare în Modula-3: O introducere în programare cu stil
  • Renzo Orsini, Agostino Cortesi Programare in Modula-3 : introduzione alla programmazione imperativa ea object o carte italiană a limbii care explică principalele sale caracteristici.

Proiecte care folosesc Modula-3

  • Sistemul de operare SPIN ( en ) a fost scris în Modulul-3. Interfețele Kernel sunt compatibile cu DEC Unix.
  • CVSup  este un program de sincronizare a depozitelor, scris și în Modulul-3.

Note

Link -uri