index.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>Chapter&#160;1.&#160;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.79.1">
  7. <link rel="home" href="index.html" title="Chapter&#160;1.&#160;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&#160;1.&#160;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 &#169; 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 class="toc">
  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 class="phrase"><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 class="phrase"><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 class="phrase"><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. 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&#160;1.1.&#160;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="blurb">
  336. <div class="titlepage"><div><div><p class="title"><b></b></p></div></div></div>
  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 class="phrase"><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: December 10, 2019 at 00:22:16 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>