Menu
Jest wolny
rejestracja
Dom  /  NA/ Urodziny piekła języka programowania. Chcesz wiedzieć wszystko

Urodziny piekła języka programowania. Chcesz wiedzieć wszystko

Siergiej Bobrowski

Historia tego języka nie zaczyna się w 1975 roku, kiedy Departament Obrony USA podjął decyzję o rozpoczęciu prac nad ujednoliconym językiem programowania dla amerykańskich sił zbrojnych, a później dla całego NATO. Jej historia zaczyna się od imienia, bo Ada to imię Augusty Ady Lovelace, uważanej za pierwszą programistkę, córki angielskiego poety Byrona i pewnej Anabelli Milbank, z którą jej mąż rozstał się na zawsze miesiąc po jej urodzeniu. córka, która urodziła się 10 grudnia 1815 r. Generalnie historia cybernetyki owiana jest mroczną tajemnicą i tylko na podstawie fragmentarycznych faktów można sądzić, że założycielami tej nauki w ostatnich dwustu latach byli różni mistycy i okultyści, począwszy od Augusta de Morgana, jednego z nauczyciele Ady, a kończąc na współpracownikach Norberta Wienera, którzy badali metody kształtowania opinii publicznej i manipulacji.

Po tym, jak Charles Babbage skonstruował swoją mechaniczną maszynę obliczeniową, Ada napisała dla niej pierwszy program do obliczania współczynników Bernoulliego. W przyszłości opracowała prawdziwą teorię programowania, wprowadziła pojęcie cyklu i kilka innych kluczowych terminów, które studenci kierunków cybernetycznych studiują dziś niemal dosłownie! Dziś Ada znana jest wszystkim jako pierwsza programistka – i nic więcej, ale zastanawiam się, dlaczego młoda dziewczyna ma tak wyjątkowe zdolności? Na to pytanie sama odpowiedziała szczerze: „Przysięgam na diabła, że ​​w ciągu 10 lat wysysam z tajemnic Wszechświata pewną ilość życiodajnej krwi i to w sposób, którego nie potrafiły zwykłe śmiertelne umysły i usta. Przerażająca energia i siła wciąż tkwi niewykorzystana w mojej małej elastycznej istocie...”. Nie było jednak sponsorów projektu komputerowego - nie było jeszcze pocisków nuklearnych, a Ada, straciwszy cały majątek na wyścigach i wdając się w brudną historię, zmarła w wieku 37 lat, podobnie jak jej słynny ojciec.

Dlatego też, czy Amerykanie powinni byli tak bardzo wychwalać Adę, używając jej nazwiska jako nazwy tak ambitnego projektu, jest bardzo kontrowersyjną kwestią.

Wróćmy jednak do historii samego języka. Pięć lat po rozpoczęciu projektu setki ekspertów wybrało spośród 17 wariantów jedyny język spełniający wymagania MO, opracowany przez niewielką grupę pod przewodnictwem utalentowanego naukowca Jeana Ishbii. Ostateczna wersja międzynarodowej normy ISO 8652: 1987 została opublikowana w 1987 roku. Według oficjalnych doniesień w tworzeniu i doskonaleniu tego języka uczestniczyli wszyscy najlepsi na świecie specjaliści w dziedzinie programowania, co jednak budzi wątpliwości. Potwierdza to na przykład brak koncepcji obiektu w oryginalnej wersji Ady i brak udziału, z oczywistych względów, w tym projekcie sowieckich programistów.

Na całym świecie w rozwój infrastruktury Ady zainwestowano dziesiątki miliardów dolarów. Doprowadziło to do pojawienia się ambitnych stwierdzeń typu „Wiek XX minie pod znakiem Ady”, jednak życie jak zwykle postawiło wszystko na swoim miejscu.

Na nieszczęście dla Departamentu Obrony USA (a tym samym na szczęście dla „potencjalnych przeciwników Ameryki”) opracowanie jasnego standardu dla tego języka i stworzenie skutecznych kompilatorów zostało zakończone właśnie w tym czasie (początek lat 80.), kiedy oprogramowanie na horyzoncie wyłaniał się już przemysł.Nowy język C++ z ideologią przedmiotową. Teraz trudno powiedzieć, co czuł komitet ds. rozwoju Ady, widząc rosnącą popularność C++ i stary, dobrze zapomniany paradygmat myślenia obiektowego. Ale przyznane środki zostały już wydane, standard został stworzony i nie było odwrotu.

Struktura Ady jest bardzo podobna do Pascala, a dokładniej do Moduli. Składnia większości operatorów i opisów jest niemal identyczna jak w przypadku Moduli, chociaż pojawiła się niemal w tym samym czasie co Ada i trudno powiedzieć, kto wpłynął na kogo lub czy w ogóle. W szczególności w Adzie dodano sporo różnych rozszerzeń, więc tego języka nie można nazwać kompaktowym, w porównaniu z tym samym Pascalem. Pod względem liczby możliwości bardziej przypomina PL/1. Ale ponieważ główny nacisk twórców Ady położono na spełnienie życzeń amerykańskich „pierwszych wydziałów”, środki ochrony danych (widoczność) i możliwość tworzenia osobnych bloków przy użyciu wyłącznie specyfikacji (opisów interfejsów modułów) od innych deweloperów były najdoskonalsze na swój czas. Na przykład programista, który faktycznie napisał kod do obliczania trajektorii pocisku samosterującego, nie miał pojęcia, gdzie i do jakich celów będzie używany jego moduł, chociaż miał dostęp do wymaganych specyfikacji innych pracowników i mógł debugować swoją sekcję kodu bez jakieś problemy. Ze względu na ścisłe rozgraniczenie dostępu do różne poziomy specyfikacje, czasami nawet nie da się określić, za co iw jaki sposób ta procedura zostanie wywołana. Jednak to pragnienie samodzielnego tworzenia oprogramowania doprowadziło do bardzo złożonego systemu powiązań między specyfikacjami modułów i pojawienia się pewnych „dziur”, które mogą powodować skutki uboczne, których obecność jednak stwierdził to Departament Obrony USA nawet przydatne.

Elementy typowania danych zostały znacznie wzmocnione, a same typy zostały bardziej sformalizowane. Wszystkie funkcje I/O zostały usunięte ze standardowej składni, a obsługa wyjątków stała się integralną częścią języka. Ponadto moc konstrukcji sterujących została doprowadzona do granic możliwości, czyniąc Adu najbardziej zaawansowanym z innych języków podobnych do Pascala.

Borland wkrótce wypuścił swój Turbo Pascal, w którym zbudowano koncepcję modułu i zbliżył swoją wersję Pascala do Ady pod względem możliwości, ale w przyszłości podejmuje próby stworzenia nieobiektowych języków programowania 3. generacji przeznaczone do rozwoju ultra-dużych projektów, na szczęście nie zostały wykonane. Tak więc Ada położyła kres długiej linii prostych języków proceduralnych, zaczynając od Fortran i Algol. W rzeczywistości wszystko, o czym można było pomyśleć w ramach ideologii programowania strukturalnego, zostało zawarte w piekle. Potem rozkwitło programowanie obiektowe, a Ada zniknęła w tle.

Jednak ten język nadal zajmuje jedną niszę, w której nie ma jeszcze sobie równych. Oprócz samodzielnego kompilowania modułów i zapewnienia hierarchicznej tajemnicy specyfikacji, język ten zaimplementował taką właściwość, jak obsługa programowania równoległego. Wzięty na mniej więcej wysokim poziomie w Algolu-68, a następnie opracowany w Module-2, został ucieleśniony w bardzo potężnych narzędziach Ady, tak zwanych zadaniach, które można wykonywać niezależnie od siebie na równoległych komputerach. Doprowadziło to do narodzin całej ideologii programowania opartej na zadaniach, które można było wykonywać „pseudo-równolegle” – na komputerze z jednym procesorem. W tym przypadku sam rozwiązywany problem został podzielony na zestaw równolegle działających procedur, które niezależnie oddziałują na siebie. Przypominało to trochę sposób na rozwiązanie problemu w Prologu: pewien wirtualny świat jest po prostu opisany, a następnie niejako „uruchamiany” do działania i rozwiązanie znajduje się samo.

Tym bardziej zaskakujące jest to, że Departament Obrony USA, z tego czy innego powodu, porzucił ideologię przedmiotową, która była doskonale ucieleśniona w

lat 60. w Simul-67 i prawdopodobnie żałowałem tego nie raz. Co prawda w języku Ada wprowadzono rodzaj żałosnego zamiennika szeregu możliwości, jakie daje programowanie obiektowe – tzw. szablonów, czyli procedur z parametrami nieokreślonych typów. Jednak głównymi zaletami Ady, które pozwalają jej dziś wytrzymać atak bardziej rozwiniętych języków, były, oprócz potężnego finansowania, wbudowane wsparcie dla równoległego wykonywania zadań i potężne środki koordynacji ich interakcji. Należy zauważyć, że głównym ukierunkowaniem Ady nie są wcale systemy automatyzacji rozliczania w Departamencie Obrony USA, ale misje czysto bojowe, takie jak na przykład nawigacja w czasie rzeczywistym pocisku samonaprowadzającego oparta na mikroprocesorach, gdzie wymagane jest jednoczesne informacje o przetwarzaniu w sposób ciągły pochodzą z różnych czujników... Wcześniej takie zadania były pisane w asemblerze, co prowadziło do wielu błędów i trudności w utrzymaniu. Do takich zadań Ada oczywiście świetnie się sprawdza.

Jednak Ada nadal jest pozycjonowana jako dobre narzędzie do tworzenia dużych systemy oprogramowania... To prawda, że ​​teraz głosy popierające ten język brzmią ciszej, mniej więcej tak: „Ada, przynajmniej nie gorzej niż C”. Departament Obrony USA, biorąc pod uwagę swój główny błąd - brak obiektów, zgodnie z nowoczesnymi wymaganiami technologii wytwarzania oprogramowania, opracował nowy standard językowy ISO/IEC 8652: 1985 (E). Opisuje wersję języka Ada95 (lub Ada9X). Najciekawsze jest to, że ta wersja jest pierwszym na świecie systemem programowania obiektowego, na którym, podobno na zamówienie, wprowadzono międzynarodowy standard (w przypadku C++ nie jest to jeszcze możliwe). Ponadto język usprawnił system koordynacji widoczności danych w specyfikacjach modułów oraz dodał narzędzia poprawiające wydajność zadań równoległych.

Departament Obrony USA jest dość zazdrosny o jego drogi pomysł i nawet zarejestrował słowo „Ada” jako swój znak towarowy. Jednak później zamiast znaku towarowego Ministerstwo Obrony zdecydowało się na użycie „Ady” jako wewnętrznego certyfikowanego znaku. Departament Obrony USA nie jest szczególnie zadowolony z pojawienia się komercyjnych wersji tego języka. Oczywiście nikt nie ma prawa zabronić Ci napisania własnego kompilatora, ale aby został uznany komercyjnie, musi być zgodny ze standardem wojskowym, a testy przeprowadza tylko komisja AJPO Departamentu USA. Obrona, która bardzo ściśle sprawdza zgodność kompilatora z wieloma wymaganiami, w tym oczywiście i czysto politycznymi.

Niemniej jednak różne wersje Ady można uzyskać, jak to zwykle bywa z językami programowania, za darmo, czyli za darmo, po prostu nie w piracki sposób, a po prostu wersje freeware i oczywiście za pieniądze.

Spośród darmowych wersji, pierwszą rzeczą do podkreślenia jest kompilator GNAT - GNU Ada95. Jest dostępny w kodzie źródłowym projektu GNU (Free Redistributable Software). Może również pracować na komputerze z jednym procesorem, tylko konieczne jest, aby system operacyjny wspierał wielozadaniowość. Może to być na przykład jakaś wersja systemu UNIX lub OS/2. Jeśli chodzi o MS DOS - zgadnij sam. Jeśli jednak naprawdę chcesz uruchomić sto lub dwa równoległe procesy na swoim komputerze osobistym pod MS DOS 6.x, całkiem możliwe jest wypróbowanie Ada / Ed - kompilatora i interpretera wersji języka z 1987 roku, która, jest jednak całkowicie niezgodny ze standardem i brakuje w nim szeregu istotnych elementów...

Jeśli masz pieniądze, sytuacja oczywiście staje się łatwiejsza. W ramach miesięcznej pensji przeciętnego rosyjskiego programisty możesz kupić np. FirstAdę i napisać system sterowania lodówką. Droższe systemy dla Windows, OS/2 lub UNIX, certyfikowane przez Departament Obrony USA, można pokusić się o zakup bezpośrednio od firm deweloperskich, których jest kilkanaście.

Interesujące jest to, że nie tylko sam język przeszedł standaryzację, co umożliwiło tworzenie łatwo przenośnych programów, ale także zestaw pomocy programistycznych – różne biblioteki I/O i organizacje interfejsów graficznych, preprocesory, weryfikatory, generatory kodu, analizatory logiczna struktura kodu źródłowego, programy do testowania kompilatorów itp. Oczywiście są duże pakiety, które zawierają wszystkie ustandaryzowane narzędzia programistyczne, ale wydają się one bardzo drogie.

Byłoby bardzo interesujące dowiedzieć się, czy ZSRR pracował nad językami przeznaczonymi do rozwiązywania podobnych problemów wojskowych. A może nasi specjaliści pisali tylko w Assemblerze?

Streszczenie na temat:

Ada



Plan:

    Wstęp
  • 1 Cechy języka
  • 2 „Witaj świecie!” w piekle
  • 3 Historia
  • 4 Piekło w ZSRR i Rosji
  • 5 Krytyka
  • 6 Dystrybucja, perspektywy
  • 7 Systemy operacyjne napisane w Ada
  • 8 kompilatorów piekła
  • 9 Języki pochodne
  • 10 Interesujące fakty
  • Notatki (edytuj)
    Literatura

Wstęp

Piekło (Ada) to język programowania stworzony w latach 1979-1980 w wyniku projektu podjętego przez Departament Obrony Stanów Zjednoczonych w celu opracowania ujednoliconego języka programowania dla systemów wbudowanych (tj. systemów sterowania dla zautomatyzowanych kompleksów działających w czasie rzeczywistym). Chodziło przede wszystkim o pokładowe systemy sterowania obiektami wojskowymi (okręty, samoloty, czołgi, pociski, pociski itp.). Deweloperzy nie stanęli przed zadaniem stworzenia uniwersalnego języka, dlatego decyzje podejmowane przez autorów Ady należy postrzegać w kontekście specyfiki wybranego obszaru tematycznego. Język nosi imię Ady Lovelace.


1. Cechy języka

W swojej oryginalnej wersji, ustandaryzowanej w 1983 r., Ada jest ustrukturyzowanym, modułowym językiem programowania, który zawiera narzędzia programistyczne wysokiego poziomu dla procesów równoległych. Składnia Ady została odziedziczona z języków takich jak Algol czy Pascal, ale została rozszerzona, a także bardziej rygorystyczna i logiczna. Ada jest językiem silnie typizowanym, wyklucza pracę z obiektami, które nie mają typów, a automatyczne konwersje typów są zredukowane do absolutnego minimum. W standardzie 1995 dodano do języka podstawowe środki programowania obiektowego, w standardzie 2007 uzupełniono je, tak więc współczesna Ada jest językiem programowania obiektowego.

Z cech składni można zauważyć:

  • W języku nie jest rozróżniana wielkość liter.
  • Programy są modułowe, mechanizm kontroli importu-eksportu opisów między modułami zawiera dwie różne dyrektywy: jedną do podłączenia innego modułu (z), drugą do importu jego opisów (użycia). Możliwa jest również zmiana nazwy modułu podczas importu (zmiana nazwy) - opcja ta pozwala na zastosowanie wygodniejszych identyfikatorów do oznaczenia pakietów.
  • Pakiety (jeden z typów modułów) mogą zawierać nagłówek oraz część osobistą - to co w nich jest zawarte nie jest eksportowane i nie jest dostępne dla innych modułów.
  • Obsługiwany jest mechanizm uogólnionych (konfigurowalnych) modułów: pakietów, procedur i funkcji, które pozwalają opisywać uogólnione algorytmy przetwarzania danych bez określania konkretnego typu.
  • Rozbudowany system typów, zarówno wbudowanych, jak i generowanych przez programistę. Istnieje wiele sposobów tworzenia nowych typów, język obsługuje dwie różne koncepcje: „podtyp” i „typ pochodny”. Zmienne typu i podtypu są zgodne, zmienne typu i jego typ pochodny nie.
  • Urządzenia do obsługi wyjątków.
  • Opracowane sposoby odwoływania się do procedur i funkcji: obsługiwane są parametry wejściowe i wyjściowe, przekazywanie parametrów rzeczywistych w dowolnej kolejności ze wskazaniem nazw formalnych, parametry z wartościami domyślnymi.
  • Obsługiwane jest nadpisywanie procedur, funkcji i operatorów - tworzenie kilku wariantów procedury, funkcji lub operatora o tej samej nazwie, ale różnych sygnaturach (rodzaje i liczba parametrów).
  • Konstrukcje wbudowane w język do obsługi programowania równoległego: obsługiwane są koncepcje „zadania” (fragment programu wykonywany równolegle), „wprowadzania zadań” (środek synchronizacji i komunikacji zadań działających równolegle); Operator SELECT do organizowania warunkowej interakcji między wątkami (wybór zadania równoległego, z którym ma nastąpić interakcja, w zależności od gotowości do spotkania i innych warunków). W zasadzie dostępne w języku narzędzia programowania równoległego są wystarczające do rozwiązania dużej klasy zadań wymagających przetwarzania równoległego, bez uciekania się do narzędzi zewnętrznych, takich jak dodatkowe biblioteki czy interfejsy API systemu operacyjnego.

Aby spełnić wymagania niezawodności, język jest zbudowany w taki sposób, aby w czasie kompilacji wykrywać jak najwięcej błędów. Ponadto jednym z wymogów w rozwoju języka była maksymalnie łatwa czytelność tekstów programu, nawet kosztem łatwości pisania. Efektem takiego podejścia była nieco „ciężka” składnia i wiele ograniczeń, które są nieobecne w najpopularniejszych językach przemysłowych (C i C++) i są często postrzegane przez profesjonalnych programistów jako zbędne, na przykład tak samo mocne typowanie . Doprowadziło to do powstania idei Ady jako języka złożonego, niejasnego i niewygodnego w użyciu.


2. „Witaj świecie!” w piekle

Kilka różnych wariantów „Witaj świecie!” można zobaczyć w Wikibooks. Różnice wynikają z konieczności użycia funkcji bibliotecznej Put_Line - istnieją trzy różne sposoby organizacji tego użycia w tym języku.

Z Ada.Text_IO; procedura Witaj to use Ada.Text_IO; rozpocznij Put_Line ("Witaj świecie!"); koniec Witam;

Tutaj, aby skorzystać z funkcji Put_Line, pakiet Ada.Text_IO zawierający ją jest importowany za pomocą konstrukcji use, która umożliwia wywołanie funkcji po nazwie bez określania nazwy pakietu zawierającego funkcję w wywołaniu.


3. Historia

Rozwój języka przeprowadzono w ramach międzynarodowego konkursu zorganizowanego i sfinansowanego przez Departament Obrony USA. Celem rozwoju było uzyskanie języka programowania, który mógłby stać się jednolitym dla rozwoju projektów zlecanych przez resort wojskowy, głównie dla rozwoju systemów wbudowanych dla celów wojskowych oraz dla dużych komputerów wojskowych (w oparciu o procesor iAPX 432 firmy Intel). Prace rozpoczęły się w 1975 roku, wraz z opracowaniem zestawu wymagań dla języka, który w pełni zadowoliłby twórców systemów tego typu. Wstępna lista wymagań, wydana pod kryptonimem „Słoma”, została przekazana do przeglądu wielu organizacjom i firmom, była konsekwentnie dopracowywana w ciągu dwóch lat, aż w końcu przekształciła się w ostateczny dokument o nazwie „Stal”.

Po zakończeniu formowania wymagań przeprowadzono analizę, która wykazała, że ​​żaden z dostępnych języków programowania nie spełnia wymagań w wystarczającym stopniu, dlatego zdecydowano się opracować nowy język. Konkurs na jego stworzenie ogłoszono w 1977 roku, twórcy zostali poproszeni o oparcie się na jednym z trzech języków: Pascal, Algol-68 lub PL/1.

Spośród 15 projektów zgłoszonych do konkursu wybrano 4 (wszystkie w oparciu o Pascal). Projekty te zostały przesłane do dalszej rewizji. W kolejnym etapie z 4 projektów wybrano dwa, z których po kolejnej rewizji wybrano jeden. Język ten został nazwany „Ada” – grupa, która go opracowała pod przewodnictwem Francuza Jeana Ishbii nadała językowi imię na cześć Augusty Ady King Lovelace (1815-1852), córki poety J. Byrona, który opracował programy dla komputera Babbage'a i jest uważany za pierwszego programistę na świecie.

W 1983 roku język został oficjalnie ustandaryzowany przez ANSI. Norma językowa ANSI / MIL-STD-1815-A-1983 została zatwierdzona 17 lutego 1983 r. Departament Obrony Stanów Zjednoczonych zarejestrował nazwę „Ada” jako zarejestrowany znak towarowy, zabraniając zwalniania tłumaczy języka, który nie przeszedł formalnych testów zgodności. Procedura polegała na uruchomieniu dużej liczby (ponad 1000) programów testowych (tzw. pakiet ACVC) przez testowany kompilator, dla których wynik testu był jednoznacznie określony: albo udana kompilacja, albo bardzo konkretny błąd wiadomość. Testowanie odbywało się na zasadzie „wszystko albo nic” – w przypadku przetworzenia chociaż jednego przypadku testowego uznawano, że kompilator nie przeszedł testu, a testowanie było ważne tylko na platformie sprzętowo-programowej, na której zostało przeprowadzone . W ten sposób możliwość powstania „wersji” lub „dialektów” języka piekła została stłumiona w zarodku.

W 1987 roku język Ady został oficjalnie ustandaryzowany przez ISO. Od tego momentu Departament Obrony USA udostępnił język opinii publicznej.

Do 1990 roku na świecie było około 200 kompilatorów, które odpowiadały standardowi języka Ada.

W 1995 roku przyjęto nowy standard Ada, znany jako Ada95. Środki zostały wprowadzone do języka programowanie obiektowe... Ponadto język został uzupełniony o bardziej zaawansowane środki do interakcji z programami napisanymi w innych językach.

W marcu 2007 roku opublikowano zmiany do standardu Ada. Dotykali głównie możliwości programowania obiektowego: wprowadzono interfejsy, przyjęto składnię wywoływania metody, która była typowa dla większości języków hybrydowych, a także wprowadzono szereg dodatków.


4. Piekło w ZSRR i Rosji

W ZSRR, w latach 80., w ramach Państwowego Komitetu Nauki i Techniki zorganizowano Grupę Roboczą ds. Języka Piekła. Grupa zajmowała się badaniem wszystkich jawnych (a także podobno uzyskanych tajnych wywiadów) danych dotyczących języka Ady oraz badała możliwość i wykonalność rozwoju i wykorzystania Ady w ZSRR. Działalność tej grupy doprowadziła do końca lat 80. do opracowania kompilatorów Ady dla praktycznie wszystkich komputerów używanych w ZSRR. Kilka książek o języku piekła zostało opublikowanych w języku rosyjskim.

Na Moskiewskim Uniwersytecie Państwowym prowadzono prace nad stworzeniem własnych pakietów testowych dla tłumaczy Ada pod kątem zgodności ze standardami. W LSU do stworzenia systemu Ada wykorzystano opracowany wcześniej do wdrożenia Algol-68 system Pallada, który został przeniesiony do Ady. System zawiera zintegrowane środowisko programistyczne, kompilator, edytor tekstu, debugger, biblioteki, system kontroli wersji oraz interpreter poleceń.

Po rozpadzie ZSRR prace nad rozprzestrzenianiem się Ady zostały praktycznie przerwane. Co prawda przyjęto trzy programy rozwoju oprogramowania w Adzie (w resorcie obrony, lotnictwie cywilnym iw resorcie oświaty i nauki), ale ich rozwój przebiega powoli i nieskoordynowany. W rezultacie język Ada jest mało znany w Rosji, większość współczesnych rosyjskich programistów uważa go za „martwy język” i nic o nim nie wie. Ada jest używana w Rosji i WNP przez indywidualnych entuzjastów. Niemniej jednak język ten jest używany do tworzenia oprogramowania przemysłowego. Istnieje kilka znanych projektów opracowanych w Adzie pracujących w Rosji. Pomiędzy nimi:

  • Stacja komunikacji dokumentacyjnej Ministerstwa Obrony Federacji Rosyjskiej. Głównym zadaniem jest zapewnienie wymiany informacji dokumentacyjnych w sieciach transmisji danych MON Federacja Rosyjska... Kompleks sprzętu i oprogramowania został opracowany wspólnie przez organizację Computing and Automation Manufacturing Organization (hardware) oraz grupę programistów z sektora off-trackowego Centrum Kontroli Ruchu Lotniczego Strela North Caucasus. Oprogramowanie kompleksu napisane jest w języku programowania Ada przy użyciu kompilatora GNAT. Przetwarzanie rozproszone jest obsługiwane przez dodatkowy komponent GLADE.
  • Zestaw standardowego sprzętu nawigacyjnego i łączności w locie dla rosyjskiego statku powietrznego-amfibia Beriew Be-200... Opracowanie zostało przeprowadzone przez Instytut Naukowo-Badawczy Sprzętu Lotniczego w Żukowskim wraz z amerykańską firmą Allied Signal na Florydzie, USA. Wykorzystano kompleks do rozwoju systemów Ada firmy DDC-I na platformie Intel 80486.

5. Krytyka

Od samego początku Ada była krytykowana przez niektóre uznane autorytety w rozwoju języków programowania, przede wszystkim za złożoność składni i dużą objętość. W szczególności język skrytykowali Charles Hoare i Niklaus Wirth (którzy uczestniczyli ze swoim projektem w tym konkursie, ale odpadli po pierwszym etapie), a także Edsger Dijkstra.

Dijkstra wątpił, czy język o takiej złożoności jak Ada mógłby być obserwowalny i zarządzalny.

Jeżeli Ada ma wydać normę, warto, aby była ona jednoznacznie udokumentowana. Co najmniej dwie grupy próbowały to zrobić; w rezultacie obaj wydali około 600 stron tekstu formalnego. To znacznie więcej, niż jest to konieczne, aby zapewnić, że nie da się nawet mocno ustalić, że oba dokumenty definiują ten sam język. Błąd oczywistej niemożliwości zarządzania tymi dwoma dokumentami nie leży w dwóch grupach, które je skompilowały, nie w przyjętym przez nie formalizmie, ale tylko w samym języku: bez podania formalnej definicji tego, czy jego twórcy mogą ukryć, że proponują niekontrolowany potwór. To, że Ada zmniejszy problemy z programowaniem i zwiększy niezawodność naszych projektów do akceptowalnych granic, to tylko jedna z tych bajek, w które mogą uwierzyć tylko ludzie z wykształceniem wojskowym.

Science fiction i rzeczywistość naukowa w informatyce (Edsger W. Dijkstra, EWD952)

Hoare wyraził ubolewanie, że „grzechotki i świecidełka przeważyły ​​nad podstawowymi wymogami niezawodności i bezpieczeństwa” i ostrzegł przed „armadą pocisków lecących w złym kierunku z powodu przeoczenia błędu w kompilatorze Ady”. Niklaus Wirth mówił bardziej powściągliwie, ale też negatywnie. Powiedział: „Zbyt wiele rzeczy spada na programistę. Nie sądzę, że po przestudiowaniu jednej trzeciej Ady można normalnie pracować. Jeśli nie opanujesz wszystkich szczegółów języka, możesz w przyszłości natknąć się na nie, a to doprowadzi do nieprzyjemnych konsekwencji ”. Jean Ishbia, szef zespołu deweloperskiego Ady, wyrażając swój „szacunek i podziw” dla Wirtha, nie zgodził się z nim, mówiąc: „Wirth wierzy w proste rozwiązania trudne problemy. Nie wierzę w takie cuda. Złożone problemy wymagają złożonych rozwiązań.”

Wątpliwości budzi również procedura sprawdzania zgodności kompilatora ze standardem językowym poprzez testowanie. Z ogólnych rozważań jasno wynika, że ​​testowanie może znaleźć niespójności, ale nie może zagwarantować poprawności. Praktycznym potwierdzeniem tego jest fakt, że certyfikowani kompilatorzy, testując na innym zestawie testów, stwierdzili niezgodność z normą.

Zwolennicy Ady twierdzą, że jedyną alternatywą dla dużego i złożonego języka w dużych projektach jest użycie kilku języków kompaktowych, co nieuchronnie stwarza problemy z kompatybilnością, których miała się pozbyć Ada. Zauważają też, że idea złożoności programowania w Adzie jest tylko częściowo prawdziwa: napisanie prostego programu w Adzie zajmuje więcej czasu niż w innych mniej formalnych językach, takich jak C, ale debugowanie i utrzymanie programów, zwłaszcza dużych i skomplikowane, jest znacznie prostsze. Według Stephena Zeigera z Rational Software Corporation, tworzenie oprogramowania w Ada jest generalnie o 60% tańsze, a opracowany program ma 9 razy mniej wad niż przy użyciu języka C.


6. Dystrybucja, perspektywy

W praktyce okazało się, że Ada, zajmując swoją zamierzoną niszę w wojsku i pokrewnych rozwoju systemów wbudowanych, nie wykroczyła poza tę niszę ani na Zachodzie, ani w ZSRR, ani w przestrzeni postsowieckiej. Powodów jest wiele. Przeciwnicy języka podkreślają jego złożoność i wady, zwolennicy mówią przede wszystkim o obiektywnych okolicznościach powstania języka i negatywnych aspektach procesu jego realizacji. Ciekawą opinią jest opinia S. I. Rybina, starszego pracownika naukowego w Research Computing Center Moskiewskiego Uniwersytetu Państwowego, konsultanta firmy AdaCore EU, eksperta ds. języka Ada grupy roboczej ISO ds. standardu językowego. Uważa, że ​​Ada zawdzięcza swoje porażki z dwóch głównych powodów:

  • Podczas projektowania języka Pentagon zakładał, że całe nowe oprogramowanie będzie tworzone tylko w Adzie. Z tego powodu Ada otrzymała niezwykle prymitywne sposoby interakcji z programami w innych językach. W praktyce okazało się, że pisanie wszystkiego w Adzie w ogóle jest nierealne (choćby dlatego, że zachodziła potrzeba obcowania z gotowymi opracowaniami w innych językach). Dlatego w branżach, w których nie było ścisłego wymogu „pisania tylko w Adzie”, preferowano inne języki, bardziej dostosowane do wielojęzycznego środowiska. Norma z 1995 roku rozwiązała problem interoperacyjności z innymi językami, ale czas został zmarnowany.
  • Paradoksalnie rozprzestrzenianie się Ady było utrudnione przez finansowe i organizacyjne wsparcie Pentagonu. Programy Ada napisane dla wojska działały na najpotężniejszym dostępnym sprzęcie obliczeniowym, więc twórcy kompilatora zajmowali się najpierw przejściem testów ACVC, a dopiero potem wydajnością kompilatora i generowanym przez niego kodem. Na początku lat 80. rozpoczął się boom na mikrokomputery, a translatory popularnych języków (Pascal, C, BASIC) zostały szybko zoptymalizowane pod kątem systemów o niskim poborze mocy. Dla Ady nie było zachęty do takiej modernizacji, w rezultacie komputery osobiste, które kilka lat później stały się większością światowego parku komputerowego, nie miały wysokiej jakości tłumacza Ady. Oczywiście Ada straciła ten segment rynku. Kompilator GNAT, wysokiej jakości i wydajny, pojawił się stosunkowo niedawno, ale i tutaj zabrakło czasu.

Obecnie Ada jest dość mocno osadzona w rozwoju dużych systemów wbudowanych o zwiększonej niezawodności, tutaj praktycznie nie ma silnych konkurentów. Posługiwanie się językiem stopniowo wzrasta, choć raczej powoli. Według niektórych ostrożnych prognoz [ ], wraz ze spadkiem kosztów sprzętu i rozpowszechnianiem się systemów wbudowanych ze złożonym oprogramowaniem, rynek programów w Adzie może wyraźnie wzrosnąć, a także wzrośnie użycie języka.

Ponadto Ada ma, choć bardzo ograniczone, zastosowanie w szkolnictwie wyższym. Specjalne kursy dotyczące Ady prowadzone są na Uniwersytecie Moskiewskim i Uniwersytecie Charkowskim. Jednak według tego samego S.I. Rybina,

... teraz w przestrzeni postsowieckiej w dziedzinie przemysłu oprogramowania i edukacji rozwinęło się oczywiste błędne koło: branża praktycznie nie wie o Ady, odpowiednio z branży nie ma zapotrzebowania na edukację do szkolenia Ady specjalistów, a z uczelni do przemysłu przychodzą nowi ludzie, którzy o piekle praktycznie nic nie wiedzą.


7. Systemy operacyjne napisane w Ada

7.1. Systemy wbudowane

  • MARTE
  • RTEMS - system operacyjny o otwartym kodzie źródłowym kod źródłowy, opracowany przez Departament Obrony USA DARPA
  • Ravenskar
  • RTOS-32 - zastrzeżony system operacyjny

7.2. Systemy w opracowaniu

  • AuroraUX (projekt przepisania jądra OpenSolaris, a następnie DragonFly BSD na język Hell)
  • Lovelace (system operacyjny na rdzeniu L4)

7.3. Już nie istniejące systemy

  • BiiN™
  • Puls ™
  • AdaOS

8. Piekielne kompilatory

Nazwa Spółka Wersja System operacyjny Strona
AdaMagic SofCheck Ada 95 ? www.sofcheck.com
AdaMULTI Oprogramowanie Green Hills Ada 83, Ada 95, C, C++, Fortran Solaris SPARC, GNU / Linux x86, Windows www.ghs.com
DEC Ada Hewlett Packard Ada 83 OpenVMs h71000.www7.hp.com
KOMAR AdaCore Ada 83, Ada 95, Ada 2005, Si Solaris SPARC, Linux x86 / x86-64, Windows, inne 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ś Oprogramowanie RR Ada 83, Ada 95 SCO, UnixWare, interaktywne, MS-DOS, Windows www.rrsoftware.com
MAXAda Równoległy Ada 95 Linux / Xeon, PowerPC www.ccur.com
ObiektAda Aonix Ada 95 Solaris SPARC, HP-UX, IBM AIX, Linux, Windows www.aonix.com
PowerAda Systemy OC Ada 83, Ada 95 Linux, AIX (Ada 95); IBM System 370/390 (Ada 83) www.ocsystems.com
Racjonalny wierzchołek IBM racjonalny Ada, C, C++ Solaris SPARC, Linux www-01.ibm.com
WYNIK DDC-I Ada 83, Ada 95, Si, Fortran Solaris SPARC, Okna www.ddci.com
XD Ada SWEP-EDS Ada 83 OpenVMS Alpha / VAX www.swep-eds.com
XGC Ada Oprogramowanie XGC Ada 83, Ada 95, Si Solaris SPARC, PC Linux, Windows (Cygwin) www.xgc.com

Z wyjątkiem GNAT i XGC (dla niektórych platform), powyższe kompilatory są płatne. Niektóre firmy, takie jak Aonix, oferują bezpłatne wersje demonstracyjne, które są ograniczone pod względem czasu użytkowania lub funkcjonalności.

IDE NetBeans i Eclipse mają wtyczki do pracy z Adą.


9. Języki pochodne

Składnia języka Ada jest używana w językach takich jak:

  • PL / SQL

10. Ciekawe fakty

  • Formalnie konkurs na rozwój języka, w wyniku którego powstał język Ada, był anonimowy – grupy programistów prezentowały swoje projekty pod kryptonimami, aby komisja konkursowa nie mogła brać pod uwagę osobowości programistów przy wybór zwycięzcy. Ale w praktyce, jak napisał jeden z członków komisji, upodobania deweloperów były tak różne, że nietrudno było zidentyfikować autora projektu.
  • Wszystkie języki, które dotarły do ​​ostatnich rund tego konkursu, były oparte na Pascalu. Pod tym względem Adę można wstępnie scharakteryzować jako Pascala, opracowanego z uwzględnieniem podanych pięciu podstawowych wymagań. Jednocześnie autorzy poszli głównie drogą rozbudowy Pascala o nowe elementy. Rezultatem jest znacznie bardziej złożony język.
  • W języku rosyjskim zdarzają się dowcipy związane z niejednoznacznością wyrażenia „Język piekła”, w tym oparte na paraleli z Rosyjskim Językiem Algorytmicznym, zwanym też „Językiem RAJU”. Programowy folklor zawierał również zakończenie artykułu sowieckiego propagandysty Melora Sturuy (1984):

Język Pentagonu jest wrogiem świata. Język „Ady” to głos termojądrowego piekła… W języku „Ady” słychać przekleństwo na ludzkość.


Notatki (edytuj)

  1. Przewodnik po języku Ady 83. Rozdział 1.3. Cele i źródła rozwoju - www.ada-ru.org/arm83/ch01s03.html
  2. Wadima Stankiewicza. Pani Piekło - www.kv.by/index2006451104.htm
  3. Zaktualizowany standard na iso.org - www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=45001
  4. Oprogramowanie Bryabrin VM dla komputerów osobistych. Moskwa: Nauka, 1988.
  5. 1 2 Wywiad S. I. Rybina - www.ada-ru.org/wiki/rybin
  6. , Języki programowania zorientowane obiektowo, Języki programowania platformy NET, Ada, Przykładowe artykuły dotyczące kodu Ada.
    Tekst dostępny na licencji Creative Commons Attribution-ShareAlike.

Jeśli zapytasz domowego informatyka: „Co to jest piekło?”, większość ze zdziwienia wzruszy ramionami, a niektórzy nawet powiedzą, że jest to martwy język, kiedyś wynaleziony przez Pentagon, ale teraz praktycznie nieużywany. W rzeczywistości Ada jest dziś dość udanym językiem programowania, który jest aktywnie używany w różnych dziedzinach. To prawda, że ​​większość rosyjskich programistów niewiele o tym wie.

Zapewne każdy, kto miał skorzystać z czternastej linii paryskiego metra, był zaskoczony, gdy po raz pierwszy zobaczył pociąg, w którym nie ma kabiny maszynisty. Ruch pociągów na tej linii jest całkowicie kontrolowany przez program Ada.

Mimo wszystko w niektórych dziedzinach technologii Rosja wciąż „wyprzedza resztę planety”. A jednym z nich jest projektowanie i produkcja samolotów amfibii. Liderem na arenie międzynarodowej w tej dziedzinie jest TANTK im. G.M. Beriew. Firma niedawno nabyła pokładowe narzędzia programistyczne oparte na Ada do wykorzystania w modernizacji swojego Najnowszy model Bądź-200.

Tymczasem większość krajowych informatyków w najlepszym razie nic nie wie o języku piekła, w najgorszym ma zupełnie błędne wyobrażenie o piekle jako języku potwora, wymyślonym kiedyś przez Pentagon do rozwijania systemów wojskowych, ale teraz całkowicie zapomniane.

Trochę historii

Oficjalne urodziny języka programowania Ada można uznać za 17 lutego 1983 r. - datę zatwierdzenia standardu ANSI / MIL-STD-1815-A-1983.

Środki techniczne i administracyjne podjęte przez Ministerstwo Obrony w ramach projektu stworzenia i wdrożenia Ady całkowicie zapobiegły pojawieniu się i rozpowszechnieniu dialektów tego języka. Od 1983 roku do chwili obecnej wszystkie wdrożenia przemysłowe wspierają obecny standard Ada. Jeśli chodzi o podzbiory Ady, to podzbiory te są określane nie przez implementację, ale przez standardy programistyczne dla określonej klasy systemów.

W 1987 roku norma ANSI została zatwierdzona bez jednej zmiany jako norma ISO (ISO/IEC 8652), a gdy na początku lat 90. pojawiła się konieczność rewizji normy, prace rewizyjne prowadzono również pod kierunkiem i funduszami Departamentu Obrony USA. Uruchomiono nowy projekt międzynarodowy, który zakończył się zatwierdzeniem pod koniec 1994 r. i opublikowaniem na początku 1995 r. nowej wersji normy ISO/IEC 8652. To właśnie ten dokument służy jako definicja języka programowania Ada Dziś.

W ZSRR na początku lat 80. powstał Grupa robocza nad językiem programowania Ady w KBN. Wszystkie jawne informacje o projekcie zostały starannie zebrane i przeanalizowane, a dzięki staraniom służb specjalnych zostały pozyskane i zamknięte Informacje... Zorganizowano projekty implementacji Ady dla praktycznie wszystkich ówczesnych architektur komputerowych, a niektóre z nich zakończyły się dużym sukcesem. Upadek ZSRR położył kres tej działalności. Dziś Ada jest używana w Rosji i WNP przez indywidualnych entuzjastów.

Co to jest Ada

Wszystkie współczesne języki przemysłowe zapewniają zasadniczo ten sam podstawowy zestaw możliwości, różniąc się nie tym, na co pozwalają, ale jak to umożliwiają. Jednak Ada, przynajmniej w dwóch aspektach, rozszerza zestaw standardowych możliwości dla współczesnych języków. Po pierwsze, Ada dostarcza wysokopoziomowe narzędzia programistyczne dla procesów asynchronicznych. Po drugie, jest to jedyny język, który bez zastrzeżeń można nazwać modularnym.

Taki przykład jest po prostu konieczny, aby obalić dość rozpowszechniony mit, że Ada jest językiem dużym, złożonym i „ciężkim”, nadającym się tylko do pisania super-dużych i super-skomplikowanych systemów. W rzeczywistości Ada może być używana do tworzenia małych i średnich programów z takim samym sukcesem, jak nowoczesne klony C, Pascal, BASIC i Java. Na przykład klasyczny przykład „Hello, World!” wygląda tak w Adzie:

Łatwo zauważyć, że kod Ady jest podobny do kodu Pascala, który został wybrany jako jego prototyp. Pierwsza linia opisuje relacje tego skompilowanego modułu z innymi modułami - wskazuje się, że podprogram Hello_World powinien być skompilowany razem z modułem Ada.Text_IO, który jest składnikiem predefiniowanej biblioteki.

Poniższy program definiuje dwa procesy asynchroniczne:

Sekcja Local Declarations procedury Tasking_Example opisuje zadanie Outputter (wiersz 6, wiersze od 8 do 17 zawierają treść tego zadania). Gdy kontrola w procesie odpowiadającym Tasking_Example osiągnie linię 20, proces odpowiadający Outputterowi zostaje uruchomiony przed wykonaniem tej pierwszej instrukcji, po czym oba procesy żyją i wykonują się asynchronicznie niezależnie od siebie. Wykonanie instrukcji opóźnienia (linie 14 i 20) polega na zawieszeniu odpowiedniego procesu na określoną liczbę sekund. W ten sposób proces Tasking_Example zostaje zawieszony na 20 sekund, podczas gdy proces Outputter rozpoczyna drukowanie wartości licznika narastającego, zatrzymując się na jedną sekundę po wyprowadzeniu każdej wartości. Po 20 sekundach proces Tasking_Example ustawia flagę Finished na true, co kończy pętlę w procesie Outputter. Określenie zmiennej Finished jako niepodzielnego obiektu danych (linia 4) uniemożliwia jednoczesne odczytywanie i zmianę wartości tej zmiennej.

Poniżej znajduje się szablon funkcji, która umożliwia dodawanie dwóch jednowymiarowych tablic z uwzględnieniem komponentów. Szablon ten można skonfigurować dla dowolnego typu, jakim jest tablica jednowymiarowa, dla której zdefiniowane są operacje przypisywania i dodawania składowych ("dodawanie" nie musi być dodawaniem arytmetycznym).

Linie 1-6 zawierają deklarację funkcji niestandardowej, a linie 8-20 zawierają jej treść. Nieformalnie parametr strojenia jest dowolnym jednowymiarowym typem regularnym z nieokreślonym zakresem indeksów (wiersz 4), o którym wiadomo tylko, że jego typ składnika jest arbitralny, jednak dla składników zdefiniowana jest operacja przypisania (wiersz 2) , typ indeksu jest arbitralnie dyskretny (wiersz 4) ... Ponieważ musimy dodać dwie tablice składowe, musimy wiedzieć, jaka jest operacja dodawania dla typu komponentu. Ponieważ jest to typ arbitralny, jesteśmy zmuszeni przekazać dodawanie dla typu komponentu jako preferencję formalną (wiersz 5).

W ciele funkcji najpierw sprawdzamy, czy długości operandów są takie same (wiersz 12), w przeciwnym razie dodawanie składników nie ma sensu. Dopasowanie długości operandów nie gwarantuje dopasowania zakresów indeksów, więc w pętli nad zakresem indeksów pierwszego argumentu (wiersz 15) musimy za każdym razem obliczyć indeks odpowiedniego składnika drugiego argumentu. Pozbawieni jesteśmy takiej możliwości dla typu Index, ponieważ wiemy tylko, że jest dyskretny, więc przechodzimy od wartości typu dyskretnego do jego liczby porządkowej (atrybut? Pos), obliczamy potrzebne przesunięcie dla liczby porządkowej i powróć do odpowiedniej wartości typu Index (atrybut? Val).

Należy zauważyć, że parametry (niestandardowej) funkcji „+” Left i Right są zadeklarowane jako typu Arr, którego zakres indeksu nie jest określony. Jednak Left i Right są parametrami formalnymi, w ich miejsce podczas wywoływania (wyniku wystąpienia) funkcji „+” zostaną podstawione konkretne tablice ze znanymi zakresami indeksów. W treści funkcji „+” używamy atrybutów tablicy (? Zakres,? Po pierwsze,? Długość), aby uzyskać z obiektu informacje o zakresie indeksu.

Dlaczego Ada?

Wybór języka do projektu oprogramowania był wcześniej kwestią czysto techniczną. Dziś stała się sprawą o znaczeniu strategicznym, o dalekosiężnych implikacjach dla powodzenia projektu. Wymieńmy niektóre powody, dla których język Ada został wybrany do realizacji projektów oprogramowania. różne firmy lub obowiązkowe do wykorzystania w przetargach.

  • Chęć poprawy niezawodności tworzonego systemu, ponieważ wady oprogramowania mogą mieć poważne konsekwencje dla zdrowia ludzkiego, ekonomii, ekologii itp. (Ada ma wbudowane funkcje bezpieczeństwa.)
  • Pragnienie obniżenia kosztów rozwoju i utrzymania systemu.
  • Dostępność międzynarodowych standardów i dostępność kompilatorów językowych dla prawie każdej platformy.
  • Korzyści płynące ze zdyscyplinowanego podejścia do tworzenia oprogramowania, które stają się szczególnie istotne wraz ze wzrostem ilości i złożoności oprogramowania.
Ada i C

Prowadząc analizy porównawcze popularnych języków, złamano tak wiele kopii, że dziś temat ten często określany jest kategorią „wojen religijnych”. Dlatego ograniczymy się tylko do odniesienia do znanego artykułu, z którego można wyciągnąć wiele wymownych wniosków.

  1. Tworzenie programów w języku Ada kosztuje o 60% mniej niż podobne projekty software'owe realizowane w C.
  2. Program w Ada ma 9 razy mniej defektów niż program w C; program C++ ma jeszcze niższe cechy niż program C.
  3. preferowane od C zarówno dla doświadczonych, jak i niedoświadczonych programistów, a także dla programistów, którzy mają zarówno maksymalne, jak i minimalne oceny w swojej grupie.
  4. Złożoność studiowania języka piekła nie jest wyższa niż złożoność studiowania C.
  5. Programy w Ada są bardziej niezawodne niż programy w C.

Jako ilustrację tych wniosków podamy przykład opracowania oprogramowania pokładowego dla samolotu C-130J zgodnie z wymaganiami Level A normy DO-178B. Jednocześnie stwierdzono, że jakość kodu jest 10-krotnie wyższa niż średnia dla oprogramowania poziomu A. Wydajność pracy wzrosła czterokrotnie w porównaniu do porównywalnych projektów oprogramowania.

Ada i Jawa

Microsoft został zmuszony do zawarcia w umowach licencyjnych dla swoich system operacyjny Następny przedmiot ( www.microsoft.com/msdownload/ieplatform/ie/license.txt): „Uwaga dotycząca obsługi języka Java… Technologia Java nie jest odporna na awarie i nie jest przeznaczona… do użytku w systemach sterowania w czasie rzeczywistym… gdzie awaria języka Java może spowodować śmierć, obrażenia lub poważne uszkodzenie infrastruktury lub środowisko. Sun Microsystems, Inc. zobowiązał Microsoft do opublikowania tego ostrzeżenia.”

Wskażmy również artykuły i pokazujące przewagi języka Ada nad Javą.

„piekielne” mity

Dość często z Adą kojarzy się zestaw uporczywych nieporozumień, które utrudniają zarówno rozpowszechnianie języka, jak i świadomy wybór Ady jako języka do realizacji projektów.

Ada to martwy język, nikt w nim teraz nie programuje. W rzeczywistości Ada pewnie zajmuje niszę dużych systemów wbudowanych o podwyższonych wymaganiach dotyczących niezawodności. W porównaniu z produktami „pudełkowymi” dla Windows takie systemy nie są aż tak zauważalne, bo albo istnieją w jednym egzemplarzu (jaki sens powielać program sterujący ruchem pociągów metra), albo są dystrybuowane jako część systemu, w którym są wbudowane (oprogramowanie wbudowane).

Ada to język przeznaczony wyłącznie do zastosowań wojskowych. Ada została rzeczywiście opracowana przy pomocy Departamentu Obrony USA, ale nie ma żadnych technicznych, administracyjnych ani innych powodów, które uniemożliwiałyby jej wykorzystanie do rozwoju systemów cywilnych. Liczba projektów „cywilnych” opartych na tym języku jest dziś porównywalna z liczbą projektów „wojskowych”.

Ada jest zbyt dużym i złożonym językiem, aby użyć go w małym projekcie. Objętość i złożoność wszystkich nowoczesnych języków przemysłowych jest prawie taka sama, a żeby się tego upewnić, wystarczy po prostu porównać objętość ich opisów. Mit ten sięga wczesnych lat 80-tych, kiedy Adę porównywano do Pascala, Fortrana 77 czy BASIC-a.

Niewielu jest programistów, którzy znają Adę, nauka języka od podstaw wymaga dużego wysiłku i czasu. W rzeczywistości prawdziwą trudnością jest znalezienie specjalistów, którzy rozumieją specyfikę systemów wbudowanych i są w stanie stworzyć dla nich wysokiej jakości programy. Na przykład BAE, jeden z aktywnych użytkowników języka Ada, nie wymaga od kandydatów znajomości tego języka; zamiast tego poszukiwane są osoby zaznajomione z systemami wbudowanymi i procesami tworzenia oprogramowania o jakości przemysłowej. Po zatrudnieniu takich ludzi nauczenie ich języka piekła zajmuje tylko dwa tygodnie.

Nasz osobiste doświadczenie pokazuje, że programiści zaznajomieni z tą czy inną formą Pascala potrzebują tylko kilku dni na rozpoczęcie tworzenia prostych programów w Ada.

Istniejące technologie Ada są nieskuteczne; zarówno tłumacze, jak i generowany przez nich kod mają słabą wydajność. Mit ten datuje się również na pierwszą połowę lat 80-tych, kiedy to pojawiły się pierwsze implementacje Ady, w rzeczywistości tylko dowodzące „twierdzenia o istnieniu odpowiadającego standardowi tłumacza Ady”. Wystarczy przeprowadzić szereg prostych eksperymentów programując jakiś problem modelowy w Ada, Pascal i C/C++, a następnie porównać (przy porównywalnych parametrach kompilatora) szybkość kompilacji, ilość generowanego kodu i szybkość jego egzekucję, aby upewnić się, że jakakolwiek specyficzna nieefektywność tkwiąca w piekle po prostu nie istnieje. Można również zauważyć, że system programowania GNAT, o objętości kodu źródłowego powyżej 40 MB, jest w 90% zaimplementowany w Adzie, a jego budowa z kodów źródłowych (w swoim przebiegu kompiluje się trzykrotnie) na nowoczesnym komputerze PC nie więcej niż pół godziny.

Dotychczasowe wdrożenia Ady są niezwykle kosztowne. To prawda, należy jednak pamiętać, że istnieje ogólnodostępna wersja systemu programowania GNAT, którą można swobodnie i legalnie pobrać z repozytorium oprogramowania New York University ( ftp://cs.nyu.edu/pub/gnat) wraz z tekstami źródłowymi

Darmowy ser i jak uniknąć pułapki na myszy

GNAT (GNu Ada Translator) to wieloplatformowa implementacja języka Ada, która istnieje na prawie wszystkich nowoczesnych platformach przemysłowych i obsługuje generowanie kodu dla popularnych architektur wbudowanych. GNAT ( www.gnat.com) w pełni implementuje standard Ada, łącznie z tymi bibliotekami, które są klasyfikowane jako opcjonalne przez standard. Oprócz samego translatora HADA, GNAT zawiera zestaw narzędzi, w którym należy zwrócić uwagę na zaawansowane zintegrowane środowisko programistyczne oraz wielojęzyczny debugger graficzny, który pozwala m.in. badać zachowanie programów z procesami asynchronicznymi. Tłumacza i towarzyszących mu narzędzi można używać zarówno osobno, wywołując je z wiersza poleceń, jak i w ramach zintegrowanego graficznego środowiska programistycznego dla programów Ada. Wszystkie komponenty GNAT, w tym środowisko programistyczne, mają ten sam interfejs na wszystkich platformach. Oprócz pełnej implementacji funkcji opisanych przez standard, GNAT oferuje bogaty zestaw rozszerzeń, na które pozwala standard. GNAT to implementacja Ady w wielojęzycznym systemie programowania gcc, na który składa się zestaw front-endowych kompilatorów dla różnych języków wejściowych ze wspólnym generatorem kodu, co znacznie upraszcza tworzenie programów zawierających komponenty zaimplementowane w różnych językach programowania.

GNAT był rozwijany i dystrybuowany od początku na licencji GPL. Niestety, z GPL wiąże się wiele mitów. Na przykład wiele osób uważa, że ​​programy objęte GPL są opracowywane przez niezorganizowane grupy entuzjastów i są dystrybuowane całkowicie bezpłatnie; w efekcie zarówno niezawodność, jak i funkcjonalność takich programów pozostawiają wiele do życzenia, nie pozwalają na wykorzystanie ich w żadnych poważnych projektach. Jest to dalekie od przypadku GNAT. Aby się o tym przekonać, wystarczy spojrzeć na listę firm, które zawarły umowy z jej deweloperami na pomoc techniczna: Boeing, British Aerospace, Lockheed, Ericsson, SAAB, Avionics itp.

Bezpłatne zaopatrzenie demo jest powszechną praktyką wielu programistów. GNAT różni się tym, że dostępna bezpłatnie wersja publiczna jest absolutnie pełna wersja technologii, bez żadnych ograniczeń prawnych lub technicznych w jej stosowaniu. W oparciu o publiczne wersje GNAT zrealizowano z powodzeniem szereg poważnych projektów. Oprogramowanie lądownika Beagle 2 europejskiej automatycznej stacji Mars Express, przeznaczone na ten moment Na marsa ( www.beagle2.com/index.htm), zautomatyzowana stacja komunikacji dokumentacyjnej Ministerstwa Obrony Federacji Rosyjskiej ( www.ada-ru.org/prj_doc.html). Jedyną wadą wersji publicznych jest to, że deweloper nie zapewnia dla nich wsparcia technicznego.

Wniosek

Podsumowując, język Ada zapewnia programistom doskonałe połączenie integralności, spójności, niezawodności i wydajności. Język wspiera kreatywną kreatywność i innowacyjność, zapewniając jednocześnie dyscyplinę i przemysłowy poziom rozwoju oprogramowania niezbędny do wdrażania systemów oprogramowania o dużym znaczeniu.

Literatura
  1. Benjamin Brosgol, Wprowadzenie do Ady 95. www.embedded.com/story/OEG20021211S0034
  2. Stephen Zeigler, Porównanie kosztów rozwoju C i Ada. www.adaic.com/whyada/ada-vs-c/cada_art.html www.ada-ru.org... Na stronie można znaleźć opatrzoną adnotacjami bibliografię książek o języku piekła, wydanych w języku rosyjskim

Wysokopoziomowy, nastawiony na zastosowanie w systemach czasu rzeczywistego i przeznaczony do automatyzacji zadań sterowania procesami i/lub urządzeniami np. w komputerach pokładowych (okrętowych, lotniczych).

Język Ada został opracowany z inicjatywy Departamentu Obrony Stanów Zjednoczonych w latach 80. i nosi imię matematyki Ady Augusty Lovelace (1815-1851). Projektując język, przede wszystkim zwrócono uwagę na niezawodność i wydajność - język został stworzony specjalnie z myślą o rozwoju dużych systemów oprogramowania czasu rzeczywistego dla systemów wbudowanych, na które nałożone są wysokie wymagania dotyczące niezawodności; przede wszystkim są to systemy wojskowe.
Język Ada opiera się na ideach programowania strukturalnego i zapewnia tworzenie złożonych programów wielomodułowych, wysoki stopień niezależności maszyny i przenośności. Ada zawiera możliwości języków podobnych do Pascala, takie jak definicje typów, wspólne struktury kontrolne i podprogramy oraz postęp w teorii języków programowania od 1970 roku. Język obsługuje logiczną modularność, dla której wszystkie dane, typy i podprogramy mogą być pakietami. Modułowość fizyczna jest osiągana przez kompilację oddzielnie. Język Ada obsługuje programowanie w czasie rzeczywistym poprzez mechanizmy paralelizmu i obsługi wyjątków. Programowanie systemu wspomagane jest dostępem do parametrów zależnych od systemu oraz precyzyjną kontrolą prezentacji danych.

Do 1974 r. w Departamencie Obrony USA używano wielu różnych języków programowania. Zwiększyło to czas i pieniądze wydawane na rozwój nowych systemów i przekwalifikowanie techniczne personelu. Szefowie resortów doszli do wniosku, że konieczne jest używanie jednego języka programowania. W 1975 roku uzgodniono listę wymagań dla takiego języka. Żaden z istniejących wówczas języków programowania (takich jak Pascal, ALGOL-68 czy PL/1) nie spełniał wymagań. Dlatego w 1977 r. podjęto decyzję o stworzeniu nowego języka i ogłoszono konkurs na jego opracowanie. Ze wszystkich propozycji wybrano cztery (każda była rozszerzeniem Pascala) do późniejszej rewizji i udoskonalenia. Później, dla dalszych wyjaśnień, wybrano dwóch z nich, aw finale wybrali projekt przedstawiony przez Cii-Honeywell Bull. Językowi temu nadano nazwę Ada (pierwotnie język nazywał się DOD-1).

W 1983 r. przyjęto standard językowy ANSI / MIL-STD-1815A, aw 1987 r. - międzynarodowy standard ISO 8652. W 1987 r. pojawili się pierwsi skuteczni tłumacze Ada. Norma ISO została zaktualizowana na początku 1995 roku (ANSI / ISO / IEC 8652). Nowy standard naprawiono wiele pominięć i niedociągnięć oryginalnego języka oraz uzupełniono go o wiele nowych przydatnych właściwości, takich jak typy proceduralne, oparte typy wskaźników (czyli wskaźniki do obiektów niedynamicznych), biblioteki hierarchiczne, dodatkowe kontrolki współbieżności, wiele standardowe biblioteki... Dodatkowo w Ada-95 było wsparcie dla programowania obiektowego.
Kolejny standard otrzymał nieformalną nazwę Ada-2005, choć nie został jeszcze przyjęty w 2005 roku. Społeczność Ady postanowiła odejść od tradycji nieformalnego nazywania standardu według roku publikacji, gdyż w 2005 roku uzgodniono wszystkie jego główne parametry. Język dodaje wielokrotne dziedziczenie, dostęp do metod obiektowych z prefiksem, bardziej elastyczne typy odwołań, ulepszone zarządzanie zadaniami i dużą liczbę nowych standardowych bibliotek. Dodatkowo Ada-2005 jest zgodna z normą ISO/IEC 10646 (2003), która pozwala na używanie w nazwach identyfikatorów liter alfabetu rosyjskiego i greckiego (nazwy zmiennych, funkcji).
Ada jest uważana za wspólny język programowania zarówno dla wojska USA, jak i NATO.

Ponadto Ada jest wykorzystywana do budowy dużych systemów, którym stawiane są wysokie wymagania niezawodnościowe, takie jak: systemy komputerowe dla lotnictwa (w tym cywilnego); komputerowe systemy sterowania do kolei dużych prędkości; systemy bankowe; automatyka przemysłowa i robotyka; Wyposażenie medyczne; systemy telekomunikacyjne.

Ada jest wykorzystywana w instytucjach szkolnictwa wyższego w USA i Europie Zachodniej jako podstawa do nauki programowania i jest często wykorzystywana w badaniach i rozwoju. Program Ada zarządza ruchem pociągów bez maszynistów w metrze paryskim. Wiele firm specjalizuje się w tworzeniu kompilatorów, różnych bibliotek i narzędzi, obejmujących szeroką gamę platform sprzętowych i systemów operacyjnych. Oprócz komercyjnych narzędzi programistycznych dostępne są bezpłatne wersje kompilatorów, takie jak ObjectAda firmy Aonix lub GNAT firmy Ada Core Technologies.

Ada to najbardziej ustandaryzowany język programowania. Międzynarodowy standard został przyjęty przed pojawieniem się pierwszych roboczych wersji tłumaczy, dzięki czemu uniknięto niekompatybilności różnych dialektów Ady. Ada przewyższa SI i C++ pod względem rygoru typowania danych, elastyczności oddzielnej kompilacji, możliwości tworzenia wysoce niezawodnych systemów czasu rzeczywistego, dostępności ścisłej kontroli nad parametrami funkcji i przekroczeniami indeksów (80% błędów, które występują, gdy tworzenie programów w C/C++ jest z tym związane) i niezależna od maszyny reprezentacja wartości binarnych (zamiast operacji bitowych wykonywane jest pobieranie pól rekordów). Jednocześnie Ada jest przejrzysta semantycznie i składniowo, dzięki czemu łatwiej się jej nauczyć niż Java.

Ada jest gorsza od C / C ++ pod względem obsługi nowych systemów operacyjnych, a także pod względem dostępności narzędzi do konserwacji, debugowania i kształtowania interfejsy graficzne... Ale standard językowy zawiera automatycznie generowane specyfikacje do współpracy z innymi językami programowania i w praktyce razem z bibliotekami matematycznymi Ada, Fortran wykorzystywane są funkcje systemowe napisane w C, klasy Java do pracy z Internetem. Dlatego istnieją wielojęzyczne IDE obsługujące języki inne niż Ada, na przykład IBM Rational Ada Developer (C/C++/Ada).

Ada implementuje zarówno automatyczne usuwanie śmieci (jak w Javie lub C#), jak i możliwość bezpośredniego odzyskiwania pamięci (jak w C, C++, Pascal). Podobnie jak w przypadku C/C++, Ada ma do dyspozycji bogate zaplecze niskopoziomowe. Wbudowana obsługa wielozadaniowości jest unikalna dla języka programowania Ada i odróżnia go od większości języków programowania. Tego wsparcia nie zapewniają rozszerzenia ani biblioteki zewnętrzne, ale standardowe narzędzia wbudowane bezpośrednio w język programowania.

(Ada 2005), Eiffel (Ada 2012)

C++, Kaplica, „Drago”. , Eiffla, Gryfa. , Java, Nim, spadochron za łodzią, PL/SQL, PL/PgSQL, Ruby, Seed7, „SPARforte”. , Sparkel, SQL / PSM, VHDL

Funkcje Ady obejmują: silne typowanie, mechanizmy modularności (pakiety), walidację w czasie wykonywania, przetwarzanie równoległe (zadania, wiadomości synchroniczne, chronione obiekty i niedeterministyczne instrukcje SELECT), obsługę wyjątków i typy ogólne. Ada 95 dodała obsługę programowania obiektowego, w tym dynamiczną wysyłkę.

Składnia Ada minimalizuje wybór sposobu wykonywania podstawowych operacji i preferuje język angielski słowa kluczowe(na przykład "lub" i "a następnie") na symbole (takie jak "||" i "&&"). Ada używa podstawowych operatorów arytmetycznych +, -, * i /, ale unika innych znaków. Bloki kodu są oddzielone słowami, takimi jak „declare”, „start” i „end”, gdzie „end” (w większości przypadków) następuje po identyfikatorze bloku, który zamyka (na przykład jeśli koniec, jeśli ... , pętla ... koniec pętli). W przypadku bloków warunkowych pozwala to uniknąć nadal oderwany, który może sparować z nieprawidłowymi zagnieżdżonymi instrukcjami if w innych językach, takich jak C lub Java.

Ada jest przeznaczona do tworzenia bardzo dużych systemów oprogramowania. Pakiety Ada można skompilować osobno. Specyfikacje pakietu Ada (interfejs pakietu) można również skompilować osobno bez sprawdzania zgodności. Pozwala to na wykrycie problemów na wczesnym etapie projektowania, przed rozpoczęciem wdrożenia.

Obsługiwana jest duża liczba kontroli w czasie kompilacji, aby uniknąć błędów, które nie zostaną wykryte do czasu uruchomienia w niektórych innych językach lub które wymagają dodania jawnych kontroli do kodu źródłowego. Na przykład składnia wymaga jawnej nazwy zamknięć bloków, aby zapobiec błędom spowodowanym niezgodnością znaczników końcowych. Silne typowanie może wykryć obecność standardowych błędów oprogramowania (złe parametry, naruszenia zakresu, nieprawidłowe odwołania, niedopasowane typy itd.) w czasie kompilacji lub w inny sposób w czasie wykonywania. Ponieważ współbieżność jest częścią specyfikacji języka, kompilator może w niektórych przypadkach wykryć potencjalne ślepe uliczki. Kompilatory również rutynowo sprawdzają błędy pisowni dla identyfikatorów, widoczności pakietów, nadmiarowych deklaracji itp. i mogą dostarczać ostrzeżenia i pomocne wskazówki dotyczące naprawienia błędu.

Ada obsługuje również kontrole w czasie wykonywania w celu ochrony przed nieprzydzielonym dostępem do pamięci, błędami przepełnienia bufora, naruszeniami zakresu, błędami pozapasmowymi, błędami dostępu do macierzy i innymi wykrywalnymi błędami. Kontrole te można wyłączyć w celu zwiększenia wydajności, ale często można je skutecznie zbierać. Zawiera również narzędzia ułatwiające walidację programu. Z tych powodów Ada jest szeroko stosowana w systemach krytycznych, w których każda anomalia może prowadzić do bardzo poważnych konsekwencji, takich jak śmierć w wyniku wypadku, obrażenia lub poważne straty finansowe. Przykładami systemów wykorzystujących Adę są awionika, ATC, koleje, bankowość, technologia wojskowa i kosmiczna.

Dynamiczne zarządzanie pamięcią Ady jest na wysokim poziomie i bezpieczne dla typu. Ada nie ma ogólnych ani nieopisanych wskaźników; i niejawnie zadeklaruj dowolny typ wskaźnika. Zamiast tego cała alokacja pamięci dynamicznej i cofnięcie alokacji musi nastąpić poprzez jawnie zadeklarowaną rodzaje dostępu... Każdy rodzaj dostępu ma odpowiedni pula pamięci który obsługuje niskopoziomowe szczegóły zarządzania pamięcią; programista może albo użyć domyślnej puli pamięci, albo zdefiniować nowe (dotyczy to zwłaszcza Non-Uniform Memory Access). Możesz nawet zadeklarować kilka różne rodzaje dostępu, które wszystkie oznaczają ten sam typ, ale korzystają z różnych pul pamięci. Ponadto język zapewnia: dostępność czeków, zarówno w czasie kompilacji, jak i w czasie wykonywania, co zapewnia, że koszt dostępu nie może wymazać typu obiektu, na który wskazuje.

Chociaż semantyka języka pozwala na automatyczne wyrzucanie śmieci z niedostępnych obiektów, większość implementacji domyślnie go nie obsługuje, ponieważ prowadziłoby to do nieprzewidywalnego zachowania w systemach czasu rzeczywistego. Ada utrzymuje ograniczony kształt regionu w oparciu o zarządzanie pamięcią; Ponadto kreatywne wykorzystanie puli pamięci może zapewnić ograniczoną formę automatycznego zbierania śmieci, ponieważ zniszczenie puli pamięci niszczy również wszystkie obiekty w puli.

historia

Trwają prace nad ulepszaniem i aktualizowaniem zawartości technicznej języka programowania Ada. Poprawka techniczna dla Ada 95 została opublikowana w październiku 2001 r., a główna poprawka, ISO / IEC 8652: 1995 / Amd 1: 2007, została opublikowana 9 marca 2007 r. Na konferencji Ada-Europe 2012 w Sztokholmie stowarzyszenie Ada Resources Association (ARA) i Ad-Europe ogłosiły zakończenie prac nad projektem Ostatnia wersja język programowania Ada i przedłożenie podręcznika referencyjnego do Międzynarodowej Organizacji Normalizacyjnej (ISO) do zatwierdzenia. ISO/IEC 8652:2012 została opublikowana w grudniu 2012 roku.

Inne odpowiednie normy to ISO 8651-3: 1988 Systemy przetwarzania informacji, grafika komputerowa, język wiązania rdzenia systemu graficznego (GKS) - Część 3: Ada .

Konstrukcje językowe

"Witaj świecie!" w Adzie

Typowym przykładem takiego języka w składni jest program Hello world: (hello.adb)

z Ada.Text_IO; użyj Ada.Text_IO; procedura Witaj zaczyna się Put_Line ("Witaj świecie!"); koniec Witam;

Ten program można skompilować za pomocą bezpłatnego kompilatora GNAT o otwartym kodzie źródłowym, uruchamiając

gnatmake hello.adb

Typy danych

System typów Ady nie jest oparty na zestawie predefiniowanych typów pierwotnych, ale umożliwia użytkownikom deklarowanie własnych typów. To stwierdzenie z kolei nie opiera się na wewnętrznej reprezentacji typu, ale na opisie celu, który ma zostać osiągnięty. Dzięki temu kompilator może określić odpowiedni rozmiar pamięci dla danego typu i sprawdzić naruszenia wnioskowania o typie w czasie kompilacji i w czasie wykonywania (tj. naruszenie zakresu, przepełnienie bufora, spójność typów itp.). Ada obsługuje typy liczbowe zdefiniowane w zakresie, typy modulo, typy agregujące (rekordy i tablice) oraz typy wyliczeniowe. Typy dostępu definiują odwołanie do wystąpienia określonego typu; niewpisane wskaźniki są niedozwolone. Typy specjalne dostępne w języku typów problemów i widokach chronionych.

Na przykład datę można przedstawić jako:

typ Day_type to zakres 1 .. 31; typ typ_miesiąca to zakres 1 .. 12; typ Typ_roku to zakres 1800 .. 2100; wpisz Godziny to mod 24; wpisz Dzień tygodnia to (poniedziałek, wtorek, środa, czwartek, piątek, sobota, niedziela); type Data jest rekordem Dzień: Day_type; Miesiąc: typ_miesiąca; Rok: typ_roku; rekord końcowy;

Typy można zakwalifikować, deklarując podtypy:

podtyp Godziny_pracy to Zakres godzin 0 .. 12; - maksymalnie 12 godzin do pracy dziennie podtyp Dzień_roboczy to zakres dni tygodnia od poniedziałku do piątku; - Dni do pracy Work_Load: stała tablica (Working_Day) godzin pracy - niejawna deklaracja typu: = (piątek => 6, poniedziałek => 4, inne => 10); - tabela przeglądowa godzin pracy z inicjalizacją

Typy mogą mieć modyfikatory, takie jak ograniczony, abstrakcyjny, prywatny itp. Można uzyskać dostęp do typów prywatnych, a typy ograniczone można modyfikować lub kopiować tylko w pakiecie, który je definiuje. Ada 95 dodaje dodatkowe funkcje rozszerzenia typu obiektowego.

Struktury kontrolne

Ada oferuje również chronione obiekty do wzajemnego wykluczenia. Obiekty chronione są konstrukcjami podobnymi do monitora, ale do sygnalizacji używają zmiennych ochronnych zamiast zmiennych warunkowych (podobnie jak w przypadku warunkowych obszarów krytycznych). Strzeżone obiekty łączą enkapsulację danych i bezpieczne wzajemne wykluczanie z monitorów, a także ochronę wejścia z warunkowych obszarów krytycznych. Główną zaletą nad klasycznymi monitorami jest to, że zmienne warunkowe nie są wymagane do sygnalizacji, co pozwala uniknąć potencjalnych zakleszczeń z powodu nieprawidłowej semantyki blokowania. Podobnie jak zadania, zabezpieczany jest wbudowanym typem ograniczonym i ma również deklarację części i treści.

Obiekt chroniony składa się z zahermetyzowanych danych osobowych (do których można uzyskać dostęp tylko w obrębie obiektu chronionego), a także procedur, funkcji i zapisów, które gwarantują wzajemne wykluczanie się (z wyjątkiem funkcji, które są niezbędne, aby być skutkiem ubocznym jest bezpłatny, dzięki czemu może pracować jednocześnie z innymi funkcjami). Zadanie wywoływania obiektu zabezpieczanego jest blokowane, jeśli inne zadanie jest aktualnie wykonywane w tym samym zabezpieczanym, i jest zwalniane, gdy inne zadanie opuszcza zabezpieczany. Zablokowane zadania są ustawiane w kolejce przy chronionym obiekcie o zamówionej godzinie przybycia.

Chronione dane obiektu są podobne do procedur, ale dodatkowo mają ochrona... Jeśli strażnik ma wartość false, zadanie wyzwania jest blokowane i dodawane do kolejki tego wpisu; Teraz do obiektu zabezpieczanego można dopuścić kolejne zadanie, ponieważ żadne z zadań nie jest aktualnie wykonywane wewnątrz obiektu zabezpieczanego. Strażnicy są ponownie oceniani za każdym razem, gdy zadanie opuszcza strzeżony obiekt, ponieważ jest to jedyny moment, w którym można zmienić ocenę strażników.

Nagrywanie rozmów może być ponownie w kolejce dla innych rekordów z tym samym podpisem. Zadanie, które jest ponownie umieszczone w kolejce, jest blokowane i dodawane do docelowej kolejki rekordów; oznacza to, że zabezpieczany obiekt zostaje zwolniony i umożliwia zaakceptowanie innego zadania.

Proszę wybrać operator w Adzie może być wykorzystany do realizacji nieblokujących wywołań wejściowych i akceptuje niedeterministyczny wybór rekordu (również strzeżony), time-out i przerywania.

Poniższy przykład ilustruje niektóre współbieżne koncepcje programowania w Adzie.

z Ada.Text_IO; użyj Ada.Text_IO; procedura Ruch jest typu Airplane_ID ma zakres 1. dziesięć ; - 10 samolotów typu zadanie Samolot (ID: Airplane_ID); - zadanie reprezentujące samoloty, z ID jako parametrem inicjalizacji type Airplane_Access to access Samolot; - typ odniesienia do typu samolotu chronionego Pas startowy to - wspólny pas startowy (zabezpieczony, aby umożliwić równoczesny dostęp) wpis Assign_Aircraft (ID: Airplane_ID); - wszystkie wpisy są gwarantowane wzajemnie wykluczające się wpis Cleared_Runway (ID: Airplane_ID); wpis Wait_For_Clear; prywatne Clear: Boolean: = True; - chronione dane prywatne - generalnie więcej niż tylko flaga... koniec pasa startowego; wpisz Runway_Access to dostęp do wszystkich Runway; - zadanie kontrolera ruchu lotniczego przyjmuje zgłoszenia do startu i lądowania typ zadania Kontroler (My_Runway: Runway_Access) to - wpisy zadań do synchronicznego przekazywania wiadomości wpis Request_Takeoff (ID: w Airplane_ID; Start: poza Runway_Access); entry Request_Approach (ID: w Airplane_ID; Approach: out Runway_Access); kontroler końcowy; - przydział instancji Runway1: aliased Runway; - utworzyć instancję pasa startowego Controller1: Controller (Runway1 "Access); - oraz kontroler do zarządzania nim ------ implementacje powyższych typów ------ chronione ciało Pas startowy to wpis Assign_Aircraft (ID: Airplane_ID), gdy Clear jest - strażnik wejścia - wywoływanie zadań jest blokowane do momentu spełnienia warunku Rozpocznij Wyczyść: = Fałsz; Put_Line (Airplane_ID "Obraz (ID) &" na pasie startowym "); koniec; wpis Cleared_Runway (ID: Airplane_ID) gdy nie Clear to początek Clear: = True; Put_Line (Airplane_ID" Image (ID) & "oczyszczony pas startowy"); kończyć się; wpis Wait_For_Clear, gdy Clear jest begin null; - nie musisz nic robić - zadanie może wejść tylko wtedy, gdy jest prawdziwe "Wyczyść" kończyć się; koniec pasa startowego; task body Kontrolerem jest begin loop My_Runway. Wait_For_Clear; - poczekaj, aż pas startowy będzie dostępny (blokada połączenia) Wybierz - poczekaj na dwa typy żądań (w zależności od tego, który jest uruchamiany jako pierwszy) kiedy Request_Approach "liczba = 0 => - oświadczenie strażnika - akceptuj tylko wtedy, gdy nie ma żadnych zadań w kolejce na Request_Approach accept Request_Start (ID: w Airplane_ID; Takeoff: out Runway_Access) do - początek zsynchronizowanej części My_Runway. Przypisz_samolot (ID); - rezerwowy pas startowy (potencjalnie blokujący wywołanie, jeśli chroniony obiekt jest zajęty lub fałszywa ochrona wejścia) Start: = Mój_pas startowy; - przypisz wartość parametru "out", aby poinformować samolot, który pas startowy; koniec żądania_startu; - koniec części synchronizowanej lub zaakceptuj Request_Approach (ID: w Airplane_ID; Approach: poza Runway_Access) do My_Runway. Przypisz_samolot (ID); Podejście: = Mój_pas startowy; koniec Prośba_Podejście; lub - zakończyć, jeśli nie ma żadnych zadań, kto może zadzwonić zakończyć; koniec wybierz; pętla końcowa; kończyć się; task body Samolot to Rwy: Runway_Access; rozpocznij Kontroler1. Żądanie_startu (ID, Rwy); - To wywołanie blokuje się, dopóki zadanie kontrolera nie zaakceptuje i zakończy blok akceptowania Put_Line (Airplane_ID "Obraz (ID) i" start ... "); opóźnienie 2.0; Rwy. Cleared_Runway (ID); - wywołanie nie zostanie zablokowane, ponieważ "Clear" w Rwy jest teraz fałszywe i żadne inne zadania nie powinny znajdować się w chronionym obiekcie opóźnienie 5.0; - przeleć trochę ... wybierz pętlę - spróbuj zażądać kontrolera pasa startowego1. Zapytanie_Podejście (ID, Rwy); - jest to wywołanie blokujące - zostanie uruchomione, gdy kontroler osiągnie akceptację bloku i powróci po zakończeniu Wyjście; - jeśli połączenie wróciło, jesteśmy gotowi do lądowania - opuść wybierz blok i kontynuuj ... lub opóźnienie 3.0; - timeout - jeśli nie ma odpowiedzi w ciągu 3 sekund, zrób coś innego (wszystko w kolejnym bloku) Put_Line (Airplane_ID "Obraz (ID) i" we wzorcu przytrzymania "); - po prostu wydrukuj wiadomość koniec wybierz; koniec pętli; opóźnienie 4.0; - wykonaj podejście do lądowania ... Put_Line (Airplane_ID" Image (ID) i "przyziemiony! ”); Rwy. Cleared_Runway (ID); - powiadom pas startowy, że „tutaj skończyliśmy”. kończyć się; Nowy_samolot: Samolot_Dostęp; zacznij od I w Airplane_ID „Zasięg pętli - utwórz kilka zadań samolotowych New_Airplane: = nowy samolot (I); - zacznie działać bezpośrednio po utworzeniu opóźnienie 4.0; pętla końcowa; koniec ruchu;

Pragmas

Pragma to dyrektywa kompilatora, która przekazuje informacje do kompilatora, aby umożliwić określoną manipulację skompilowanymi danymi wyjściowymi. Niektóre pseudokomentarze są wbudowane w język, podczas gdy inne są implementacjami.

Przykłady powszechnego użycia prag przez kompilator wyłączałyby pewne funkcje, takie jak sprawdzanie typu środowiska wykonawczego lub sprawdzanie granic indeksu tablicy, lub nakazywały kompilatorowi wstawienie kodu obiektowego zamiast wywoływania funkcji (w C/C++ robi to z funkcjami wbudowanymi).

  • APSE - Specyfikacja środowiska programistycznego wspierającego tworzenie oprogramowania w Ada
  • Ravenscar Profile to podzbiór wielozadaniowych funkcji Ady zaprojektowanych w celu zabezpieczenia krytycznych twardych komputerów w czasie rzeczywistym
  • SPARK (język programowania) - język programowania składający się z bardzo ograniczonego podzbioru Ady, opatrzony metainformacjami opisującymi pożądane zachowanie komponentu i indywidualne wymagania w czasie wykonywania