From c1cbdd3b97ae8b2305ceedc39fd5bfb7b222e948 Mon Sep 17 00:00:00 2001 From: Andry Ogorodnik Date: Tue, 17 Sep 2024 12:54:23 +0300 Subject: [PATCH] Added intro-to-ada-ukr with 2 first chapters --- .../chapters/imperative_language.rst | 711 ++++++++++++++++++ .../chapters/introduction.rst | 103 +++ content/courses/intro-to-ada-ukr/conf.ini | 5 + content/courses/intro-to-ada-ukr/cover-A4.pdf | Bin 0 -> 109761 bytes content/courses/intro-to-ada-ukr/index.rst | 128 ++++ 5 files changed, 947 insertions(+) create mode 100644 content/courses/intro-to-ada-ukr/chapters/imperative_language.rst create mode 100644 content/courses/intro-to-ada-ukr/chapters/introduction.rst create mode 100644 content/courses/intro-to-ada-ukr/conf.ini create mode 100644 content/courses/intro-to-ada-ukr/cover-A4.pdf create mode 100644 content/courses/intro-to-ada-ukr/index.rst diff --git a/content/courses/intro-to-ada-ukr/chapters/imperative_language.rst b/content/courses/intro-to-ada-ukr/chapters/imperative_language.rst new file mode 100644 index 000000000..d123c9a0c --- /dev/null +++ b/content/courses/intro-to-ada-ukr/chapters/imperative_language.rst @@ -0,0 +1,711 @@ +Імперативна мова +================ + +.. include:: ../../global.txt + +Ada це багатопарадигмальна мова з підтримкою об’єктно-орієнтованого програмування +та деяких елементів функціонального програмування, але її ядром є проста, узгоджена +процедурна/імперативна мова, схожа на C або Pascal. + +.. admonition:: В інших мовах + + Одна важлива відмінність між Ada та такою мовою, як C, полягає в тому, + що оператори та вирази дуже чітко розрізняються. В Ada, якщо ви спробуєте + використати вираз, де потрібен оператор, ваша програма не зможе скомпілюватися. + Це правило підтримує корисний стилістичний принцип: вирази призначенні для + отримання значень а не побічних ефектів. Це також може запобігти деяким помилкам, + таким як помилкове використання оператора рівності :ada:`=` замість операції + присвоювання :ada:`:=` де потрібне саме присвоєння. + +Hello world +----------- + +Ось дуже проста імперативна програма Ada: + +.. code:: ada run_button project=Courses.Intro_To_Ada.Imperative_Language.Greet + + with Ada.Text_IO; + + procedure Greet is + begin + -- Вивести "Hello, World!" на екран + Ada.Text_IO.Put_Line ("Hello, World!"); + end Greet; + +яка може знаходитися в файлі :file:`greet.adb`. + +.. only:: builder_html + + Якщо ви скомпілюєте цей файл за допомогою компілятора GNAT і запустите + на виконання, ви отримаєте очікуваний результат. + + .. code-block:: sh + + $ gprbuild greet.adb + using project file [...]_default.gpr + Compile + [Ada] greet.adb + Bind + [gprbind] greet.bexch + [Ada] greet.ali + Link + [link] greet.adb + + $ ./greet + Hello, World! + $ + +У наведеній вище програмі є кілька цікавих речей: + +- Підпрограма в Ada може бути або процедурою, або функцією. Процедура, + як показано вище, не повертає значення під час виклику. + +- :ada:`with` використовується для посилання на зовнішні модулі, які + потрібні процедурі. Це схоже на ``import`` у інших мовах або + приблизно схоже на :c:`#include` у C та C++. + Пізніше ми побачимо, як вони працюють у деталях. Тут нам потрібен + модуль стандартної бібліотеки, пакет :ada:`Ada.Text_IO`, який містить + процедуру друку тексту на екрані: :ada:`Put_Line`. + +- :ada:`Greet` це процедура та основна точка входу для нашої першої + програми. На відміну від C або C++, її можна назвати як завгодно. + Точку входу визначить побудовник. У нашому простому прикладі + :program:`gprbuild`, побудовник GNAT, використовуватиме файл, який + Ви передали як параметр. + +- :ada:`Put_Line` це процедура, як і :ada:`Greet`, за винятком того, + що вона оголошена в модулі :ada:`Ada.Text_IO`. + Це еквівалент С :c:`printf`. + +- Коментарі починаються з :ada:`--` і йдуть до кінця рядка. Синтаксису + багаторядкового коментаря немає, тобто неможливо почати коментар в + одному рядку з продовженням в наступному рядку. Єдиний спосіб + створити кілька рядків коментарів в Ada, це використовувати :ada:`--` + для кожного рядка. Наприклад: + +.. code-block:: ada + + -- Ми починаємо коментар в цьому рядку + -- і продовжуємо в наступному + +.. admonition:: В інших мовах + + Процедури подібні до функцій у C або C++, які повертають :c:`void`. + Пізніше ми побачимо, як оголошувати функції в Ada. + +Ось мінімалістичний варіант прикладу "Hello, World": + +.. code:: ada run_button project=Courses.Intro_To_Ada.Imperative_Language.Greet_2 + + with Ada.Text_IO; use Ada.Text_IO; + + procedure Greet is + begin + -- Вивести "Hello, World!" на екран + Put_Line ("Hello, World!"); + end Greet; + +Ця версія використовує ключове слово :ada:`use`, яке має +форму :ada:`use` *ім'я-пакету*. Як видно з виклику +:ada:`Put_Line`, ефект полягає в тому, що на сутності з +названого пакета можна посилатися безпосередньо, без +необхідності вказувати *ім'я-пакету.* попереду. + + +.. _Intro_Ada_If_Statement: + +Імперативна мова - If/Then/Else +---------------------------------- + +У цьому розділі описується оператор :ada:`if` і представлено кілька інших +фундаментальних можливостей мови, включаючи цілочисельний ввід/вивід, +оголошення змінних і режими доступу до параметрів підпрограм. + +Оператор :ada:`if` не дивує за формою та функціями: + +.. code:: ada compile_button project=Courses.Intro_To_Ada.Imperative_Language.Check_Positive + + with Ada.Text_IO; use Ada.Text_IO; + with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; + + procedure Check_Positive is + N : Integer; + begin + -- Виводимо запит на екран + Put ("Enter an integer value: "); + + -- Зчитуємо цілочисленне значення + Get (N); + + if N > 0 then + -- Виводимо число + Put (N); + Put_Line (" is a positive number"); + end if; + end Check_Positive; + +Оператор :ada:`if` складається як мінімум із зарезервованого слова :ada:`if`, +умови (яка має бути логічним значенням), зарезервованого слова :ada:`then` і +непорожньої послідовності операторів (частина :ada:`then`) яка виконується, +якщо умова оцінюється як Істина і завершальне :ada:`end if`. + +У цьому прикладі оголошується цілочисленна змінна N, запитується у користувача +ціле число, перевіряється, чи значення є додатним, і, якщо так, відображається +ціле значення, за яким слідує рядок "це додатне число". Якщо значення відємне, +процедура не відображає жодних результатів. + +Тип Integer є попередньо визначеним типом зі знаком, і його діапазон залежить +від архітектури комп’ютера. На типових сучасних процесорах ціле число має +32-розрядний знак. + +Приклад ілюструє деякі базові функції для цілочисельного введення-виведення. +Відповідні підпрограми знаходяться у пакеті :ada:`Ada.Integer_Text_IO` і включають +процедуру :ada:`Get` (яка читає число з клавіатури) і процедуру :ada:`Put` +(яка відображає ціле число). + +Далі невеликі модифікації прикладу, які ілюструють оператор :ada:`if` із частиною :ada:`else`: + +.. code:: ada compile_button project=Courses.Intro_To_Ada.Imperative_Language.Check_Positive_2 + + with Ada.Text_IO; use Ada.Text_IO; + with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; + + procedure Check_Positive is + N : Integer; + begin + -- Виводимо запит на екран + Put ("Enter an integer value: "); + + -- Зчитуємо цілочисленне значення + Get (N); + + -- Виводимо число + Put (N); + + if N > 0 then + Put_Line (" is a positive number"); + else + Put_Line (" is not a positive number"); + end if; + end Check_Positive; + +У цьому прикладі, якщо вхідне значення є відємним, програма відображає +значення, за яким слідує рядок "не є додатним числом". + +Останній варіант ілюструє оператор :ada:`if` з декількома :ada:`elsif`: + +.. code:: ada compile_button project=Courses.Intro_To_Ada.Imperative_Language.Check_Direction + + with Ada.Text_IO; use Ada.Text_IO; + with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; + + procedure Check_Direction is + N : Integer; + begin + Put ("Enter an integer value: "); + Get (N); + Put (N); + + if N = 0 or N = 360 then + Put_Line (" is due north"); + elsif N in 1 .. 89 then + Put_Line (" is in the northeast quadrant"); + elsif N = 90 then + Put_Line (" is due east"); + elsif N in 91 .. 179 then + Put_Line (" is in the southeast quadrant"); + elsif N = 180 then + Put_Line (" is due south"); + elsif N in 181 .. 269 then + Put_Line (" is in the southwest quadrant"); + elsif N = 270 then + Put_Line (" is due west"); + elsif N in 271 .. 359 then + Put_Line (" is in the northwest quadrant"); + else + Put_Line (" is not in the range 0..360"); + end if; + end Check_Direction; + +У цьому прикладі очікується, що користувач введе ціле число від +0 до 360 включно, і відображається, якому квадранту чи осі +відповідає значення. Оператор :ada:`in` перевіряє, чи знаходиться +скалярне значення в заданому діапазоні, і повертає логічний результат. +Ефект від програми має бути зрозумілим; пізніше ми побачимо +альтернативний і ефективніший стиль для досягнення того самого ефекту +за допомогою оператора :ada:`case`. + +Ключове слово :ada:`elsif` відрізняється від C або C++, де замість нього +використовуються вкладені блоки :ada:`else .. if`. І ще одна відмінність +полягає в наявності :ada:`end if`, що дозволяє уникнути проблеми, +відомої як «висячий else». + + +.. _Intro_Ada_Loop_Statement: + +Імперативна мова - Цикли +------------------------ + +Ada має три способи визначення циклів. Вони відрізняються від циклів +C / Java / Javascript, проте більш простим синтаксисом і семантикою +відповідно до філософії Ada. + +Цикли For +~~~~~~~~~ + +Першим типом циклу є цикл :ada:`for`, який дозволяє виконувати ітерацію +в дискретному діапазоні. + +.. code:: ada run_button project=Courses.Intro_To_Ada.Imperative_Language.Greet_5a + + with Ada.Text_IO; use Ada.Text_IO; + + procedure Greet_5a is + begin + for I in 1 .. 5 loop + -- Виклик процедури Put_Line + Put_Line ("Hello, World!" + & Integer'Image (I)); + -- ^ Procedure parameter + end loop; + end Greet_5a; + +.. only:: builder_html + + Виконання дає такий результат: + + .. code-block:: sh + + Hello, World! 1 + Hello, World! 2 + Hello, World! 3 + Hello, World! 4 + Hello, World! 5 + +Кілька речей, на які варто звернути увагу: + +- :ada:`1 .. 5` це дискретний діапазон від :ada:`1` до :ada:`5` включно. + +- Параметр циклу :ada:`I` (назва довільна) у тілі циклу має значення + в цьому діапазоні. + +- :ada:`I` є локальним для циклу, тому ви не можете посилатися на :ada:`I` + поза циклом. + +- Хоча значення :ada:`I` збільшується на кожній ітерації, з точки зору коду + всередині циклу воно є постійним. Змінювати його неможна. Спроба змінити + його значення призведе до помилки компіляції. + +.. _Intro_Ada_Image_Attribute: + +- :ada:`Integer'Image` це функція, яка приймає ціле число та перетворює його + на :ada:`String`. Це приклад мовної конструкції, відомої як *атрибут*, + позначений синтаксисом :ada:`'`, який буде розглянуто більш детально пізніше. + +- Символ :ada:`&` є оператором конкатенації для строкових значень + +- :ada:`end loop` позначає кінець циклу + +«Крок» циклу обмежений 1 (напрямок вперед) і -1 (назад). Щоб виконати ітерацію +в діапазоні назад, використовуйте ключове слово :ada:`reverse`: + +.. code:: ada run_button project=Courses.Intro_To_Ada.Imperative_Language.Greet_5a_Reverse + + with Ada.Text_IO; use Ada.Text_IO; + + procedure Greet_5a_Reverse is + begin + for I in reverse 1 .. 5 loop + Put_Line ("Hello, World!" + & Integer'Image (I)); + end loop; + end Greet_5a_Reverse; + +.. only:: builder_html + + Виконання дає такий результат: + + .. code-block:: sh + + Hello, World! 5 + Hello, World! 4 + Hello, World! 3 + Hello, World! 2 + Hello, World! 1 + +Межі циклу :ada:`for` можуть бути обчислені під час виконання; вони +обчислюються один раз перед виконанням тіла циклу. Якщо значення +верхньої межі менше значення нижньої, то цикл не виконується взагалі. +Це також стосується циклів :ada:`reverse`. Таким чином, у наступному +прикладі виводу на екран не буде: + +.. code:: ada run_button project=Courses.Intro_To_Ada.Imperative_Language.Greet_No_Op + + with Ada.Text_IO; use Ada.Text_IO; + + procedure Greet_No_Op is + begin + for I in reverse 5 .. 1 loop + Put_Line ("Hello, World!" + & Integer'Image (I)); + end loop; + end Greet_No_Op; + +Докладніше про цикл :ada:`for` буде підніше. + +.. _Intro_Ada_Bare_Loops: + +Безумовний цикл +~~~~~~~~~~~~~~~ + +Найпростішим циклом в Ada є безумовний цикл, який є основою для інших +типів циклів Ada. + +.. code:: ada run_button project=Courses.Intro_To_Ada.Imperative_Language.Greet_5b + + with Ada.Text_IO; use Ada.Text_IO; + + procedure Greet_5b is + -- Оголошуємо змінну: + I : Integer := 1; + -- ^ Тип + -- ^ Начальне значення + begin + loop + Put_Line ("Hello, World!" + & Integer'Image (I)); + + -- Вихід із циклу: + exit when I = 5; + -- ^ Умова + + -- Присвоєння: + I := I + 1; + -- Конструкції як в С 'I++' немає + end loop; + end Greet_5b; + +Цей приклад дає той самий ефект, що й :ada:`Greet_5a`, показаний раніше. + +Він ілюструє кілька концепцій: + +- Ми оголосили змінну з назвою :ada:`I` між :ada:`is` і :ada:`begin`. + Це являє собою *декларативний блок*. Ada чітко відокремлює декларативну + область від суто коду підпрограми. Оголошення може відбуватися в + декларативній області, але не допускається посеред коду. + +- Цикл починається ключовим словом :ada:`loop` і, як і будь-який тип + циклу, завершується комбінацією ключових слів :ada:`end loop`. Сам по собі + це нескінченний цикл. Ви можете вийти з цього за допомогою оператора :ada:`exit` + +- Синтаксис присвоєння: :ada:`:=`, а рівності — :ada:`=`. Немає способу + сплутати їх, оскільки, як зазначалося раніше, в Ada твердження та вирази + є різними, а вирази не є дійсними твердженнями. + + +Цикл While +~~~~~~~~~~ + +Останній вид циклу в Ada — це цикл :ada:`while`. + +.. code:: ada run_button project=Courses.Intro_To_Ada.Imperative_Language.Greet_5c + + with Ada.Text_IO; use Ada.Text_IO; + + procedure Greet_5c is + I : Integer := 1; + begin + -- Умова має бути логічним виразом + -- (не численним). + -- Оператор "<=" вертає результат + -- порівняння + while I <= 5 loop + Put_Line ("Hello, World!" + & Integer'Image (I)); + + I := I + 1; + end loop; + end Greet_5c; + +Умова оцінюється перед кожною ітерацією. Якщо результат хибний, +то цикл припиняється. + +Ця програма робить то самє, що й попередні. + +.. admonition:: В інших мовах + + Зауважте, що Ada має іншу семантику, ніж мови на основі C щодо умови в + циклі while. В Ada умова має бути логічним значенням, інакше компілятор + відхилить програму; умова не є цілим числом, яке розглядається як + :ada:`True` або :ada:`False` залежно від того, відмінне воно від нуля + чи ні. + + +.. _Intro_Ada_Case_Statement: + +Імперативна мова - Case +----------------------- + +Оператор Ada :ada:`case` схожий на оператор C і C++ :c:`switch`, але з +деякими важливими відмінностями. + +Ось приклад, варіація програми, яка була показана раніше з +оператором :ada:`if`: + +.. code:: ada compile_button project=Courses.Intro_To_Ada.Imperative_Language.Check_Direction_2 + + with Ada.Text_IO; use Ada.Text_IO; + with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; + + procedure Check_Direction is + N : Integer; + begin + loop + Put ("Enter an integer value: "); + Get (N); + Put (N); + + case N is + when 0 | 360 => + Put_Line + (" is due north"); + when 1 .. 89 => + Put_Line + (" is in the northeast quadrant"); + when 90 => + Put_Line + (" is due east"); + when 91 .. 179 => + Put_Line + (" is in the southeast quadrant"); + when 180 => + Put_Line + (" is due south"); + when 181 .. 269 => + Put_Line + (" is in the southwest quadrant"); + when 270 => + Put_Line + (" is due west"); + when 271 .. 359 => + Put_Line + (" is in the northwest quadrant"); + when others => + Put_Line + (" Au revoir"); + exit; + end case; + end loop; + end Check_Direction; + +Ця програма постійно запитує ціле число, а потім, якщо значення знаходиться +в діапазоні :ada:`0 .. 360`, відображає відповідний квадрант або вісь. Якщо +значення виходить за межі цього діапазону, цикл (і програма) припиняється +після виведення прощального повідомлення. + +Ефект оператора case подібний до оператора if у попередньому прикладі, але +оператор case може бути ефективнішим, оскільки він не передбачає багаторазових +перевірок діапазону. + +Важливі моменти щодо конструкції case: + +- Вираз для case (тут змінна :ada:`N`) має бути дискретного типу, тобто + або цілого типу, або типу перерахування. Дискретні типи будуть розглянуті + більш детально пізніше :ref:`дискретні типи `. + +- Кожне можливе значення виразу case має бути охоплено одною з гілок + оператора case. Це буде перевірено під час компіляції. + +- Гілка може охоплювати одне значення, наприклад :ada:`0`; діапазон значень, + наприклад :ada:`1 .. 89`; або будь-яка комбінація значень (розділених символом `|`). + +- Як особливий випадок, необов’язкова кінцева гілка може вказати :ada:`others`, + яка охоплює всі інші значення, не включені в попередні гілки. + +- Виконання складається з оцінки виразу case, а потім передачі керування коду в + унікальній гілці, яка охоплює це значення. + +- Коли виконання коду у вибраній гілці завершено, керування передається коду + після :ada:`end case`. На відміну від C, виконання не переходить до наступної + гілки. Отже, Ada не потребує (і не має) оператора :c:`break`. + + +Імперативна мова - Декларативні блоки +------------------------------------- + +Як згадувалося раніше, Ada проводить чіткий синтаксичний розподіл між деклараціями, +які вводять імена для сутностей, які використовуватимуться в програмі, та операторами, +які виконують обробку. Області в програмі, де можуть з’являтися декларації, називаються +декларативними блоками. + +У будь-якій підпрограмі розділ між :ada:`is` і :ada:`begin` є декларативним блоком. +Ви можете оголосити там змінні, константи, типи, внутрішні підпрограми та інші сутності. + +Ми коротко згадували про оголошення змінних у попередньому підрозділі. Давайте +розглянемо простий приклад, де ми оголошуємо цілочисельну змінну :ada:`X` у декларативному +блоці та виконуємо її ініціалізацію та модифікацію: + +.. code:: ada run_button project=Courses.Intro_To_Ada.Imperative_Language.Variable_Declaration + + with Ada.Text_IO; use Ada.Text_IO; + + procedure Main is + X : Integer; + begin + X := 0; + Put_Line ("The initial value of X is " + & Integer'Image (X)); + + Put_Line ("Performing operation on X..."); + X := X + 1; + + Put_Line ("The value of X now is " + & Integer'Image (X)); + end Main; + +Давайте розглянемо ще один приклад: + +.. code:: ada run_button project=Courses.Intro_To_Ada.Imperative_Language.Nested_Procedure + + with Ada.Text_IO; use Ada.Text_IO; + + procedure Main is + procedure Nested is + begin + Put_Line ("Hello World"); + end Nested; + begin + Nested; + -- Викликали процедуру Nested + end Main; + +.. _Intro_Ada_Block_Statement: + +Оголошення неможливі посеред операторів. Якщо вам потрібно оголосити локальну змінну серед +операторів, ви можете оголосити новий декларативний блок за допомогою оператора :ada:`declare`: + +.. code:: ada compile_button project=Courses.Intro_To_Ada.Imperative_Language.Greet_6 + + with Ada.Text_IO; use Ada.Text_IO; + + procedure Greet is + begin + loop + Put_Line ("Please enter your name: "); + + declare + Name : String := Get_Line; + -- ^ Виклик функції + -- Get_Line + begin + exit when Name = ""; + Put_Line ("Hi " & Name & "!"); + end; + + -- Змінної Name більше не існує + end loop; + + Put_Line ("Bye!"); + end Greet; + +.. attention:: + + Функція :ada:`Get_Line` дозволяє вам отримувати дані від користувача та отримати + строку як результат. Це більш-менш еквівалентно функції C:c:`scanf`. + + Вона повертає :ada:`String`, який, як ми побачимо пізніше, є + :ref:`Необмеженим масивом `. Наразі ми просто + зауважимо, що якщо ви бажаєте оголосити змінну :ada:`String` і не знаєте її розмір + заздалегідь, вам потрібно ініціалізувати змінну під час її оголошення. + +Імперативна мова - умовні вирази +-------------------------------- + +Ada 2012 додала аналог виразу для умовних операторів +(:ada:`if` і :ada:`case`). + +If вираз +~~~~~~~~ + +Ось альтернативна версія прикладу, який ми бачили раніше; +оператор :ada:`if` було замінено виразом :ada:`if`: + +.. code:: ada compile_button project=Courses.Intro_To_Ada.Imperative_Language.Check_Positive + + with Ada.Text_IO; use Ada.Text_IO; + with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; + + procedure Check_Positive is + N : Integer; + begin + Put ("Enter an integer value: "); + Get (N); + Put (N); + + declare + S : constant String := + (if N > 0 + then " is a positive number" + else " is not a positive number"); + begin + Put_Line (S); + end; + end Check_Positive; + +Вираз :ada:`if` використовує один із двох строк залежно від N і +присвоює це значення локальній змінній S. + +Вирази Ada :ada:`if` подібні до операторів :ada:`if`. Однак є кілька +відмінностей, які пов’язані з тим, що це вираз: + +- Обидва варіанти мають бути одного типу + +- Він *має* бути в дужках, якщо навколишній вираз + їх ще не містить + +- Гілка :ada:`else` є обов’язковою, якщо вираз після :ada:`then` не є + логічним типом. У цьому випадку гілка :ada:`else` є необов’язковою + і, якщо її немає, за замовчуванням використовується :ada:`else True`. + +Ось інший приклад: + +.. code:: ada run_button project=Courses.Intro_To_Ada.Imperative_Language.Even_Odd + + with Ada.Text_IO; use Ada.Text_IO; + + procedure Main is + begin + for I in 1 .. 10 loop + Put_Line (if I mod 2 = 0 + then "Even" + else "Odd"); + end loop; + end Main; + +Ця програма виводить 10 рядків, чергуючи «Непарні» та «Парні». + + +Case вираз +~~~~~~~~~~ + +Подібно до виразів :ada:`if`, Ada також має вирази :ada:`case`. +Вони працюють так, як Ви очікуєте. + +.. code:: ada run_button project=Courses.Intro_To_Ada.Imperative_Language.Case_Expression + + with Ada.Text_IO; use Ada.Text_IO; + + procedure Main is + begin + for I in 1 .. 10 loop + Put_Line + (case I is + when 1 | 3 | 5 | 7 | 9 => "Odd", + when 2 | 4 | 6 | 8 | 10 => "Even"); + end loop; + end Main; + +Ця програма робить то самє, що й попередній приклад. + +Синтаксис відрізняється від оператора :ada:`case`, в даному +випадку варіанти розділені комами. diff --git a/content/courses/intro-to-ada-ukr/chapters/introduction.rst b/content/courses/intro-to-ada-ukr/chapters/introduction.rst new file mode 100644 index 000000000..06dc7e73e --- /dev/null +++ b/content/courses/intro-to-ada-ukr/chapters/introduction.rst @@ -0,0 +1,103 @@ +:prev_state: False + +.. include:: ../../global.txt + +Вступ +===== + +Історія +------- + +У 1970-х роках Міністерство оборони США (DOD) страждало від вибухового +зростання кількості мов програмування у різних проектах, в яких використовувались +різні, нестандартні, діалекти або підмножини мов програмування. Міністерство вирішило +вирішити цю проблему оголосивши запит на розробку единої, сучасної мови +програмування. Перемогла пропозиуія від Jean Ichbiah з CII Honeywell-Bull. + +Перший стандарт мови Ada був створений в 1983 який було переглянуто та +вдосконалено в 1995, 2005 та 2012, кожний з яких привносив нові користні можливості. + +Даний матеріал базується на стандарті 2012 року вцілому і не зосередженний на +відмінностях попередніх версій. + +Ada сьогодні +------------ + +Сьогодні, Ada активно використовується у вбудованих системах реального часу, багато з яких +є критичними з точки зору безпеки. Хоча Ada є, і може бути використана як мова загального +призначення, вона повністю розкривається в низькорівневих застосунках як то: + +- Вбудованих системах з жорсткими лімітами пам'яті (заборонено збирач сміття). +- Робота з обладнанням напряму. +- Системи реального часу. +- Низькорівневе системне програмування. + +Специфічні галузі де використувється мова включають аерокосмос та захист, цівільна авіація, +залізниця та багато інших. Ці застосунки вимагають висоеого рівня безпеки а дефекти призводять +не тільки до незручностей але можуть мати важкі наслідки. Ada надає безпекові можливості які +виявляють дефекти на ранній стадії — зазвияай на єтапі компіляції або за допомогою статичного +аналізу. Ada також може використовуватись для створення застосунків у багатьох інших областях, +як наприклад: + +- `програмування відеоігор `_ +- `аудіо в реальному часі `_ +- `модулі ядра `_ + +Це неповний список, який, сподіваюся, проливає світло на те, де Ada використовується. + +З точки зору суяасних мов програмування найближчими за цілями та рівнем абстракції є +:wikipedia:`C++ ` та +`Rust `_. + +Філософія +--------- + +Філософія Ади відрізняється від більшості інших мов. В основі дизайну Ada лежать +наступні принципи: + +- Читабельність важливіша за лаконічність. Синтаксично це виражається через + факт, що перевага надається коючовим словам над символами, а ключові слова + не є абревеатурами і т.д + +- Дуже строгі тири. Створення нових типів дуже зручне та запобігає неправильному + використанню даних. + + - Це схоже на багато інших функціональних мов за вийнятком того, що програміст + повинен бути набагато чіткішим щодо введеня тексту коду, автоматичне + перетворення типів заборонене. + +- Явне краще, ніж неявне. Хоча це заповідь `Python `_ однак + Ada йде далі ніж будь яка інша мова програмування: + + - Здебільшого структурної типізації немає а більшість типів мають + бути явно названі. + + - Як раніше було сказано немає автоматичного перетворення типів. + + - Семантика дуже добре визначена, а невизначена поведінка зведена + до абсолютного мінімуму. + + - Програміст може надати *багато* інформаці щодо того що його код + робить, як для компілятора, так і для колег. + Це дозволяє компілятору бути надзвичайно корисним (читай: суворим) + з програмістом. + +Під час цього курсу ми пояснимо окремі мовні особливості, які +є будівельними блоками для цієї філософії. + +SPARK +----- + +Хоча цей матеріал присвячений виключно мові Ada, варто згадати, що існує інша мова, +надзвичайно близька до Ada та сумісна з нею: мова SPARK. + +SPARK це підмножина Ada, розроблена таким чином, щоб код, написаний у SPARK, +піддавався автоматичній перевірці. Це забезпечує рівень впевненості щодо правильності +коду, який набагато вищий, ніж у звичайної мови програмування. + +Є відповідний +:doc:`курс присвячений SPARK ` +але майте на увазі, що кожного разу, коли ми говоримо про специфікаційну потужність Ada +протягом цього курсу, це потужність, яку ви можете використати в SPARK, щоб допомогти +підтвердити правильність властивостей програми, починаючи від відсутності помилок під +час виконання до відповідності формально визначеним функціональним вимогам. diff --git a/content/courses/intro-to-ada-ukr/conf.ini b/content/courses/intro-to-ada-ukr/conf.ini new file mode 100644 index 000000000..719af1a4c --- /dev/null +++ b/content/courses/intro-to-ada-ukr/conf.ini @@ -0,0 +1,5 @@ +[DEFAULT] +title=Введення в Ada +author=Raphaël Amiard \\та Gustavo A. Hoffmann +cover_page=cover-A4.pdf + diff --git a/content/courses/intro-to-ada-ukr/cover-A4.pdf b/content/courses/intro-to-ada-ukr/cover-A4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d32b1d9c4b895a2506103af5cd40701e506ec27d GIT binary patch literal 109761 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

L{)AvCgx8vak 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 XUsP{@D#_untSsuVu(0|?+~NNNA0Sc^ literal 0 HcmV?d00001 diff --git a/content/courses/intro-to-ada-ukr/index.rst b/content/courses/intro-to-ada-ukr/index.rst new file mode 100644 index 000000000..1b0c347a4 --- /dev/null +++ b/content/courses/intro-to-ada-ukr/index.rst @@ -0,0 +1,128 @@ +.. intro-to-ada documentation master file, created by + sphinx-quickstart on Mon Feb 19 11:39:35 2018. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +:prev_state: False +:next_state: False + +.. _Intro_Ada_Course_Index: + +Введення в Ada +============== + +.. include:: ../global.txt + +.. only:: no_hidden_books + + .. warning:: + + This version of the website contains UNPUBLISHED contents. + Please do not share it externally! + +.. only:: builder_epub + + Release |release| + + |today| + +.. only:: builder_latex or builder_epub + + .. container:: content-copyright + + Copyright © 2018 |ndash| 2022, AdaCore + + Цю книгу опубліковано за ліцензією CC BY-SA, що означає, + що ви можете копіювати, розповсюджувати, форматувати, + трансформувати та доповнювати для будь-яких цілей, + навіть комерційних, за умови, що ви вказуєте належне авторство, + надаєте посилання на ліцензії та вказуєте, чи були внесені зміни. + Якщо ви доповнюєте, трансформуєте або використовуєте матеріал, + ви повинні поширювати результат за тією ж ліцензією, що й оригінал. + Ви можете знайти деталі ліцензії + `на цій сорінці `_ + + .. image:: ../../images/ccheart_black.png + :width: 108pt + +.. container:: content-description + + Цей курс навчить вас основам мови програмування Ada та призначений для тих, + хто вже має базові знання про техніку програмування. Ви дізнаєтеся, як застосувати + ці прийоми в Ada. + + Цей матеріал був написаний Raphaël Amiard та Gustavo A. Hoffmann, рецензент: Richard Kenner. + + .. note:: + + У прикладах коду в цьому курсі використовується обмеження на 50 стовпців, + що значно покращує читабельність коду на пристроях із невеликим розміром екрана. + Це обмеження, однак, призводить до незвичайного стилю кодування. Наприклад замість + виклику :ada:`Put_Line` в одну строку ми ваємо наступне: + + .. code-block:: ada + + Put_Line + (" is in the northeast quadrant"); + + або так: + + .. code-block:: ada + + Put_Line (" (X => " + & Integer'Image (P.X) + & ")"); + + Зверніть увагу, що типовий код Ada використовує обмеження щонайменше в 79 стовпців. + Тому, будь ласка, не сприймайте стиль кодування з цього курсу як посилання! + + .. only:: builder_latex or builder_epub + + .. note:: + + Кожен приклад коду з цієї книги має пов’язані "метадані блоку коду", + які містять назву "проекту" і хеш-значення MD5. Ця інформація + використовується для визначення окремого прикладу коду. + + Ви можете знайти всі приклади коду в zip-файлі, який Ви можете + `завантажити з наступного сайту `_. + Структура каталогів у файлі zip базується на метаданих блоку коду. + Наприклад, якщо ви шукаєте приклад коду з цими метаданими: + + - Project: Courses.Intro_To_Ada.Imperative_Language.Greet + + - MD5: cba89a34b87c9dfa71533d982d05e6ab + + Ви знайтидете його в цій директорії: + + :file:`projects/Courses/Intro_To_Ada/Imperative_Language/Greet/cba89a34b87c9dfa71533d982d05e6ab/` + + Щоб використати цей приклад коду, просто виконайте наступні дії: + + 1. Розархівуйте zip файл; + 2. Зайдіть в необхідну директорію; + 3. Запустіть GNAT Studio в цій директорії; + 4. Побудуйте (чи скомпілюйте) проект; + 5. Запустіть застосунок (якщо в проекті є стартова (головна) процедура). + + +.. only:: builder_html + + .. container:: ebook-download + + .. raw:: html + + + Download PDF + + + + Download EPUB + + +.. toctree:: + :maxdepth: 4 + :caption: Зміст: + + Вступ + Імперативна мова