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.
- Programul este un set de module - unități de compilare independente care pot fi compilate separat. În acest caz, modulul de program poate (dar nu trebuie) să fie împărțit în două părți: modulul de definire și modulul de implementare. Modulul de definiție este interfața externă a modulului, adică setul de nume de constante, variabile, tipuri, anteturi de procedură și funcții pe care le exportă și care sunt disponibile modulelor externe. Modulul de implementare conține codul programului, în special instanțierea descrierilor a tot ceea ce este enumerat în modulul de definiție. De exemplu, un tip de înregistrare poate fi declarat într-un modul de definiție doar cu numele său, dar într-un modul de implementare cu o structură completă. În acest caz, modulele externe pot crea valori de acest tip, pot apela proceduri și funcții care funcționează cu el, pot efectua atribuiri de variabile, dar nu au acces direct la structura valorii, deoarece această structură nu este descrisă în modulul de definiție. Dacă o structură este descrisă pentru același tip în modulul de definiții, atunci aceasta va deveni disponibilă. În plus față de modulele la nivel global, este permisă crearea de module locale în Modulul-2.
- Importul definițiilor descrise în alte module este complet controlat. Puteți importa module întregi de definiție, dar sintaxa vă permite să rafinați în mod semnificativ listele de import, cum ar fi importarea unor constante, variabile, proceduri și funcții specifice dintr-un modul, doar pe cele de care aveți nevoie.
- Toate facilitățile I/O sunt excluse din limbă. În schimb, sunt folosite module de bibliotecă, care au sarcina de a implementa I/O pe sisteme specifice. Cu toate acestea, există un set de biblioteci I/O standardizate care oferă funcțiile necesare pentru cazurile tipice (intrare/ieșire de tipuri de date de bază folosind un terminal text, I/O fișier).
- Au fost introduse în limbaj un minim de concepte și primitive pentru programarea cu mai multe fire și a fost adăugată și o bibliotecă standard care acceptă programe paralele .
- Mijloacele de acces direct la hardware-ul computerului sunt incluse, în special, este implementată o mapare directă a structurilor de date la memorie, inclusiv cu atribuirea directă a adresei.
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.
- Limba este sensibilă la majuscule - litere mari și mici în identificatori se disting. Toate cuvintele cheie sunt scrise cu litere mari.
- Sintaxa este făcută mai regulată și simplificată. Toate constructele sintactice, cu excepția buclei REPEAT-UNTIL, urmează principiul că un construct care începe cu un cuvânt cheie se termină cu un cuvânt cheie. În special, operatorul condiționat are forma generală
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
- ↑ ISO/IEC 10514-1:1996
- ↑ Wirt N. Programare în limbajul Modula-2. M.: Mir, 1987;
- ↑ 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.
- ↑ 1 2 Niklaus Wirth. „De la Modulus la Oberon” . InfoArt (1998). Consultat la 25 octombrie 2010. Arhivat din original la 19 septembrie 2011. (Rusă)
- ↑ O scurtă introducere în Departamentul de Matematică a Sistemelor. sprijinul CC RAS . Consultat la 30 noiembrie 2019. Arhivat din original la 11 septembrie 2019. (nedefinit)
- ↑ Koltashev A. A. Modula-2 în spațiul rusesc Copie de arhivă din 11 aprilie 2011 la Wayback Machine
- ↑ Pagina GNU Modula-2 . Consultat la 9 octombrie 2009. Arhivat din original pe 5 octombrie 2009. (nedefinit)
- ↑ 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ă
- Wirth N. Programare în limbajul Modula-2. Traducere din engleză. V. A. Serebryakova , V. M. Khodukina; Ed. V. M. Kurochkina . — M.: Mir, 1987. — 222 p.
- Wirt N. Algoritmi și structuri de date (versiunea Modul-2 a cărții), Moscova, Mir, 1989, ISBN 5-03-001045-9 (rusă), 0-13-022005-1 (eng)
- Ruslan Bogatyrev. Cronica Limbilor Pascal . PC World, #04/2001 (17 aprilie 2001). Preluat: 25 octombrie 2010. (Rusă)
- Christian K. Ghid de programare Modula-2. - M., Mir , 1989. - ISBN 5-03-001117-X - 463 p.
Link -uri