Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Характерные требования таковы. Во-первых, необходимы особо надежные и особо эффективные системы управления. Во-вторых, при развитии систем и создании новых очень важно иметь возмож­ность в максимальной степени использовать накопленный программ­ный фонд (проверенные на практике, испытанные программы), т. е. программы должны быть относительно легко переносимыми. В-третьих, диапазон сложности систем управления колоссален. В част­ности, необходимы программы, сложность создания которых требует взаимодействия не только отдельных программистов, но и довольно крупных программистских коллективов. Другими словами, требуется модульность программ - должны быть средства разделения программ на части и комплексации этих частей. В-четвертых, речь идет о сис­темах реального времени - такая система должна управлять поведе­нием реальных физических объектов, движущихся и изменяющихся с весьма высокими скоростями. Таким образом, должна быть предус­мотрена возможность вводить параллелизм - рассматривать асинх­ронные (параллельные) процессы, представляющие такие объекты, и управлять их взаимодействием.

Наконец, в-пятых, в этой области распространена так называе­мая кросс-технология программирования. Отличается она тем, что программы создаются на одной машине (базовой, инструментальной) для выполнения на другой машине (целевой, объектной). Инстру­ментальная машина обычно обладает существенно более богатыми ресурсами, объектная (часто бортовая, т. е. находящаяся непосредст­венно на управляемом объекте) - более бедными. Это обстоятельство сильно влияет, в частности, на соотношение возможностей периода компиляции и периода выполнения программ (в кросс-технологии компилятор работает на инструментальной машине).

НЕ нашли? Не то? Что вы ищете?

Перечисленные характеристики ПО существенно повлияли на особенности языка Ада. Ада ориентирована на тщательный контроль программ (чтобы повысить надежность встроенных систем), причем такой контроль предусмотрен уже при компиляции (учтены относительно богатые возможности инструментальной машины и бедность объектной). Предусмотрены и возможности оптимизации объектной программы при компиляции (учтены различия инструментальной объектной машин с точки зрения возможностей обеспечить эффективность встроенных систем). Приняты специальные меры, чтобы программы можно было переносить в новые условия эксплуатации при минимальных дополнительных затратах. Имеются средства управления асинхронными процессами. Итак, определяющие требования к языку Ада - надежность, модульность, переносимость, эффективность, параллелизм.

Язык Ада возник в результате международного конкурса языковых проектов, проходившего в 1978-1979 гг. Участники должны были удовлетворить довольно жестким, детально разработанным под эгидой МО США требованиям. Интересно, что все языки, дошедшие до последних туров этого конкурса, были основаны на Паскале. В этой связи Аду можно предварительно охарактеризовать как Паскаль, развитый с учетом перечисленных выше пяти основных требований. При этом авторы (международный коллектив под руководством Жана Ишбиа) пошли в основном по пути расширения Паскаля новыми элементами. В результате получился существенно более сложный язык.

2.2. Пример простой программы на Аде

Чтобы создать у читателя первое зрительное впечатление об Аде, дадим пример совсем простой (но полной) программы. Основой этого (и некоторых других наших примеров) послужили программы учебника Янга "Введение в Аду" [2].

Напишем программу, которая вводит последовательность символов со стандартного устройства ввода и на стандартном устройств вывода печатает левые и правые скобки, обнаруженные в этой последовательности.

Вот эта программа:

1.  with т_обмен;

2.  procedure печать_скобок is

3.  ch : символ ;

4.  begin

5.  т_обмен. дай (ch) ;

6. while ch /= '.' loop

7. if ch = '(' or ch = ')' then

8. т_обмен. возьми (ch) ;

9. end if ;

10. т_обмен. дай (ch) ;

11. end loop ;

12. end печать_скобок ;

Итак, в программе двенадцать строчек (номера строчек не входят в программу - они нужны, чтобы обсуждать ее свойства). Общий вид программы напоминает текст на Алголе-60 или Паскале (некоторые знакомые ключевые слова, характерная ступенчатая запись и т. п.). Это и не удивительно. Ведь Ада из семейства "поздних алголоидов". Как уже сказано, этот язык - развитие Паскаля, в свою очередь со­зданного (Никлаусом Виртом) на основе Алгола-60.

Вместе с тем даже в этой простой программе заметны характерные особенности поздних языков индустриального программирования.

Во-первых, высокоразвитая модульность. Фраза с ключевым сло­вом "with" (в переводе с английского "с" или "совместно с") гово­рит о том, что данную процедуру следует читать, понимать и испол­нять во вполне определенном контексте. Этот контекст задан модулем-ПАКЕТОМ с именем "т_обмен". В нем содержатся определения всех ресурсов, необходимых для ввода-вывода текстов (в частности, процедуры "дай" очередной символ со стандартного устройства ввода и "возьми" очередной символ на стандартное устройство вывода). Внутри программы, использующей такой пакет, обращаться к его ресурсам следует по составным именам (сначала название пакета, а затем через точку - название ресурса) как к полям записи в Паска­ле. При необходимости можно, конечно, ввести сокращенные обоз­начения для часто используемых ресурсов.

Во-вторых, богатый набор типов данных. В строчке 3 находится объявление переменной ch типа "символ". Это один из предопреде­ленных типов Ады.

Здесь и далее предопределенные идентификаторы языка Ада переведены на русский язык. В оригинале - тип character. Наглядность для нас важнее, чем формальное следование правилам языка; ведь он здесь служит лишь примером общих концепций в ЯП.

Ни в Алголе-60, ни в Фортране такого символьного типа, равноправного с остальными типами, нет. Один из источников выразительной мощи языка Ада - возможность стро­ить новые типы данных, не предопределенные авторами языка. Та­кая возможность теперь имеется во всех новых ЯП, и мы с ней под­робно познакомимся.

В-третьих, ради надежности повышена избыточность, способству­ющая устранению случайных ошибок. Это и (сколь угодно) длинные названия-идентификаторы, которые можно к тому же составлять из отдельных слов, соединенных одиночным подчеркиванием. Это и строгая скобочная структура текста - каждый управляющий конструкт снабжен специальным "закрывающим" ключевым словом (цикл в строчках с 6 по 11, условный оператор в строчках 7-9, про­цедура в строчках 2-12). Надежности, ясности, четкой структуре и избыточности способствуют и строгие правила ступенчатой записи программ (в Аде она настоятельно рекомендуется в определении языка и отражена в его синтаксисе).

Смысл программы достаточно очевиден. В строчке 5 вводится первый символ обрабатываемой последовательности и помещается в переменную ch. Далее цикл, работающий до тех пор, пока значени­ем переменной ch не станет символ "." ("/=" - это "не равно", "." – это признак конца последовательности обрабатываемых символов). В теле цикла - условный оператор, который посылает на устройство вывода очередной символ, если это открывающая или закрывающая скобка. Затем (строкой 10) вводится в переменную ch очередной символ последовательности и цикл повторяется. Вместе с циклом за­вершается и процедура печать_скобок.

2.3. Обзор языка Ада

Этот раздел близок по структуре и стилю к разделу 1.4 офици­ального определения языка Ада - национальному стандарту США 1983 г., ставшему в 1986 г. без изменений международным стандар­том ИСО. Рассказывая об этом языке и приводя примеры (из различных источников), будем и впредь опираться на это официальное определение. Без существенных изменений оно принято и в качестве отечественного ГОСТа, имеется его перевод на русский язык, отече­ственные реализации Ады также ориентируются на это определение.

Однако наша цель - не определить язык, а продемонстрировать концепции, характерные (и, как правило, перспективные) для базо­вых языков индустриального программирования. Поэтому будем стремиться упрощать изложение и избегать деталей, несуществен­ных для нашей задачи.

Само по себе их обилие в официальном сообщении, к сожалению, также харак­терно. Оно свидетельствует либо о неразвитости науки и практики языкотворчества, либо о фундаментальных свойствах такого социального явления, как ЯП. Поразитель­ный пример лаконичности - определение Никлаусом Виртом языка Модула-2 [5]).

Итак, нас интересует не столько сам язык Ада, сколько возмож­ность использовать его в качестве источника идей для модели А. Вместе с тем, приводя примеры программ на языке Ада, будем стро­го следовать стандарту, чтобы не создавать у читателей лишних затруднений при последующем самостоятельном освоении языка. По­нятия языка Ада (Ада-понятия) будем выделять прописными буква­ми.

Ада-программа состоит из одного или более программных МОДУ­ЛЕЙ (сегментов), которые можно компилировать раздельно (кроме задач).

Ада-модуль - это ПОДПРОГРАММА (определяет действия - час­ти отдельных ПРОЦЕССОВ) или ПАКЕТ (определяет часть контек­ста - совокупность объектов, предназначенных для совместного ис­пользования), или ЗАДАЧА (определяет асинхронный процесс), или РОДОВОЙ модуль (заготовка пакета или подпрограммы с параметрами периода компиляции).

В каждом модуле обычно две части: внешность или СПЕЦИФИ­КАЦИЯ (содержит сведения, видимые из других модулей) и внут­ренность или ТЕЛО (содержит детали реализации, невидимые из других модулей). Разделение спецификации и тела вместе с раздель­ной компиляцией дает возможность проектировать, писать и прове­рять программу как набор относительно самостоятельных (слабо за­висимых) компонент.

Ада-программа пользуется ТРАНСЛЯЦИОННОЙ БИБЛИОТЕ­КОЙ. Поэтому в тексте создаваемого модуля следует указывать на­звания используемых библиотечных модулей.

2.3.1. Модули

Подпрограмма - основной конструкт для определения подпроцес­сов (ввод данных, обновление значений переменных, вывод данных и т. п.). У подпрограммы могут быть параметры, посредством кото­рых ее связывают с контекстом вызова. Различают две категории подпрограмм - процедуры и функции. Последние отличаются тем, что вырабатывают результат, непосредственно доступный в точке вызова функции. Поэтому вызов функции всегда входит в некоторое выражение.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24