Ada | |
---|---|
Semantik | multiparadigm : konkurrenskraftig , generaliserad, imperativ , objektorienterad , distribuerad programmering, parallell |
Språkklass | brett spektrum programmeringsspråk [d] ,multiparadigm programmeringsspråk,imperativt programmeringsspråk,objektorienterat programmeringsspråkochprogrammeringsspråk |
Utförandetyp | sammanställt |
Framträdde i | 1980 |
Författare |
|
Utvecklaren | Ishbia, Jean och S. Tucker Taft [d] [1] |
Släpp | Ada 2012 (10 december 2012 ) |
Testversion | Ada 2012 [3] (november 2011 ) |
Typ system | statisk , strikt , säker , nominativ |
Stora implementeringar |
AdaCore GNAT , MapuSoft Ada-C/C++ Changer (AdaMagic) [4] , Green Hills Software Optimizing Ada 95-kompilator, PTC ObjectAda [5] , DDC-I Score |
Dialekter | SPARK , Ravenscar profil |
Blivit påverkad | ALGOL 68 , Pascal , C++ (Ada 95), Smalltalk (Ada 95), Java (Ada 2005), Eiffel (Ada 2012) |
påverkas | C++, Eiffel , M10, M9.3, MAYA, Seed7 , PL/SQL , Nim |
Hemsida | adaic.org |
Mediafiler på Wikimedia Commons |
Ada ( Ada ) är ett programmeringsspråk skapat 1979-1980 som en del av ett US Department of Defense - projekt för att utveckla ett enhetligt programmeringsspråk för inbyggda system (det vill säga realtidskontrollsystem för automatiserade system). Först och främst tänkte de på kontrollsystemen ombord för militära anläggningar (fartyg, flygplan, stridsvagnar, missiler, granater, etc.). Utvecklarna hade inte till uppgift att skapa ett universellt språk, så de beslut som fattas av författarna till Ada bör fattas i samband med funktionerna i det valda ämnesområdet. Språket är uppkallat efter Ada Lovelace .
I sin ursprungliga form, standardiserad 1983, är Ada ett strukturerat , modulärt programmeringsspråk som innehåller parallella processprogrammeringsverktyg på hög nivå. Adas syntax ärvs från språk som Algol eller Pascal , men utökas och görs mer rigorös och logisk. Ada är ett starkt skrivet språk , det utesluter arbete med objekt som inte har typer , och automatiska typkonverteringar reduceras till ett absolut minimum: det är tillåtet att implicit casta värdet av ett vanligt heltal eller verklig numerisk typ till en kompatibel numerisk typ [6] . I 1995 års standard lades grundläggande objektorienterade programmeringsverktyg till språket , i 2007 års standard kompletterades dessa verktyg, så moderna Ada är ett objektorienterat programmeringsspråk.
Språket är skiftlägesokänsligt. Syntaxen är Algol-liknande, i andan av språken från det sena 1970-talet: alla kontrollstrukturer som börjar med ett nyckelord slutar med ett nyckelord och låter dig placera valfritt antal operatorer inuti, vilket eliminerar den ofta kritiserade nackdelen som är inneboende i Algol-60 och Pascal: behovet av frekvent användning av "operatörsfästen" begin-end. Syntaxdetaljerna är utformade för att minska risken för oavsiktliga fel. Det är till exempel förbjudet att använda flera understreck i rad i identifierare. De sista nyckelorden för olika kontrollstrukturer är olika: en villkorlig sats ifslutar med en kombination end if, loopar med en kombination end loop, en flervalsoperator end caseetc. Strukturell undantagshantering stöds på språkets syntaxnivå .
Språket har ett utvecklat typsystem, 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 en typ och en undertyp är kompatibla, variabler av en typ och dess härledda typ är inte det.
Procedurer och funktioner stöder in- och utgångsparametrar, överföring av parametrar med namn och parametrar med standardvärden. Omdefiniering av procedurer, funktioner och operatorer stöds - skapandet av flera varianter av en procedur, funktion eller operator med samma namn, men olika signaturer (typer och antal parametrar).
Program är modulära, mekanismen för att kontrollera import/export av beskrivningar mellan moduler inkluderar två olika direktiv: ett för att ansluta en annan modul ( with), det andra för att importera dess beskrivningar ( use). Det är också möjligt att byta namn på modulen vid import ( rename) - det här alternativet låter dig använda identifierare som är bekvämare för programmeraren att utse paketet. Paket (en av modulerna) kan innehålla en rubrik och en privat del - det som finns i det exporteras inte och är inte tillgängligt för andra moduler. Mekanismen för generaliserade (generiska) moduler stöds : paket, procedurer och funktioner som låter dig beskriva databehandlingsalgoritmer utan att ange en specifik typ.
Parallella programmeringsstödstrukturer är inbyggda i språket : begreppen "uppgift" (ett programfragment som körs parallellt), "uppgiftsinmatning" (ett sätt att synkronisera och kommunicera parallella uppgifter) stöds, mötesmekanismen stöds (ett protokoll för interaktion av parallella uppgifter genom inmatning av en av dem, finns det en valoperatör SELECTför att organisera villkorad inter-tråd-interaktion (välja 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 kraven på tillförlitlighet är språket utformat på ett sådant sätt att så många fel som möjligt upptäcks i kompileringsstadiet . Ett av kraven i utvecklingen av språket var dessutom programtexternas lättaste läsbarhet , till och med på bekostnad av lättheten att skriva [7] . Resultatet av detta tillvägagångssätt var en något "tungvikts" syntax och många begränsningar som saknas i de vanligaste allmänna språken (som C och C ++ ), 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 [8] .
Exempelprogram Hej världen! »:
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 funktionen, importeras Put_Linepaketet som innehåller den Ada.Text_IOmed användningskonstruktionen, vilket gör det möjligt att anropa funktionen vid namn utan förbehåll - med angivande av namnet på paketet som innehåller funktionen i anropet.
Utvecklingen av språket var en del av en internationell tävling som organiserades och finansierades av det amerikanska försvarsdepartementet . Målet med utvecklingen var att få fram ett programmeringsspråk som kunde bli ett enhetligt språk för utveckling av projekt beställda av militäravdelningen, främst för utveckling av inbyggda militära system och för stora militära datorer (baserat på iAPX 432 -processorn från Intel ). Arbetet började 1975 med bildandet av en uppsättning språkkrav som fullt ut skulle tillfredsställa utvecklarna av system av denna typ. Den initiala listan över krav, utfärdad under kodnamnet "Strawman" ("Straw"), lämnades in för granskning till ett antal organisationer och företag, under två år förfinades den konsekvent och gick igenom "Woodenman" ("Wooden") , "Tinman" ("Tin"), "Ironman" ("Iron") och förvandlades så småningom till ett slutdokument som heter "Steelman" ("Stål"). Steelman släpptes i juni 1978 [DoD 1978] [9] .
Redan innan det slutgiltiga slutförandet av kravbildningen visade analysen att inget av de befintliga programmeringsspråken uppfyller kraven tillräckligt, så beslutet togs att utveckla ett nytt språk. En tävling för dess skapande tillkännagavs 1977 , utvecklarna ombads att basera 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 vidareutveckling. I nästa steg, av 4 projekt, valdes två ut, varav ett valdes efter ytterligare en revidering. Detta språk kallades "Ada" - gruppen som utvecklade det, ledd av fransmannen Jean Ishbia , döpte språket för att hedra Augusta Ada King Lovelace (1815-1852), dotter till poeten George 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 gjort "Ada" till ett registrerat varumärke, vilket förbjuder utgivningen av översättare av språket som inte har klarat det officiella testförfarandet för efterlevnad av standarder. Proceduren bestod i att köra ett stort antal (mer än 1000) testprogram (den så kallade ACVC-uppsättningen) genom kompilatorn som testades , för var och en av vilka testresultatet otvetydigt bestämdes: antingen framgångsrik kompilering eller utfärdande av en mycket specifikt felmeddelande. Testningen utfördes enligt "allt eller ingenting"-principen - om det uppstod ett fel vid bearbetningen av minst ett testfall ansågs kompilatorn inte ha klarat testet, och testningen var endast giltig på hård- och mjukvaruplattformen på vilket det genomfördes. På detta sätt kvävdes möjligheten till bildandet av dialekter av Ada-språket i knoppen.
1987 standardiserades Ada-språket officiellt av ISO . Sedan dess har det amerikanska försvarsdepartementet placerat språket i offentlig egendom .
År 1990 fanns det redan cirka 200 kompilatorer i världen som motsvarade Ada-språkstandarden.
1995 antogs en ny Ada-standard, känd som Ada95. Objektprogrammeringsverktyg introducerades i språket. Dessutom kompletterades språket med mer avancerade verktyg för att interagera med program skrivna på andra språk.
I mars 2007 publicerades ändringar av Ada-standarden [10] . De berörde främst möjligheterna med objektorienterad programmering : gränssnitt infördes , syntaxen för att anropa en metod, som är vanlig för de flesta hybridspråk, antogs och ett antal tillägg gjordes.
2012 antog och publicerade ISO en ny språkstandard [11] .
1984 gav den sovjetiska journalisten Melor Sturua i tidningen Izvestia följande bedömning av programmeringsspråket Ada:
Pentagonspråket är världens fiende. Språket "Ada" är det termonukleära helvetets röst... På "Adas" språk hör man en förbannelse över mänskligheten.
- M. G. Sturua . 1984 och "1984" [12]På 1980-talet organiserades en arbetsgrupp om Ada-språket under USSR State Committee for Science and Technology . Gruppen var engagerad i studien av alla öppna (och, enligt rykten, erhållna av hemlig intelligens) data om Ada-språket och undersökte möjligheten och ändamålsenligheten att utveckla och använda Ada i Sovjetunionen. Denna grupps verksamhet ledde i slutet av 1980-talet till utvecklingen av Ada-kompilatorer för nästan alla datorer som används i Sovjetunionen. Flera böcker om Ada-språket har publicerats på ryska.
Vid Moscow State University har man arbetat med att skapa sina egna paket för att testa annonsöversättare för överensstämmelse med standarder. I Leningrad State University , för att skapa ett Ada-system, 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 arbetet med distributionen av Ada praktiskt taget. Det är sant att tre program för utveckling av mjukvaruutveckling på Ada antogs (i försvarsministeriet , ministeriet för civil luftfart och ministeriet för utbildning och vetenskap ), men deras utveckling är långsam och okoordinerad. Som ett resultat är Ada-språket föga känt i Ryssland , de flesta 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. Språket används dock för industriell mjukvaruutveckling. Det finns flera projekt utvecklade på Ada och arbetar i Ryssland. Bland dem:
Sedan starten har Ada kritiserats av några erkända myndigheter inom området för utveckling 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 den första etappen), samt Edsger Dijkstra .
Dijkstra tvivlade på att ett så komplext språk som Ada kunde ses och hanteras.
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 det; 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 i 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 om dess utvecklare kan dölja att de erbjuder ett ohanterligt 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 "skallror och prydnadssaker har haft företräde framför 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 Ada-kompilatorn." Niklaus Wirth talade mer reserverat, men också negativt. Han sa: "Det slängs för mycket 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 över dem, och detta kommer att leda till obehagliga konsekvenser . Jean Ishbia , Adas ledare för utvecklingsteamet, samtidigt som han uttryckte sin "respekt och beundran" för Wirth, höll inte med och sa: "Wirt tror på enkla lösningar på komplexa problem. Jag tror inte på sådana mirakel. Komplexa problem kräver komplexa lösningar.”
Förfarandet för att kontrollera kompilatorns överensstämmelse med språkstandarden genom att testa väcker också tvivel. Av allmänna överväganden är det tydligt 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 [14] .
Anhängare av Ada 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 kompatibilitetsproblem, vilket Ada uppfanns för att bli av med. De noterar också att begreppet komplexitet i Ada-utveckling endast delvis är sant: att skriva ett enkelt program i Ada tar mer tid än i andra mindre formella språk som C , men att felsöka och underhålla program, särskilt stora och komplexa program, är mycket förenklat. Enligt Stephen Zeiger från Rational Software Corporation [15] ä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.
I praktiken visade det sig att Ada, efter att ha ockuperat den nisch som var avsedd för den i den militära och relaterade utvecklingen av inbyggda system, inte gick utöver denna nisch vare sig i väst, eller i Sovjetunionen eller i det postsovjetiska rymden. Det finns många anledningar till detta. Motståndare till språket vilar på dess komplexitet och brister, anhängare talar först och främst om de objektiva omständigheterna för språkets utseende och de negativa aspekterna av processen för dess genomförande. Enligt S. I. Rybin, senior forskare vid Moscow State University, konsult för AdaCore EU, expert på Ada-språket i ISO-arbetsgruppen för språkstandarden [14] , har Ada sina misslyckanden att tacka två huvudorsaker:
Icke desto mindre, enligt vissa försiktiga prognoser, med billigare hårdvara och spridningen av inbyggda system med komplex programvara, kan marknaden för program i Ada växa avsevärt:
… Ada är ganska fast i nischen av stora inbyggda system med höga krav på tillförlitlighet, och det är osannolikt att det kommer att ge vika för någon i denna nisch inom överskådlig framtid. I takt med att hårdvarukomponenternas prestanda stiger samtidigt som deras kostnad sjunker, blir inbyggda system mer och mer komplexa, och det kan visa sig att den potentiella marknaden för Ada-applikationer snart kommer att växa betydligt.
— Intervju med S.I. Rybina [14]Dessutom har Ada, om än mycket begränsade, applikationer inom högre utbildning. Specialkurser om Ada undervisas vid Moscow State University och Kharkov University. Men enligt samma S.I. Rybin ,
... nu i det postsovjetiska rummet inom mjukvaruindustrin och utbildningsområdet har en uppenbar ond cirkel utvecklats: i branschen känner de praktiskt taget inte till Ada, respektive, det finns ingen efterfrågan från industrin på utbildning för att utbilda Ada-specialister och nya människor kommer från universitet till branschen som praktiskt taget inte vet något om Ada.
Ett antal operativsystem är skrivna i Ada, bland dem MarTE Arkiverad 10 juli 2017 på Wayback Machine , RTEMS (ett system med öppen källkod utvecklat av DARPA , US Department of Defense , som används i raketsystem och ombord på Mars Reconnaissance Orbiter som en styrradiomodul "Electra"), Ravenskar , RTOS-32 . Flera fler projekt för att skapa operativsystem på Ada är under utveckling, bland dem - AuroraUX - ett projekt för att skriva om OpenSolaris -kärnan , och sedan - DragonFly BSD , samt ett projekt för att skapa ett Lovelace- system på L4 -mikrokärnan .
Tidigare fanns det andra operativsystem skrivna i Ada, bland dem - BiiN, Pulse, AdaOS.
För närvarande utvecklas operativsystemet Muen [16] , skrivet i Ada och SPARK, pedagogiska OS Ada Bare bones [17] , Microkernel Ada (TAMP [18] ) används.
namn | Företag | Version | Målplattformar | Hemsida |
---|---|---|---|---|
DragonLace-projektkompilatorer (GNAT AUX och framtida DRACO Ada-kompilatorer) | samhällsprojekt | Ada - alla versioner av språket; kompilatorversioner: 4.9.x eller 6.3.x (för olika plattformar) | LLVM, DragonFly, FreeBSD, NetBSD, OpenBSD, OmniOS, Android | http://www.dragonlace.net/ Arkiverad 31 mars 2018 på Wayback Machine |
Ada-C/C++ Changer (baserad på AdaMagic-teknik) | MapuSoft | Ada 83, Ada 95, en delmängd av Ada 2005 | C, C++ | www.mapusoft.com Arkiverad 21 november 2016 på Wayback Machine |
Ada/Ed | New York University | Ada 83 | MS-DOS x86 , UnixWare | www2.informatik.uni-stuttgart.de |
AdamMagic | SofCheck | Ada 95 | ? | www.sofcheck.com Arkiverad 4 mars 2021 på Wayback Machine |
AdamMULTI | Green Hills programvara | Ada 83, Ada 95, C , C++ , Fortran | Solaris SPARC , GNU / Linux x86 , Windows | www.ghs.com Arkiverad 15 januari 2021 på Wayback Machine |
DEC Ada | Hewlett Packard | Ada 83 | openvms | h71000.www7.hp.com |
KNOTT | AdaCore | Ada 83, Ada 95, Ada 2005, Ada 2012, C | Solaris SPARC, Linux x86/ x86-64 , Windows, Java Virtual Machine , andra | libre.adacore.com Arkiverad 12 februari 2005 på 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 Arkiverad 2 maj 2009 på Wayback Machine |
Janus/Ada | RR programvara | Ada 83, Ada 95 | SCO , UnixWare , Interactive , MS-DOS , Windows | www.rrsoftware.com Arkiverad 21 januari 2022 på Wayback Machine |
MAXAda | Samverkande | Ada 95 | Linux/ Xeon , PowerPC | www.ccur.com Arkiverad 3 september 2011 på Wayback Machine |
ObjectAda | PTC | Ada 95, Ravenskar | Solaris SPARC, VxWorks , HP-UX , IBM AIX , Linux, Windows, Java Virtual Machine /Java med webbläsarstöd | www.ptc.com Arkiverad 10 oktober 2016 på Wayback Machine |
PowerAda | OC-system | Ada 83, Ada 95 | Linux, AIX (Ada 95); IBM System 370/390 (Ada 83) | www.ocsystems.com Arkiverad 24 augusti 2010 på Wayback Machine |
Rationell Apex | IBM Rational | Ada 83, C, C++ | Solaris SPARC Linux | www-01.ibm.com Arkiverad 27 september 2009 på Wayback Machine |
GÖRA | 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 | XGC programvara | Ada 83, Ada 95, C | Solaris SPARC, PC Linux, Windows ( Cygwin ) | www.xgc.com Arkiverad från originalet den 9 februari 2013. |
LLVM ( Low Level Virtual Machine ) | LLVM Developer Group | på de flesta UNIX-liknande system och Windows | llvm.org | |
A# (port av Ada till Microsoft .NET- plattformen ) | United States Air Force Academy ( GNU ) | Windows | asharp.martincarlisle.com Arkiverad 2 juli 2011 på Wayback Machine |
Med undantag för LLVM , GNAT och XGC (för vissa plattformar) betalas ovanstående kompilatorer. Vissa företag, som Aonix , erbjuder gratis demos som antingen är begränsade i tid eller funktionalitet.
Utvecklingsmiljöerna NetBeans [19] och Eclipse har plugins för att arbeta med Ada.
Adas syntax återges till stor del i språk som PL/SQL (och senare PL/pgSQL ), VHDL , SPARK .
I programmeringsspråken E [20] och Clarity [21] , sedan i många andra: till exempel i språken Erlang , Fortress , Chapel , X10 , D och Go , idéerna om distribuerad, multitasking, multithreaded computing , som implementeras av språket självt, vidareutvecklades, och inte av externa bibliotek, som först användes allmänt i praktiken i Ada-språket.
Programmeringsspråk | |
---|---|
|