Modula-2

Modula-2
Clasa de limba ascunderea imperativă , structurată , modulară , de date și metode
Aparut in 1978
Autor Niklaus Wirth
Tip sistem static , puternic
Implementări majore

ETH Zurich (creat de Niklaus Wirth ), Gardens Point , p1 ,

XDS-x86 nativ , gm2 (GNU Modula-2)
Dialectele PIM2, PIM3, PIM4, ISO
A fost influențat Pascal , Mesa , ALGOL , Simula-67
influențat Modula-3 , Oberon , Ada , Fortran 90 , Lua , Zonnon , Modula-GM

Modula-2 (Modula-2) este un limbaj de programare de uz general , care este o dezvoltare a lui Pascal , dezvoltat de Niklaus Wirth în 1978 .

Scopurile și principiile dezvoltării limbajului

Limbajul Modula-2 a fost dezvoltat de Niklaus Wirth pentru a crea software de sistem pentru computerul Lilith ., a cărui dezvoltare a început în 1977 la Institutul de Informatică din Zurich . Acest lucru determină multe dintre caracteristicile sale. Limbajul a fost conceput inițial ca un instrument de programare a sistemelor industriale care vă permite să scrieți programe fiabile, ușor de înțeles și care pot fi întreținute. În același timp, limbajul, deși rămâne un limbaj de nivel înalt, cu tastare puternică și suport pentru toate instrumentele de programare fiabile, ar trebui să permită accesarea directă a hardware-ului, crearea unor programe de sistem specifice , cum ar fi gestionarea întreruperilor și driverele de dispozitiv și suport programarea proceselor care interacționează rulând în paralel .

Strămoșul imediat al lui Modula-2 a fost limbajul Modula , creat de Wirth în prima jumătate a anilor 1970 pe baza lui Pascal . Principalul plus, reflectat în numele limbajului, a fost capacitatea de a împărți programul în module - fragmente de cod separate care interacționează prin interfețe descrise în mod explicit. Sintaxa a fost, de asemenea, reproiectată și au fost adăugate instrumente de programare paralelă. Singura implementare experimentală a Modula a apărut în 1975 . Modulul poate fi considerat o versiune inițială, un fel de „versiune alfa” a Modula-2, sintactic aceste două limbi sunt foarte apropiate. În plus, conform lui Wirth, Modula-2 a fost influențat de limbajul Mesa ., dezvoltat la Xerox PARC .

Caracteristici generale

Limbajul Modula-2 este un limbaj de programare structural , modular , cu o sintaxă bazată pe limbajul Pascal, dar revizuit și îmbunătățit semnificativ. Principalele sale caracteristici sunt prezentate mai jos.

Limbajul este simplu ca structură - are doar 40 de cuvinte rezervate (pentru comparație, sunt 63 în Ada ); „Raportul lingvistic” oficial, care conține o descriere cuprinzătoare a Modula-2, are 40 de pagini (descrierea completă a versiunii prescurtate a PL / 1 durează aproximativ 200 de pagini).

Caracteristici de sintaxă

Cel mai simplu mod de a descrie caracteristicile Modula-2 este prin compararea acestuia cu limbajul Pascal. Cele mai importante diferențe, în afară de introducerea modulelor și a mecanismelor de export de descrieri gestionate, sunt următoarele.

IF THEN instrucțiuni ELSIF condiție THEN instrucțiuni ELSIF condiție THEN condiție ... instrucțiuni ELSE instrucțiuni END

Acest lucru a eliminat necesitatea utilizării constante a declarațiilor compuse BEGIN-ENDși a „scării” declarației IF pentru testarea condiției în mai multe etape.

  • Bucle WHILEși FOR, de asemenea, furnizează un corp dintr-un set de instrucțiuni și se termină cu cuvântul rezervat END.
  • S-a adăugat bucla necondiționată LOOP-END .
  • Atât procedurile, cât și funcțiile sunt declarate cu cuvântul cheie PROCEDURE.
  • S-a adăugat un câmp de tip BITSET- bit predefinit .
  • Operatorul de salt necondiționat GOTO a fost eliminat din limbă .
  • A fost adăugat un tip procedural, care face posibilă atribuirea de proceduri și funcții variabilelor. Mai târziu, această caracteristică a fost inclusă în Pascal, unde nu era disponibilă inițial.

Dialecte

Există două dialecte principale ale Modula-2. Primul - PIM (după titlul cărții lui Niklaus Wirth „Programarea în Modula-2”, unde a fost oferită o descriere detaliată a limbajului și a principalelor biblioteci de sistem), există în trei versiuni principale care au apărut secvenţial și diferă minim unele de altele. . Al doilea dialect major este ISO , care este standardizat de Organizația Internațională pentru Standardizare. Principalele diferențe dintre dialecte și descrierea originală a limbii sunt enumerate mai jos.

  • PIM2 (1983)
    • Necesită utilizarea obligatorie a directivei EXPORT în modulul de definiții.
    • Funcția SIZE este o funcție de bibliotecă și trebuie importată din modulul SISTEM .
  • PIM3 (1985)
    • S-a eliminat directiva EXPORT din modulele de definiție. Modificarea a fost motivată de faptul că întregul conținut al modulului de definiții este exportat, deci utilizarea EXPORT este redundantă.
    • Funcția SIZE este predefinită (disponibilă oriunde în program fără import).
  • PIM4 (1988)
    • S-a clarificat comportamentul operației MOD pentru operanzi negativi.
    • S-a adăugat o cerință conform căreia toate șirurile declarate ca ARRAY OF CHAR trebuie să fie terminate cu nul (ASCII NUL), chiar dacă șirul se întinde pe întreaga matrice.
  • ISO [1] (1996 și 1998)
    • S- au adăugat tipuri de date COMPLEX și LONGCOMPLEX .
    • Au adăugat excepții.
    • S-a adăugat un construct pentru codul de terminare a modulului FINALLY .
    • Bibliotecă I/O complet standardizată.
    • Au fost făcute clarificări care au înlăturat majoritatea ambiguităților descrierii inițiale, au fost făcute multe corecții și clarificări minore.

Avantaje și dezavantaje

Se poate spune cu siguranță că limbajul Modula-2, deși păstrează caracteristicile pozitive ale lui Pascal, are o serie de caracteristici care îl fac un limbaj mult mai puternic și mai potrivit atât pentru programarea sistemului, cât și a aplicațiilor . Principalele avantaje ale Modula-2 față de limbajele moderne de programare structurală sunt următoarele [2] :

  • Simplitatea și concizia definiției limbajului. O definiție completă de sintaxă în notația RBNF durează mai puțin de 3 pagini, diagrame complete de sintaxă  - 12 pagini, „mesajul oficial despre limbă” are o lungime de 40 de pagini, ceea ce este aproape un minim absolut pentru un limbaj universal cu astfel de capacități. Prin comparație, definiția oficială completă a limbii Ada este de 400 de pagini dactilografiate.
  • Sintaxă simplă, logică și uniformă, fără construcții redundante și elemente care provoacă greșeli de ortografie. Modula-2 este primul limbaj de programare directiv care elimină instrucțiunea GOTO .
  • Un mecanism bine gândit pentru împărțirea unui program în unități de compilare (module) cu interfețe descrise în mod explicit și importuri complet controlate, permițându-vă să importați atât module întregi, cât și elemente individuale, cu posibilitatea atât de calificat (cu numele modulului) cât și de necalificat. utilizarea numelor obiectelor importate.
  • Excluderea din limbajul facilităților de intrare-ieșire și a majorității procedurilor și funcțiilor standard și mutarea acestora în biblioteci, concepute ca module standard, care simplifică limbajul și compilatorul și oferă implementatorului libertate deplină în modul în care sunt procedurile și funcțiile standard. implementate.
  • Încorporarea în limbaj a mecanismelor de programare de nivel scăzut, inclusiv manipularea directă a memoriei și a datelor și indicatorilor netipizate, ceea ce face posibilă scrierea într-un limbaj de nivel înalt a majorității programelor de nivel scăzut care au fost scrise în mod tradițional în asamblare, cum ar fi în calitate de conducători de autovehicule şi de întreruperi .
  • Disponibilitatea mijloacelor elementare de programare paralelă, alese astfel încât să garanteze implementarea adecvată a acestora atât pe platforme multiprocesoare fizic, cât și pe platforme time-sharing.
  • Semnificativ pentru momentul creării limbajului a fost apariția tipului procedural și, în consecință, a variabilelor cărora procedurile pot fi atribuite dinamic.

Dezavantajele limbajului includ:

  • Slăbiciunea mecanismelor de programare paralelă , în special, organizarea interacțiunii proceselor paralele. Implementarea acestor instrumente este mutată către biblioteci de sistem, iar biblioteca standard conține doar cele mai simple instrumente de control al paralelizării. Un program paralel de pe Modulul-2 care utilizează controale de concurență care depășesc aceste limite pierde automat portabilitatea. [3]
  • Absența mecanismelor de gestionare a mapării tipurilor abstracte la memorie. [3]
  • Suportul pentru module locale complică inutil compilatorul. Motivele pentru utilizarea modulelor imbricate sunt limitarea domeniului de aplicare și evidențierea părților cu prioritate ridicată ale programului pentru a asigura sincronizarea în timpul procesării paralele, dar acestea pot fi implementate în alte mijloace, mai simple și mai evidente. [patru]
  • Împărțirea explicită într-un modul de implementare și un modul de definiție este o decizie controversată. Acesta complică munca compilatorului și forțează programatorul să sincronizeze modificările în diferite fișiere. Se poate observa că la descendentul Modula-2 - Oberon - o astfel de separare a fost abandonată, în schimb, într-un singur modul de program, elementele exportate (constituind interfața modulului) sunt pur și simplu marcate într-un mod special. [patru]

De asemenea, se poate observa absența în Modulul-2 a unui număr de caracteristici cunoscute și populare la momentul creării sale, care pot fi atribuite atât avantajelor, cât și dezavantajelor limbajului, în funcție de punctul de vedere al unui anumit critic:

Utilizare

În URSS, primele compilatoare pentru Modula-2 au apărut în 1982-83 pentru calculatoarele SM-4 și Elektronika-60. Traducătorul pentru BESM-6 a fost dezvoltat la Centrul de calcul al Academiei de Științe a URSS ( V.A. Serebryakov , V.G. Lyuty, A.N. Bezdushny) [5] . În același timp, au fost dezvoltate tehnologii de programare și au fost create primele pachete de programe aplicate bazate pe Modulul-2. O astfel de activitate a fost realizată, în special, la Facultatea de Cibernetică a MEPhI . VNTK „START” al Centrului de Calcul al Filialei Siberiei a Academiei de Științe a URSS a dezvoltat o serie de procesoare Kronos cu suport hardware pentru limbajul de programare Modula-2.

În general, putem spune că Modula-2 nu a primit distribuția și recunoașterea pe care le merita pentru calitățile sale. Limbajul a câștigat o anumită popularitate în mediul academic al Europei, a fost destul de popular în rândul programatorilor din URSS, dar nu a putut apăsa predecesorul său: noi implementări ale limbajului Pascal, care au inclus mijloacele de organizare a modulelor și mai târziu - programarea obiectelor instrumente , întotdeauna ocolite Modula-2 în popularitate. Sistemul Lilith, pentru care a fost creat Modula-2, nu a primit o mare popularitate și nu a putut ajuta Modula-2 să avanseze.

Distribuția extrem de largă a compilatoarelor Pascal ieftine și rapide de la Borland International și-a jucat rolul . Interesant, compilatorul Turbo Modula-2 pentru CP/M OS nu a fost creat doar de Borland, ci chiar a fost pus în vânzare în America de Nord și Europa de Vest. Cu toate acestea, conducerea companiei, în primul rând Philippe Kahn , a decis să renunțe la dezvoltarea acestui sistem pentru a nu crea un concurent pentru Turbo Pascal , extrem de de succes . Rezultatul acestei decizii a fost că vicepreședintele Borland Nils Jensen, unul dintre fondatorii companiei, a părăsit Borland cu echipa sa de dezvoltare în 1987, cumpărând drepturile pentru Turbo Modula-2. Compania JPI (Jensen & Partners International) creată de el a lansat sub marca TopSpeed ​​​​o linie de compilatoare pentru procesoarele din familia x86: Assembler, Modula-2, Pascal, C/C++, Ada.

În prezent, limbajul Modula-2 este utilizat pentru programarea software-ului de bord al sateliților lansati în cadrul proiectului GLONASS [7] . La sfârșitul anului 2010, compilatorul GNU Modula-2 a fost inclus oficial în colecția GCC [8] .

Limbi descendente

  • Modula-3  este o dezvoltare ulterioară a Modula-2, dezvoltată în comun de DEC și Olivetti Firms cu sprijinul de consultanță al Wirth.
  • Oberon  este o dezvoltare ulterioară a Modula-2, creată de Wirth în 1988. Oberon folosește gestionarea automată a memoriei cu colectarea gunoiului , a schimbat și o serie de caracteristici pe care, pe baza experienței de utilizare a Modula-2, autorul le-a considerat nereușite. S-a adăugat subsistem obiect implementat economic. Oberon, la rândul său, a devenit strămoșul unei întregi ramuri de limbaje: Oberon-07 , Oberon-2 , Component Pascal ( Component Pascal ), Active Oberon , OberonScript .
  • Zonnon  este un limbaj creat de Jürg Gutknecht pe baza Modula-2 și Active Oberon, cu adăugarea unui număr de elemente noi, atât originale, cât și împrumutate din alte limbi.
  • Alma-0  - Alma-0 este o versiune augmentată (multi-paradigma) a limbajului imperativ Modula-2.
  • Parallaxis [9]  este un limbaj de programare structurat pentru programarea paralelă a datelor (sisteme SIMD) dezvoltat de Thomas Brownle în 1989. Limbajul se bazează pe Modula-2 serial, dar este extins cu constructe paralele non-autonome.

Pe lângă descendenții direcți, multe alte limbi au moștenit elemente de sintaxă și arhitectură generală de la Modula-2 într-un grad sau altul. Influența lui Modula-2 a fost menționată de creatorii unor limbi atât de puțin similare, cum ar fi, de exemplu, Lua și Go . Influența lui Modula-2 (și, într-o mai mare măsură, descendentul său, limba Oberon) poate fi urmărită în Java, C#, dialecte Pascal târziu, cum ar fi Object Pascal și Delphi.

Note

  1. ISO/IEC 10514-1:1996
  2. Wirt N. Programare în limbajul Modula-2. M.: Mir, 1987;
  3. 1 2 Kurochkin V. M. Cuvânt înainte a editorului de traduceri la cartea: Wirth N. Programming in the Modula-2 language. M.: Mir, 1987.
  4. 1 2 Niklaus Wirth. „De la Modulus la Oberon” . InfoArt (1998). Consultat la 25 octombrie 2010. Arhivat din original la 19 septembrie 2011.
  5. O scurtă introducere în Departamentul de Matematică a Sistemelor. sprijinul CC RAS ​​​​. Consultat la 30 noiembrie 2019. Arhivat din original la 11 septembrie 2019.
  6. Koltashev A. A.  Modula-2 în spațiul rusesc Copie de arhivă din 11 aprilie 2011 la Wayback Machine
  7. Pagina GNU Modula-2 . Consultat la 9 octombrie 2009. Arhivat din original pe 5 octombrie 2009.
  8. Carte în limba engleză: Bräunl: Parallel Programming , Prentice-Hall, 1993
    Carte în limba engleză: Bräunl: Parallel Image Processing , Springer-Verlag, 2001
    Carte în germană: Bräunl: Parallele Programmierung , Vieweg-Verlag, 1993
    Carte în germană: Paralleung , Addeder Bilar: -Wesley, 1995
    Cartea germană: Bräunl: Massiv parallele Programmierung mit dem Parallaxis-Modell , Springer-Verlag, Informatik-Fachberichte, 1990
    Cartea rusă: Bräunl: Parallel Programming , Vyschshaya Shkola Publishers, Kiev, 1997

Literatură

Link -uri