Библиотека в основном полная. Тем не менее, в результате официального обзора осталась некоторая работакрасный= добавлено:
Реализуйте класс, похожий на точку выбора, как обсуждалось вэтой ветке
Оптимизируйте вход и выход для скорости и размера кода
Реализацияfifo_scheduler<>::processor_handleтак, чтобыfifo_scheduler<>::create_processor<>()иfifo_scheduler<>::destroy_processor()больше не делали (косвенные) призывы к глобальномуoperator new()иoperator
delete()
Убедитесь, что все компилируемое с поддержкой C++ RTTI отключено (это требует отсутствия поддержки в Boost). Настройка и, возможно, патч дляshared_ptr
Выпустить ошибку, еслиBOOST_STATECHART_USE_NATIVE_RTTIопределено, когда C++ RTTI выключен
Нынешнее требование пройтиmpl::list<>для определения внутренних начальных состояний и реакций слишком строго. Проверьте требования к последовательностям и задокументируйте их соответствующим образом (Дэвид Абрахамс)
Проведите измерения производительности компиляции с помощью mpl::vector и mpl::deque вместо mpl::list, чтобы узнать, какая из них самая быстрая. Документируйте рекомендацию для самого быстрого контейнера и измените все примеры соответственно.
Исследуйте, как можно сериализовать государственную машину. Первый взгляд на библиотеку сериализации показал, что в настоящее время (1.33) отсутствует поддержка типов, которые перегружаютсяoperator new(подходящий код уже присутствует в библиотеке сериализации, но в настоящее время комментируется из-за несовместимости с определенными компиляторами). Такая поддержка была бы крайне важна для Boost. Сериализация Statechart
(красный= очки, поднятые во время формального обзора)
1,46,0
Фиксированный баг #4817 (Порядок отложенных событий при определенных обстоятельствах не сохраняется), сообщает Игорь Р.
Фиксированная ошибка #4511 (предупреждение MSVC10 из-за отсутствия удаления оператора размещения), сообщает Игорь Р.
1.43.0
Обобщены функции контекста, так что они также могут возвращать ссылку на любой тип публичной базы контекста. Это также делает переход<>& in_state_reaction<>более общим.
Добавлено triggering_event()
Fixed Bug #3329 (предупреждение о переменной тени), Грант Эриксон
Fixed Bug #3963 (state_machine<>::post_event() должна быть защищена)
1,40,0
Исправлена ошибка, предотвратившая использование boost::ref() с fifo_scheduler<>::create_processor<>, сообщает Стив Хоукс
Исправлена ошибка #3092 (провалы регрессионного теста в VC10 beta 1), сообщает Ричард Уэбб
1.38.0
Зафиксированное предупреждение gcc-4.3 в state_machine.hpp (билет No2389), сообщает Брайан Сильверторн
1.36.0
Удалил все постоянные предупреждения из заголовков библиотек и избегал возникающих предупреждений с помощью других средств (предложенных Стивеном Ватанабе; благодаря Питеру Димову и Ювалю Ронену для понимания того, когда выпущены C4511 и C4512).
Изменил пример PingPong, чтобы продемонстрировать, как можно скрыть внутреннюю работу подкласса асинхронного_state_machine<>
1.35.0
Добавлено размещение новой перегрузки доevent<>(из-за обратной связи от Федерико Дж.
Изготовленevent<>с возможностью копирования (Federico J. Fernández)
1.34.0
Исправлена ошибка, которая предотвратила компиляцию exception_translator.hpp (сообщает Оливер Куоки) и адаптирована TransitionTest.cpp для тестирования класса exception_translator
Исправлена ошибка, связанная с выделением, которая привела к ошибкам компилятора во многих тестах на GCC >= 4.0
Исправлен ряд проблем, которые привели к сбоям компиляции на Intel 9.0 и Code Warrior
example/Jamfile.v2 теперь также устанавливает dll, необходимые для запуска многопоточных примеров PingPong.
Добавлен пункт FAQ относительно соответствия UML2.0
Сделал документациюunconsumed_eventболее заметной
Объявленоstate_base::~state_base virtualдля GCC. Это немного замедляет выход из состояния, но устраняет множество предупреждений «имеет виртуальные функции, но не виртуальный деструктор».
Сделал переходы к истории UML2.0 совместимым, см.здесьдля получения дополнительной информации
Исправлено несколько проблем с конформацией, которые привели к ошибкам в компиляторах HP
Исправленная документация, касающаяся распределения государств и событий
17 декабря 2005 года
Добавлены подробные данные об исполнении в документ об исполнении
Добавлены Performance «пример» и связанные с ним Performance.xls, которые использовались для выполнения более подробных измерений и рисования соответствующих диаграмм, которые теперь можно найти в документе об исполнении.
Упрощенный пример BitMachine (функции измерения производительности больше не нужны)
Удалил пункт «Инвестировать, как может быть реализована постоянная отправка времени для неортогональных государственных машин», предложенный Дэвидом Абрахамсом, Джонатаном Турканисом, Робом Стюардом и Дэйвом Гомбоком. Более подробные измерения эффективности показали, что время, затрачиваемое на отправку событий, почти всегда мало по сравнению с временем, затрачиваемым на вход в состояние и выход из состояния. См.Компромиссы скорости и масштабируемостив документе производительности для получения дополнительной информации
Исправлена ошибка порядка объявления, которая вызвала ошибку времени компиляции в event_base.hpp при компиляции с GCC3.4.2 на HP-UX (ошибка не отображалась на GCC3.4.2 на MinGW или на MSVC7.1)
Проверено с помощью версии 1.33.1 дистрибутива
14 августа 2005 года
Этот релиз будет работать только с версией 1.33.0 дистрибутива
Bпересчитывая изменения:Добавленsimple_state<>::operator new&simple_state<>::operator deleteпересылка распределителю перешла кstate_machine(Питер Петров). Это значительно упрощает настройку управления памятью. Пользователю теперь нужно только передать свой распределительstate_machine<>и больше не нужно отдельно перегружатьoperator
new/deleteдля своих государственных классов. Существующие классы состояния, для которых управление памятью не настроено, автоматически используют распределитель, переданныйstate_machine<>. Существующие государственные классы, для которыхoperator new/deleteперегруженынепосредственно, продолжат работать, как и прежде. Единственный случай, когда существующий код откажется от компиляции, — это когда класс состояния наследует от дополнительной базы с перегрузкойoperator
new/delete(что приводит к двусмысленным ошибкам вызова). К таким классам состояний необходимо добавить функции переадресации (см., например, BitMachine).
Переломные изменения: Добавлен параметр Allocator в шаблон классаeventи добавленevent<>::operator
new/delete. Это облегчает настройку управления памятью, но также может нарушить существующий код.
Добавлены файлы Jamfile.v2
Добавилevent_baseспециализации ко всем реакциям и соответствующим образом обновил ссылку. Это позволяет реализовать реакции, вызванные событием любого типа.
Добавлена установка, позволяющая специально обрабатывать события, не вызвавшие реакции. См. пункт 10эффекта process_event() для получения дополнительной информации. Обновленные тесты и документы соответственно
Добавлен пункт FAQ, объясняющий, как устранить ошибки компиляции времени (Джон Сполдинг)
Добавлен элемент FAQ, который представляет код для варианта StopWatch, который не использует локальное хранилище и объясняет недостатки этого подхода (Джефф Гарланд, Роб Стюард)
Добавлен пункт FAQ, объясняющий подводные камни динамически связанных государственных машин. Также добавлены соответствующие тесты, чтобы выяснить, можно ли и как FSM вводить в DLL.
Удалил пункт «Устранить необходимость обернуть одно шаблонное внутреннее начальное состояние вmpl::list<>», предложенный Джонатаном Турканисом, потому что в настоящее время я не вижу, как это может быть реализовано без больших уродливых обходных путей. Описание проблемы можно найти здесь:http://thread.gmane.org/gmane.comp.lib.boost.devel/128741
Поместите все замечания о коде в качестве комментариев внутри кода (Павел Возенилек, Август Сондерс)
На подходящих платформах библиотека теперь должна быть компилируемой с отключенной поддержкой исключений (непроверенной из-за отсутствия доступа к такой платформе).
Добавлена поддержка выделения для сломанных std libs. Оригинальное название: Joaquín M López Muñoz для добавления своих аллокаторов для повышения / детализации
19 июня 2005 года
Обновлена документация для нового интерфейса спецификации реакции
Недействительные призывы к функциям реакции теперь всегда приводят к неудачному утверждению времени выполнения (Джонатан Турканис). В режиме отладки типresultпредставляет собой класс с деструктивной семантикой копирования, позволяющий обнаруживать более широкий спектр нарушений функции реакции. Добавлены соответствующие тесты и обновлена документация
Отдельные документы, связанные с производительностью, от обоснования до собственной страницы (Павел Возенилек)
Добавлена функциональность клона к событиям, так что выделенные в стек события теперь можно откладывать и публиковать. Обновленная документация и соответствующие испытания (Джонатан Турканис)
Уточнено определение контекста (Джон Сполдинг)
Реализованоin_state_reaction<>. Обновлена соответствующая документация и испытания (Даррил Грин)
12 мая 2005 г.
Перерыв: Изменилось название библиотеки сfsmнаstatechart. (Александр Насонов, Дэвид Абрахамс)
Перелом: Сменил название библиотеки с boost::fsm на Boost. Statechart (Александр Насонов, Дэвид Абрахамс)
Перелом: Реакции теперь уточняются с помощьюreactionsчленской типдеф в декларации государственного класса вместо шаблонного параметра (Александр Насонов), еще не задокументированного.
03 мая 2005 г.
Снята с производства заменаstd::type_info. Спасибо Джоди Хагинс за заботу об этом!
Добавлены дополнительные пункты для вопросов, выявленных в ходе обзора
Исправленные ошибки документации в описаниях эффектовstate_machine::initiate(),state_machine::terminate()иstate_machine::process_event()
Перенес «Начало» и «Аудитория» в index.html (Август Сондерс)
Добавлены основные темы и заголовки промежуточных тем и сокращен раздел «Как читать это руководство» (Август Сондерс)
21 февраля 2005 года
Исправлен срок рассмотрения, упомянутый выше (абсолютно никаких изменений в коде и документации)
20 февраля 2005 года
Перелом: Включил частьexception_translator::operator()кода в шаблонstate_machineкласса. Это упрощает пользовательские переводчики исключений и делает их реализацию менее подверженной ошибкам.
Перелом: Запрос о переносе события исключения больше не выполняется и в конечном итоге приводит к тому, что исключение переносится. Это изменение является результатом правила, согласно которому во время обработки исключения не должен называться непользовательский код, который сам мог бы распространять исключение и, таким образом, маскировать первоначальное исключение (для отсрочки событияoperator newдолжно быть названо, которое могло бы бросить). Отсрочка исключительных случаев всегда была странной концепцией.
Различные щетки кода
09 февраля 2005 г.
Тестирование исключений для перехода Тест
Исправлена ошибка, которая привела к нарушению доступа, когда ортогональная область 0 состояния была прекращена до выхода из состояния (либо через другое прекращение, либо переход)
Различные незначительные изменения
07 февраля 2005 г.
Добавлено FifoScheduler Тест, тест на терминацию, CustomReaction Тестирование, StateIteration Тест, TypeInfoTest, State кастинг Тест, история Тестирование и тесты на непоследовательное использование истории, неподдерживаемые типы глубокой истории и недействительные государственные карты
Исправлена ошибка, которая привела к ошибке времени компиляции, когдаstate_downcastбыл инстанцирован с эталонной целью
Исправлена ошибка, которая привела к отмене указателя нулевой функции, когда история была очищена, прежде чем перейти к истории.
Обновлен раздел «Скорость против масштабируемости»
Исправленные ранее неудачные сборки однопоточных вариантов примера PingPong
Перенес в индекс раздел «Несовместимые компиляторы». html
Добавлено объяснение для BitMachine & Примеры ручной работы
Различные незначительные изменения
25 ноября 2004 г.
Адаптация к изменениям в распределении 1.32.0 (в основном изменения MPL). Библиотека больше не работает с 1.31.0
Исправлена ошибка, которая привела к неудачному утверждению во время разрушения государственной машины
Исправлена ошибка, которая привела к тому, что события, отложенные в сложном состоянии, не были выпущены, когда это состояние было оставлено
Добавленный переход Тестирование и отсрочка
19 октября 2004 г.
Переломные изменения: Из коробки государственная машина больше не используетexception_translator<>для перевода исключений, распространяемых в рамки. Вместо этого используетсяnull_exception_translator, который не улавливает и не переводит никаких исключений. Обновленные документы соответственно
Реализована экспериментальная функция, позволяющая переходному действию быть членом источника перехода или любого из его прямого или косвенного контекста, см.BOOST_STATECHART_RELAX_TRANSITION_CONTEXT
Различные небольшие улучшения кода и документации
22 мая 2004 г.
Интегрированные обходные пути Intel 7.0, предоставленные Павлом Возенилеком (большинство из них являются обходными путями библиотеки std)
Добавлен раздел Intel 7.0 на страницу конфигурации
Обновленные уведомления об авторских правах
12 мая 2004 г.
Исправлена ошибка, которая могла привести к тому, что событиеexception_thrownбыло отправлено в состояние, котороенеявляется самым внешним нестабильным состоянием в машине с нестабильным состоянием (как документировано в ссылке). Вместо этого событие было отправлено в состояние, где входное действие прямого внутреннего состояния бросало исключение, что верно только для государственных машин без ортогональных областей. Также в учебнике обновлен разделОбработка исключений, который теперь подробно объясняет это поведение.
Исправленная ошибка, которая при чрезвычайно редких обстоятельствах предотвратила бы правильную обработку незапамятных ситуаций.
Исправлено несоответствие в последовательности входа состояния, когда состояние в ортогональной области является целью перехода, происходящего за пределами его прямого внешнего состояния. Теперь состояния всегда вводятся по числу их ортогональной области, то есть ортогональной области 0 сначала, затем ортогональной области 1 и так далее. Так как документация не определила последовательность (она делает это сейчас), пользователи не должны замечать никакой разницы.
Изменилась реализацияstate_machine::terminate()так, что ортогональные области теперь выходят строго из высшего числа в наименьшее, а не произвольно, как раньше. Обновленные документы соответственно
22 апреля 2004 года
Сняты ранее добавленные исправления BCC 5.6.4 (порт BCC был отложен из-за отсутствия знаний о том, как работать с определенными ошибками)
Заменить все виды использованияBOOST_STATIC_CONSTANTих аналогами mplbool_,integral_c. В результате порты для багги-компиляторов должны стать проще
Разъяснил некоторые биты в руководстве и добавил StopWatch2.cpp, в котором подробно описан альтернативный способ извлечения состояния состояния машины.
10 апреля 2004 г.
Добавлены два исправления BCC 5.6.4, внесенные Павлом Возенилеком. Statechart пока не работает над BCC
Внедрил некоторые усовершенствования документации и кода, предложенные Павлом Возенилеком, в том числе новый документ «UML to Boost.Statechart mapping summary».
26 марта 2004 года
Исправлена небольшая ошибка Intel 8.0 в примере BitMachine
25 марта 2004 г.
Теперь все компилируется без предупреждения на Intel 8.0
21 марта 2004 г.
Разрывные изменения:fifo_scheduler<>иfifo_worker<>теперь всегда работают без блокировки по умолчанию
Перелом: ДобавилFifoWorkerшаблонный параметр кfifo_scheduler<>и соответственно обновил документацию и примеры
13 марта 2004 года
Переломные изменения: Переименовалиworker<>вfifo_scheduler<>и соответственно обновили документацию и примеры
Изменилась реализацияfifo_scheduler<>, так что пользователь должен дублировать меньше кода.
Другие небольшие изменения кода и дока
03 марта 2004 года
Переломные изменения: Переработал шаблоны классовworker<>иasynchronous_state_machine<>и соответствующим образом обновил документацию. Процессоры событий теперь можно добавлять и удалять во время работы рабочего. Кроме того, новый дизайн позволяет работать на заказ с не-FIFO схемами очередей.
Пример StopWatch теперь используетstd::time()вместоstd::clock().
09 февраля 2004 г.
Интегрированы стандартные исправления соответствия, внесенные Петром Петровым. Библиотека теперь также работает на GCC 3.2 и должна быть намного легче портироваться на другие высококонформные компиляторы.
Добавлено информационное средство государственного типаsimple_state
Благодаря Мицуо Фукасаве учебник теперь доступен и на японском языке!!!
Добавлено информационное средство государственного типа
Добавлена справочная (незаконченная) и конфигурационная документация и обновлены другие документы
Различные изменения кода (без каких-либо изменений)
12 октября 2003 г.
Переломные изменения: Удалениеrtti_policy<>из интерфейса. По умолчанию библиотека теперь использует собственную (часто более быструю) реализацию RTTI. Пользователи могут потребовать использования нативного C++ RTTI, определивBOOST_STATECHART_USE_NATIVE_RTTI. Это изменение касается только пользователей, которые настроилиstate_machine<>,asynchronous_state_machine<>илиworker<>.
Переломные изменения: Повторные шаблонные аргументыstate_machine<>иasynchronous_state_machine<>. Это изменение касается только пользователей, которые настроилиstate_machine<>илиasynchronous_state_machine<>.
Добавлена поддержка мелкой/глубокой истории и обновленная документация соответственно
Добавлены различные проверки здравомыслия на время компиляции
Добавлен 1 FAQ (спросил Мицуо Фукасава)
16 августа 2003 г.
Добавленыasynchronous_state_machine<>иworker<>и соответственно обновлена документация
Различные незначительные исправления ошибок и улучшения кода (без изменения интерфейса)
Добавлены примеры клавиатуры и пинг-понга
Добавлена документация .pdf
08 июня 2003 г.
Добавлено 3 FAQ (по запросу Богдана) & 1 определение
Удалены лишние публичные производные спецификаторы в учебнике и примеры, предложенные Алексеем Гуртовым
Различные улучшения кода (без изменений интерфейса)
Статья The Boost Statechart Library - Overview раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.