83 lines
3.4 KiB
Text
Executable file
83 lines
3.4 KiB
Text
Executable file
[/==============================================================================
|
|
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]
|
|
|