Состоялась лекция, посвящённая различным конструкциям языка спецификации ACSL. Были рассмотрены вопросы:
- при описании требований к функции у одних и тех же переменных и областей памяти может быть разное состояние (значение);
- стандартные метки памяти (метки
Here,Pre,Post), обычные метки Си; - в каком состоянии используется переменная в каждом из типов выражений ACSL (т.е. значение метки
Hereдля тех или иных выражений); - как специфицировать произвольное состояние переменной (выражение
\at), состояние при входе в функцию (выражение\old); - требования к функции могут запрещать изменять ей некоторую память;
- если некоторая память не запрещена спецификацией к изменению и нет других ограничений, то эта память может быть изменена произвольно (т.е. по умолчанию всё разрешается);
- как специфицировать какую именно память разрешено изменять функции (конструкции
assignsиloop assigns); - что в спецификации памяти, разрешённой на изменение, используется lvalue;
- спецификация возможности разыменовывания указателя (конструкция
\valid);
Также, на семинаре были рассмотрены вопросы:
- спецификация различных вариантов поведения функций:
- конструкция
behaviourв контракте; - семантика конструкции
assumesкак выбора рассматриваемого варианта специфицируемого поведения; - семантика конструкций
requires,assignsиensuresвнутри блокаbehavior; - возможность специфицировать различные области памяти в разных вариантах поведения функции;
- дополнительные условия верификации о полноте и независимости поведений (конструкции
complete behaviorsиdisjoint behaviors);
- конструкция
- спецификация инвариантов на данные:
- конструкция
global invariant; - различия между сильными и слабыми инвариантами.
- конструкция