Movatterモバイル変換


[0]ホーム

URL:


Przejdź do zawartości
Wikipediawolna encyklopedia
Szukaj

Ada (język programowania)

Z Wikipedii, wolnej encyklopedii
Wikipedia:Weryfikowalność
Ten artykuł od 2011-12 wymagazweryfikowania podanych informacji:Przykłady wymagają rewizji i uporządkowania.
Należy podać wiarygodne źródła w formieprzypisów bibliograficznych.
Część lub nawet wszystkie informacje w artykule mogą być nieprawdziwe. Jako pozbawione źródeł mogą zostać zakwestionowane i usunięte.
Sprawdź w źródłach:Encyklopedia PWN •Google Books • Google Scholar • Federacja Bibliotek Cyfrowych •BazHum •BazTech •RCIN • Internet Archive (texts /inlibrary)
Dokładniejsze informacje o tym, co należy poprawić, być może znajdują się wdyskusji tego artykułu.
Po wyeliminowaniu niedoskonałości należy usunąć szablon{{Dopracować}} z tego artykułu.
Ada
logo
Pojawienie się

1980

Paradygmat

wieloparadygmatowy

Typowanie

statyczne (silne)

Implementacje

GNAT,Green Hills Software Optimising Ada 95 compiler

Aktualnawersja stabilna

Ada 2012

Twórca

Jean Ichbiah, Tucker Taft

Platforma sprzętowa

wieloplatformowy

Platforma systemowa

wieloplatformowy

Książki w Wikibooks
Strona internetowa

Adastrukturalny,kompilowany,imperatywny,statycznie typowany iobiektowyjęzyk programowania opracowany przez Jean Ichbiaha i zespół z CII Honeywell Bull w latach 70. XX wieku[1]. Język ten wygrał konkurs zorganizowany przezDepartament Obrony USA (U.S. Department of Defense – DoD), pokonując 19 innych projektów.Nazwa języka, nadana przez DoD, pochodzi od imienialady Augusty Ady Lovelace.

Historia

[edytuj |edytuj kod]

W latach 70.departament obronyUSA dostrzegł problem polegający na wykorzystywaniu dużej liczby różnychjęzyków programowania używanych doimplementacji wewnętrznych projektów informatycznych dlasystemów wbudowanych. Wiele z nich było już przestarzałych lub mocno związanych ze sprzętem, a żaden z nich nie wspierał bezpiecznego programowania modułowego. W 1975 roku została powołana grupa roboczaHigh Order Language Working Group (HOLWG), której zadaniem była redukcja liczby używanych narzędzi lub zaprojektowanie nowego języka programowania, który spełniałby wymagania wszystkich dotychczas realizowanych projektów. Efektem działań grupy był język Ada, a liczba używanych języków spadła z ponad 450 w roku 1983 do 37 w 1996.

Grupa robocza HOLWG rozpoczęła prace od wydaniaWymagań językowych Steelmana (ang.Steelman Language Requirements), serii dokumentów opisujących założenia, które poszczególne języki programowania powinny spełniać. Następnie dokonano formalnej weryfikacji wielu istniejących języków, lecz w 1977 stwierdzono, że każdy z nich posiada w świetle tych dokumentów poważne mankamenty, które go eliminują. Wobec tego ogłoszony został konkurs na stworzenie nowego języka. Do startu zaproszono cztery zespoły, którym nadano oznaczenia kolorystyczne:

Ada Lovelace

W kwietniu 1978, po publicznych badaniach, propozycje zespołu czerwonego i zielonego przeszły do kolejnej fazy. Rok później ostateczne zwycięstwo przyznano koncepcji zielonej opracowanej przezCII Honeywell Bull. Otrzymała ona nazwę Ada na cześćlady Augusty Ady Lovelace. Zwycięska propozycja czerpała pomysły z językaLIS, który Ichbiah i jego grupa zaprojektowali w latach 70. Pierwsze wydanie dokumentacji języka Ada zostało opublikowane w ACM SIGPLAN Notices w czerwcu 1979 roku. Dokumentacja standardu wojskowego została zatwierdzona 10 grudnia 1980 roku (urodziny Ady Lovelace) i otrzymała numer MIL-STD-1815.

W roku 1981C.A.R. Hoare skrytykował Adę w swojej mowie podczas odbioruNagrody Turinga jako język zbyt skomplikowany, a przez to zawodny, lecz później prawdopodobnie zmienił zdanie, czego wyrazem jest przedmowa, którą napisał dla podręcznika Ady.

Pojawienie się Ady wywołało duże zainteresowanie wśród społecznościprogramistów w pierwszych latach swojego istnienia. Wśród zwolenników pojawiały się opinie, że może ona zostać głównym językiem programowania ogólnego przeznaczenia. Jean Ichbiah publicznie stwierdził, że w przeciągu 10 lat na rynku pozostaną jedynie dwa języki: Ada iLisp. Wczesne kompilatory Ada z trudem radziły sobie zimplementacją dużego, złożonego języka, a wydajność zarówno generowanego kodu, jak i procesu kompilacji, podobnie jak jakość narzędzi, pozostawiały wiele do życzenia. Twórcy kompilatorów skierowali swoje wysiłki ku uzyskaniu certyfikacji ACVC wymaganej przez agencje rządowe. Pierwszą certyfikowaną implementacją Ady byłtranslator NYU Ada/Ed, który uzyskał ten status 11 kwietnia 1983 roku. Był on zaimplementowany w wysokopoziomowym języku SETL.

W 1987 roku Departament Obrony USA wydał zarządzenie wymagające użycia Ady w każdym projekcie programistycznym, gdzie nowy kod stanowił więcej niż 30% ogólnego wyniku, aczkolwiek często zezwalano na wyjątki od tej reguły. Reguła została zniesiona 10 lat później.

Przez lata 80. i 90. poprawiono ogólną jakość i wydajność kompilatorów Ady, lecz wciąż pojawiały się poważne problemy na drodze do pełnego wykorzystania możliwości języka. Jednym z nich był zaproponowany modelwielozadaniowości, który znacząco odbiegał od dotychczasowych rozwiązań znanych programistom. Z uwagi na obecność kluczowych mechanizmów bezpieczeństwa, Ada jest obecnie używana nie tylko w aplikacjach wojskowych, ale także w projektach komercyjnych, gdzie błąd programistyczny może mieć kosztowne konsekwencje. Przykładami takich obszarów jest kontrola lotów, awionika samolotów, satelity, automatyczne systemy transportowe czy bankowość. Przykładowo,oprogramowanie systemuFly-by-wire w samolocieBoeing 777 zostało w całości napisane w Adzie.

Pochodne i rozszerzenia

[edytuj |edytuj kod]

Właściwości

[edytuj |edytuj kod]

Ada jestwieloparadygmatowym językiem programowania ogólnego przeznaczenia. Jego składnia została zaprojektowana w taki sposób, aby zminimalizować szanse popełnienia trudnych do wykrycia błędów. Uzyskiwane jest to poprzez przemyślany i konsekwentny dobór poszczególnych elementów składni, a także ich jednoznaczność.

Wśród kluczowych właściwości języka można wymienić:

  • bezpieczny, ścisłysystem typów, nastawiony na semantykę, a nie na fizyczną reprezentację danych,
  • wsparcie dlaprogramowania obiektowego,
  • zaawansowany mechanizm pakietów i modułów,
  • wsparcie dla zaawansowanych modeli współbieżności,
  • mechanizmy zarządzania pamięcią,
  • wsparcie dla programowania kontraktowego,
  • ustandaryzowane interfejsy do łączenia kodu Ady z językamiC,C++,FORTRAN iCOBOL.

Standaryzacja

[edytuj |edytuj kod]

Język został standardemANSI w 1983 roku (ANSI/MIL-STD 1815A), a następnie bez żadnych dodatkowych modyfikacji – standardemISO w 1987 roku (ISO-8652:1987). Ustandaryzowana wersja języka jest powszechnie nazywana Ada 83 lub Ada 87, zależnie od tego, którą datę ogłoszenia standardu weźmiemy.

Wspólny standard ANSI/ISO (ISO-8652:1995) Ada 95 został opublikowany w lutym 1995 roku, przez co Ada stała się pierwszymobiektowo zorientowanym, ustandaryzowanym językiem programowania. Aby pomóc w dopracowaniu i przyjęciu standardu,US Air Force sfinansowała prace nadkompilatorem GNAT. Obecnie GNAT jest częścią pakietuGNU Compiler Collection.

Prace nad standaryzacją Ady są nieustannie kontynuowane. W październiku 2001 ukazała się techniczna errata do standardu Ada 95, a w 2007 – pierwsza znacząca poprawka ISO/IEC 8652:1995/Amd 1:2007. Nowy, ujednolicony tekst standardu został opublikowany 9 marca 2007 roku. Następna, aktualna rewizja została wydana w grudniu 2012 (ISO/IEC 8652:201z Ed. 3)[4].

Przykłady

[edytuj |edytuj kod]

Oto prosty przykład (funkcja Ackermanna) kodu w Adzie demonstrujący kilka jej cech.Program, żeby się skompilować, musi być umieszczony w pliku „ackermann.adb” (wielkośćliter bez znaczenia).

withAda.Command_Line;useAda.Command_Line;withGnat.Io;useGnat.Io;procedureAckermannisfunctionAck(x,y:inInteger)returnIntegerisbeginif(x=0)thenreturny+1;elsif(y=0)thenreturnAck(x-1,1);elsereturnAck(x-1,Ack(x,y-1));endif;endAck;x,y,a:Integer;beginif(Argument_Count=2)thenx:=Integer'Value(Argument(1));y:=Integer'Value(Argument(2));elsif(Argument_Count=1)thenx:=3;y:=Integer'Value(Argument(1));elsex:=3;y:=3;endif;a:=Ack(x,y);Put("Ack (");Put(x);Put(",");Put(y);Put(") = ");Put(a);New_Line;endAckermann;

Można zauważyć, że:

  • Wszystkie nazwy są nieczułe na wielkość znaków.
  • Cały program to jedna wielkaprocedura, która może zawierać podprocedury (w tym wypadku funkcjęack).
  • Wszystkie zamknięcia są zapisywane za pomocąend co_zamykamy. Pozwala to uniknąć przypadkowych pomyłek, ale w opinii wielu programistów jest nadmiarowe.
  • Przypisanie jest zapisywane ":= ", natomiast porównanie przez "= ". Argumentuje się to tym, że wC występują pomyłki polegające na zapisie "= " zamiast właściwego "== ".
  • Nie ma odpowiednika funkcjiprintf, uważanej za niebezpieczną. Chociaż funkcje "Put " i "New_Line " (z modułu "Gnat.Io ") są bezpieczniejsze, są bardzo niewygodne w użyciu.
  • "elseif " pisze się łącznie nie zaś oddzielnie jak wC. Jest to pewne usprawnienie, używane przez większość nowych języków.
  • Składnieatrybutów toobiekt'atrybut (lubklasa'atrybut), zamiast bardziej tradycyjnychselekcji ". " czy ":: ".
  • Rzutowania są przeprowadzane składniąKlasa'Value(wartość). Jest to znaczne ulepszenie wobecC++, gdzie(klasa)wartość prowadzi do niepewnej kolejności wykonywania działań i zwykle w większych wyrażeniach jest zapisywane jako((klasa)(wartość)).
  • Występuje rozróżnienie „procedur” (w nomenklaturzeC: funkcje niezwracające wartości) i „funkcji” (w nomenklaturzeC: funkcje zwracające wartość). Większość współczesnych języków nie zawiera tego rozróżnienia.

Wartościowanie leniwe

[edytuj |edytuj kod]

Operatoramishort circuit nazywamy takie, które nie są obliczane jeśli nie jest to konieczne. Inną nazwą tego rodzaju jestwartościowanie leniwe.

W Adzie występują następujące konstrukcje:

  • A or B
    • Obliczane jestA
    • Jeśli A jest prawdziwe, obliczane jestB. Niezależnie od wynikuB, wynik wyrażenia to „prawda”.
    • Jeśli A jest fałszywe, obliczane jestB. JeśliB jest prawdziwe, wynik to „prawda”, w przeciwnym razie „fałsz”.
  • A or else B
    • Obliczane jestA
    • Jeśli A jest prawdziwe, wynik to „prawda”, aB nie jest obliczane.
    • Jeśli A jest fałszywe, obliczane jestB. JeśliB jest prawdziwe, wynik to „prawda”, w przeciwnym razie „fałsz”.
  • A and B
    • Obliczane jestA
    • Jeśli A jest prawdziwe, obliczane jestB. JeśliB jest też prawdziwe, wynik to „prawda”, w przeciwnym razie fałsz.
    • Jeśli A jest fałszywe, obliczane jest B, ale niezależnie od wynikuB, wynik wyrażenia to fałsz.
  • A and then B
    • Obliczane jestA
    • Jeśli A jest prawdziwe, obliczane jestB. JeśliB jest też prawdziwe, wynik to „prawda”, w przeciwnym razie „fałsz”.
    • Jeśli A jest fałszywe, wynik to „fałsz”, aB nie jest obliczane.

Przykład („short_circuit.adb”):

withText_IO,Ada.Integer_Text_IO;useText_IO,Ada.Integer_Text_IO;procedureShort_CircuitisfunctionIs_Odd(i:Integer)returnBooleanisbeginPut("Testing");Put(i);New_Line;return((i/2)*2)/=i;end;beginPut_Line("Testing if ""5 and 6"" are odd");if(Is_Odd(5)andIs_Odd(6))thenPut_Line("True");elsePut_Line("False");endif;Put_Line("Testing if ""5 or 6"" are odd");if(Is_Odd(5)orIs_Odd(6))thenPut_Line("True");elsePut_Line("False");endif;Put_Line("Testing if ""5 and then 6"" are odd");if(Is_Odd(5)and thenIs_Odd(6))thenPut_Line("True");elsePut_Line("False");endif;Put_Line("Testing if ""5 or else 6"" are odd");if(Is_Odd(5)or elseIs_Odd(6))thenPut_Line("True");elsePut_Line("False");endif;Put_Line("Testing if ""6 and 5"" are odd");if(Is_Odd(6)andIs_Odd(5))thenPut_Line("True");elsePut_Line("False");endif;Put_Line("Testing if ""6 or 5"" are odd");if(Is_Odd(6)orIs_Odd(5))thenPut_Line("True");elsePut_Line("False");endif;Put_Line("Testing if ""6 and then 5"" are odd");if(Is_Odd(6)and thenIs_Odd(5))thenPut_Line("True");elsePut_Line("False");endif;Put_Line("Testing if ""6 or else 5"" are odd");if(Is_Odd(6)or elseIs_Odd(5))thenPut_Line("True");elsePut_Line("False");endif;endShort_Circuit;

W przykładzie widać też użycie podwójnego znaku"" dla zaznaczenia" włańcuchu. Umożliwia to obycie się bez skomplikowanych i podatnych na błędy zasad escape'owania znaków. WC taka składnia byłaby niemożliwa ponieważ C pozwala napisać"łańcuch 1" "łańcuch 2" (zrozdzielającymispacjami lub bez), co oznacza to samo co"łańcuch 1łańcuch 2" i jest przydatne wpreprocessingu.

Oto przykład programu wyświetlającego zawartośćplików naekran. Jakoargumenty podawane zlinii poleceń program przyjmuje nazwy plików. W razie podania błędnej wzniesieflagę błędu.

withAda.Text_Io;useAda.Text_Io;withAda.Integer_Text_Io;useAda.Integer_Text_Io;withAda.Command_Line;useAda.Command_Line;withAda.Strings.Unbounded;useAda.Strings.Unbounded;procedureCatisPlik:File_Type;Litera:Character;LiczbaArgumentow:Natural;Nazwa:Unbounded_String;beginif(Argument_Count/=0)thenLiczbaArgumentow:=Argument_Count;Put("Podales do programu: ");Put(Command_Name);Put(" argumenty");New_Line;forThisArgumentin1..LiczbaArgumentowloopPut("Numer argumentu: ");Put(ThisArgument);Put(" jest nim: ");Put(Argument(ThisArgument));New_Line;endloop;forThisArgumentin1..LiczbaArgumentowloopNazwa:=To_Unbounded_String(Argument(ThisArgument));Open(Plik,In_File,To_String(Nazwa));New_Line;Put("Nastepny plik o nazwie: ");Put(Argument(ThisArgument));New_Line(2);loopexitwhenEnd_Of_File(Plik);Get(Plik,Litera);Put(Litera);ifEnd_Of_Line(Plik)thenNew_Line;endif;endloop;Close(Plik);endloop;elsePut("Nie podales argumentow");endif;endCat;

Program korzysta zbiblioteki Ada.Command_Line, która służy do obsługi linii poleceń.

Przypisy

[edytuj |edytuj kod]
  1. Jean D.J.D. Ichbiah Jean D.J.D. i inni,Rationale for the design of the Ada programming language, „SIGPLAN Not.”, 14 (6b),1979, s. 1–261,DOI10.1145/956653.956654,ISSN0362-1340 [dostęp 2024-07-29] .
  2. Henry G.H.G. Baker Henry G.H.G.,Object-Oriented Programming in Ada83 —Genericity Rehabilitated [online], s. 10 .
  3. Język Ada [online], noite.pl [dostęp 2021-11-08] .
  4. Ada 2012 Language Reference Manual
Języki programowania
1GL
2GL/
Język drugiej generacji/
Asembler
3GL /
Język trzeciej generacji
wieloparadygmatowe
proceduralne
istrukturalne
historyczne
inne
obiektowe
funkcyjne
edukacyjne
4GL/
Język czwartej generacji/
Język dziedzinowy
Języki zapytań do baz danych
Generatory raportów / stron
Przetwarzanie danych, analiza i raportowanie
5GL/Logiczne
Ezoteryczne
Inne
Kontrola autorytatywna (wieloparadygmatowy język programowania):
Źródło: „https://pl.wikipedia.org/w/index.php?title=Ada_(język_programowania)&oldid=77023576
Kategorie:
Ukryte kategorie:

[8]ページ先頭

©2009-2025 Movatter.jp