Zonnon

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 31 martie 2015; verificările necesită 22 de modificări .
Zonnon
Clasa de limba imperativ , structural , modular , orientat pe obiecte , cu mai multe filete
Tipul de execuție compilate
Aparut in 2000
Autor Jürg Gutknecht [1]
Extensie de fișier .znn
Eliberare 1.3.0 ( 9 noiembrie 2012 )
Tip sistem static , puternic
Implementări majore ETHZ
A fost influențat Oberon activ
Licență MS-PL
Site-ul web zonnon.org
Platformă .NET

Zonnon  este un limbaj de programare de uz general bazat pe limbajul Modula-2 care acceptă obiecte active introduse în Active Oberon . Limbajul a introdus o nouă paradigmă de programare - modelul compozițional. Este folosită colectarea gunoiului , sunt cuprinse instrumente sintactice pentru programarea obiectelor, organizarea calculului paralel, redefinirea operatorilor și gestionarea excepțiilor. Limbajul a fost conceput de Jürg Gutknecht . În versiunea modernă a compilatorului ETH , limbajul are capacitatea de a rezolva probleme de algebră liniară cu o sintaxă similară cu matlab [2] [3] . Compilatorul de limbă este primul care a fost creat în întregime în afara Microsoft și complet integrat în Visual Studio împreună cu alte limbaje ale platformei .NET . [patru]

Istorie

Proiectul a ieșit din participarea oamenilor de știință de la Institutul Federal de Tehnologie Elvețian ( ETH ), specialiști Oberon în cadrul Proiectului 7 (Proiectul 7), o inițiativă prezentată în 1999 de Microsoft Research pentru a studia limbajul pentru compatibilitatea cu Platforma NET în anii (1999-2002) . [5] Autorul limbii este Jurg Gutknecht, profesor ETH, coleg cu Niklaus Wirth și co-autor al său despre limba Oberon . Proiectul Zonnon a fost dezvoltat la începutul anilor 2000 la Zurich , la ETH . Scopul proiectului a fost de a crea un limbaj de programare de nivel înalt, de uz general, cu cea mai simplă și mai clară sintaxă, dar având în același timp capacități suficiente pentru dezvoltarea de software de orice complexitate.

Proiectul Zonnon nu poate fi considerat o continuare a liniei de limbaje Pascal - Modula - Oberon - Oberon-2 - Componenta Pascal. Este, mai degrabă, o ramură paralelă , despărțită de linia menționată undeva la nivelul Modulei - Oberon. Strămoșul imediat al lui Zonnon este Active Oberon , dezvoltat cu participarea aceluiași Jürg Gutknecht. Dacă Niklaus Wirth, la crearea lui Oberon, a simplificat Modula-2 cât mai mult posibil, eliminând din el tot ceea ce era considerat nu prea necesar, atunci creatorii limbii Zonnon au luat o cale mai tradițională - au păstrat majoritatea trăsăturilor Modula- 2 și chiar a returnat ceva de la Pascal și, de asemenea, a completat limbajul cu câteva concepte și mecanisme noi.

Zonnon, conform susținătorilor acestui proiect, este mai simplu și mai puternic decât limbaje precum Ada, Java și C# [6] . Este conceput pentru a programa ușor și eficient sisteme paralele folosind noile procesoare multi-core care vor domina industria timp de un deceniu.

Caracteristici

Limbajul este sensibil la majuscule - diferența în cazul literelor în identificatori duce la diferența lor. A fost făcută o mișcare originală - cuvintele cheie (rezervate) sunt rezervate atunci când scrieți fie toate literele cu majuscule, fie toate literele cu litere mici. Adică acceptși ACCEPT sunt cuvinte cheie, dar aici AcCePt este doar un identificator valid.

Există 51 de cuvinte cheie în limbă (scrise fie doar cu litere mici, fie numai cu litere mari):
accept | activități | matrice | ca | așteaptă | începe | de | caz | const | definiție | div | face | altfel | elsif | sfârşitul | excepție | ieșire | fals | pentru | dacă | implementare | unelte | import | în | este | lansare | buclă | mod | modul | nou | nul | obiect | din | pe | operator | sau | procedura | primi | înregistrare | rafinamente | repeta | întoarcere | sine | trimite | apoi | la | adevărat | tip | până la | var | in timp ce

Dintre caracteristici, se poate remarca utilizarea semnului #ca simbol al operațiunii „nu este egală” (ca în Modulul-2), precum și prezența operației ** - „exponențiere”, - a revenit în funcțiune după mulți ani de uitare din limba Fortran .

Limbajul include un set de tipuri primitive - mai multe tipuri numerice, inclusiv un întreg fără semn, mai multe reale, un tip șir (instrumentele standard de limbaj tratează șirurile ca nemodificabile), caractere și boolean. Tipurile de intervale au fost abandonate, dar tipurile de enumerare au fost păstrate și utilizate în mod activ. Tipul de set ( SET) a fost păstrat, dar a devenit mai puțin generic - seturile pot consta acum doar din numere întregi în intervalul de la zero până la o limită superioară definită de implementare. Tipurile și seturile primitive pot fi folosite într-un program cu modificatori de dimensiune - dacă în descrierea unui obiect sau obiect un număr urmează numele tipului între acolade, acesta este perceput ca numărul de biți care trebuie alocați valorii. Cu toate acestea, această caracteristică (mai precis, valorile de dimensiune specifice permise pentru fiecare dintre tipuri) este dependentă de sistem, astfel încât utilizarea sa nu poate fi recomandată în programele care pretind a fi portabile.

Matricele sunt descrise în același mod ca și în Oberon - un tip de matrice poate avea o dimensiune nelimitată în orice set de dimensiuni; atunci când se creează o matrice reală, dimensiunile sale sunt specificate în mod explicit. Indicii de matrice pot fi fie numere întregi (limita inferioară este întotdeauna zero) sau enumerați.

Structura generală a programului, module, împărțirea modulului într-un modul de definiții și un modul de implementare, regulile de scriere a construcțiilor sintactice sunt împrumutate din Modula-2 practic fără modificări. Construcția „lungă” a operatorului condiționat IF-THEN-ELSIF-ELSE-END este suportată, toate tipurile de cicluri disponibile în Modul: REPEAT-UNIL, WHILE, FOR, LOOP, CASE selectie construcție. Din Pascal, operațiile standard de I/O primitive au fost returnate în limbaj Write, WriteLn, Read, ReadLn(care au fost mutate în biblioteca standard din Modulul-2 ).

În plus, limbajul are:

Principala inovație conceptuală a lui Zonnon, în comparație cu Modula și Oberon, a fost introducerea obiectelor active. În majoritatea limbajelor de programare, un obiect este pur și simplu o colecție de date și metode de procesare care este utilizată de program după cum este necesar. Obiectele active, în plus, au propriul comportament, adică fiecare obiect activ are propriul său fir de execuție independent, care interacționează cu alte fire prin instrumente de schimb de limbaj, conform protocoalelor descrise pentru ele. În Zonnon, a devenit posibil să se descrie obiectele active și ordinea interacțiunii lor prin mijloace de limbaj, ceea ce face posibilă, dacă este necesar, formarea unui program ca un set de obiecte active care funcționează și interacționează independent.

Exemplu de program

Exemplu de modul ; (*acesta este un comentariu*) var x , y , sum : integer ; începe scrierea ( "Introduceți X : " ) ; readln ( x ) ; scrieți ( "Introduceți Y : " ) ; readln ( y ) ; suma : = x + y (*calculați suma a două numere*) scriețiln ( " X + Y = " , suma ) ; sfârşit Exemplu .

Acest program calculează suma a două numere introduse de la tastatură.

Model compozițional

Zonnon folosește modele de moștenire compozițională bazate pe agregare. De obicei, un obiect (sau modul) constă dintr-un număr de componente funcționale, fiecare dintre acestea fiind prezentată clienților sub forma unei definiții abstracte. Un set de definiții, precum și interfața proprie a unui obiect (adică colecția tuturor elementelor publice ale unui obiect) constituie interfața dintre un obiect și clienții săi. Acest lucru vă permite să realizați avantajele programării modulare și componente și, important, să puteți suporta moștenirea unică și multiplă (fără dezavantajele implementării acesteia din urmă în C++), polimorfism, rafinament și agregare, delegare la nivel a semnăturilor de metodă.

Avantaje și dezavantaje

Este greu de definit fără ambiguitate anumite caracteristici ale limbajului ca avantaje și dezavantaje - o astfel de evaluare depinde în mare măsură de punctul de vedere al evaluatorului. În acest sens, ar fi potrivit să comparăm Zonnon cu limbi apropiate acestuia.

În comparație cu Pascal și Modula-2, Zonnon a devenit mult mai puternic, dar în același timp mai voluminos și mai complex. Creșterea puterii s-a realizat datorită includerii de noi construcții sintactice. Facilități de procesare paralelă (în cazul lui Zonnon, acestea nu sunt doar construcțiile sintactice în sine, ci și principiul general de construire a programelor ca seturi de obiecte active) vă permit să transferați operațiuni de rutină la compilator. Păstrarea principiului modular al programării permite ca programele să fie scrise dintr-o dată fără a utiliza programarea orientată pe obiecte , ceea ce este important în scopuri educaționale. A fost introdus un nou model compozițional, dar susținătorii POO pot folosi și obiecte. Au fost introduse facilități de manipulare excepționale. Evaluarea comparativă a limbilor va depinde de cât de semnificative sunt considerate aceste două avantaje.

Există opinii diferite despre instrumentele de procesare paralelă: unii teoreticieni și practicieni cred că instrumentele de programare paralelă nu ar trebui introduse deloc în limbaj, iar suportul din bibliotecile de sistem este suficient pentru ei, alții subliniază că astfel de biblioteci ar trebui să fie absolut standard, adică, devin totuși parte a limbajului, altfel programele care le folosesc își vor pierde portabilitatea (pe de altă parte, portabilitatea nu este cu adevărat necesară atât de des). În orice caz, pentru un programator, valoarea mecanismelor de procesare paralelă ale lui Zonnon este în mare măsură determinată de măsura în care acesta este pregătit să accepte modelul obiectelor active propus de limbaj ca element principal al programului.

De asemenea, nu există un consens cu privire la mecanismul de gestionare a excepțiilor. Niklaus Wirth a refuzat să introducă un astfel de mecanism în Oberon, considerându-l inutil, deoarece sistemul Oberon, pentru care a fost dezvoltat acest limbaj, nu are nevoie de el. În general, există o opinie că majoritatea problemelor cu reacția programelor la posibile erori sunt complet rezolvate, fără excepții, iar acest mecanism nu este gratuit - de regulă, trebuie să plătiți pentru capacitatea de a prinde orice eroare cu performanța programului. . Pe de altă parte, gestionarea excepțiilor este convenabilă și a devenit acum obișnuită, iar pierderile de performanță nu sunt atât de mari (sau cerințele de viteză nu sunt atât de critice) încât să renunțe la comoditatea dezvoltării.

Inovațiile rămase ale lui Zonnon, în special, o sintaxă OOP mai dezvoltată, interfețe, indexare, proprietăți, redefinirea operatorilor, cu greu ar trebui considerate fundamentale. Pe de o parte, complică limbajul și tot ceea ce îți permit să faci se poate face aproape la fel de ușor și fără ele. Pe de altă parte, trebuie menționat că în acest caz aceste fonduri au fost implementate destul de economic. Până la urmă, dacă comparăm Zonnon cu Object Pascal, care s-a dezvoltat aproximativ după aceeași schemă - suplimentând limbajul sursă cu noi mecanisme la modă, putem observa că Zonnon este la același nivel cu Object Pascal în ceea ce privește capabilitățile, ocolindu-l în instrumente de procesare paralelă, dar rămânând totuși mai simple.

Implementări

Implementarea limbajului de la bun început nu a mers pe calea creării propriului mediu de dezvoltare integrat și mediu de suport, ca în cazul limbajului Oberon, ci pe calea integrării cu platforma .NET lansată și întreținută de Microsoft. Această abordare a oferit o creștere a vitezei de implementare prin eliminarea dezvoltării propriului mediu și a sistemului de bibliotecă și, de asemenea, le-a oferit programelor acces automat la bibliotecile de aplicații și de sistem ale mediului .NET. Dezavantajele acestei opțiuni de implementare includ dependența dezvoltării de software extern care nu se află sub controlul implementatorului limbajului.

Cu toate acestea, în cadrul aceleiași implementări .NET, există o variantă a unui mediu de dezvoltare multiplatformă care este integrată în Eclipse și utilizează implementarea Mono gratuită a .NET care poate funcționa sub Linux.

Pentru Windows, există și cel mai simplu mediu de dezvoltare nativ ETH Zonnon Builder , care include un editor de text cu evidențiere de sintaxă, instrumente de construire a proiectelor și instrumente simple de control al versiunilor.

Primul compilator a fost creat la ETH pentru platforma Microsoft .NET de Evgeny Zuev. În 2005, a fost creat și un pachet software care integrează un compilator și un sistem CASE care suportă proiectarea programelor Zonnon prin construirea de diagrame în limbajul UML 2.0 în mediul de dezvoltare Microsoft Visual Studio .NET. Instrumentul rezultat acceptă standardul pentru ciclul de dezvoltare software MS Visual Studio .NET în limbajul Zonnon folosind UML, inclusiv construcția inversă a descrierii UML conform codului proiectului.

Link -uri

Note

  1. Pagina personală a lui Jürg Gutknecht
  2. Extensie de sintaxă de Nina Gonova: Extensie matematică a limbajului de programare Zonnon. Buletinul Universității Nijni Novgorod. N. I. Lobachevsky, 2010, 3-1, ISSN 1993-1778
  3. Începeți cu matematica . Consultat la 13 februarie 2011. Arhivat din original la 30 martie 2018.
  4. [1] Arhivat pe 9 noiembrie 2011 la Wayback Machine , UNN
  5. László Böszörményi, Peter Schojer: Modular Programming Languages, Joint Modular Languages ​​​​Conference, JMLC 2003, Klagenfurt, Austria, 25-27 august 2003, Proceedings Springer 2003, p.132
  6. Fiabilitate prin proiectare (downlink) . Consultat la 13 februarie 2011. Arhivat din original pe 26 septembrie 2017.