[ON] Eiffel Studio 6.8 - IDE для языка Eiffel. Новая модель многопоточного программирования SCOOP

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6000
ОС: gnu/linux

[ON] Eiffel Studio 6.8 - IDE для языка Eiffel. Новая модель многопоточного программирования SCOOP

Сообщение rssbot »

Вышла версия 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 можно ознакомиться здесь. Также стоит отметить, что последнее время технология проектирования по контракту находит свое применение в современных языках программирования: В заключение стоит упомянуть о том, что в мае 2011 года издательством "БИНОМ. Лаборатория знаний" выпущена на русском языке книга Бертрана Мейера "Почувствуй класс: учимся программировать хорошо с объектами и контрактами". Эта книга, предназначенная для обучения студентов объектно-ориентированному программированию на основе языка Eiffel, является обобщением многолетнего опыта преподавания соответствующих дисциплин в Швейцарском федеральном технологическом институте в г. Цюрихе (ETH). Основные характеристики языка Eiffel и среды программирования Eiffel Studio :
  • Кроссплатформенная реализация - существуют версии EiffelStudio для FreeBSD, GNU+Linux, OpenBSD, Solaris (в том числе и Solaris SPARC), Windows
  • Автоматическая сборка мусора
  • Технология "Проектирование по контракту" - предусловия, постусловия, инварианты поддерживаются непосредственно самим компилятором языка (не требуются дополнительные инструменты и библиотеки)
  • Поддержка множественного наследования; разрешение конфликта имен (компоненты, наследованные от разных классов имеют одно и тоже имя) путем переименования конфликтующих компонентов у класса наследника; возможность выбора версии компонента при дублируемом наследовании
  • Обобщенное программирование
  • Возможность вызова функций языка C и компонентов классов C++
  • Melting Ice Technology - время компиляции при внесении изменений пропорционально объему измененного кода
  • Статическая типизация
  • Байткод, полученный в результате компиляции, транслируется в эквивалентные конструкции языка C, которые затем компилируются компилятором языка C (для GNU/Linux - GCC, для Windows - MinGW или компилятор Visual Stuido)
  • Void-safety - технология, позволяющая избавиться от ошибки разименования пустого указателя, контроль осуществляется компилятором



Источник: http://www.opennet.ru/opennews/art.shtml?num=30880


оригинал на opennet.ru
Спасибо сказали: