Eiffel Studio 6.8

Вышла версия 6.8 EiffelStudio, интегрированной среды разработки для языка Eiffel. Eiffel — это объектно-ориентированный язык, поддерживающий технологию проектирования по контракту. Версия 6.8 практически целиком посвящена внедрению принципиально новой модели многопоточного программирования SCOOP — Simple Concurrent Object-Oriented Programming.

В настоящее время в таких языках, как Java, C++ и C# многопоточность реализуется с помощью специальных низкоуровневых библиотек, которые предоставляют механизмы синхронизации и взаимодействия потоков. Эти библиотеки основаны на концепциях 60-х годов прошлого века (например, семафоры), и, по мнению разработчиков языка Eiffel, плохо совместимы с современными объектно-ориентированными концепциями. Все это заставляет разработчика существенно менять способ своего мышления при переходе к многопоточности. Но даже в случае успешного освоения соответствующих инструментов, программы достаточно сложны для написания, понимания и поддержки, сложно гарантировать их корректность, так как традиционные средства тестирования и отладки не применимы.

Модель SCOOP является расширением объектно-ориентированного подхода и добавляет всего лишь одно ключевое слово «separate» для написания многопоточных программ. В качестве примера можно привести обычную (не многопоточную) подпрограмму (метод класса), служащую для перевода денежных средств с одного счета на другой:


   transfer (amount: INTEGER ; source, target: ACCOUNT)
       -- Перевести amount долларов со счета source на счет target.
     require
       enough: source.balance = amount
     do
       source.withdraw (amount)
       target.deposit (amount)
     ensure
       removed: source.balance = old source.balance – amount
       added: target.balance = old target.balance + amount
     end

Тело подпрограммы (do…) описывает необходимые действия: извлечь (withdraw) необходимую сумму со счета source и пополнить (deposit) этой же суммой счет target. Предусловие (require…) проверяет условие применимости данной операции, а именно требование того, чтобы на балансе счета было достаточно денежных средств (не менее amount). Постусловие (ensure…) описывает конечное состояние баланса счетов source и target.

При переходе к многопоточному выполнению нельзя допускать произвольного чередования операций. Например, если на исходном счете 1000 долларов, и есть две операции на снятие средств со счета по 800 долларов каждая. Эти операции не могут быть выполнены параллельно, так как в этом случае для каждой из них будет удовлетворено предусловие, что приведет снятию 2*800=1600 долларов. При обычном подходе пишутся сложные операции синхронизации, гарантирующие совместное исполнение двух операций. В рассмотренном примере методы withdraw и deposit не долдны чередоваться с операциями другого экземпляра подпрограммы transfer. В дополнение к этому, необходимо обеспечить ожидание операции при недостаточности средств на балансе счета.

При использовании SCOOP для обеспечения многопоточного исполнения необходимо изменить лишь одну строчку вышеприведенного кода:

   transfer (amount: INTEGER ; source, target: separate ACCOUNT)
       -- Остальной код без изменений

Объявление счета сепаратной сущностью указывает компилятору на обработку счета несколькими потоками. Детали реализации скрыты от программиста, все необходимые проверки выполняются планировщиком SCOOP.

Модель SCOOP была разработана в начале 90-х создателем языка Eiffel Бертраном Мейером и описана в книге «Объектно-ориентированное конструирование программных систем». С тех пор модель развивалась, но основные принципы остались неизменными. Более подробно узнать о SCOOP можно из соответствующей документации. Детали реализации SCOOP и система типов описаны в статье и диссертации.
С полным спсиком изменений версии 6.8 можно ознакомиться здесь.

Также стоит отметить, что последнее время технология проектирования по контракту находит свое применение в современных языках программирования:

  1. .Net 4.0 C# — библиотека Code Contracts, о которой можно подробнее узнать здесь или здесь;
  2. Java — библиотека Contracts for Java, разработанная компанией Google (подробнее здесь);
  3. C++ — библиотека Contract++

В заключение стоит упомянуть о том, что в мае 2011 года издательством «БИНОМ. Лаборатория знаний» выпущена на русском языке книга Бертрана Мейера «Почувствуй класс: учимся программировать хорошо с объектами и контрактами». Эта книга, предназначенная для обучения студентов объектно-ориентированному программированию на основе языка Eiffel, является обобщением многолетнего опыта преподавания соответствующих дисциплин в Швейцарском федеральном технологическом институте в г. Цюрихе (ETH).

Основные характеристики языка Eiffel и среды программирования Eiffel Studio :

  • Кроссплатформенная реализация — существуют версии EiffelStudio для FreeBSD, Linux, OpenBSD, Solaris (в том числе и Solaris SPARC), Windows
  • Автоматическая сборка мусора
  • Технология «Проектирование по контракту» — предусловия, постусловия, инварианты поддерживаются непосредственно самим компилятором языка (не требуются дополнительные инструменты и библиотеки)
  • Поддержка множественного наследования; разрешение конфликта имен (компоненты, наследованные от разных классов имеют одно и тоже имя) путем переименования конфликтующих компонентов у класса наследника; возможность выбора версии компонента при дублируемом наследовании
  • Обобщенное программирование
  • Возможность вызова функций языка C и компонентов классов C++
  • Melting Ice Technology — время компиляции при внесении изменений пропорционально объему измененного кода
  • Статическая типизация
  • Байткод, полученный в результате компиляции, транслируется в эквивалентные конструкции языка C, которые затем компилируются компилятором языка C (для Linux — GCC, для Windows — MinGW или компилятор Visual Stuido)
  • Void-safety — технология, позволяющая избавиться от ошибки разименования пустого указателя, контроль осуществляется компилятором

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.