Ada | |
---|---|
Semantică | multi- paradigma : competitivă , generalizată, imperativă , orientată pe obiecte , programare distribuită , paralelă |
Clasa de limba | limbaj de programare cu spectru larg [d] ,limbaj de programare cu mai multe paradigmeprogramare imperativ , limbajdeprogramareorientat pe obiecteșilimbaj de programare |
Tipul de execuție | compilate |
Aparut in | 1980 |
Autor |
|
Dezvoltator | Ishbia, Jean și S. Tucker Taft [d] [1] |
Eliberare | Ada 2012 (10 decembrie 2012 ) |
Versiune de testare | Ada 2012 [3] (noiembrie 2011 ) |
Tip sistem | static , strict , sigur , nominativ |
Implementări majore |
AdaCore GNAT , MapuSoft Ada-C/C++ Changer (AdaMagic) [4] , Compilatorul Green Hills Software Optimizing Ada 95, PTC ObjectAda [5] , Scorul DDC-I |
Dialectele | SPARK , profil Ravenscar |
A fost influențat | ALGOL 68 , Pascal , C++ (Ada 95), Smalltalk (Ada 95), Java (Ada 2005), Eiffel (Ada 2012) |
influențat | C++, Eiffel , M10, M9.3, MAYA, Seed7 , PL/SQL , Nim |
Site-ul web | adaic.org |
Fișiere media la Wikimedia Commons |
Ada ( Ada ) este un limbaj de programare creat în 1979-1980 ca parte a unui proiect al Departamentului de Apărare al SUA pentru a dezvolta un limbaj de programare unificat pentru sistemele încorporate (adică sisteme de control în timp real pentru sisteme automate). În primul rând, au avut în vedere sistemele de control la bord pentru instalațiile militare (nave, avioane, tancuri, rachete, obuze etc.). Dezvoltatorii nu au avut sarcina de a crea un limbaj universal, așa că deciziile luate de autorii lui Ada ar trebui luate în contextul caracteristicilor domeniului ales. Limba este numită după Ada Lovelace .
În forma sa originală, standardizată în 1983, Ada este un limbaj de programare structurat , modular , care conține instrumente de programare a proceselor paralele de nivel înalt. Sintaxa lui Ada este moștenită din limbi precum Algol sau Pascal , dar extinsă și făcută mai riguroasă și mai logică. Ada este un limbaj puternic tipizat , exclude lucrul cu obiecte care nu au tipuri , iar conversiile automate ale tipului sunt reduse la un minim absolut: este permisă turnarea implicită a valorii unui număr întreg comun sau a unui tip numeric real într-un tip numeric compatibil. [6] . În standardul din 1995, instrumentele de programare de bază orientate pe obiecte au fost adăugate limbajului , în standardul din 2007 aceste instrumente au fost completate, astfel încât Ada modernă este un limbaj de programare orientat pe obiecte.
Limbajul este insensibil la majuscule. Sintaxa este asemănătoare cu Algol, în spiritul limbajelor de la sfârșitul anilor 1970: toate structurile de control care încep cu un cuvânt cheie se termină cu un cuvânt cheie și vă permit să plasați orice număr de operatori în interior, ceea ce elimină dezavantajul adesea criticat inerent. în Algol-60 și Pascal: necesitatea utilizării frecvente a „paranteze operator” begin-end. Detaliile de sintaxă sunt concepute pentru a reduce șansa de erori accidentale. De exemplu, este interzisă folosirea mai multor litere de subliniere la rând în identificatori. Cuvintele cheie finale pentru diferite structuri de control sunt diferite: o instrucțiune condiționată ifse termină cu o combinație end if, bucle cu o combinație end loop, un operator cu alegere multiplă end caseetc. Gestionarea excepțiilor structurale este suportată la nivelul de sintaxă al limbajului .
Limbajul are un sistem de tip dezvoltat, atât încorporat, cât și generat de programator. Există multe modalități de a crea noi tipuri, limbajul acceptă două concepte diferite: „subtip” și „tip derivat”. Variabilele unui tip și ale unui subtip sunt compatibile, variabilele unui tip și tipul său derivat nu sunt.
Procedurile și funcțiile acceptă parametrii de intrare și ieșire, transmiterea parametrilor după nume și parametrii cu valori implicite. Este suportată redefinirea procedurilor, funcțiilor și operatorilor - crearea mai multor variante ale unei proceduri, funcție sau operator cu același nume, dar semnături diferite (tipuri și număr de parametri).
Programele sunt modulare, mecanismul de control al importului-export al descrierilor între module include două directive diferite: una pentru conectarea altui modul ( with), cealaltă pentru importul descrierilor acestuia ( use). De asemenea, este posibil să redenumiți modulul la import ( rename) - această opțiune vă permite să utilizați identificatori care sunt mai convenabil pentru programator pentru a desemna pachetul. Pachetele (unul dintre tipurile de module) pot conține un antet și o parte privată - ceea ce este conținut în ele nu este exportat și nu este disponibil pentru alte module. Mecanismul modulelor generalizate (generice) este suportat : pachete, proceduri și funcții care vă permit să descrieți algoritmi de procesare a datelor fără a specifica un anumit tip.
Structurile de suport pentru programarea paralelă sunt încorporate în limbaj : sunt acceptate conceptele de „sarcină” (un fragment de program executat în paralel), „intrare de sarcină” (un mijloc de sincronizare și comunicare a sarcinilor paralele), este suportat mecanismul de întâlnire (un protocol). pentru interacțiunea sarcinilor paralele prin introducerea uneia dintre ele), există un operator de alegere SELECTpentru organizarea interacțiunii condiționale între fire (alegerea unei sarcini paralele cu care să interacționeze, în funcție de disponibilitatea pentru un rendezvous și de alte condiții). În principiu, instrumentele de programare paralelă disponibile în limbaj sunt suficiente pentru a rezolva o clasă mare de sarcini care necesită procesare paralelă fără a recurge la instrumente externe, precum biblioteci suplimentare sau API-uri ale sistemului de operare.
Pentru a îndeplini cerințele de fiabilitate, limbajul este conceput astfel încât să fie detectate cât mai multe erori posibil în etapa de compilare . În plus, una dintre cerințele în dezvoltarea limbajului a fost lizibilitatea cât mai ușoară a textelor programelor , chiar și în detrimentul ușurinței scrisului [7] . Rezultatul acestei abordări a fost o sintaxă oarecum „grea” și multe restricții care sunt absente în cele mai comune limbaje de uz general (cum ar fi C și C++ ), de exemplu, aceeași tastare puternică . Acest lucru a dus la formarea ideii de Ada ca un limbaj complex, obscur și incomod de utilizat [8] .
Exemplu de program Salut, lume! »:
cu Ada.Text_IO ; procedura Bună ziua este folosirea Ada.Text_IO ; începe Put_Line ( "Bună ziua, lume!" ); sfarsit Buna ziua ;Aici, pentru a utiliza funcția, Put_Linepachetul care o conține este Ada.Text_IOimportat folosind constructul use, care face posibilă apelarea funcției după nume fără calificare - specificând numele pachetului care conține funcția din apel.
Dezvoltarea limbii a făcut parte dintr-o competiție internațională organizată și finanțată de Departamentul Apărării al SUA . Scopul dezvoltării a fost obținerea unui limbaj de programare care să devină unul unificat pentru dezvoltarea proiectelor comandate de departamentul militar, în principal pentru dezvoltarea de sisteme militare încorporate și pentru calculatoare militare mari (bazat pe procesorul iAPX 432 de la Intel ). Lucrările au început în 1975 cu formarea unui set de cerințe lingvistice care să satisfacă pe deplin dezvoltatorii de sisteme de acest tip. Lista inițială de cerințe, emisă sub numele de cod „Strawman” („Straw”), a fost înaintată spre revizuire unui număr de organizații și firme, timp de doi ani a fost rafinată constant, trecând prin „Woodenman” („Wooden”). , "Tinman" ("Tin"), "Ironman" ("Iron") și în cele din urmă s-a transformat într-un document final numit "Steelman" ("Steel"). Steelman a fost lansat în iunie 1978 [DoD 1978] [9] .
Chiar înainte de finalizarea finală a formării cerințelor, analiza a arătat că niciunul dintre limbajele de programare existente nu satisface suficient cerințele, așa că s-a luat decizia de a dezvolta un nou limbaj. Un concurs pentru crearea sa a fost anunțat în 1977 , dezvoltatorii au fost rugați să se bazeze pe una dintre cele trei limbi: Pascal , Algol-68 sau PL/1 . Din cele 15 proiecte depuse la concurs, 4 au fost selectate (toate bazate pe Pascal). Aceste proiecte au fost trimise pentru dezvoltare ulterioară. În etapa următoare, din 4 proiecte au fost selectate două, dintre care, după o nouă revizuire, unul a fost selectat. Această limbă a fost numită „Ada” - grupul care a dezvoltat-o, condus de francezul Jean Ishbia , a numit limba în onoarea Augustei Ada King Lovelace (1815-1852), fiica poetului George Byron , care a dezvoltat programe pentru computerul lui Babbage. și este considerat primul programator din lume.
În 1983, limba a fost standardizată oficial de ANSI . Standardul lingvistic ANSI /MIL-STD-1815-A-1983 a fost aprobat la 17 februarie 1983. Departamentul Apărării al SUA a făcut „Ada” o marcă înregistrată, interzicând eliberarea traducătorilor limbii care nu au trecut procedura oficială de testare pentru conformitatea cu standardele. Procedura a constat în rularea unui număr mare (mai mult de 1000) de programe de testare (așa-numitul set ACVC) prin intermediul compilatorului testat , pentru fiecare dintre acestea rezultatul testului a fost determinat fără ambiguitate: fie compilare cu succes, fie emiterea unui mesaj de eroare specific. Testarea a fost efectuată conform principiului „totul sau nimic” - dacă a existat o eroare în procesarea a cel puțin un caz de testare, se considera că compilatorul nu a trecut testul, iar testarea era valabilă numai pe platforma hardware și software de pe pe care s-a realizat. În acest fel, posibilitatea formării dialectelor limbii Adei a fost cioplită din răsputeri.
În 1987, limba Ada a fost standardizată oficial de ISO . De atunci, Departamentul Apărării al SUA a plasat limba în domeniul public .
Până în 1990, în lume existau deja aproximativ 200 de compilatoare care corespundeau standardului limbajului Ada.
În 1995, a fost adoptat un nou standard Ada, cunoscut sub numele de Ada95. Au fost introduse instrumente de programare obiect în limbaj. În plus, limbajul a fost completat cu instrumente mai avansate pentru interacțiunea cu programele scrise în alte limbi.
În martie 2007, au fost publicate modificări ale standardului Ada [10] . Au atins în principal posibilitățile de programare orientată pe obiecte : au fost introduse interfețe , a fost adoptată sintaxa pentru apelarea unei metode, care este comună pentru majoritatea limbajelor hibride, și au fost făcute o serie de completări.
În 2012, ISO a adoptat și a publicat un nou standard lingvistic [11] .
În 1984, jurnalistul sovietic Melor Sturua din ziarul Izvestia a dat următoarea evaluare a limbajului de programare Ada:
Limba Pentagonului este dușmanul lumii. Limba „Adei” este vocea iadului termonuclear... În limbajul „Adei” se aude un blestem asupra rasei umane.
- M. G. Sturua . 1984 și „1984” [12]În anii 1980, un grup de lucru privind limba Ada a fost organizat în cadrul Comitetului de Stat al URSS pentru știință și tehnologie . Grupul a fost implicat în studiul tuturor datelor deschise (și, conform zvonurilor, obținute prin informații secrete) despre limba lui Ada și a investigat posibilitatea și oportunitatea dezvoltării și utilizării Ada în URSS. Activitățile acestui grup au condus până la sfârșitul anilor 1980 la dezvoltarea compilatoarelor Ada pentru aproape toate computerele utilizate în URSS. Mai multe cărți despre limba Adei au fost publicate în limba rusă.
La Universitatea de Stat din Moscova s-a lucrat pentru a crea propriile pachete pentru testarea traducătorilor de anunțuri pentru conformitatea cu standardele. La Universitatea de Stat din Leningrad , pentru a crea un sistem Ada, a fost folosit sistemul Pallada, care a fost dezvoltat anterior pentru implementarea Algol-68, care a fost transferat la Ada. Sistemul conține un mediu de dezvoltare integrat, un compilator, un editor de text, un depanator, biblioteci, un sistem de control al versiunilor și un interpret de comenzi.
După prăbușirea URSS, lucrările la distribuirea Adei au fost practic întrerupte. Adevărat, au fost adoptate trei programe pentru dezvoltarea de software pe Ada (în Ministerul Apărării , Ministerul Aviației Civile și Ministerul Educației și Științei ), dar dezvoltarea lor este lentă și necoordonată. Drept urmare , limba Ada este puțin cunoscută în Rusia , majoritatea programatorilor ruși moderni o consideră o „limbă moartă” și nu știu nimic despre ea. Ada este folosită în Rusia și CSI de către entuziaștii individuali. Cu toate acestea, limbajul este folosit pentru dezvoltarea de software industrial. Există mai multe proiecte dezvoltate pe Ada și care lucrează în Rusia. Printre ei:
Încă de la înființare, Ada a fost criticată de unele autorități recunoscute în domeniul dezvoltării limbajului de programare, în primul rând pentru complexitatea sintaxei și volumul mare. În special, limbajul a fost criticat de Charles Hoare și Niklaus Wirth (care au participat cu proiectul lor la această competiție, dar au renunțat după prima etapă), precum și de Edsger Dijkstra .
Dijkstra se îndoia că un limbaj la fel de complex precum Ada poate fi văzut și gestionat.
Dacă Ada va emite un standard, este de dorit ca acesta să fie documentat fără ambiguitate. Cel puțin două grupuri au încercat să facă acest lucru; ca urmare, ambele au produs aproximativ 600 de pagini de text formal. Acest lucru este mult mai mult decât este necesar pentru a vă asigura că este imposibil să stabiliți măcar ferm că ambele documente definesc aceeași limbă. Eroarea în aparenta imposibilitate de administrare a acestor două documente nu constă în cele două grupuri care le-au compilat, nu în formalismul pe care l-au adoptat, ci doar în limbajul în sine: fără a oferi o definiție formală dacă dezvoltatorii săi pot ascunde că oferă un monstru de negestionat. . Că Ada va reduce problemele de programare și va crește fiabilitatea designurilor noastre până la limite acceptabile este doar unul dintre acele basme pe care doar oamenii cu experiență militară le pot crede.
— Science Fiction și realitatea științifică în informatică (Edsger W. Dijkstra, EWD952)Hoare și-a exprimat regretul că „zdrăngăniile și bibelourile au avut prioritate față de cerințele fundamentale de fiabilitate și siguranță” și a avertizat împotriva „o armată de rachete care zboară în direcția greșită din cauza unei erori nedetectate în compilatorul Ada”. Niklaus Wirth a vorbit mai rezervat, dar și negativ. El a spus: „Se aruncă prea mult în programator. Nu cred că după ce am studiat o treime din Ada, se poate lucra normal. Dacă nu stăpâniți toate detaliile limbii, atunci în viitor vă puteți împiedica de ele, iar acest lucru va duce la consecințe neplăcute . Jean Ishbia , liderul echipei de dezvoltare a Adei, în timp ce își exprimă „respectul și admirația” pentru Wirth, nu a fost de acord, spunând: „Wirt crede în soluții simple la probleme complexe. Nu cred în asemenea minuni. Problemele complexe necesită soluții complexe.”
Procedura de verificare a conformității compilatorului cu standardul lingvistic prin testare ridică, de asemenea, îndoieli. Din considerente generale, este clar că testarea poate găsi inconsecvențe, dar nu poate garanta corectitudinea. O confirmare practică a acestui lucru este faptul că compilatorii certificați, atunci când au fost testați pe un set diferit de teste, au constatat neconformitatea cu standardul [14] .
Susținătorii Adei susțin că singura alternativă la un limbaj mare și complex în proiectele mari este utilizarea mai multor limbaje compacte, care creează inevitabil probleme de compatibilitate, de care Ada a fost inventată pentru a scăpa. Ei observă, de asemenea, că noțiunea de complexitate în dezvoltarea Ada este doar parțial adevărată: scrierea unui program simplu în Ada durează mai mult timp decât în alte limbaje mai puțin formale, cum ar fi C , dar depanarea și întreținerea programelor, în special a programelor mari și complexe, este mult simplificat. Potrivit lui Stephen Zeiger de la Rational Software Corporation [15] , dezvoltarea de software în Ada este în general cu 60% mai ieftină, iar programul dezvoltat are de 9 ori mai puține defecte decât utilizarea limbajului C.
În practică, s-a dovedit că Ada, după ce a ocupat nișa destinată ei în dezvoltarea militară și conexe ale sistemelor încorporate, nu a depășit această nișă nici în Occident, nici în URSS, nici în spațiul post-sovietic. Există multe motive pentru aceasta. Oponenții limbii se bazează pe complexitatea și neajunsurile sale, susținătorii vorbesc, în primul rând, despre circumstanțele obiective ale apariției limbii și aspectele negative ale procesului de implementare a acesteia. Potrivit lui S. I. Rybin, cercetător senior la Universitatea de Stat din Moscova, consultant al AdaCore EU, expert în limbajul Ada al grupului de lucru ISO privind standardul lingvistic [14] , Ada își datorează eșecurile din două motive principale:
Cu toate acestea, conform unor previziuni prudente, cu hardware mai ieftin și proliferarea sistemelor încorporate cu software complex, piața de programe din Ada poate crește semnificativ:
… Ada se află destul de ferm în nișa sistemelor mari încorporate cu cerințe ridicate de fiabilitate și este puțin probabil să cedeze loc cuiva din această nișă în viitorul apropiat. Pe măsură ce performanța componentelor hardware crește în timp ce costul lor scade, sistemele încorporate devin din ce în ce mai complexe și se poate dovedi că piața potențială pentru aplicațiile Ada va crește în curând semnificativ.
— Interviu cu S.I. Rybina [14]În plus, Ada are, deși foarte limitate, aplicații în învățământul superior. Cursuri speciale despre Ada sunt predate la Universitatea de Stat din Moscova și la Universitatea Harkov. Cu toate acestea, conform aceluiași S.I. Rybin ,
... acum, în spațiul post-sovietic în domeniul industriei software și al educației, s-a dezvoltat un cerc vicios evident: în industrie practic nu știu despre Ada, respectiv, nu există nicio cerere din partea industriei pentru educație pentru antrenează specialiști Ada, iar din universități vin oameni noi în industrie, care practic nu știu nimic despre Ada.
O serie de sisteme de operare sunt scrise în Ada, printre care MaRTE Arhivat 10 iulie 2017 la Wayback Machine , RTEMS (un sistem open source dezvoltat de DARPA , Departamentul de Apărare al SUA , utilizat în sistemele de rachete și la bordul Mars Reconnaissance Orbiter ca un modulul radio de control „Electra”), Ravenskar , RTOS-32 . Mai multe proiecte pentru crearea de sisteme de operare pe Ada sunt în curs de dezvoltare, printre care - AuroraUX - un proiect de rescrie a nucleului OpenSolaris și apoi - DragonFly BSD , precum și un proiect de creare a unui sistem Lovelace pe microkernel -ul L4 .
Anterior, existau și alte sisteme de operare scrise în Ada, printre care - BiiN, Pulse, AdaOS.
În prezent, sistemul de operare Muen [16] este în curs de dezvoltare , scris în Ada și SPARK, OS educațional Ada Bare bones [17] , Microkernel Ada (TAMP [18] ) sunt folosite.
Nume | Companie | Versiune | Platforme țintă | Site-ul web |
---|---|---|---|---|
Compilatoare de proiecte DragonLace (compilatoare GNAT AUX și viitoare DRACO Ada) | proiect comunitar | Ada - toate versiunile limbii; versiuni de compilator: 4.9.x sau 6.3.x (pentru diverse platforme) | LLVM, DragonFly, FreeBSD, NetBSD, OpenBSD, OmniOS, Android | http://www.dragonlace.net/ Arhivat 31 martie 2018 la Wayback Machine |
Ada-C/C++ Changer (bazat pe tehnologia AdaMagic) | MapuSoft | Ada 83, Ada 95, un subset din Ada 2005 | C, C++ | www.mapusoft.com Arhivat 21 noiembrie 2016 la Wayback Machine |
Ada/Ed | Universitatea din New York | Ada 83 | MS-DOS x86 , UnixWare | www2.informatik.uni-stuttgart.de |
AdaMagic | SofCheck | Ada 95 | ? | www.sofcheck.com Arhivat 4 martie 2021 la Wayback Machine |
AdaMULTI | Software-ul Green Hills | Ada 83, Ada 95, C , C++ , Fortran | Solaris SPARC , GNU / Linux x86 , Windows | www.ghs.com Arhivat pe 15 ianuarie 2021 la Wayback Machine |
DEC Ada | Hewlett Packard | Ada 83 | openvms | h71000.www7.hp.com |
GNAT | AdaCore | Ada 83, Ada 95, Ada 2005, Ada 2012, C | Solaris SPARC, Linux x86/ x86-64 , Windows, Java Virtual Machine , altele | libre.adacore.com Arhivat pe 12 februarie 2005 la Wayback Machine |
ICC | Irvine Compiler Corporation | Ada 83, Ada 95 | DEC VAX / VMS , HP 9000/700 , Solaris SPARC, DEC Alpha OSF/1 , PC Linux, SGI IRIX , Windows | www.irvine.com Arhivat pe 2 mai 2009 la Wayback Machine |
Janus/Ada | Software RR | Ada 83, Ada 95 | SCO , UnixWare , Interactive , MS-DOS , Windows | www.rrsoftware.com Arhivat pe 21 ianuarie 2022 la Wayback Machine |
MAXAda | Concurente | Ada 95 | Linux/ Xeon , PowerPC | www.ccur.com Arhivat pe 3 septembrie 2011 la Wayback Machine |
ObjectAda | PTC | Ada 95, Ravenskar | Solaris SPARC, VxWorks , HP-UX , IBM AIX , Linux, Windows, Java Virtual Machine /Java cu suport pentru browser | www.ptc.com Arhivat 10 octombrie 2016 la Wayback Machine |
PowerAda | Sisteme OC | Ada 83, Ada 95 | Linux, AIX (Ada 95); IBM System 370/390 (Ada 83) | www.ocsystems.com Arhivat 24 august 2010 la Wayback Machine |
Apex rațional | IBM Rational | Ada 83, C, C++ | Solaris SPARC Linux | www-01.ibm.com Arhivat pe 27 septembrie 2009 la Wayback Machine |
SCOR | DDC-I | Ada 83, Ada 95, C, Fortran | Solaris SPARC, Windows | www.ddci.com |
XD Ada | SWEP-EDS | Ada 83 | OpenVMS Alpha/VAX | www.swep-eds.com |
XGC Ada | Software-ul XGC | Ada 83, Ada 95, C | Solaris SPARC, PC Linux, Windows ( Cygwin ) | www.xgc.com Arhivat din original pe 9 februarie 2013. |
LLVM ( Mașină virtuală de nivel scăzut ) | Grupul de dezvoltatori LLVM | pe majoritatea sistemelor de tip UNIX și Windows | llvm.org | |
A# (portul Ada pe platforma Microsoft .NET ) | Academia Forțelor Aeriene ale Statelor Unite ( GNU ) | Windows | asharp.martincarlisle.com Arhivat pe 2 iulie 2011 la Wayback Machine |
Cu excepția LLVM , GNAT și XGC (pentru unele platforme), compilatoarele de mai sus sunt plătite. Unele companii, cum ar fi Aonix , oferă demonstrații gratuite care sunt fie limitate în timp, fie în funcție de funcționalitate.
Mediile de dezvoltare NetBeans [19] și Eclipse au pluginuri pentru lucrul cu Ada.
Sintaxa lui Ada este reprodusă în mare măsură în limbaje precum PL/SQL (și mai târziu PL/pgSQL ), VHDL , SPARK .
În limbajele de programare E [20] și Clarity [21] , apoi în multe altele: de exemplu, în limbajele Erlang , Fortress , Chapel , X10 , D și Go , ideile de calcul distribuit, multitasking, multithreaded , care sunt implementate de limba în sine, au fost dezvoltate în continuare, și nu de biblioteci externe, care au fost utilizate pentru prima dată pe scară largă în practică în limbajul Ada.
Limbaje de programare | |
---|---|
|