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 ) |
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.
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.
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).
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.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.
Biblioteca standard include și interfețe pentru lucrul cu numere în virgulă mobilă, dicționare, liste etc.
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.
Majoritatea compilatoarelor sunt Open Source.
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ă.
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.
Limbaje de programare | |
---|---|
|