Files
statechart/doc/index.html
Andreas Huber 8ab0f8a749 Minor fixes
[SVN r25779]
2004-10-18 23:20:24 +00:00

280 lines
12 KiB
HTML

<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<link rel="stylesheet" type="text/css" href="../../../boost.css">
<title>The boost::fsm library - Overview</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../index.htm">
<img alt="C++ Boost" src="../../../c++boost.gif" border="0" width="277" height="86"></a></h3>
</td>
<td valign="top">
<h1 align="center">The boost::fsm library</h1>
<h2 align="center">Overview</h2>
<p align="center"><font size="2">Version:
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y/%m/%d" startspan -->2004/10/19<!--webbot bot="Timestamp" endspan i-checksum="12325" --></font></td>
</tr>
</table>
<hr>
<h2>Overview</h2>
<p>Welcome to boost::fsm, a C++ library for finite state machines. Features
include:</p>
<ul>
<li>Straightforward transformation from UML state chart to executable C++ code
and vice versa (currently, this needs to be done manually both ways but it
should not be difficult to automate these tasks)</li>
<li>Comprehensive <a href="http://www.omg.org/cgi-bin/doc?formal/03-03-01">
UML semantics</a> support:<ul>
<li>Hierarchical (composite, nested) states</li>
<li>Orthogonal (concurrent) states</li>
<li>Entry-, exit- and transition-actions</li>
<li>Guards</li>
<li>Shallow/deep history</li>
<li>Event deferral</li>
</ul>
</li>
<li>Error handling support</li>
<li>Full type-safety</li>
<li>Compile-time state chart validation</li>
<li>Support for asynchronous state machines and multi-threading</li>
<li>State-local storage</li>
<li>Generic design allowing for the customization of memory management,
error handling and threading</li>
</ul>
<p>All code has been tested on the following platforms using boost
distribution 1.31.0:</p>
<ul>
<li>MSVC 7.1 (the compiler coming with MS Visual Studio 2003)</li>
<li>GCC 3.3.1 (MinGW)</li>
</ul>
<p>In addition, the previous version of the library has also been tested on
the following platforms (I expect the current version to work, but it hasn't
been tested yet):</p>
<ul>
<li>GCC 3.2 (MinGW, Red Hat Linux)</li>
<li>
<a href="configuration.html#Intel 7.0 (Win32, MS Visual Studio 6 std library)">
Intel 7.0 (Win32, MS Visual Studio 6 std library)</a></li>
<li>Intel 8.0 (Win32, MS Visual Studio 2003 std library)</li>
</ul>
<p>The library is functionally complete. However, the following is still in
the making:</p>
<ol>
<li>Implement regression tests</li>
<li>Improve performance for state machines that use <code>
null_exception_translator</code></li>
<li>Design a facility allowing to specially handle events that did not
trigger a reaction</li>
<li>Implement <code>priority_scheduler&lt;&gt;</code></li>
<li>Reimplement <code>fifo_scheduler&lt;&gt;::processor_handle</code> so that
<code>fifo_scheduler&lt;&gt;::create_processor&lt;&gt;()</code> and <code>fifo_scheduler&lt;&gt;::destroy_processor()</code>
no longer make (indirect) calls to global <code>operator new()</code> and
<code>operator delete()</code></li>
<li>Investigate whether <code>fifo_worker&lt;&gt;</code> should accept a policy
parameter defining how to lock and wait</li>
<li>Refactor the <code>state_machine</code> class template to reduce code
size in applications with many different state machines</li>
</ol>
<p>boost::fsm has been submitted for formal review. <b>All feedback is highly
welcome!</b></p>
<hr>
<h2>Contents</h2>
<dl class="index">
<dt><a href="tutorial.html">Tutorial</a> [pdf: <a href="tutorial.pdf">
English</a>,
<a href="http://prdownloads.sourceforge.jp/jyugem/7127/fsm-tutorial-jp.pdf">
Japanese</a>]</dt>
<dt><a href="uml_mapping.html">UML to boost::fsm mapping summary</a></dt>
<dt><a href="faq.html">Frequently Asked Questions (FAQs)</a></dt>
<dt><a href="configuration.html">Configuration</a></dt>
<dt><a href="definitions.html">Definitions</a></dt>
<dt><a href="reference.html">Reference</a> [pdf: <a href="reference.pdf">
English</a>]</dt>
<dt><a href="rationale.html">Rationale</a> [pdf: <a href="rationale.pdf">
English</a>]</dt>
<dt><a href="acknowledgments.html">Acknowledgments</a></dt>
</dl>
<hr>
<h2>Change history</h2>
<p>19 October, 2004</p>
<ul>
<li><b>Breaking change</b>: Out of the box, a state machine no longer uses
<code>exception_translator&lt;&gt;</code> to translate exceptions propagated into
the framework. Instead, <code>null_exception_translator</code> is now used,
which does not catch or translate any exceptions. Updated docs accordingly</li>
<li>Implemented <a href="tutorial.html#Two_stage_exit">two stage exit</a> and updated docs accordingly</li>
<li>Implemented an experimental feature that allows a transition action to
be a member of the transition source or any of its direct or indirect
contexts, see
<a href="configuration.html#Application Defined Macros">BOOST_FSM_RELAX_TRANSITION_CONTEXT</a></li>
<li>Various small code and documentation improvements</li>
</ul>
<p>22 May, 2004</p>
<ul>
<li>Integrated the Intel 7.0 workarounds provided by Pavel Vozenilek (most
are std library workarounds)</li>
<li>Added the Intel 7.0 section to the configuration page</li>
<li>Updated copyright notices</li>
</ul>
<p>12 May, 2004</p>
<ul>
<li>Fixed a bug that could have led to an <code>exception_thrown</code>
event being sent to a state that is <b>not</b> the outermost unstable state
in an unstable state machine (as documented in the reference). Instead, the
event was sent to the state where the entry action of a direct inner state
threw an exception, which is only correct for state machines without
orthogonal regions. Also updated the
<a href="tutorial.html#Exception handling">Exception handling</a> section in
the tutorial, which now explains this behavior in detail</li>
<li>Fixed bug that, under extremely rare circumstances, would have prevented
the correct handling of out of memory situations</li>
<li>Fixed an inconsistency in the state entry sequence when a state in an
orthogonal region is the target of a transition originating outside its
direct outer state. Now the states are always entered according to the
number of their orthogonal region, i.e. orthogonal region 0 first, then
orthogonal region 1 and so on. Since the documentation did not define the
sequence (it does now) users should not notice any difference</li>
<li>Changed the implementation of <code>state_machine::terminate()</code> so
that orthogonal regions are now exited strictly from highest to lowest
number instead of arbitrarily as before. Updated docs accordingly</li>
</ul>
<p>22 April, 2004</p>
<ul>
<li>Removed the previously added BCC 5.6.4 fixes (the BCC port was postponed
due to lack of knowledge how to work around certain bugs)</li>
<li>Replaced all uses of <code>BOOST_STATIC_CONSTANT</code> with their mpl
counterparts (<code>bool_</code>, <code>integral_c</code>). As a result,
ports to buggy compilers should become easier</li>
<li>Clarified some bits in the tutorial and added StopWatch2.cpp, which
details an alternative way of retrieving state machine state</li>
</ul>
<p>10 April, 2004</p>
<ul>
<li>Added two BCC 5.6.4 fixes contributed by Pavel Vozenilek; boost::fsm
does not yet work on BCC though</li>
<li>Implemented a few of the documentation and code improvements suggested
by Pavel Vozenilek, including the new &quot;UML to boost::fsm mapping summary&quot;
document</li>
</ul>
<p>26 March, 2004:</p>
<ul>
<li>Fixed a small Intel 8.0 bug in the BitMachine example</li>
</ul>
<p>25 March, 2004:</p>
<ul>
<li>Now everything compiles warning-free on Intel 8.0</li>
</ul>
<p>21 March, 2004:</p>
<ul>
<li><b>Breaking change</b>: <code>fifo_scheduler&lt;&gt;</code> and <code>
fifo_worker&lt;&gt;</code> now always work non-blocking by default </li>
<li>Added gcc makefiles, contributed by Mitsuo Fukasawa</li>
<li>Added a fixed version of atomic_count_gcc.hpp to fsm.zip, see
<a href="http://lists.boost.org/MailArchives/boost/msg57537.php">
http://lists.boost.org/MailArchives/boost/msg57537.php</a> for more
information</li>
</ul>
<p>16 March, 2004:</p>
<ul>
<li><b>Breaking change</b>: Added the <code>FifoWorker</code> template
parameter to <code>fifo_scheduler&lt;&gt;</code> and updated documentation and
examples accordingly</li>
</ul>
<p>13 March, 2004:</p>
<ul>
<li><b>Breaking change</b>: Renamed <code>worker&lt;&gt;</code> to <code>
fifo_scheduler&lt;&gt;</code> and updated documentation and examples accordingly</li>
<li>Changed the <code>fifo_scheduler&lt;&gt;</code> implementation so that a
custom worker implementation needs to duplicate less code</li>
<li>Various other small code and doc changes</li>
</ul>
<p>03 March, 2004:</p>
<ul>
<li><b>Breaking change</b>: Redesigned the <code>worker&lt;&gt;</code> and <code>
asynchronous_state_machine&lt;&gt;</code> class templates and updated
documentation accordingly. Event processors can now be added and removed
while a worker is running. Moreover, the new design allows for custom
workers with non-FIFO queueing schemes</li>
<li>The StopWatch example now uses <code>std::time()</code> instead of <code>
std::clock()</code></li>
</ul>
<p>09 February, 2004:</p>
<ul>
<li>Integrated the standard conformance fixes contributed by Peter Petrov.
The library now also works on GCC 3.2 and should be much easier to port to
other highly conforming compilers</li>
<li>Added the state type information facility to <code>simple_state</code></li>
<li>Added the function templates <code>simple_state::clear_shallow_history()</code>
and <code>simple_state::clear_deep_history()</code></li>
</ul>
<p>11 January, 2004:</p>
<ul>
<li>Finished reference documentation</li>
<li>Updated Copyright notices</li>
</ul>
<p>12 December, 2003:</p>
<ul>
<li><b>Thanks to Mitsuo Fukasawa the tutorial is now also available in
Japanese!!!</b></li>
<li>Added a state type information facility</li>
<li>Added reference (unfinished) and configuration documentation and updated
other documents</li>
<li>Various code brush-ups (no breaking changes)</li>
</ul>
<p>12 October, 2003:</p>
<ul>
<li><b>Breaking change</b>: Removed <code>rtti_policy&lt;&gt;</code> from the
interface. By default, the library now uses its own (often faster) RTTI
implementation. Users can demand the use of native C++ RTTI by defining
<code>BOOST_FSM_USE_NATIVE_RTTI</code>. This change only affects users who
customized <code>state_machine&lt;&gt;</code>, <code>asynchronous_state_machine&lt;&gt;</code>
or <code>worker&lt;&gt;</code></li>
<li><b>Breaking change</b>: Reordered template arguments of <code>
state_machine&lt;&gt;</code> and <code>asynchronous_state_machine&lt;&gt;</code>. This
change only affects users who customized <code>state_machine&lt;&gt;</code> or
<code>asynchronous_state_machine&lt;&gt;</code></li>
<li>Added shallow/deep history support and updated documentation accordingly</li>
<li>Added various compile-time sanity checks</li>
<li>Added 1 FAQ (asked by Mitsuo Fukasawa)</li>
</ul>
<p>16 August, 2003:</p>
<ul>
<li>Added <code>asynchronous_state_machine&lt;&gt;</code> and <code>worker&lt;&gt;</code>
and updated documentation accordingly</li>
<li>Various minor bug fixes and code improvements (no breaking interface
changes)</li>
<li>Added Keyboard and PingPong examples</li>
<li>Added .pdf documentation</li>
</ul>
<p>08 June, 2003:</p>
<ul>
<li>Added 3 FAQs (asked by Bohdan) &amp; 1 definition</li>
<li>Removed the superfluous public derivation specifiers in the tutorial and
the examples as suggested by Aleksey Gurtovoy</li>
<li>Various code improvements (no interface changes)</li>
<li>Various html improvements</li>
</ul>
<hr>
<p>Revised
<!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->19 October, 2004<!--webbot bot="Timestamp" endspan i-checksum="38692" --></p>
<p><i>© Copyright <a href="mailto:ahd6974-spamgroupstrap@yahoo.com">Andreas Huber Dönni</a>
2003-2004. <b><font color="#FF0000">Please remove the words spam and trap from
the email address behind the link</font></b></i></p>
<p><i>Distributed under the Boost Software License, Version 1.0. (See
accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or
copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt</a>)</i></p>
</body>
</html>