Ознакомьтесь с некоторыми техническими аспектами языка программирования Ada, такими как профиль Ravenscar.

Как и C, Ada — это компилируемый язык. Это означает, что компилятор проанализирует исходный код и выдаст машинный код, свойственный целевому оборудованию. Компилятор Ada, который мы будем обсуждать, — это компилятор GNAT. Компилятор основан на технологии GCC, как и многие доступные компиляторы C и C ++.

Когда компилятор GNAT вызывается для кода Ada, интерфейс GNAT расширяет и переводит код Ada на промежуточный язык, который передается в GCC, где код оптимизируется и переводится в машинный код. Компилятор AC на основе GCC выполняет те же шаги и использует то же промежуточное представление GCC. Это означает, что оптимизации, которые мы привыкли видеть с компилятором C на основе GCC, также могут быть применены к коду Ada.

Основное различие между двумя компиляторами заключается в том, что компилятор Ada расширяет высокоуровневые конструкции в промежуточный код. После расширения код Ada будет очень похож на эквивалентный код C.

Можно выполнить построчный перевод кода C на Ada. Это кажется естественным шагом для разработчика, знакомого с парадигмами C. Однако от этого пути может быть очень мало пользы. В этой статье мы будем предполагать, что выбор Ada вместо C руководствуется соображениями, связанными с надежностью, безопасностью или безопасностью.

Чтобы повысить надежность, безопасность и защищенность нашего приложения, следует применять парадигмы Ada вместо парадигм, обычно применяемых в C. Конструкции, такие как указатели, макросы препроцессора, побитовые операции и защитный код, обычно выражаются в Ada очень разными способами, повышающими общую надежность и удобочитаемость приложений. Часто изучение этих новых способов кодирования вначале требует усилий со стороны разработчика, но оказывается более эффективным после понимания парадигм.

 

Параллелизм и в реальном времени

Параллельное программирование и программирование в реальном времени являются стандартными частями языка Ada. Таким образом, они имеют одинаковую семантику, независимо от того, выполняются ли они на ОС, такой как Linux, в операционной системе реального времени (RTOS), такой как VxWorks, или на голом железе без ОС или RTOS вообще.

 

Понимание различных вариантов

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

Повышенная портативность и выразительность — основные преимущества использования стандартных средств параллелизма, потенциально приводящие к значительной экономии средств. Например, с небольшими усилиями можно перейти с Windows на Linux на «голую» машину, не требуя каких-либо изменений в коде. Управление потоками и синхронизация прозрачно выполняются реализацией.

Однако в некоторых ситуациях критически важно иметь прямой доступ к услугам, предоставляемым платформой. В этом случае всегда можно делать прямые системные вызовы из кода Ada. Некоторые цели компилятора GNAT по умолчанию предоставляют такого рода API — например, win32ada для Windows и Florist для систем POSIX.

На собственных платформах и платформах на базе ОСРВ GNAT обычно предоставляет все возможности параллелизма. Напротив, на платформах с «голым железом» GNAT обычно предоставляет два стандартных подмножества: Ravenscar и Jorvik.

 

Ravenscar

Профиль Ravenscar, подмножество средств параллелизма Ada, поддерживает детерминизм, анализ возможности планирования, ограниченное использование памяти и сертификацию на высшие уровни целостности. Предусмотрены четыре различных прикладных домена:

  • Приложения жесткого реального времени, требующие предсказуемости.
  • Системы, критически важные для безопасности, требующие формальной строгой сертификации.
  • Приложения с высокой степенью интеграции, требующие формального статического анализа и проверки.
  • Встроенные приложения, требующие как небольшого объема памяти, так и низких накладных расходов на выполнение.

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

Источник: www.electronicdesign.com