-
Самостоятельная работа c примерами
Самостоятельно откройте другие примеры проектов на Spec# и изучите их. В частности, пример проекта SubclassWithInvariant приводит при исполнении к выдаче сообщения о том, что инвариант класса не выполняется, что демонстрирует возможности динамических проверок в Spec#.
-
Создание собственного проекта на Spec#
Создадим теперь собственный простой проект – консольное приложение на Spec#. Откроем Visual Studio и выберем File / New / Project / C# project и тип проекта – Console Application. В нашем приложении проверим действие non-null types в Spec#.
Приведем исходный код нашего проекта, полученный на основе шаблона кода, выдаваемого в редакторе для типа проекта “Spec# project”::
using System;
using Microsoft.Contracts;
public class Program
{
static void M(string! x)
{
Console.WriteLine("M. x = ", x);
}
static void Main(string![]! args) {
Console.WriteLine("Spec# says hello!");
M(null);
Console.ReadLine();
}
}
В коде определен метод M с параметром типа “непустая строка”. В методе Main передадим M в качестве фактического параметра null.
При сборке проекта компилятор Spec# обнаруживает ошибку и выдает сообщение о ней (см. рис. 3):

Рис. 3. Обнаружение ошибки компилятором при передаче null
аргументу, имеющему non-null type
Теперь немного усложним код метода Main – добавим строковую переменную s и присвоим ей null, значение которой и передадим методу M:
static void Main(string![]! args) {
string s = null;
Console.WriteLine("Spec# says hello!");
M(s);
Console.ReadLine();
}
В результате сборка проекта проходит, однако ошибка фиксируется во время выполнения: отладчик останавливает выполнение программы на строке, содержащей ошибочный вызов, и среда показывает значения переменных, из которых понятно, в чем ошибка (см. рис. 4).

Рис. 4. Динамическая ошибка при попытке передать null аргументу
non-null type
Таким образом, мы практически изучили ряд возможностей языка Spec#.
Студентам настоятельно рекомендуется осваивать новый, доказательный и надежный. стиль программирования, которому учит система Spec#.
Spec# - первый в мире verifying compiler (верифицирующий компилятор) [2, 3], разработанный столь авторитетной компанией, как Microsoft.
Автор твердо убежден, что за подобными системами – будущее.
Литература
-
Сайт проекта Spec# фирмы Microsoft Research. http://research.microsoft.com/en-us/projects/specsharp/
-
Safonov V.O. Using aspect-oriented programming for trustworthy software development. John Wiley & Sons, 2008.
-
Safonov V.O. Trustworthy compilers. John Wiley & Sons, 2010, to be published.
