Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Safonov / AMPN_Lab4_SpecSharp.doc
Скачиваний:
142
Добавлен:
16.04.2015
Размер:
275.46 Кб
Скачать
  1. Самостоятельная работа c примерами

Самостоятельно откройте другие примеры проектов на Spec# и изучите их. В частности, пример проекта SubclassWithInvariant приводит при исполнении к выдаче сообщения о том, что инвариант класса не выполняется, что демонстрирует возможности динамических проверок в Spec#.

  1. Создание собственного проекта на 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.

Автор твердо убежден, что за подобными системами – будущее.

Литература

  1. Сайт проекта Spec# фирмы Microsoft Research. http://research.microsoft.com/en-us/projects/specsharp/

  2. Safonov V.O. Using aspect-oriented programming for trustworthy software development. John Wiley & Sons, 2008.

  3. Safonov V.O. Trustworthy compilers. John Wiley & Sons, 2010, to be published.

Соседние файлы в папке Safonov