Meny
Är gratis
registrering
Hem  /  / Födelsedag för programmeringsspråket helvetet. Vill veta allt

Födelsedag för programmeringsspråkshelvetet. Vill veta allt

Sergey Bobrovsky

Detta språks historia börjar inte 1975, när det amerikanska försvarsdepartementet (MoD) beslutade att börja utveckla ett enhetligt programmeringsspråk för de amerikanska väpnade styrkorna, och senare för hela NATO. Dess historia börjar med namnet, för Ada är namnet på Augusta Ada Lovelace, som anses vara den första programmeraren, dotter till den engelska poeten Byron och en viss Anabella Milbank, som hennes man skildes med för alltid en månad efter hennes födelse dotter, som föddes den 10 december 1815. I allmänhet är cybernetikens historia höljd i ett mörkt mysterium, och det är bara genom fragmentariska fakta som man kan bedöma att grundarna av denna vetenskap under de senaste tvåhundra åren var olika mystiker och ockultister, med början August de Morgan, en av lärarna i Ada, och slutar med Norbert Wieners medarbetare som studerade metoderna för att bilda opinion och manipulation.

Efter att Charles Babbage konstruerat sin mekaniska dator, skrev Ada det första programmet för henne att beräkna Bernoulli-koefficienterna. I framtiden utvecklade hon en verklig teori om programmering, introducerade begreppet en cykel och några fler nyckeltermer som studenter vid cybernetiska fakulteter studerar nästan bokstavligen idag! Idag är Ada känd för alla som den första programmeraren – och inget mer, men jag undrar varför en ung tjej har så unika förmågor? Hon svarade själv uppriktigt på denna fråga: "Jag svär vid djävulen att jag inom 10 år kommer att suga en viss mängd livsviktigt blod från universums mysterier, och på ett sätt som vanliga dödliga sinnen och läppar inte kunde göra. skrämmande energi och styrkan ligger fortfarande outnyttjad i min lilla smidiga varelse ... ". Det fanns dock inga sponsorer för datorprojektet - det fanns inga kärnvapenmissiler ännu, och Ada, efter att ha förlorat hela sin förmögenhet på loppen och hamnat i en smutsig historia, dog vid 37 års ålder, som sin berömda far.

Därför är det en mycket kontroversiell fråga om amerikanerna borde ha prisat Ada så mycket genom att använda hennes namn som namn på ett så ambitiöst projekt.

Men tillbaka till själva språkets historia. Fem år efter projektets start valde hundratals experter ut från 17 varianter det enda språket som uppfyller kraven i MO, utvecklat av en liten grupp under ledning av den begåvade vetenskapsmannen Jean Ishbia. Den slutliga versionen av den internationella standarden ISO 8652: 1987 publicerades 1987. Enligt officiella rapporter deltog alla de bästa specialisterna i världen inom programmeringsområdet i skapandet och förbättringen av detta språk, vilket dock väcker tvivel. Detta, till exempel, bekräftas av frånvaron av konceptet med ett objekt i den ursprungliga versionen av Ada och bristen på deltagande, av uppenbara skäl, i detta projekt av sovjetiska programmerare.

Tiotals miljarder dollar har investerats i utvecklingen av Adas infrastruktur över hela världen. Detta ledde till uppkomsten av ambitiösa uttalanden som "1900-talet kommer att passera under Adas tecken", men som vanligt har livet satt allt på sin plats.

Tyvärr för det amerikanska försvarsdepartementet (och följaktligen, lyckligtvis för USA:s "potentiella motståndare"), slutfördes utvecklingen av en tydlig standard för detta språk och skapandet av effektiva kompilatorer precis vid den tiden (tidigt 80-tal), när programvaran industrin höll redan på att hända vid horisonten, nytt C++-språk med objektideologi. Nu är det svårt att säga vad Adas utvecklingskommitté kände, med tanke på den växande populariteten för C ++ och det gamla, väl bortglömda, objektbaserade tänkandets paradigmet. Men de tilldelade medlen hade redan förbrukats, standarden hade skapats och det fanns ingen väg tillbaka.

Strukturen hos Ada är mycket lik Pascal, eller mer exakt, Modula. Syntaxen för de flesta operatorer och beskrivningar är nästan identisk med Modulas, även om den dök upp nästan samtidigt som Ada, och det är svårt att säga vem som påverkade vem eller om alls. Särskilt i Ada lades det till ganska många olika tillägg, så detta språk kan inte kallas kompakt, i jämförelse med samma Pascal. När det gäller antalet möjligheter är det mer sannolikt att det liknar PL / 1. Men eftersom huvudvikten för skaparna av Ada låg på att möta önskemålen från de amerikanska "första avdelningarna", medlen för datasekretess (synlighet) och möjligheten att skapa separata block med endast specifikationer (gränssnittsbeskrivningar av moduler) från andra utvecklare var de mest perfekta för sin tid. Till exempel, programmeraren som faktiskt skrev koden för att beräkna banan för en kryssningsmissil hade ingen aning om var och för vilka ändamål hans modul skulle användas, även om han hade tillgång till de nödvändiga specifikationerna för andra anställda och kunde felsöka sin kodsektion utan några problem. På grund av den strikta avgränsningen av tillgång till olika nivåer specifikationer, ibland är det till och med omöjligt att avgöra för vad och med vilka medel denna procedur kommer att kallas. Denna önskan om oberoende mjukvaruutveckling har dock lett till ett mycket komplext system av relationer mellan specifikationerna för moduler och uppkomsten av några "hål" som kan orsaka biverkningar, vars närvaro dock det amerikanska försvarsdepartementet fann det. till och med användbart.

Inslagen i datatypning stärktes avsevärt, liksom själva typerna var mer formaliserade. Alla I/O-funktioner har tagits bort från standardsyntaxen och undantagshantering har blivit en integrerad del av språket. Dessutom pressades styrkan hos kontrollkonstruktioner till det yttersta, vilket gjorde Adu till det mest avancerade av de andra Pascal-liknande språken.

Borland släppte snart sin Turbo Pascal, där konceptet med en modul byggdes, och förde sin version av Pascal närmare Ada när det gäller kapacitet, men i framtiden försöker man skapa icke-objekt programmeringsspråk av den 3:e generationen avsedda för utveckling av ultra-stora projekt, lyckligtvis inte gjordes. Så Ada satte stopp för en lång rad enkla procedurspråk, som började med Fortran och Algol. Faktum är att allt som kunde tänkas inom ramen för ideologin om strukturerad programmering förkroppsligades i helvetet. Sedan blomstrade objektprogrammeringen och Ada bleknade in i bakgrunden.

Men detta språk upptar fortfarande en nisch där det inte har någon motsvarighet ännu. Förutom att kompilera moduler separat och säkerställa hierarkisk sekretess av specifikationer, har detta språk implementerat en sådan egenskap som stöd för parallell programmering. Tagen på en mer eller mindre hög nivå i Algol-68, sedan utvecklad i Modul-2, förkroppsligades i Adas mycket kraftfulla verktyg, de så kallade uppgifterna som kan utföras oberoende av varandra på parallella datorer. Detta ledde till födelsen av en hel programmeringsideologi baserad på uppgifter som kunde utföras "pseudo-parallellt" - på en dator med en processor. I det här fallet var själva problemet som löstes uppdelat i en uppsättning samtidigt fungerande procedurer som oberoende interagerar med varandra. Det var lite som ett sätt att lösa ett problem i Prolog: en viss virtuell värld beskrivs enkelt och sedan "startas" den liksom i drift och lösningen hittas av sig själv.

Det är desto mer förvånande att det amerikanska försvarsdepartementet av en eller annan anledning övergav objektideologin, som var perfekt förkroppsligad i

60-tal i Simul-67, och ångrade sig nog mer än en gång. Det är sant att på Ada-språket introducerades ett slags patetisk ersättning för ett antal möjligheter som tillhandahålls av objektorienterad programmering - de så kallade mallarna, det vill säga procedurer med parametrar av odefinierade typer. Men ändå, de främsta fördelarna med Ada, som gör att hon idag kan stå emot anstormningen av mer utvecklade språk, var, förutom kraftfull finansiering, inbyggt stöd för parallellt utförande av uppgifter och kraftfulla sätt att samordna deras interaktion. Det bör noteras att Adas huvudsakliga inriktning inte alls är bokföringsautomatiseringssystem i det amerikanska försvarsdepartementet, utan rena stridsuppdrag, till exempel, såsom mikroprocessorbaserad realtidsnavigering av en målsökande missil, där det krävs att man samtidigt bearbeta information som kontinuerligt kommer från en mängd olika sensorer. ... Tidigare skrevs sådana uppgifter på assemblerspråk, vilket ledde till många fel och svårigheter i underhållet. För sådana uppgifter passar Ada förstås alldeles utmärkt.

Ada fortsätter dock att vara positionerat som ett bra verktyg för att utveckla stora mjukvarusystem... Det är sant, nu låter rösterna som stöder detta språk tystare, ungefär så här: "Ada, åtminstone inte värre än C." Det amerikanska försvarsdepartementet, med hänsyn till dess huvudsakliga misstag - bristen på objekt, i enlighet med moderna krav för mjukvaruutvecklingsteknik, har utvecklat en ny språkstandard ISO / IEC 8652: 1985 (E). Den beskriver versionen av Ada95-språket (eller Ada9X). Det mest intressanta är att den här versionen är världens första objektorienterade programmeringssystem, på vilket den internationella standarden introducerades, tydligen på order (med C ++ är detta ännu inte möjligt). Dessutom har språket förbättrat systemet för att samordna synligheten av data i modulernas specifikationer och lagt till verktyg för att effektivisera de parallella uppgifterna.

Det amerikanska försvarsdepartementet är ganska avundsjuk på sin kära idé och registrerade till och med ordet "Ada" som sitt varumärke. Men senare, istället för varumärket, beslutade försvarsministeriet att använda "Ada" som sitt interna certifierade märke. Det amerikanska försvarsdepartementet är inte särskilt glad över uppkomsten av kommersiella versioner av detta språk. Naturligtvis har ingen rätt att hindra dig från att skriva din egen kompilator, men för att den ska få kommersiellt erkännande måste den uppfylla den militära standarden, och testning utförs endast av AJPO-kommittén vid US Department of Defense, som mycket strikt kontrollerar kompilatorns överensstämmelse med många krav, inklusive, uppenbarligen, och rent politiska.

Ändå kan olika versioner av Ada erhållas, som vanligtvis är fallet med programmeringsspråk, gratis, det vill säga för ingenting, bara inte på ett piratkopierat sätt, utan helt enkelt gratisversioner, och, naturligtvis, för pengar.

Av de fria versionerna är det första att lyfta fram GNAT-kompilatorn - GNU Ada95. Den är tillgänglig i källkod från GNU Project (Free Redistributable Software). Det kan också fungera på en dator med en processor, bara det är nödvändigt att operativsystemet stöder multitasking. Detta kan till exempel vara någon version av UNIX eller OS / 2. Vad gäller MS DOS - gissa dig själv. Men om du verkligen vill köra hundra eller två parallella processer på din persondator under MS DOS 6.x, så är det fullt möjligt att prova Ada / Ed - kompilatorn och tolken av 1987 års version av språket, som, är dock helt oförenlig med standarden och saknar ett antal väsentliga element ...

Har man pengar så blir situationen förstås lättare. Inom månadslönen för en genomsnittlig rysk programmerare kan du köpa till exempel FirstAda och skriva ett kylskåpskontrollsystem. Dyrare system för Windows, OS / 2 eller UNIX, certifierade av det amerikanska försvarsdepartementet, kan du försöka köpa direkt från utvecklingsföretag, av vilka det finns ett dussintal.

Det är intressant att inte bara språket i sig har genomgått standardisering, vilket gjorde det möjligt att skapa lätt bärbara program, utan också en uppsättning utvecklarhjälpmedel - olika I/O-bibliotek och grafiska gränssnittsorganisationer, förprocessorer, verifierare, kodgeneratorer, analysatorer av källkodens logiska struktur, program för att testa kompilatorer etc. Visst finns det stora paket som innehåller alla standardiserade utvecklingsverktyg, men de verkar vara väldigt dyra.

Det skulle vara mycket intressant att ta reda på om Sovjetunionen arbetade med språk som utformats för att lösa liknande militära problem. Eller skrev våra specialister bara i Assembler?

Sammanfattning om ämnet:

Ada



Planen:

    Introduktion
  • 1 Språkets egenskaper
  • 2 "Hej världen!" i helvetet
  • 3 Historia
  • 4 Helvetet i Sovjetunionen och Ryssland
  • 5 Kritik
  • 6 Fördelning, perspektiv
  • 7 Operativsystem skrivna i Ada
  • 8 kompilatorer av helvetet
  • 9 Härledda språk
  • 10 Intressanta fakta
  • Anteckningar (redigera)
    Litteratur

Introduktion

Helvete (Ada) är ett programmeringsspråk skapat 1979-1980 som ett resultat av ett projekt som genomförts av det amerikanska försvarsdepartementet i syfte att utveckla ett enhetligt programmeringsspråk för inbyggda system (det vill säga styrsystem för automatiserade komplex som fungerar i realtid). De avsåg först och främst kontrollsystem ombord för militära föremål (fartyg, flygplan, stridsvagnar, missiler, granater, etc.). Utvecklarna stod inte inför uppgiften att skapa ett universellt språk, därför måste de beslut som fattas av författarna till Ada uppfattas i samband med det valda ämnesområdets egenheter. Språket är uppkallat efter Ada Lovelace.


1. Funktioner i språket

I sin ursprungliga version, standardiserad 1983, är Ada ett strukturerat, modulärt programmeringsspråk som innehåller högnivåprogrammeringsverktyg för parallella processer. Adas syntax ärvs från språk som Algol eller Pascal, men utökas och även gjorts mer strikt och logisk. Ada är ett starkt maskinskrivet språk, det utesluter arbete med objekt som inte har några typer, och automatiska typkonverteringar reduceras till ett absolut minimum. I 1995 års standard lades de grundläggande medlen för objektorienterad programmering till språket, i 2007 års standard kompletterades dessa medel, så moderna Ada är ett objektorienterat programmeringsspråk.

Av funktionerna i syntaxen kan det noteras:

  • Språket är skiftlägesokänsligt.
  • Programmen är modulära, mekanismen för att styra import-export av beskrivningar mellan moduler inkluderar två olika direktiv: en för att ansluta en annan modul (med), den andra för att importera dess beskrivningar (användning). Det är också möjligt att byta namn på modulen under import (byta namn) - detta alternativ låter dig använda mer bekväma identifierare för paketbeteckningen.
  • Paket (en av modulerna) kan innehålla en rubrik och en personlig del - det som finns i det exporteras inte och är inte tillgängligt för andra moduler.
  • Mekanismen för generaliserade (anpassningsbara) moduler stöds: paket, procedurer och funktioner som gör det möjligt att beskriva generaliserade databehandlingsalgoritmer utan att specificera en specifik typ.
  • Ett utvecklat system av typer, både inbyggt och genererat av programmeraren. Det finns många sätt att skapa nya typer, språket stödjer två olika begrepp: "subtyp" och "derived type". Variabler av typ och subtyp är kompatibla, variabler av typ och dess härledda typ är inte det.
  • Undantagshanteringsanläggningar.
  • Utvecklade sätt att referera till procedurer och funktioner: ingångs- och utdataparametrar stöds, överföring av faktiska parametrar i en godtycklig ordning med indikation av formella namn, parametrar med standardvärden.
  • Åsidosättande av procedurer, funktioner och operatorer stöds - skapa flera varianter av en procedur, funktion eller operator med samma namn, men olika signaturer (typer och antal parametrar).
  • Konstruktioner som är inbyggda i språket för att stödja parallell programmering: begreppen "uppgift" (ett programfragment som körs parallellt), "uppgiftsinmatning" (ett sätt för synkronisering och kommunikation av parallella pågående uppgifter) stöds; ), det finns en SELECT operatör för att organisera villkorad inter-tråd-interaktion (val av en parallell uppgift att interagera med, beroende på beredskapen för ett möte och vissa andra villkor). I princip är de parallella programmeringsverktygen som finns tillgängliga på språket tillräckliga för att lösa en stor klass av uppgifter som kräver parallell bearbetning, utan att tillgripa externa verktyg, såsom ytterligare bibliotek eller operativsystems API:er.

För att uppfylla tillförlitlighetskraven är språket byggt på ett sådant sätt att så många fel som möjligt upptäcks vid kompileringstillfället. Ett av kraven i utvecklingen av språket var dessutom programtexternas maximalt lättlästa, även på bekostnad av lättheten att skriva. Resultatet av detta tillvägagångssätt var en något "tung" syntax och många restriktioner som saknas i de vanligaste industrispråken (C och C++) och som ofta uppfattas av professionella programmerare som överflödiga, till exempel samma starka typning . Detta ledde till bildandet av idén om Ada som ett komplext, obskyrt och obekvämt språk att använda.


2. "Hej världen!" i helvetet

Flera olika varianter av "Hej världen!" kan ses i Wikibooks. Skillnaderna beror på behovet av att använda biblioteksfunktionen Put_Line - det finns tre olika sätt att organisera denna användning på detta språk.

Med Ada.Text_IO; procedur Hej är att använda Ada.Text_IO; börja Put_Line ("Hej, värld!"); slut Hej;

Här, för att använda Put_Line-funktionen, importeras Ada.Text_IO-paketet som innehåller det med användningskonstruktionen, vilket gör det möjligt att anropa funktionen med namn utan förbehåll - med angivande av namnet på paketet som innehåller funktionen i anropet.


3. Historia

Utvecklingen av språket genomfördes som en del av en internationell tävling organiserad och finansierad av det amerikanska försvarsdepartementet. Målet med utvecklingen var att få fram ett programmeringsspråk som skulle kunna bli en enhetlig för utveckling av projekt beställda av militäravdelningen, främst för utveckling av inbyggda system för militära ändamål och för stora militära datorer (baserade på iAPX 432-processorn fr.o.m. Intel). Arbetet började 1975, med bildandet av en uppsättning krav för språket, som fullt ut skulle tillfredsställa utvecklarna av system av denna typ. Den initiala listan med krav, utfärdad under kodnamnet "Straw", lämnades in för granskning till ett antal organisationer och företag, förfinades konsekvent under loppet av två år och förvandlades så småningom till ett slutgiltigt dokument kallat "Stål".

Efter slutförandet av kravbildningen genomfördes en analys som visade att inget av de tillgängliga programmeringsspråken uppfyller kraven tillräckligt, så det beslutades att utveckla ett nytt språk. En tävling för dess skapande tillkännagavs 1977, utvecklarna ombads att baseras på ett av tre språk: Pascal, Algol-68 eller PL / 1.

Av de 15 projekt som lämnats in till tävlingen valdes 4 ut (alla baserade på Pascal). Dessa projekt skickades för ytterligare revidering. I nästa steg, av 4 projekt, valdes två ut, varav ett valdes efter nästa revidering. Detta språk fick namnet "Ada" - gruppen som utvecklade det under ledning av fransmannen Jean Ishbia gav språket ett namn för att hedra Augusta Ada King Lovelace (1815-1852), dotter till poeten J. Byron, som utvecklade program för Babbages dator och anses vara den första programmeraren i världen.

1983 standardiserades språket officiellt av ANSI. Språkstandarden ANSI/MIL-STD-1815-A-1983 godkändes den 17 februari 1983. Det amerikanska försvarsdepartementet har registrerat namnet "Ada" som ett registrerat varumärke, vilket förbjuder utgivningen av översättare för språket som inte har genomgått formell överensstämmelsetestning. Proceduren bestod av att köra ett stort antal (mer än 1000) testprogram genom kompilatorn som testades (den så kallade ACVC-sviten), för var och en av vilka testresultatet bestämdes unikt: antingen en framgångsrik kompilering eller utfärdande av ett mycket specifikt felmeddelande. Testning utfördes enligt "allt eller ingenting"-principen - om minst ett testfall bearbetades ansågs kompilatorn ha misslyckats i testet, och testningen var endast giltig på hård- och mjukvaruplattformen som den utfördes på. . Således undertrycktes möjligheten av bildandet av "versioner" eller "dialekter" av helvetets språk i sin linda.

1987 standardiserades Ada-språket officiellt av ISO. Från det ögonblicket gjorde det amerikanska försvarsdepartementet språket tillgängligt för allmänheten.

År 1990 fanns det cirka 200 kompilatorer i världen som motsvarade Ada-språkstandarden.

1995 antogs en ny Ada-standard, känd som Ada95. Medlen introducerades i språket objektprogrammering... Dessutom kompletterades språket med mer avancerade sätt att interagera med program skrivna på andra språk.

I mars 2007 publicerades ändringar i Ada-standarden. De berörde främst möjligheterna med objektorienterad programmering: gränssnitt introducerades, syntaxen för att anropa en metod som var vanlig för de flesta hybridspråk antogs och ett antal tillägg gjordes.


4. Helvetet i Sovjetunionen och Ryssland

I Sovjetunionen, på 1980-talet, organiserades en arbetsgrupp för helvetets språk under den statliga kommittén för vetenskap och teknik. Gruppen var engagerad i studien av alla öppna (såväl som, rykten, hemliga underrättelser som erhållits) data om Ada-språket och undersökte möjligheten och genomförbarheten av utvecklingen och användningen av Ada i Sovjetunionen. Denna grupps verksamhet ledde i slutet av 1980-talet till utvecklingen av Ada-kompilatorer för praktiskt taget alla datorer som används i Sovjetunionen. Flera böcker om helvetets språk har publicerats på ryska.

Vid Moscow State University har man arbetat med att skapa egna testpaket för Ada-översättare för överensstämmelse med standarder. På LSU, för att skapa Ada-systemet, användes Pallada-systemet, som tidigare utvecklats för implementering av Algol-68, som överfördes till Ada. Systemet innehåller en integrerad utvecklingsmiljö, en kompilator, en textredigerare, en debugger, bibliotek, ett versionskontrollsystem och en kommandotolk.

Efter Sovjetunionens kollaps avbröts praktiskt taget arbetet med spridningen av Ada. Det är sant att tre program för utveckling av mjukvaruutveckling i Ada antogs (i försvarsministeriet, civila luftfartsministeriet och ministeriet för utbildning och vetenskap), men utvecklingen av dem sker långsamt och okoordinerat. Som ett resultat är Ada-språket föga känt i Ryssland, majoriteten av moderna ryska programmerare anser att det är ett "dött språk" och vet ingenting om det. Ada används i Ryssland och OSS av enskilda entusiaster. Ändå används språket för industriell mjukvaruutveckling. Det finns flera kända projekt utvecklade i Ada som arbetar i Ryssland. Bland dem:

  • Station för dokumentär kommunikation från Ryska federationens försvarsministerium. Huvuduppgiften är att säkerställa utbytet av dokumentär information i försvarsministeriets dataöverföringsnät Ryska Federationen... Hårdvaru- och mjukvarukomplexet utvecklades gemensamt av Computing and Automation Manufacturing Organization (hårdvara) och en grupp programmerare i off-track-sektorn av Strela North Caucasus Air Traffic Control Center. Mjukvaran för komplexet är skriven i programmeringsspråket Ada med hjälp av GNAT-kompilatorn. Distribuerad datoranvändning stöds av GLADE-tilläggskomponenten.
  • En uppsättning standardflygnavigerings- och kommunikationsutrustning för ett ryskt amfibieflygplan Beriev Be-200... Utvecklingen utfördes av Scientific Research Institute of Aviation Equipment i Zhukovsky, tillsammans med det amerikanska företaget Allied Signal, Florida, USA. Komplexet för utveckling av Ada-system från DDC-I-företaget på Intel 80486-plattformen användes.

5. Kritik

Sedan starten har Ada kritiserats av några erkända myndigheter inom utvecklingen av programmeringsspråk, främst för komplexiteten i syntaxen och den stora volymen. Speciellt kritiserades språket av Charles Hoare och Niklaus Wirth (som deltog med sitt projekt i denna tävling, men hoppade av efter första etappen), samt Edsger Dijkstra.

Dijkstra tvivlade på att ett språk av sådan komplexitet som Ada kunde vara observerbart och hanterbart.

Om Ada ska ge ut en standard är det önskvärt att den är entydigt dokumenterad. Minst två grupper har försökt göra detta; som ett resultat, producerade båda cirka 600 sidor formell text. Detta är mycket mer än vad som är nödvändigt för att säkerställa att det är omöjligt att ens bestämt fastställa att båda dokumenten definierar samma språk. Felet med den uppenbara ohanterligheten hos dessa två dokument ligger inte i de två grupperna som sammanställde dem, inte i den formalism de antog, utan bara i själva språket: utan att ge en formell definition av huruvida dess utvecklare kan dölja att de föreslår en okontrollerbart monster. Att Ada kommer att minska programmeringsproblem och öka tillförlitligheten hos våra konstruktioner till acceptabla gränser är bara en av de sagor som bara människor med militär bakgrund kan tro på.

Science fiction och vetenskaplig verklighet inom datavetenskap (Edsger W. Dijkstra, EWD952)

Hoare uttryckte sin beklagande att "skrammel och prydnadssaker har segrat över de grundläggande kraven på tillförlitlighet och säkerhet" och varnade för "en armada av missiler som flyger i fel riktning på grund av ett oupptäckt fel i Adas kompilator." Niklaus Wirth talade mer återhållsamt, men också negativt. Han sa: "Alltför många saker faller på programmeraren. Jag tror inte att man kan jobba normalt efter att ha studerat en tredjedel av Ada. Om du inte behärskar alla detaljer i språket, kan du i framtiden snubbla på dem, och det kommer att leda till obehagliga konsekvenser." Jean Ishbia, chef för Adas utvecklingsteam, som uttryckte sin "respekt och beundran" för Wirth, höll inte med honom och sa: "Wirth tror på enkla lösningar svåra problem. Jag tror inte på sådana mirakel. Komplexa problem kräver komplexa lösningar."

Proceduren för att kontrollera kompilatorns överensstämmelse med språkstandarden genom att testa väcker också tvivel. Det framgår av allmänna överväganden att testning kan hitta inkonsekvenser, men inte garantera korrekthet. En praktisk bekräftelse på detta är det faktum att certifierade kompilatorer, när de testades på en annan uppsättning tester, fann bristande överensstämmelse med standarden.

Ada-förespråkare hävdar att det enda alternativet till ett stort och komplext språk i stora projekt är användningen av flera kompakta språk, vilket oundvikligen skapar de kompatibilitetsproblem som Ada designades för att bli av med. De märker också att förståelsen av komplexiteten i utvecklingen i Ada bara är delvis sann: att skriva ett enkelt program i Ada tar mer tid än andra mindre formella språk som C, men att felsöka och underhålla program, särskilt stora och komplexa. , är mycket lättare. Enligt Stephen Zeiger från Rational Software Corporation är mjukvaruutveckling i Ada i allmänhet 60 % billigare, och det utvecklade programmet har 9 gånger färre defekter än att använda C-språket.


6. Fördelning, perspektiv

I praktiken visade det sig att Ada, efter att ha ockuperat sin avsedda nisch inom militären och relaterade utvecklingar av inbyggda system, inte gick utöver denna nisch, varken i väst, eller i Sovjetunionen, eller i det postsovjetiska rymden. Det finns många anledningar till detta. Motståndare till språket betonar dess komplexitet och brister, supportrar talar först och främst om de objektiva omständigheterna för språkets uppkomst och de negativa aspekterna av processen för dess genomförande. Åsikten från S. I. Rybin, senior forskare vid Research Computing Center vid Moscow State University, konsult till AdaCore EU-företaget, expert på Ada-språket i ISO-arbetsgruppen för språkstandarden, är intressant. Han tror att Ada har två huvudorsaker att tacka sina misslyckanden:

  • Under utformningen av språket antog Pentagon att all ny programvara endast skulle skapas i Ada. På grund av detta fick Ada extremt primitiva sätt att interagera med program på andra språk. I praktiken visade det sig att det är orealistiskt att skriva allt i Ada i allmänhet (om så bara för att det fanns ett behov av att interagera med färdiga utvecklingar på andra språk). I branscher där det inte fanns några strikta krav på att "enbart skriva i Ada" föredrogs andra språk, mer anpassade till en flerspråkig miljö. 1995 års standard löste problemet med interoperabilitet med andra språk, men slöseri med tid.
  • Paradoxalt nog hämmades spridningen av Ada av Pentagons ekonomiska och organisatoriska stöd. Ada-programmen skrivna för militären körde på den mest kraftfulla datorhårdvara som finns tillgänglig, så kompilatorutvecklarna brydde sig först om att klara ACVC-testerna och först sedan om kompilatorns effektivitet och koden den genererade. I början av 1980-talet började en mikrodatorboom, och översättare för vanliga språk (Pascal, C, BASIC) optimerades snabbt för system med låg effekt. För Ada fanns det inget incitament för en sådan modernisering, som ett resultat av att persondatorer som blev huvuddelen av världens datorpark några år senare saknade en högkvalitativ översättare av Ada. Naturligtvis tappade Ada detta marknadssegment. GNAT-kompilatorn, högkvalitativ och effektiv, har dykt upp relativt nyligen, men även här har tiden gått förlorad.

För närvarande är Ada ganska fast etablerad i utvecklingen av stora inbyggda system med ökad tillförlitlighet, här har hon praktiskt taget inga starka konkurrenter. Användningen av språket ökar successivt, om än ganska långsamt. Enligt vissa försiktiga prognoser [ ], med minskningen av kostnaden för hårdvara och spridningen av inbyggda system med komplex mjukvara, kan marknaden för program i Ada växa märkbart, och användningen av språket kommer också att växa.

Ada har dessutom, om än mycket begränsad, tillämpning inom området högre utbildning. Specialkurser om Ada undervisas vid Moscow State University och Kharkov University. Men enligt samma S.I. Rybin,

... nu i det postsovjetiska utrymmet inom mjukvaruindustrin och utbildningsområdet har en uppenbar ond cirkel utvecklats: industrin känner praktiskt taget inte till Ada, respektive från industrin finns det ingen efterfrågan på utbildning för att träna Ada specialister och nya människor kommer från universitet till industrin, som praktiskt taget inte vet något om helvetet.


7. Operativsystem skrivna i Ada

7.1. Inbyggda system

  • MarTE
  • RTEMS - öppen källkod OS källkod, utvecklad av DARPA US Department of Defense
  • Ravenskar
  • RTOS-32 - proprietärt OS

7.2. System under utveckling

  • AuroraUX (ett projekt för att skriva om OpenSolaris-kärnan och sedan DragonFly BSD till helvetesspråket)
  • Lovelace (operativsystem på L4-kärnan)

7.3. Inte längre existerande system

  • BiiN™
  • Pulse™
  • AdaOS

8. Helvetes kompilatorer

namn Företag Version Operativ system Webbplats
AdamMagic SofCheck Ada 95 ? www.sofcheck.com
AdamMULTI Green Hills programvara Ada 83, Ada 95, C, C++, Fortran Solaris SPARC, GNU / Linux x86, Windows www.ghs.com
DEC Ada Hewlett Packard Ada 83 Öppnavms h71000.www7.hp.com
KNOTT AdaCore Ada 83, Ada 95, Ada 2005, Si Solaris SPARC, Linux x86 / x86-64, Windows, andra libre.adacore.com
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
Janus / Ada RR programvara Ada 83, Ada 95 SCO, UnixWare, Interactive, MS-DOS, Windows www.rrsoftware.com
MAXAda Samverkande Ada 95 Linux / Xeon, PowerPC www.ccur.com
ObjectAda Aonix Ada 95 Solaris SPARC, HP-UX, IBM AIX, Linux, Windows www.aonix.com
PowerAda OC-system Ada 83, Ada 95 Linux, AIX (Ada 95); IBM System 370/390 (Ada 83) www.ocsystems.com
Rationell Apex IBM Rational Ada, C, C++ Solaris SPARC, Linux www-01.ibm.com
GÖRA DDC-I Ada 83, Ada 95, Si, Fortran Solaris SPARC, Windows www.ddci.com
XD Ada SWEP-EDS Ada 83 OpenVMS Alpha / VAX www.swep-eds.com
XGC Ada XGC programvara Ada 83, Ada 95, Si Solaris SPARC, PC Linux, Windows (Cygwin) www.xgc.com

Med undantag för GNAT och XGC (för vissa plattformar) betalas ovanstående kompilatorer. Vissa företag, som Aonix, erbjuder gratis demos som är begränsade i antingen användningstid eller funktionalitet.

NetBeans och Eclipse IDE har plugins för att arbeta med Ada.


9. Härledda språk

Syntaxen för Ada-språket används i språk som:

  • PL / SQL

10. Intressanta fakta

  • Formellt var tävlingen för utvecklingen av språket, som ett resultat av vilken Ada-språket skapades, anonym - grupper av utvecklare presenterade sina projekt under kodnamn så att tävlingskommittén inte kunde ta hänsyn till utvecklarnas personlighet när att utse vinnaren. Men i praktiken, som en av ledamöterna i kommissionen skrev, var utvecklarnas smaker så olika att det inte var svårt att identifiera författaren till projektet.
  • Alla språk som har kommit ner till de sista omgångarna av denna tävling var baserade på Pascal. I detta avseende kan Ada preliminärt karakteriseras som Pascal, utvecklad med hänsyn till de givna fem grundläggande kraven. Samtidigt gick författarna huvudsakligen på vägen att utöka Pascal med nya element. Resultatet är ett betydligt mer komplext språk.
  • På det ryska språket finns det skämt förknippade med tvetydigheten i uttrycket "The Language of Hell", inklusive de som bygger på en parallell med det ryska algoritmiska språket, även känt som "PARADISETS språk". Programmeringsfolkloren inkluderade också slutsatsen av en artikel av den sovjetiske propagandisten Melor Sturua (1984):

Pentagons språk är världens fiende. Språket "Ada" är rösten för ett termonukleärt helvete ... På "Adas" språk hörs en förbannelse över mänskligheten.


Anteckningar (redigera)

  1. Referensguide till språket i Ada 83. Kapitel 1.3. Syfte och källor för utveckling - www.ada-ru.org/arm83/ch01s03.html
  2. Vadim Stankevich. Lady Hell - www.kv.by/index2006451104.htm
  3. Uppdaterad standard på iso.org - www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=45001
  4. Bryabrin VM programvara för persondatorer. Moskva: Nauka, 1988.
  5. 1 2 S. I. Rybins intervju - www.ada-ru.org/wiki/rybin
  6. , Objektorienterade programmeringsspråk, NET Platform Programming Languages, Ada, Ada Code Exempelartiklar.
    Text tillgänglig under licensen Creative Commons Attribution-Dela Lika.

Om du frågar en inhemsk IT-specialist: "Vad är helvetet?", kommer de flesta bara att rycka på axlarna av förvåning, och vissa kommer till och med säga att detta är ett dött språk, en gång uppfunnit av Pentagon, men nu praktiskt taget inte använt. Faktum är att Ada idag är ett ganska framgångsrikt programmeringsspråk som aktivt används inom olika områden. Det är sant att de flesta ryska programmerare vet lite om det.

Förmodligen blev alla som var tvungna att använda den fjortonde linjen i den parisiska tunnelbanan förvånade när han första gången såg ett tåg där det inte finns någon förarhytt. Tågens rörelse på denna linje styrs helt av Ada-programmet.

Trots allt, inom vissa teknikområden, ligger Ryssland fortfarande "före resten av planeten". Och en av dem är design och produktion av amfibieflygplan. Den internationellt erkända ledaren inom detta område är TANTK im. G.M. Beriev. Företaget förvärvade nyligen Ada-baserade inbyggda mjukvaruutvecklingsverktyg för användning vid uppgradering av dess Senaste Modell Be-200.

Samtidigt vet majoriteten av inhemska IT-specialister i bästa fall ingenting om helvetets språk, i värsta fall har de en helt felaktig uppfattning om helvetet som ett monsterspråk, en gång uppfunnits av Pentagon för att utveckla militära system, men nu helt bortglömd.

Lite historia

Den officiella födelsedagen för programmeringsspråket Ada kan betraktas som 17 februari 1983 - datumet för godkännande av ANSI / MIL-STD-1815-A-1983-standarden.

De tekniska och administrativa åtgärder som vidtogs av försvarsministeriet som en del av projektet för skapandet och genomförandet av Ada förhindrade helt uppkomsten och spridningen av språkets dialekter. Från 1983 till idag stöder alla industriella implementeringar den nuvarande Ada-standarden. När det gäller delmängder av Ada bestäms dessa delmängder inte av implementeringen, utan av utvecklingsstandarderna för en viss klass av system.

1987 godkändes ANSI-standarden utan en enda ändring som ISO-standard (ISO/IEC 8652) och när behovet av att revidera standarden blev nödvändigt i början av 90-talet genomfördes även revisionsarbetet i regi och fonder. från det amerikanska försvarsdepartementet. Ett nytt internationellt projekt lanserades, som avslutades med godkännandet i slutet av 1994 och publiceringen i början av 1995 av en ny version av standarden ISO/IEC 8652. Det är detta dokument som fungerar som definitionen av programmeringsspråket Ada i dag.

I Sovjetunionen i början av 80-talet bildades Arbetsgrupp om programmeringsspråket för Ada vid Statens kommitté för vetenskap och teknik. All öppen information om projektet samlades noggrant in och analyserades, och genom insatser från specialtjänster erhölls den och stängd Information... Projekt organiserades för att implementera Ada för praktiskt taget alla datorarkitekturer som då användes, och några av dem var mycket framgångsrika. Sovjetunionens kollaps satte stopp för denna verksamhet. Idag används Ada i Ryssland och OSS av enskilda entusiaster.

Vad är Ada

Alla moderna industrispråk tillhandahåller i huvudsak samma grundläggande uppsättning möjligheter, och skiljer sig inte i vad de tillåter dig att göra, utan i hur de tillåter dig att göra det. Men Ada, i åtminstone två aspekter, utökar uppsättningen av kapacitetsstandarden för moderna språk. För det första tillhandahåller Ada programmeringsverktyg på hög nivå för asynkrona processer. För det andra är det det enda språket som kan kallas modulärt utan några reservationer.

Ett sådant exempel är helt enkelt nödvändigt för att vederlägga den ganska utbredda myten att Ada är ett stort, komplext och "tungt" språk, som endast lämpar sig för att skriva superstora och superkomplexa system. Faktum är att Ada kan användas för att utveckla små och medelstora program med samma framgång som moderna kloner av C, Pascal, BASIC och Java. Till exempel ett klassiskt exempel på "Hello, World!" ser ut så här i Ada:

Det är lätt att se att Ada-koden liknar Pascal-koden som valdes som sin prototyp. Den första raden beskriver förhållandet mellan denna kompilerade modul och andra moduler - det anges att Hello_World-subrutinen ska kompileras tillsammans med Ada.Text_IO-modulen, som är en komponent i det fördefinierade biblioteket.

Följande program definierar två asynkrona processer:

Sektionen Lokala deklarationer i Tasking_Example-proceduren beskriver Outputter-uppgiften (rad 6, rad 8 till 17 innehåller huvuddelen av denna uppgift). När kontrollen i processen som motsvarar Tasking_Example når rad 20, startas processen som motsvarar Outputtern innan denna första sats exekveras, varefter de två processerna lever och exekverar asynkront oberoende av varandra. Exekveringen av fördröjningssatsen (raderna 14 och 20) består i att avbryta motsvarande process under det specificerade antalet sekunder. Således avbryts Tasking_Example-processen i 20 sekunder, medan Outputter-processen börjar skriva ut värdena för den inkrementerande räknaren och pausar i en sekund efter att varje värde matats ut. Efter 20 sekunder ställer Tasking_Example-processen in Färdig-flaggan till sant, vilket avslutar loopen i Outputter-processen. Att specificera den färdiga variabeln som ett atomärt dataobjekt (rad 4) gör det omöjligt att läsa och ändra värdet på denna variabel samtidigt.

Följande är en mall för en funktion som tillåter komponentvis tillägg av två endimensionella arrayer. Denna mall kan konfigureras för en godtycklig typ, som är en endimensionell array, för vars komponenter tilldelnings- och additionsoperationer definieras ("addition" behöver inte vara aritmetisk addition).

Raderna 1-6 innehåller deklarationen för den anpassade funktionen och raderna 8-20 innehåller dess brödtext. Informellt är avstämningsparametern en godtycklig endimensionell reguljär typ med ett ospecificerat indexintervall (rad 4), om vilken det bara är känt att dess komponenttyp är godtycklig, men en tilldelningsoperation definieras för komponenterna (rad 2). , indextypen är godtycklig diskret (rad 4) ... Eftersom vi måste lägga till två arrayer komponentvis, måste vi veta vad additionsoperationen är för komponenttypen. Eftersom detta är en godtycklig typ, tvingas vi skicka addition för komponenttypen som en formell preferens (rad 5).

I funktionskroppen kontrollerar vi först om längden på operanderna är desamma (rad 12), annars är komponentvis addition meningslös. Att matcha längden på operanderna garanterar inte att indexintervallen kommer att matcha, så i en slinga över indexintervallet för det första argumentet (rad 15) måste vi beräkna indexet för motsvarande komponent i det andra argumentet varje gång. Vi är berövade möjligheten att göra detta för Index-typen, eftersom vi bara vet om det att det är diskret, så vi går från värdet för den diskreta typen till dess ordningsnummer (? Pos-attributet), beräknar den nödvändiga förskjutningen för ordningsnumret och återgå till motsvarande värde för indextypen (? Val-attributet).

Observera att parametrarna för den (anpassade) funktionen "+" Vänster och Höger förklaras vara av typen Arr, vars indexintervall inte är specificerat. Men Vänster och Höger är formella parametrar, i deras ställe, när man anropar (resultatet av instansiering) av funktionen "+", kommer konkreta arrayer med kända indexintervall att ersättas. I kroppen av "+"-funktionen använder vi arrayattribut (? Range,? First,? Length) för att få information om dess indexintervall från objektet.

Varför Ada?

Att välja språk för ett programvaruprojekt var tidigare en rent teknisk fråga. Idag har det blivit en fråga av strategisk betydelse med långtgående konsekvenser för projektets framgång. Låt oss lista några av anledningarna till vilka Ada-språket valdes för implementering av mjukvaruprojekt. olika företag, eller gjorts obligatoriska för användning i anbud.

  • Önskan att förbättra tillförlitligheten hos det system som utvecklas, eftersom mjukvarufel kan få allvarliga konsekvenser för människors hälsa, ekonomi, ekologi etc. (Ada har inbyggda säkerhetsfunktioner.)
  • Önskan att minska kostnaderna för att utveckla och underhålla systemet.
  • Tillgänglighet av internationella standarder och tillgänglighet av språkkompilatorer för nästan alla plattformar.
  • Fördelarna med ett disciplinerat tillvägagångssätt för mjukvaruutveckling, som blir särskilt betydande när volymen och komplexiteten hos programvaran ökar.
Ada och C

När man genomförde jämförande analyser av populära språk bröts så många kopior att detta ämne idag ofta hänvisas till kategorin "religiösa krig". Därför begränsar vi oss endast till en hänvisning till en välkänd artikel, där ett antal vältaliga slutsatser dras.

  1. Utveckling av program på Ada-språket kostar 60 % mindre än liknande programvaruprojekt implementerade i C.
  2. Ett Ada-program har 9 gånger färre defekter än ett C-program; ett C++-program har ännu lägre egenskaper än ett C-program.
  3. att föredra framför C för både erfarna och oerfarna programmerare, samt för programmerare som har både högsta och lägsta betyg i sin grupp.
  4. Komplexiteten i att studera helvetets språk är inte högre än komplexiteten i att studera C.
  5. Ada-program är mer pålitliga än C-program.

Som en illustration av dessa slutsatser kommer vi att ge ett exempel på utvecklingen av programvara ombord för ett C-130J-flygplan i enlighet med kraven i nivå A i DO-178B-standarden. Samtidigt angavs kodens kvalitet vara 10 gånger högre än genomsnittet för programvara på nivå A. Arbetsproduktiviteten fyrdubblades i förhållande till jämförbara programvaruprojekt.

Ada och Java

Microsoft tvingades inkludera i licensavtal för sina operativsystem nästa objekt ( www.microsoft.com/msdownload/ieplatform/ie/licens.txt): "Anmärkning för Java-språkstöd ... Java-teknik är inte feltolerant och är inte avsedd ... för användning i realtidskontrollsystem ... där Java-språkfel kan resultera i dödsfall, skada eller allvarlig skada på infrastrukturen eller miljön. Sun Microsystems, Inc. tvingade Microsoft att publicera denna varning."

Låt oss också peka på artiklar och demonstrera fördelarna med Ada-språket framför Java.

"Infernaliska" myter

Ganska ofta förknippas en rad ihållande missuppfattningar med Ada som hindrar både spridningen av språket och det medvetna valet av Ada som språk för projektgenomförande.

Ada är ett dött språk, ingen programmerar i det nu. Faktum är att Ada självsäkert upptar nischen av stora inbyggda system med ökade krav på tillförlitlighet. Jämfört med "boxade" produkter för Windows är sådana system inte så märkbara, eftersom de antingen finns i ett exemplar (vad är poängen med att replikera programmet som styr tunnelbanetågens rörelser), eller distribueras som en del av systemet där de är inbäddade (inbyggd programvara).

Ada är ett språk designat exklusivt för militära tillämpningar. Ada utvecklades verkligen med hjälp av det amerikanska försvarsdepartementet, men det finns inga tekniska, administrativa eller andra skäl som hindrar användningen av Ada för utveckling av civila system. Antalet "civila" projekt baserade på detta språk är idag jämförbart med antalet "militära" projekt.

Ada är ett för stort och komplext språk för att använda i ett litet projekt. Volymen och komplexiteten för alla moderna industrispråk är nästan densamma, och för att vara säker på detta räcker det att helt enkelt jämföra volymen av deras beskrivningar. Denna myt går tillbaka till början av 1980-talet, då Ada jämfördes med Pascal, Fortran 77 eller BASIC.

Det finns få programmerare som känner till Ada, att lära sig ett språk från grunden kräver överdriven ansträngning och tid. Faktum är att den verkliga svårigheten är att hitta specialister som förstår detaljerna i inbyggda system och kan skapa högkvalitativa program för dem. Till exempel, BAE, en av de aktiva användarna av Ada-språket, kräver inte att kandidaterna kan detta språk; istället söker man personer som är bekanta med inbyggda system och processer för att skapa programvara av industriell kvalitet. Efter att ha anställt sådana människor tar det bara två veckor att lära dem Helvetets språk.

Vår personlig erfarenhet visar att programmerare som är bekanta med den eller den formen av Pascal bara tar några dagar på sig att börja utveckla enkla program i Ada.

De befintliga Ada-teknikerna är ineffektiva; både översättare och koden de genererar har dålig prestanda. Denna myt går också tillbaka till första hälften av 80-talet, då de första implementeringarna av Ada dök upp, i själva verket bara bevisade "theorem of the Hell-translator som motsvarar standarden." Det räcker med att utföra ett antal enkla experiment genom att programmera något modellproblem i Ada, Pascal och C/C++, och sedan jämföra (med jämförbara kompilatorparametrar) kompileringshastigheten, mängden genererad kod och hastigheten på dess avrättning för att säkerställa att någon specifik ineffektivitet som är inneboende i helvetet helt enkelt inte existerar. Det kan också noteras att GNAT-programmeringssystemet, med en källkodsvolym på mer än 40 MB, är till 90 % implementerat i Ada, och dess konstruktion från källkoder (i dess kurs kompilerar den sig själv tre gånger) på en modern PC inte mer än en halvtimme.

Adas befintliga implementeringar är extremt dyra. Detta är sant, men man bör komma ihåg att det finns en allmänt tillgänglig version av GNAT-programmeringssystemet, som fritt och lagligt kan hämtas från New York Universitys programvaruförråd ( ftp://cs.nyu.edu/pub/gnat) tillsammans med källtexter

Gratis ost och hur du undviker råttfällan

GNAT (GNu Ada Translator) är en multiplattformsimplementering av Ada-språket som finns på nästan alla moderna industriella plattformar och stöder kodgenerering för populära inbäddade arkitekturer. GNAT ( www.gnat.com) implementerar Ada-standarden fullt ut, inklusive de bibliotek som klassificeras som valfria av standarden. Förutom själva HADA-översättaren innehåller GNAT en verktygslåda, där det bör noteras en avancerad integrerad utvecklingsmiljö och en flerspråkig grafisk debugger, som bland annat gör det möjligt att undersöka beteendet hos program med asynkrona processer. Översättaren och de medföljande verktygen kan användas både separat, anropa dem från kommandoraden, och inom ramen för den integrerade grafiska utvecklingsmiljön för Ada-program. Alla GNAT-komponenter, inklusive utvecklingsmiljön, har samma gränssnitt över alla plattformar. Förutom att fullt ut implementera funktionerna som beskrivs av standarden, erbjuder GNAT en rik uppsättning tillägg som standarden tillåter. GNAT är en implementering av Ada i det flerspråkiga programmeringssystemet gcc, som består av en uppsättning front-end-kompilatorer för olika inmatningsspråk med en gemensam kodgenerator, vilket avsevärt förenklar utvecklingen av program som innehåller komponenter implementerade i olika programmeringsspråk.

GNAT utvecklades och distribuerades från början under GPL-licensen. Tyvärr finns det många myter förknippade med GPL. Till exempel tror många att GPL-täckta program utvecklas av oorganiserade grupper av entusiaster och distribueras helt gratis; som ett resultat lämnar både tillförlitligheten och funktionaliteten hos sådana program mycket att önska, och tillåter dem inte att användas i några seriösa projekt. Detta är långt ifrån fallet med GNAT. För att vara övertygad om detta räcker det att titta på listan över företag som har ingått avtal med sina utvecklare för teknisk support: Boeing, British Aerospace, Lockheed, Ericsson, SAAB, Avionics, etc.

Gratis försörjning demosär en vanlig praxis för många mjukvaruutvecklare. GNAT skiljer sig genom att den fritt tillgängliga offentliga versionen är absolut full version teknik, utan några juridiska eller tekniska begränsningar för dess användning. Ett antal seriösa projekt har framgångsrikt genomförts på basis av offentliga versioner av GNAT. Programvaran för landaren Beagle 2 från den europeiska automatiska stationen Mars Express, på väg till det här ögonblicket till mars ( www.beagle2.com/index.htm), automatisk station för dokumentär kommunikation från Ryska federationens försvarsministerium ( www.ada-ru.org/prj_doc.html). Den enda nackdelen med offentliga versioner är att utvecklaren inte tillhandahåller teknisk support för dem.

Slutsats

Sammanfattningsvis ger Ada-språket utvecklare den perfekta kombinationen av integritet, konsekvens, tillförlitlighet och effektivitet. Språket stödjer kreativ kreativitet och innovation, samtidigt som det ger den disciplin och industriella nivå av mjukvaruutveckling som krävs för att implementera mjukvarusystem av stor betydelse.

Litteratur
  1. Benjamin Brosgol, Introduktion till Ada 95. www.embedded.com/story/OEG20021211S0034
  2. Stephen Zeigler, Jämför utvecklingskostnader för C och Ada. www.adaic.com/whyada/ada-vs-c/cada_art.html www.ada-ru.org... En kommenterad bibliografi över böcker om helvetets språk, publicerad på ryska, finns på webbplatsen

Högnivå, fokuserad på tillämpning i realtidssystem och designad för att automatisera uppgifterna för att kontrollera processer och/eller enheter, till exempel i ombord- (fartyg, flyg) datorer.

Ada-språket utvecklades på initiativ av det amerikanska försvarsdepartementet på 1980-talet och är uppkallat efter matematikern Ada Augusta Lovelace (1815-1851). Vid utformningen av språket fokuserades först och främst på tillförlitlighet och effektivitet - språket skapades specifikt för utvecklingen av stora realtidsmjukvarusystem för inbyggda system, till vilka höga tillförlitlighetskrav ställs; För det första är dessa militära system.
Ada-språket är baserat på idéerna om strukturerad programmering och ger utveckling av komplexa flermodulsprogram, en hög grad av maskinoberoende och portabilitet. Ada innehåller funktionerna hos Pascal-liknande språk som typdefinitioner, vanliga kontrollstrukturer och subrutiner, och framstegen inom programmeringsspråksteori sedan 1970. Språket stöder logisk modularitet, för vilken data, typer och subrutiner alla kan vara paket. Fysisk modularitet uppnås genom att kompilera separat. Ada-språket stöder realtidsprogrammering genom parallellism och mekanismer för hantering av undantag. Systemprogrammering stöds av tillgång till systemberoende parametrar och precisionskontroll av datapresentation.

År 1974 var många olika programmeringsspråk i bruk inom det amerikanska försvarsdepartementet. Detta ökade tiden och pengarna som spenderades på utveckling av nya system och på teknisk omskolning av personal. Departementscheferna kom fram till att det är nödvändigt att använda ett enda programmeringsspråk. 1975 enades en kravlista för ett sådant språk. Inget av de programmeringsspråk som fanns vid den tiden (som Pascal, ALGOL-68 eller PL/1) uppfyllde kraven. Därför beslutades 1977 att skapa ett nytt språk, och en tävling tillkännagavs för dess utveckling. Av alla förslag valdes fyra ut (som var och en var en förlängning av Pascal), för efterföljande revidering och förfining. Senare, för ytterligare förtydligande, valdes två av dem ut, och i finalen valde de ett projekt presenterat av Cii-Honeywell Bull. Detta språk fick namnet Ada (ursprungligen kallades språket DOD-1).

1983 antogs språkstandarden ANSI / MIL-STD-1815A, och 1987 - den internationella standarden ISO 8652. 1987 dök de första effektiva Ada-översättarna upp. ISO-standarden reviderades i början av 1995 (ANSI / ISO / IEC 8652). Den nya standarden fixade många av originalspråkets utelämnanden och brister och kompletterade det med många nya användbara egenskaper, såsom procedurtyper, baserade pekartyper (det vill säga pekare till icke-dynamiska objekt), hierarkiska bibliotek, ytterligare samtidighetskontroller, många standardbibliotek... Dessutom fanns i Ada-95 stöd för objektorienterad programmering.
Nästa standard fick det informella namnet Ada-2005, även om den ännu inte hade antagits 2005. Ada-gemenskapen bestämde sig för att gå bort från traditionen att informellt namnge standarden före publiceringsåret, eftersom alla dess huvudparametrar var överenskomna 2005. Språket lägger till multipla arv, en prefixform av åtkomst till objektmetoder, mer flexibla referenstyper, förbättrad uppgiftshantering och ett stort antal nya standardbibliotek. Dessutom uppfyller Ada-2005 standarden ISO / IEC 10646 (2003), som tillåter användning av bokstäverna i de ryska och grekiska alfabeten i namnen på identifierare (namn på variabler, funktioner).
Ada anses vara det vanliga programmeringsspråket för både den amerikanska militären och NATO.

Dessutom används Ada för att bygga stora system som ställs höga krav på tillförlitlighet, såsom: datorsystem för luftfart (inklusive civil); styrdatorsystem för höghastighetsjärnvägar; banksystem; industriell automation och robotik; Medicinsk utrustning; telekommunikationssystem.

Ada används på högre utbildningsanstalter i USA och Västeuropa, som grund för studier av programmering, och används ofta inom forskning och utveckling. Ada-program sköter rörelsen av tåg utan förare i Paris Metro. Ett antal företag är specialiserade på utveckling av kompilatorer, olika bibliotek och verktyg, som täcker ett brett utbud av hårdvaruplattformar och operativsystem. Förutom kommersiella utvecklingsverktyg finns det fritt tillgängliga kompilatorversioner som ObjectAda från Aonix eller GNAT från Ada Core Technologies.

Ada är det mest standardiserade programmeringsspråket. Den internationella standarden antogs innan de första fungerande versionerna av översättare dök upp, vilket undviker inkompatibiliteten mellan Ada-dialekterna. Ada överträffar SI och C++ i termer av noggrannhet av datatypning, flexibiliteten i separat kompilering, förmågan att skapa mycket pålitliga realtidssystem, tillgången till strikt kontroll över funktionsparametrar och indexöverskridanden (80 % av felen som uppstår när man skapar program i C / C ++ är relaterade till detta) och maskinoberoende representation av binära värden (istället för bitoperationer utförs hämtning av postfält). Samtidigt är Ada semantiskt och syntaktisk transparent, så det är lättare att lära sig det än Java.

Ada är underlägsen C/C++ när det gäller att stödja nya operativsystem, såväl som när det gäller tillgängligheten av underhålls-, felsöknings- och formverktyg grafiska gränssnitt... Men språkstandarden innehåller automatiskt genererade specifikationer för gränssnitt med andra programmeringsspråk, och i praktiken används Fortran matematiska bibliotek, systemfunktioner skrivna i C, Java-klasser för att arbeta med Internet tillsammans med Ada. Därför finns det flerspråkiga IDE som stöder andra språk än Ada, till exempel IBM Rational Ada Developer (C / C ++ / Ada).

Ada implementerar både automatisk sophämtning (som i Java eller C #) och möjligheten att återta minne direkt (som i C, C ++, Pascal). Som med C/C++ har Ada rika lågnivåanläggningar tillgängliga. Inbyggt stöd för multitasking är unikt för programmeringsspråket Ada och skiljer det från de flesta programmeringsspråk. Detta stöd tillhandahålls inte av tillägg eller externa bibliotek, utan av standardiserade verktyg som är inbyggda direkt i programmeringsspråket.

(Ada 2005), Eiffel (Ada 2012)

C ++, Kapell, "Drago". , Eiffel, Griffin. , Java, Nim, fallskärm bakom en båt, PL / SQL, PL / PgSQL, Ruby, Seed7, "SPARforte". , Sparkel, SQL / PSM, VHDL

Funktioner hos Ada inkluderar: stark typning, modularitetsmekanismer (paket), körtidsvalidering, parallell bearbetning (uppgifter, synkront meddelandeöverföring, skyddade objekt och icke-deterministiska urvalssatser), undantagshantering och generika. Ada 95 lade till stöd för objektorienterad programmering, inklusive dynamisk sändning.

Ada-syntaxen minimerar valet av hur grundläggande operationer ska utföras och föredrar engelska nyckelord(till exempel "eller" och "och sedan") till symboler (som "||" och "&&"). Ada använder de grundläggande aritmetiska operatorerna +, -, * och /, men undviker att använda andra tecken. Kodblock avgränsas av ord som "deklarera", "start" och "slut", där "slut" (i de flesta fall) följer identifieraren för blocket det stängs (till exempel, om slut, om... , loop ... slutet av loopen). Vid villkorliga block undviker detta riven av fortfarande, som kan paras ihop med ogiltiga kapslade if-satser på andra språk som C eller Java.

Ada är designad för utveckling av mycket stora mjukvarusystem. Ada-paket kan kompileras separat. Ada-paketspecifikationer (paketgränssnitt) kan också kompileras separat utan att kontrollera efterlevnad. Detta gör att problem kan upptäckas tidigt i designfasen, innan implementeringen påbörjas.

Ett stort antal kompileringskontroller stöds för att undvika buggar som inte kommer att upptäckas förrän vid körning på vissa andra språk, eller som kräver att explicita kontroller läggs till i källkoden. Syntaxen kräver till exempel det explicita namnet på blockstängningar för att förhindra fel på grund av felaktiga efterföljande markörer. Stark typning kan upptäcka förekomsten av standardprogramvarufel (dåliga parametrar, intervallöverträdelser, ogiltiga referenser, felaktiga typer och så vidare) antingen vid kompilering eller på annat sätt under körning. Eftersom samtidighet är en del av språkspecifikationen kan kompilatorn i vissa fall upptäcka potentiella återvändsgränder. Kompilatorer kontrollerar också rutinmässigt efter stavfel för identifierare, paketets synlighet, redundanta deklarationer, etc., och kan ge varningar och användbara tips om hur man åtgärdar felet.

Ada stöder även körtidskontroller för att skydda mot oallokerad minnesåtkomst, buffertspillfel, räckviddsöverträdelser, out-of-band-fel, arrayåtkomstfel och andra detekterbara fel. Dessa kontroller kan inaktiveras för att uppnå effektivitet, men kan ofta samlas in effektivt. Den innehåller också verktyg för att validera programmet. Av dessa skäl används Ada flitigt i kritiska system där alla anomalier kan leda till mycket allvarliga konsekvenser, såsom dödsfall till följd av en olycka, skada eller allvarlig ekonomisk förlust. Exempel på system som använder Ada är flygelektronik, ATC, järnvägar, bank, militär och rymdteknik.

Adas dynamiska minneshantering är på hög nivå och typsäker. Ada har inga generiska eller otypade pekare; och deklarerar implicit valfri pekartyp. Istället måste all dynamisk minnesallokering och -deallokering ske genom det explicit deklarerade åtkomsttyper... Varje typ av åtkomst har en motsvarande förvaringspool som hanterar detaljerna på låg nivå av minneshantering; programmeraren kan antingen använda standardlagringspoolen eller definiera nya (detta gäller särskilt för icke-uniform minnesåtkomst). Du kan till och med deklarera flera olika typer access, som alla betecknar samma typ, men använder olika lagringspooler. Dessutom ger språket tillgänglighet av kontroller, både vid kompilering och körning, vilket säkerställer det tillträdeskostnad kan inte radera den typ av objekt den pekar på.

Även om språkets semantik tillåter automatisk sophämtning av otillgängliga objekt, stöder de flesta implementeringar inte det som standard, eftersom detta skulle leda till oförutsägbart beteende på realtidssystem. Ada upprätthåller en begränsad regionform baserat på minneshantering; Dessutom kan kreativ användning av lagringspooler ge en begränsad form av automatisk sophämtning eftersom att förstöra en lagringspool också förstör alla föremål i poolen.

historia

Arbetet fortsätter med att förbättra och uppdatera det tekniska innehållet i programmeringsspråket Ada. En teknisk fix för Ada 95 publicerades i oktober 2001, och en större ändring, ISO / IEC 8652: 1995 / Amd 1: 2007, publicerades den 9 mars 2007 På Ada-Europe 2012-konferensen i Stockholm, Ada Resources Association (ARA) och Ad -Europe tillkännagav slutförandet av designen senaste versionen programmeringsspråket Ada och skicka in referensmanualen till International Organization for Standardization (ISO) för godkännande. ISO / IEC 8652: 2012 publicerades i december 2012.

Andra relevanta standarder inkluderar ISO 8651-3:1988 Informationsbehandlingssystem, datorgrafik, grafiksystemkärna (GKS) bindande språk - Del 3: Ada .

Språkkonstruktioner

"Hej världen!" i Ada

Ett typiskt exempel på ett sådant språk i syntax är Hello world-programmet: (hello.adb)

med Ada.Text_IO; använd Ada.Text_IO; proceduren Hej är att börja Put_Line ("Hej världen!"); slut Hej;

Detta program kan kompileras med den kostnadsfria GNAT-kompilatorn med öppen källkod genom att köra

gnatmake hello.adb

Datatyper

Adas typsystem är inte baserat på en uppsättning fördefinierade primitiva typer, utan tillåter användare att deklarera sina egna typer. Detta uttalande bygger i sin tur inte på den interna representationen av typen, utan på en beskrivning av det mål som måste uppnås. Detta gör det möjligt för kompilatorn att bestämma den lämpliga minnesstorleken för en given typ, och att kontrollera för kompileringstid och körtidstyp slutledningsöverträdelser (d.v.s. intervallöverträdelse, buffertspill, typkonsistens, etc.). Ada stöder numeriska typer definierade i intervall, modulotyper, aggregattyper (poster och arrayer) och uppräkningstyper. Åtkomsttyper definierar en referens till en instans av den angivna typen; oskrivna pekare är inte tillåtna. Specialtyper tillhandahålls i problemtypspråket och skyddade vyer.

Till exempel kan ett datum representeras som:

typ Day_type är intervall 1 .. 31; typ Month_type är intervall 1 .. 12; typ Year_type är intervallet 1800 .. 2100; typ Timmar är mod 24; typ Weekday är (måndag, tisdag, onsdag, torsdag, fredag, lördag, söndag); typ Datum är rekord Dag: Dag_typ; Month: Month_type; År: Year_type; slutrekord;

Typer kan kvalificeras genom att deklarera undertyper:

subtyp Working_Hours är timmars intervall 0 .. 12; - högst 12 timmar att arbeta om dagen undertyp Working_Day är veckodagsintervall måndag .. fredag; - Dagar till arbete Work_Load: konstant array (Arbetsdag) av Working_Hours - implicit typdeklaration: = (fredag ​​=> 6, måndag => 4, andra => 10); - uppslagstabell för arbetstider med initiering

Typer kan ha modifierare som t.ex begränsad, abstrakt, privat etc. Privata typer kan nås och begränsade typer kan endast ändras eller kopieras inom paketet som endast definierar dem. Ada 95 lägger till ytterligare funktioner för objektorienterad typtillägg.

Kontrollstrukturer

Ada erbjuder också skyddade föremål för ömsesidig uteslutning. Skyddade objekt är monitorliknande konstruktioner, men använder skyddande istället för villkorsvariabler för signalering (liknande villkorliga kritiska områden). Bevakade anläggningar kombinerar datainkapsling och säker ömsesidig uteslutning från monitorer, såväl som säkerhetsvakter från villkorliga kritiska områden. Den största fördelen gentemot klassiska monitorer är att villkorsvariabler inte krävs för signalering, vilket undviker potentiella dödlägen på grund av felaktig låssemantik. Liksom uppgifter är den säkerbara en inbyggd avgränsad typ, och den har också en del- och kroppsdeklaration.

Det skyddade objektet består av inkapslade personuppgifter (som endast kan nås inom det skyddade objektet), samt rutiner, funktioner och register som garanterat utesluter varandra (med det enda undantaget för funktioner som är nödvändiga för att vara en bieffekt gratis. Således och kan arbeta samtidigt med andra funktioner). Uppgiften att anropa ett säkerställbart objekt blockeras om en annan uppgift för närvarande körs i samma säkerhetsobjekt, och släpps när den andra uppgiften lämnar den säkerhetsbara. Blockerade uppgifter står i kö vid det skyddade objektet vid den beställda ankomsttiden.

Skyddade objektdata liknar procedurer, men har dessutom skydd... Om vakten utvärderar till falskt, blockeras utmaningsuppgiften och läggs till i denna posts kö; Nu kan en annan uppgift tillåtas till det säkerhetsbara objektet, eftersom ingen av uppgifterna för närvarande exekveras inuti det säkerhetsbara objektet. Vakterna omvärderas när en uppgift lämnar den bevakade anläggningen, eftersom det är den enda gången som vakternas betyg kan ändras.

Spela in samtal kan vara återställd i kö för andra poster med samma signatur. Uppgiften som återställs i kö blockeras och läggs till i målpostkön; detta innebär att det säkrade objektet släpps och tillåter en annan uppgift att accepteras.

Vänligen välj operatören i Ada kan användas för att implementera icke-blockerande ingångssamtal och accepterar, icke-deterministiskt postval (även bevakat), timeout och avbryter.

Följande exempel illustrerar några av de samtidiga programmeringskoncepten i Ada.

med Ada.Text_IO; använd Ada.Text_IO; procedur Trafiken är typ Airplane_ID är intervall 1.. tio; - 10 flygplans uppgiftstyp Flygplan (ID: Airplane_ID); - uppgift som representerar flygplan, med ID som initialiseringsparameter typ Airplane_Access är access Airplane; - referenstyp till flygplansskyddad typ Runway är - den delade banan (skyddad för att tillåta samtidig åtkomst) post Assign_Aircraft (ID: Airplane_ID); - Alla bidrag är garanterade ömsesidigt uteslutande ingång Cleared_Runway (ID: Airplane_ID); ingång Wait_For_Clear; privat Rensa: Boolean: = Sant; - skyddad privat data - i allmänhet mer än bara en flagga ... slut landningsbana; typ Runway_Access är åtkomst till alla Runway; - Flygledaruppgiften tar emot förfrågningar om start och landning uppgiftstyp Controller (My_Runway: Runway_Access) är - uppgiftsposter för synkron meddelandeöverföring ingång Request_Takeoff (ID: in Airplane_ID; Takeoff: out Runway_Access); ingång Request_Approach (ID: in Airplane_ID; Approach: out Runway_Access); slutkontroller; - tilldelning av instanser Runway1: aliased Runway; - instansiera en bana Controller1: Controller (Runway1 "Access); - och en kontrollant för att hantera det ------ implementeringarna av ovanstående typer ------ skyddad kropp Runway är entré Assign_Aircraft (ID: Airplane_ID) när Clear är - infartsvakten - anropsuppgifter blockeras tills villkoret är sant börja Rensa: = Falskt; Put_Line (Flygplans-ID "Bild (ID) &" på landningsbanan "); slut; inträde Cleared_Runway (ID: Airplane_ID) när inte Rensa börjar Rensa: = Sant; Put_Line (Airplane_ID" Bild (ID) & "rensad bana"); slutet; posten Wait_For_Clear när Rensa är start null; - du behöver inte göra någonting här - en uppgift kan bara komma in om "Rensa" är sant slutet; slut landningsbana; uppgiftskroppen Controller är start loop My_Runway. Wait_For_Clear; - vänta tills startbanan är tillgänglig (blockerande samtal) Välj - vänta på två typer av förfrågningar (den som kan köras först) när Request_Approach "count = 0 => - guard statement - acceptera endast om det inte finns några uppgifter i kö på Request_Approach acceptera Request_Takeoff (ID: i Airplane_ID; Takeoff: out Runway_Access) gör - start av synkroniserad del My_Runway. Tilldela_flygplan (ID); - reservbana (potentiellt blockerande samtal om skyddat objekt är upptaget eller infartsvakt falsk) Start: = My_Runway; - tilldela "out" parametervärde för att tala om för flygplanet vilken bana avsluta Request_Takeoff; - slutet av den synkroniserade delen eller acceptera Request_Approach (ID: in Airplane_ID; Approach: out Runway_Access) gör My_Runway. Tilldela_flygplan (ID); Approach: = My_Runway; avsluta Request_Approach; eller - avsluta om inga uppgifter kvar som kunde ringa avsluta; slut välja; ändslinga; slutet; uppgiftskropp Flygplan är Rwy: Runway_Access; börja Controller1. Request_Takeoff (ID, Rwy); - Detta anrop blockerar tills kontrolluppgiften accepterar och slutför acceptblocket Put_Line (Airplane_ID "Bild (ID) &" lyfter ... "); fördröjning 2.0; Rwy. Cleared_Runway (ID); - anrop kommer inte att blockeras eftersom "Clear" i Rwy nu är falskt och inga andra uppgifter ska finnas i skyddat objekt fördröjning 5,0; - flyga runt lite ... loop select - försök att begära en runway Controller1. Request_Approach (ID, Rwy); - det här är ett blockerande samtal - kommer att köras när kontrollenheten når acceptblocket och återkommer vid slutförandet utgång; - om samtalet returnerades är vi klara för landning - lämna välj block och fortsätt ... eller fördröjning 3.0; - timeout - om inget svar inom 3 sekunder, gör något annat (allt i följande block) Put_Line (Airplane_ID "Image (ID) &" in holding pattern "); - skriv helt enkelt ut ett meddelande end select; end loop; delay 4.0; - gör landning ... Put_Line (Airplane_ID" Bild (ID) & "touch down! "); Rwy. Cleared_Runway (ID); - meddela landningsbanan att vi är klara här. slutet; New_Airplane: Airplane_Access; börja för I i Airplane_ID "Range loop - skapa några flygplansuppgifter New_Airplane: = nytt flygplan (I); - kommer att börja köras direkt efter skapandet fördröjning 4,0; ändslinga; slut Trafik;

Pragmas

Ett pragma är ett kompilatordirektiv som skickar information till kompilatorn för att tillåta specifik manipulation av den kompilerade utdata. Vissa pseudokommentarer är inbyggda i språket, medan andra är implementeringar.

Exempel på vanlig kompilatoranvändning av pragmas skulle inaktivera vissa funktioner, såsom kontroll av körtidstyp eller kontroll av arrayindexgränser, eller instruera kompilatorn att infoga objektkod istället för att anropa en funktion (i C/C++ gör det det med inline-funktioner).

  • APSE - Specifikation för en programmeringsmiljö för att stödja mjukvaruutveckling i Ada
  • Ravenscar Profile är en undergrupp av Ada multitasking-funktioner utformade för att säkra kritisk hård realtidsdator
  • SPARK (programmeringsspråk) - ett programmeringsspråk som består av en mycket begränsad delmängd av Ada, kommenterad med metainformation som beskriver det önskade beteendet hos komponenten och individuella krav vid körning