1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- [/==============================================================================
- Copyright (C) 2001-2010 Joel de Guzman
- Copyright (C) 2001-2005 Dan Marsden
- Copyright (C) 2001-2010 Thomas Heller
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- ===============================================================================/]
- [section Organization]
- Care and attention to detail was given, painstakingly, to the design and
- implementation of Phoenix.
- The library is organized in four layers:
- # Actor
- # Value, Reference, Arguments
- # Function, Operator, Object, Statement, Scope
- # STL, Fusion, Bind
- [/$images/organization.png]
- The modules are orthogonal, with no cyclic dependencies.
- Lower layers do not depend on higher layers. Modules in a layer do not depend on other modules in the same layer.
- This means, for example, that Bind can be completely discarded if it is
- not required; or one could perhaps take out Operator and Statement and just use Function,
- which may be desirable in a pure FP application.
- The library has grown from the original Phoenix but still comprises only
- header files. There are no object files to link against.
- [h2 Core]
- The lowest two layers comprise the core.
- The [link phoenix.actor `Actor`] is the main concept behind the library. Lazy functions are
- abstracted as actors.
- Terminals provide the basic building blocks of functionality within Phoenix.
- Expressions are used to combine these terminals together to provide more
- powerful functionality.
- Expressions are composed of zero or more actors. Each actor in a composite can
- again be another expression.
- [table Modules
- [[Module] [Description]]
- [[Function] [Lazy functions support (e.g. `add`)]]
- [[Operator] [Lazy operators support (e.g. `+`)]]
- [[Statement] [Lazy statements (e.g. `if_`, `while_`)]]
- [[Object] [Lazy casts (e.g. `static_cast_`),
- object creation destruction (e.g.
- `new_`, `delete_`)]]
- [[Scope] [Support for scopes, local variables and lambda-lambda]]
- [[Bind] [Lazy functions from free functions, member functions or member variables.]]
- [[STL Container] [Set of predefined "lazy" functions that work on STL
- containers and sequences (e.g. `push_back`).]]
- [[STL Algorithm] [Set of predefined "lazy" versions of the STL algorithms
- (e.g. `find_if`).]]
- ]
- Each module is defined in a header file with the same name. For example,
- the core module is defined in `<boost/phoenix/core.hpp>`.
- [table Includes
- [[Module] [File]]
- [[Core] [`#include <boost/phoenix/core.hpp>`]]
- [[Function] [`#include <boost/phoenix/function.hpp>`]]
- [[Operator] [`#include <boost/phoenix/operator.hpp>`]]
- [[Statement] [`#include <boost/phoenix/statement.hpp>`]]
- [[Object] [`#include <boost/phoenix/object.hpp>`]]
- [[Scope] [`#include <boost/phoenix/scope.hpp>`]]
- [[Bind] [`#include <boost/phoenix/bind.hpp>`]]
- [[Container] [`#include <boost/phoenix/stl/container.hpp>`]]
- [[Algorithm] [`#include <boost/phoenix/stl/algorithm.hpp>`]]
- ]
- [blurb __tip__ Finer grained include files are available per feature; see the
- succeeding sections.]
- [endsect]
|