]>
Commit | Line | Data |
---|---|---|
1 | <html> | |
2 | <head> | |
3 | <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> | |
4 | <title>Chapter 1. Phoenix 3.2.0</title> | |
5 | <link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css"> | |
6 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> | |
7 | <link rel="home" href="index.html" title="Chapter 1. Phoenix 3.2.0"> | |
8 | <link rel="next" href="phoenix/release_notes.html" title="Release Notes"> | |
9 | </head> | |
10 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> | |
11 | <table cellpadding="2" width="100%"><tr> | |
12 | <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td> | |
13 | <td align="center"><a href="../../../../index.html">Home</a></td> | |
14 | <td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td> | |
15 | <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> | |
16 | <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> | |
17 | <td align="center"><a href="../../../../more/index.htm">More</a></td> | |
18 | </tr></table> | |
19 | <hr> | |
20 | <div class="spirit-nav"><a accesskey="n" href="phoenix/release_notes.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div> | |
21 | <div class="chapter"> | |
22 | <div class="titlepage"><div> | |
23 | <div><h2 class="title"> | |
24 | <a name="phoenix"></a>Chapter 1. Phoenix 3.2.0</h2></div> | |
25 | <div><div class="author"><h3 class="author"> | |
26 | <span class="firstname">Joel</span> <span class="surname">de Guzman</span> | |
27 | </h3></div></div> | |
28 | <div><div class="author"><h3 class="author"> | |
29 | <span class="firstname">Dan</span> <span class="surname">Marsden</span> | |
30 | </h3></div></div> | |
31 | <div><div class="author"><h3 class="author"> | |
32 | <span class="firstname">Thomas</span> <span class="surname">Heller</span> | |
33 | </h3></div></div> | |
34 | <div><div class="author"><h3 class="author"> | |
35 | <span class="firstname">John</span> <span class="surname">Fletcher</span> | |
36 | </h3></div></div> | |
37 | <div><p class="copyright">Copyright © 2002-2005, 2010, 2014, 2015 Joel de Guzman, Dan Marsden, Thomas | |
38 | Heller, John Fletcher</p></div> | |
39 | <div><div class="legalnotice"> | |
40 | <a name="phoenix.legal"></a><p> | |
41 | Distributed under the Boost Software License, Version 1.0. (See accompanying | |
42 | file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) | |
43 | </p> | |
44 | </div></div> | |
45 | </div></div> | |
46 | <div class="toc"> | |
47 | <p><b>Table of Contents</b></p> | |
48 | <dl> | |
49 | <dt><span class="section"><a href="phoenix/release_notes.html">Release Notes</a></span></dt> | |
50 | <dt><span class="section"><a href="phoenix/what_s_new.html">What's New</a></span></dt> | |
51 | <dd><dl> | |
52 | <dt><span class="section"><a href="phoenix/what_s_new/phoenix___warning_on__lambda_and_let_.html">Phoenix | |
53 | - warning on <span class="bold"><strong>lambda and let</strong></span></a></span></dt> | |
54 | <dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_2_0__boost_1_58_0_.html">Phoenix | |
55 | 3.2.0 (Boost 1.58.0)</a></span></dt> | |
56 | <dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_1_1.html">Phoenix 3.1.1</a></span></dt> | |
57 | <dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_1_0.html">Phoenix 3.1.0</a></span></dt> | |
58 | <dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_0_6__boost_1_57_0_.html">Phoenix | |
59 | 3.0.6 (Boost 1.57.0)</a></span></dt> | |
60 | <dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_0_5.html">Phoenix 3.0.5</a></span></dt> | |
61 | <dt><span class="section"><a href="phoenix/what_s_new/phoenix_3_0.html">Phoenix 3.0</a></span></dt> | |
62 | </dl></dd> | |
63 | <dt><span class="section"><a href="phoenix/introduction.html">Introduction</a></span></dt> | |
64 | <dt><span class="section"><a href="phoenix/starter_kit.html">Starter Kit</a></span></dt> | |
65 | <dd><dl> | |
66 | <dt><span class="section"><a href="phoenix/starter_kit/values.html">Values</a></span></dt> | |
67 | <dt><span class="section"><a href="phoenix/starter_kit/references.html">References</a></span></dt> | |
68 | <dt><span class="section"><a href="phoenix/starter_kit/arguments.html">Arguments</a></span></dt> | |
69 | <dt><span class="section"><a href="phoenix/starter_kit/lazy_operators.html">Lazy Operators</a></span></dt> | |
70 | <dt><span class="section"><a href="phoenix/starter_kit/lazy_statements.html">Lazy Statements</a></span></dt> | |
71 | <dt><span class="section"><a href="phoenix/starter_kit/construct__new__delete__casts.html">Construct, | |
72 | New, Delete, Casts</a></span></dt> | |
73 | <dt><span class="section"><a href="phoenix/starter_kit/lazy_functions.html">Lazy Functions</a></span></dt> | |
74 | <dt><span class="section"><a href="phoenix/starter_kit/more.html">More</a></span></dt> | |
75 | </dl></dd> | |
76 | <dt><span class="section"><a href="phoenix/basics.html">Basics</a></span></dt> | |
77 | <dt><span class="section"><a href="phoenix/organization.html">Organization</a></span></dt> | |
78 | <dt><span class="section"><a href="phoenix/actor.html">Actor</a></span></dt> | |
79 | <dt><span class="section"><a href="phoenix/modules.html">Modules</a></span></dt> | |
80 | <dd><dl> | |
81 | <dt><span class="section"><a href="phoenix/modules/core.html">Core</a></span></dt> | |
82 | <dd><dl> | |
83 | <dt><span class="section"><a href="phoenix/modules/core/values.html">Values</a></span></dt> | |
84 | <dt><span class="section"><a href="phoenix/modules/core/references.html">References</a></span></dt> | |
85 | <dt><span class="section"><a href="phoenix/modules/core/arguments.html">Arguments</a></span></dt> | |
86 | <dt><span class="section"><a href="phoenix/modules/core/nothing.html">Nothing</a></span></dt> | |
87 | </dl></dd> | |
88 | <dt><span class="section"><a href="phoenix/modules/function.html">Function</a></span></dt> | |
89 | <dd><dl><dt><span class="section"><a href="phoenix/modules/function/adapting_functions.html">Adapting | |
90 | Functions</a></span></dt></dl></dd> | |
91 | <dt><span class="section"><a href="phoenix/modules/operator.html">Operator</a></span></dt> | |
92 | <dt><span class="section"><a href="phoenix/modules/statement.html">Statement</a></span></dt> | |
93 | <dd><dl> | |
94 | <dt><span class="section"><a href="phoenix/modules/statement/block_statement.html">Block Statement</a></span></dt> | |
95 | <dt><span class="section"><a href="phoenix/modules/statement/if__statement.html">if_ Statement</a></span></dt> | |
96 | <dt><span class="section"><a href="phoenix/modules/statement/___if_else_____statement.html">if_else_ Statement</a></span></dt> | |
97 | <dt><span class="section"><a href="phoenix/modules/statement/switch__statement.html">switch_ | |
98 | Statement</a></span></dt> | |
99 | <dt><span class="section"><a href="phoenix/modules/statement/while__statement.html">while_ | |
100 | Statement</a></span></dt> | |
101 | <dt><span class="section"><a href="phoenix/modules/statement/___do_while_____statement.html">do_while_ Statement</a></span></dt> | |
102 | <dt><span class="section"><a href="phoenix/modules/statement/for_statement.html">for_ Statement</a></span></dt> | |
103 | <dt><span class="section"><a href="phoenix/modules/statement/try__catch__statement.html">try_ | |
104 | catch_ Statement</a></span></dt> | |
105 | <dt><span class="section"><a href="phoenix/modules/statement/throw_.html">throw_</a></span></dt> | |
106 | </dl></dd> | |
107 | <dt><span class="section"><a href="phoenix/modules/object.html">Object</a></span></dt> | |
108 | <dd><dl> | |
109 | <dt><span class="section"><a href="phoenix/modules/object/construction.html">Construction</a></span></dt> | |
110 | <dt><span class="section"><a href="phoenix/modules/object/new.html">New</a></span></dt> | |
111 | <dt><span class="section"><a href="phoenix/modules/object/delete.html">Delete</a></span></dt> | |
112 | <dt><span class="section"><a href="phoenix/modules/object/casts.html">Casts</a></span></dt> | |
113 | </dl></dd> | |
114 | <dt><span class="section"><a href="phoenix/modules/scope.html">Scope</a></span></dt> | |
115 | <dd><dl> | |
116 | <dt><span class="section"><a href="phoenix/modules/scope/local_variables.html">Local Variables</a></span></dt> | |
117 | <dt><span class="section"><a href="phoenix/modules/scope/let.html">let</a></span></dt> | |
118 | <dt><span class="section"><a href="phoenix/modules/scope/lambda.html">lambda</a></span></dt> | |
119 | </dl></dd> | |
120 | <dt><span class="section"><a href="phoenix/modules/bind.html">Bind</a></span></dt> | |
121 | <dd><dl> | |
122 | <dt><span class="section"><a href="phoenix/modules/bind/binding_function_objects.html">Binding | |
123 | Function Objects</a></span></dt> | |
124 | <dt><span class="section"><a href="phoenix/modules/bind/binding_functions.html">Binding Functions</a></span></dt> | |
125 | <dt><span class="section"><a href="phoenix/modules/bind/binding_member_functions.html">Binding | |
126 | Member Functions</a></span></dt> | |
127 | <dt><span class="section"><a href="phoenix/modules/bind/binding_member_variables.html">Binding | |
128 | Member Variables</a></span></dt> | |
129 | <dt><span class="section"><a href="phoenix/modules/bind/compatibility_with_boost_bind.html">Compatibility | |
130 | with Boost.Bind</a></span></dt> | |
131 | </dl></dd> | |
132 | <dt><span class="section"><a href="phoenix/modules/stl.html">STL</a></span></dt> | |
133 | <dd><dl> | |
134 | <dt><span class="section"><a href="phoenix/modules/stl/container.html">Container</a></span></dt> | |
135 | <dt><span class="section"><a href="phoenix/modules/stl/algorithm.html">Algorithm</a></span></dt> | |
136 | </dl></dd> | |
137 | </dl></dd> | |
138 | <dt><span class="section"><a href="phoenix/inside.html">Inside Phoenix</a></span></dt> | |
139 | <dd><dl> | |
140 | <dt><span class="section"><a href="phoenix/inside/actor.html">Actors in Detail</a></span></dt> | |
141 | <dt><span class="section"><a href="phoenix/inside/expression.html">Phoenix Expressions</a></span></dt> | |
142 | <dd><dl><dt><span class="section"><a href="phoenix/inside/expression/boilerplate_macros.html">Boilerplate | |
143 | Macros</a></span></dt></dl></dd> | |
144 | <dt><span class="section"><a href="phoenix/inside/actions.html">More on Actions</a></span></dt> | |
145 | <dt><span class="section"><a href="phoenix/inside/rules.html">Predefined Expressions and Rules</a></span></dt> | |
146 | <dt><span class="section"><a href="phoenix/inside/custom_terminals.html">Custom Terminals</a></span></dt> | |
147 | <dt><span class="section"><a href="phoenix/inside/placeholder_unification.html">Placeholder Unification</a></span></dt> | |
148 | </dl></dd> | |
149 | <dt><span class="section"><a href="phoenix/examples.html">Advanced Examples</a></span></dt> | |
150 | <dd><dl> | |
151 | <dt><span class="section"><a href="phoenix/examples/extending_actors.html">Extending Actors</a></span></dt> | |
152 | <dt><span class="section"><a href="phoenix/examples/adding_an_expression.html">Adding an expression</a></span></dt> | |
153 | <dt><span class="section"><a href="phoenix/examples/transforming_the_expression_tree.html">Transforming | |
154 | the Expression Tree</a></span></dt> | |
155 | </dl></dd> | |
156 | <dt><span class="section"><a href="phoenix/lazy_list.html">Lazy List</a></span></dt> | |
157 | <dd><dl> | |
158 | <dt><span class="section"><a href="phoenix/lazy_list/background.html">Background</a></span></dt> | |
159 | <dt><span class="section"><a href="phoenix/lazy_list/what_is_provided.html">What is provided</a></span></dt> | |
160 | <dt><span class="section"><a href="phoenix/lazy_list/tutorial_with_examples.html">Tutorial with | |
161 | examples</a></span></dt> | |
162 | <dd><dl> | |
163 | <dt><span class="section"><a href="phoenix/lazy_list/tutorial_with_examples/arithmetic_functions.html">Arithmetic | |
164 | functions</a></span></dt> | |
165 | <dt><span class="section"><a href="phoenix/lazy_list/tutorial_with_examples/list_generation.html">List | |
166 | Generation</a></span></dt> | |
167 | </dl></dd> | |
168 | <dt><span class="section"><a href="phoenix/lazy_list/exceptions.html">Exceptions</a></span></dt> | |
169 | <dt><span class="section"><a href="phoenix/lazy_list/implementation_details.html">Implementation | |
170 | Details</a></span></dt> | |
171 | <dt><span class="section"><a href="phoenix/lazy_list/testing.html">Testing</a></span></dt> | |
172 | <dt><span class="section"><a href="phoenix/lazy_list/where_next_.html">Where Next?</a></span></dt> | |
173 | </dl></dd> | |
174 | <dt><span class="section"><a href="phoenix/maintenance.html">Maintenance</a></span></dt> | |
175 | <dd><dl> | |
176 | <dt><span class="section"><a href="phoenix/maintenance/background.html">Background</a></span></dt> | |
177 | <dt><span class="section"><a href="phoenix/maintenance/my_understanding_of_how_maintenance_works.html">My | |
178 | Understanding of how maintenance works</a></span></dt> | |
179 | <dt><span class="section"><a href="phoenix/maintenance/method_in_use.html">Method in use</a></span></dt> | |
180 | <dt><span class="section"><a href="phoenix/maintenance/experience.html">Experience</a></span></dt> | |
181 | <dd><dl> | |
182 | <dt><span class="section"><a href="phoenix/maintenance/experience/maintenance_tools.html">Maintenance | |
183 | Tools</a></span></dt> | |
184 | <dt><span class="section"><a href="phoenix/maintenance/experience/bugs_to_be_fixed.html">Bugs | |
185 | to be fixed</a></span></dt> | |
186 | <dt><span class="section"><a href="phoenix/maintenance/experience/compilers.html">Compilers</a></span></dt> | |
187 | </dl></dd> | |
188 | </dl></dd> | |
189 | <dt><span class="section"><a href="phoenix/wrap_up.html">Wrap Up</a></span></dt> | |
190 | <dt><span class="section"><a href="phoenix/acknowledgments.html">Acknowledgments</a></span></dt> | |
191 | <dt><span class="section"><a href="phoenix/references.html">References</a></span></dt> | |
192 | </dl> | |
193 | </div> | |
194 | <h2> | |
195 | <a name="phoenix.h0"></a> | |
196 | <span><a name="phoenix.preface"></a></span><a class="link" href="index.html#phoenix.preface">Preface</a> | |
197 | </h2> | |
198 | <div class="blockquote"><blockquote class="blockquote"><p> | |
199 | <span class="emphasis"><em>Functional programming is so called because a program consists entirely | |
200 | of functions. The main program itself is written as a function which receives | |
201 | the program's input as its argument and delivers the program's output as its | |
202 | result. Typically the main function is defined in terms of other functions, | |
203 | which in turn are defined in terms of still more functions until at the bottom | |
204 | level the functions are language primitives.</em></span> | |
205 | </p></blockquote></div> | |
206 | <div class="blockquote"><blockquote class="blockquote"><p> | |
207 | <span class="bold"><strong>John Hughes</strong></span>-- <span class="emphasis"><em>Why Functional Programming | |
208 | Matters</em></span> | |
209 | </p></blockquote></div> | |
210 | <p> | |
211 | <span class="inlinemediaobject"><img src="images/lambda_cpp.png"></span> | |
212 | </p> | |
213 | <h3> | |
214 | <a name="phoenix.h1"></a> | |
215 | <span><a name="phoenix.description"></a></span><a class="link" href="index.html#phoenix.description">Description</a> | |
216 | </h3> | |
217 | <p> | |
218 | Phoenix enables Functional Programming (FP) in C++. The design and implementation | |
219 | of Phoenix is highly influenced by <a href="http://cgi.di.uoa.gr/~smaragd/fc++/" target="_top">FC++</a> | |
220 | by Yannis Smaragdakis and Brian McNamara and the <a href="http://www.boost.org/libs/lambda/doc/index.html" target="_top">BLL</a> | |
221 | (Boost Lambda Library) by Jaakko Jaarvi and Gary Powell. Phoenix is a blend of | |
222 | FC++ and BLL using the implementation techniques used in the <a href="http://spirit.sourceforge.net" target="_top">Spirit</a> | |
223 | inline parser. | |
224 | </p> | |
225 | <p> | |
226 | Phoenix is a header only library. It is extremely modular by design. One can | |
227 | extract and use only a small subset of the full library, literally tearing the | |
228 | library into small pieces, without fear that the pieces won't work anymore. The | |
229 | library is organized in highly independent modules and layers. | |
230 | </p> | |
231 | <h3> | |
232 | <a name="phoenix.h2"></a> | |
233 | <span><a name="phoenix.how_to_use_this_manual"></a></span><a class="link" href="index.html#phoenix.how_to_use_this_manual">How | |
234 | to use this manual</a> | |
235 | </h3> | |
236 | <p> | |
237 | The Phoenix library is organized in logical modules. This documentation provides | |
238 | a user's guide and reference for each module in the library. A simple and clear | |
239 | code example is worth a hundred lines of documentation; therefore, the user's | |
240 | guide is presented with abundant examples annotated and explained in step-wise | |
241 | manner. The user's guide is based on examples: lots of them. | |
242 | </p> | |
243 | <p> | |
244 | As much as possible, forward information (i.e. citing a specific piece of information | |
245 | that has not yet been discussed) is avoided in the user's manual portion of each | |
246 | module. In many cases, though, it is unavoidable that advanced but related topics | |
247 | not be interspersed with the normal flow of discussion. To alleviate this problem, | |
248 | topics categorized as "advanced" may be skipped at first reading. | |
249 | </p> | |
250 | <p> | |
251 | Some icons are used to mark certain topics indicative of their relevance. These | |
252 | icons precede some text to indicate: | |
253 | </p> | |
254 | <div class="table"> | |
255 | <a name="phoenix.t0"></a><p class="title"><b>Table 1.1. Icons</b></p> | |
256 | <div class="table-contents"><table class="table" summary="Icons"> | |
257 | <colgroup> | |
258 | <col> | |
259 | <col> | |
260 | <col> | |
261 | </colgroup> | |
262 | <thead><tr> | |
263 | <th> | |
264 | <p> | |
265 | Icon | |
266 | </p> | |
267 | </th> | |
268 | <th> | |
269 | <p> | |
270 | Name | |
271 | </p> | |
272 | </th> | |
273 | <th> | |
274 | <p> | |
275 | Meaning | |
276 | </p> | |
277 | </th> | |
278 | </tr></thead> | |
279 | <tbody> | |
280 | <tr> | |
281 | <td> | |
282 | <p> | |
283 | <span class="inlinemediaobject"><img src="images/note.png"></span> | |
284 | </p> | |
285 | </td> | |
286 | <td> | |
287 | <p> | |
288 | Note | |
289 | </p> | |
290 | </td> | |
291 | <td> | |
292 | <p> | |
293 | Information provided is auxiliary but will give the reader a deeper | |
294 | insight into a specific topic. May be skipped. | |
295 | </p> | |
296 | </td> | |
297 | </tr> | |
298 | <tr> | |
299 | <td> | |
300 | <p> | |
301 | <span class="inlinemediaobject"><img src="images/alert.png"></span> | |
302 | </p> | |
303 | </td> | |
304 | <td> | |
305 | <p> | |
306 | Alert | |
307 | </p> | |
308 | </td> | |
309 | <td> | |
310 | <p> | |
311 | Information provided is of utmost importance. | |
312 | </p> | |
313 | </td> | |
314 | </tr> | |
315 | <tr> | |
316 | <td> | |
317 | <p> | |
318 | <span class="inlinemediaobject"><img src="images/tip.png"></span> | |
319 | </p> | |
320 | </td> | |
321 | <td> | |
322 | <p> | |
323 | Tip | |
324 | </p> | |
325 | </td> | |
326 | <td> | |
327 | <p> | |
328 | A potentially useful and helpful piece of information. | |
329 | </p> | |
330 | </td> | |
331 | </tr> | |
332 | </tbody> | |
333 | </table></div> | |
334 | </div> | |
335 | <br class="table-break"><div class="sidebar"> | |
336 | <p class="title"><b></b></p> | |
337 | <p> | |
338 | <span class="inlinemediaobject"><img src="images/note.png"></span> | |
339 | Unless otherwise noted <code class="computeroutput"><span class="keyword">using</span> <span class="keyword">namespace</span> | |
340 | <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">;</span></code> is | |
341 | assumed | |
342 | </p> | |
343 | </div> | |
344 | <h3> | |
345 | <a name="phoenix.h3"></a> | |
346 | <span><a name="phoenix._emphasis_role__bold___emphasis____to_joel_s_dear_daughter__phoenix__emphasis___emphasis_"></a></span><a class="link" href="index.html#phoenix._emphasis_role__bold___emphasis____to_joel_s_dear_daughter__phoenix__emphasis___emphasis_"><span class="bold"><strong><span class="emphasis"><em>...To Joel's dear daughter, Phoenix</em></span></strong></span></a> | |
347 | </h3> | |
348 | </div> | |
349 | <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> | |
350 | <td align="left"><p><small>Last revised: March 24, 2015 at 21:39:48 GMT</small></p></td> | |
351 | <td align="right"><div class="copyright-footer"></div></td> | |
352 | </tr></table> | |
353 | <hr> | |
354 | <div class="spirit-nav"><a accesskey="n" href="phoenix/release_notes.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div> | |
355 | </body> | |
356 | </html> |