组织 | ![]() |
![]() |
![]() |
![]() |
该框架组织成五个(5)层。
+-----------+
| binders |
+-----------+-----------+------------+
| functions | operators | statements |
+------------+-----------+-----------+------------+
| primitives | composite |
+------------+------------------------------------+
| actor |
+-------------------------------------------------+
| tuples |
+-------------------------------------------------+
最低层是元组库。使用该框架根本不需要了解元组。简而言之,这个小型子库提供了一种将异构类型捆绑在一起的机制。这是一个实现细节。然而,它本身在其他应用程序中也非常有用。稍后将提供更详细的解释。
Actor 是该框架背后的核心概念。惰性函数被抽象为 Actor,它们实际上是多态函子。Actor 只有 2 种类型:
组合由零个或多个 Actor 组成。组合中的每个 Actor 也可以是另一个组合。原子是不可分解的基本单元。
(惰性)函数、(惰性)运算符和(惰性)语句建立在组合之上。更准确地说,一个惰性函数(惰性运算符和语句只是惰性函数的特例)有两个阶段:
第一阶段由一组生成器函数、生成器函子和生成器运算符重载处理。这些是您的前端(从客户端的角度来看)。这些生成器创建的 Actor 可以像任何其他函数指针或函子对象一样传递。第二阶段,即实际的函数调用,可以随时像任何其他函数一样被调用或执行。这些是后端(通常,客户端永远不会真正看到最终调用)。
Binder(绑定器)建立在函数之上,它们从简单的单态(类似 STL)函子、函数指针、成员函数指针或成员变量指针创建惰性函数,用于延迟求值(变量通过返回数据引用的函数调用来访问)。这些绑定器建立在(惰性)函数之上。
该框架的架构是完全正交的。各层之间的关系是完全无环的。较低的层不依赖于较高的层,也不了解其存在。同一层中的模块不依赖于同一层中的其他模块。这意味着,例如,如果客户端不需要绑定器,她可以完全丢弃它;或者也许可以去掉惰性运算符和惰性语句,只使用惰性函数,这在纯 FP 应用程序中是可取的。
![]() |
![]() |
![]() |
版权所有 © 2001-2002 Joel de Guzman
使用、修改和分发受 Boost Software License Version 1.0 的约束。(请参阅随附文件 LICENSE_1_0.txt 或访问 https://boost.ac.cn/LICENSE_1_0.txt 复制)