Jump to content

Язык спецификации ANSI/ISO C

Язык спецификации ANSI/ISO C
Парадигма декларативный с небольшим количеством императивных функций.
Разработано Комиссия по атомной энергии и INRIA
Разработчик Комиссия по атомной энергии и INRIA
Впервые появился 2008
Стабильная версия
v1.16 / 19 ноября 2020 г.
Дисциплина набора текста статический
Основные реализации
Фрама-С
Под влиянием
Кол-во

Язык спецификации ANSI /ISO C ( ACSL ) — это язык спецификации для программ C , использующий в стиле Хоара предварительные и постусловия и инварианты , который следует парадигме проектирования по контракту . Спецификации записываются в виде аннотаций C к программе C, которые, следовательно, могут быть скомпилированы любым компилятором C.

Текущим инструментом проверки ACSL является Frama-C . Он также реализует родственный язык, язык спецификации ANSI/ISO C++ ( ACSL++ ), определенный для C++ .

Обзор [ править ]

В 1983 году Американский национальный институт стандартов (ANSI) поручил комитету X3J11 стандартизировать язык C. Первый стандарт C был опубликован ANSI. Хотя этот документ впоследствии был принят Международной организацией по стандартизации (ISO), а последующие версии, опубликованные ISO, были приняты ANSI, название ANSI C продолжает использоваться.

ACSL — это язык спецификации поведенческого интерфейса (BISL). Его цель — указать поведенческие свойства исходного кода C. Основное вдохновение для создания этого языка взято из языка спецификаций инструмента Caduceus для дедуктивной проверки поведенческих свойств программ на языке C. Язык спецификации Caduceus сам по себе вдохновлен JML , который преследует аналогичные цели для исходного кода Java.

Одно из отличий от JML заключается в том, что ACSL предназначен для статической и дедуктивной проверки, тогда как JML предназначен как для проверки утверждений во время выполнения, так и для статической проверки с использованием, например, инструмента ESC/Java .

Синтаксис [ править ]

Рассмотрим следующий пример прототипа функции с именем incrstar:

/*@ requires \valid(p);
  @ assigns *p;
  @ ensures *p == \old(*p) + 1;
  @*/
void incrstar (int *p);

Контракт задается комментарием, который начинается с /*@. Его смысл следующий:

  • первая строка является предварительным условием: она утверждает, что функция incrstar должен вызываться с указателем p это указывает на безопасно выделенную ячейку памяти.
  • Вторая строка — это предложение фрейма, в котором говорится, что функция incrstar не изменяет какую-либо ячейку памяти, кроме той, на которую указывает p.
  • Наконец, ensures Предложение — это постусловие, которое указывает, что значение *p увеличивается на единицу.

Допустимой реализацией вышеуказанной функции будет:

void incrstar (int *p) {
    (*p)++;
}

Поддержка инструментов [ править ]

Большинство функций ACSL поддерживаются Frama-C .

Статический анализатор TrustInSoft является коммерческой производной Frama-C. Он проверяет поведение программы и (с помощью встроенных правил, основанных на спецификации языка) выявляет случаи неопределенного поведения . [1]

Ссылки [ править ]

  1. ^ «Свойства ACSL» . Документация TrustInSoft 1.42-dev .

Внешние ссылки [ править ]

  • Полную спецификацию ACSL можно найти на странице загрузки Frama -C .
  • TSnippet от TrustInSoft позволяет тестировать фрагменты C в браузере с использованием ACSL.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8ee622631c2b657d33940e5bc1caa279__1711353180
URL1:https://arc.ask3.ru/arc/aa/8e/79/8ee622631c2b657d33940e5bc1caa279.html
Заголовок, (Title) документа по адресу, URL1:
ANSI/ISO C Specification Language - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)