最近学习Haskell,我看的是Yet Another Haskell Tutorial ,看到CPS,发现这本书写的很难懂,不知所云。后来看了wikibooks上面的文章 ,明白了一些。这里 是一个总结,也还不错。
CPS到底是个啥?拿例子看比较容易。比较如下代码:add (square x) (square y)
和CAS style的: pythagoras'cps x y k =
square'cps x $ \x'squared ->
square'cps y $ \y'squared ->
add'cps x'squared y'squared $ \sum'of'squares ->
k sum'of'squares
CPS有点像倒置过来的写法,而前者则是普通的堆栈的写法。那这样CPS有什么有优点呢?
在Java中类似的写法有stringBuffer.append(”A”).append(”B”).append(”C”),IO API中好像也有类似的方法。
感觉有点类似管道(pipe),前面的square把结果(这里就是k)传到下一个function,这样一个个串联起来,而k起了连接的作 用。而像add( square(x), square(y))这种方式每个func相当独立(primitive),最后有一个组合(mash-up)的过程。
而这种方式才让“从某个点停止,然后继续执行”成为可能,因为这样没有堆栈。add( square(x), square(y))这种方式会生成临时变量,会有running context。而pipe某个节点的状态就是pipe的全部,是继续“流”下去所需的所有内容,这个function是可以“重入”的。这里“流”下去 就是“延续”的意思。
这种状态保存其实很多地方都有,比如http session,比如进程上下文(进程也可以sleep后再重新载入,或者恢复),但是CPS则粒度更细,可以在代码级上的重新载入,“重入”精确到某行 代码。而Spring web flow这种流程级的则是精确到了flow中的某个节点,比较代码级的天书一样的代码,流程级的引入进来还是比较好的一个折中。当然这样的话,跟CPS就 关系不大了。
我很早前读过跨越边界: 延续、Web 开发和 Java 编程 ,当时不甚理解,现在拿Haskell做例子,才明白原来这里面实现起来还是很绕的。
http://www.fkpwolf.net/2009/12/07/my-understanding-on-cps/
相关推荐
【CPS:点击付费广告与转化率优化】 CPS,全称为Cost Per Sale,是一种在线广告计费模式,其中广告主只需为实际...CPSolution可能包含了实现这些策略的工具、案例分析或教程,帮助广告主更好地理解和运用CPS广告模式。
- 通过本手册的学习,开发者可以更好地理解CPS1848的工作原理,进而对其进行有效的二次开发,从而在实际项目中发挥出更大的价值。 综上所述,CPS1848用户手册不仅提供了详细的设备介绍和技术指导,还为开发者提供了...
- 实践编写CPS代码,解决实际问题,不断加深对控制流和延续的理解。 总的来说,CPS是一种强大的编程技巧,它提供了对程序控制流的精细控制,尤其是在异步编程和错误处理方面。通过深入理解和实践,开发者可以更好...
CPS的核心思想是通过信息空间与物理空间的无缝交互,实现对现实世界中物理实体的智能监控、控制和优化。在物联网(IoT)的基础上,CPS更加强调系统的实时性、安全性和可靠性,以及跨领域的协同与集成。 1. CPS的...
理解CPS有助于优化用户体验、提升网站或应用的性能,以及制定更有效的营销策略。 在网络营销中,CPS(Cost Per Sale)也是一种常见的广告计费模式。在这种模式下,广告主只需支付当用户点击广告并完成购买行为时的...
【CPS3.12:理解CPS概念与应用】 CPS,全称为Cyber-Physical Systems,中文译为“赛博物理系统”,是信息技术、网络技术和物理系统深度融合的产物。在CPS3.12版本中,我们关注的是这个领域的最新发展和改进。CPS的...
官方提供的资料涵盖了该芯片的技术细节、设计指南和实用工具,帮助工程师更好地理解和使用CPS1848。 1. **CPS-1848 Header File**: 这个文件是CPS1848的头文件,通常包含C或C++编程语言中的定义和声明,用于与...
通过对"MMC_CPS_4LEVEL.mdl"模型的深入研究,我们可以深入理解这些控制策略如何在实际系统中工作,并为实际工程应用提供有价值的参考。同时,这也能帮助工程师设计出更高效、更稳定的多电平变换器系统。
CPS,全称为Continuation Passing Style(延续传递风格),是一种编程范式,它将控制流程转化为函数调用的形式,使得程序的...深入理解和实践这些代码可以帮助开发者更好地掌握CPS编程,并将其应用于实际的项目开发中。
在"CPS - 3.6"中,我们可以理解为这是CPS的一个特定版本或者阶段,可能包含了一些针对CPS的优化或改进,比如提高异步操作的效率,优化错误处理流程,或者引入了新的编程模式。由于没有提供具体的实现细节,我们将从...
9. **理解与学习曲线**:虽然CPS提供了许多优点,但理解和学习CPS可能需要一些时间,因为它改变了传统的控制流思维模式。一旦掌握,它能帮助开发者写出更简洁、可读性更强的代码,特别是对于处理复杂的异步场景。 ...
【标题】"CPS.rar" 指的可能是一个压缩文件,其中包含了关于“CPS”(可能是...这个.CPS.rar文件,尤其是包含的CPS20B1.doc文档,将帮助读者建立起对CPS的全面理解,从而在实际工作中更好地利用这一关键性能指标。
《CPS_DOCS 安装手册》是一份详尽的指南,主要针对CPS解决方案的部署和配置。这个文档集合涵盖了从...通过详细阅读并遵循这些文档,用户不仅可以避免安装过程中的常见问题,还能更好地理解和利用CPS系统的各种功能。
首先,我们要理解什么是CPS(Cost Per Sale)。这是一种网络营销模式,广告主按照实际销售数量支付佣金给推广者。在【外卖侠cps】中,用户可以通过推广外卖服务,当用户通过他们的推广链接完成订单时,推广者就能...
通过研究这个文件,我们可以深入理解CPS 3.5的内部工作原理,学习如何利用新特性来编写更高效、更健壮的异步代码。 总的来说,CPS 3.5是一个旨在提升异步编程体验和性能的框架或库的版本更新。它关注点在于优化回调...
在IT行业中,CPS(Continuation Passing Style,延续...通过深入理解CPS,开发者可以写出更加灵活、易于理解和维护的代码。在“CPS部分代码 - 5”这个场景中,我们有机会探索和学习这些概念如何在实际代码中得到体现。
通过对这些代码的学习和分析,我们可以更深入地理解CPS编程的原理和技巧。 总的来说,CPS 是一种强大的编程技术,可以帮助我们构造出更加灵活和可管理的代码,尤其是在处理复杂控制流和异步操作的场景下。虽然学习...
在实际开发过程中,开发者可能需要结合业务需求对源码进行定制化修改,以满足特定市场或品牌的特色。同时,遵守相关法律法规,如用户隐私保护政策、支付合规等,也是确保项目顺利进行的重要环节。 总之,外卖CPS小...
开发这个小程序时,你需要熟悉微信小程序的开发规范,理解CPS的佣金计算逻辑,同时对后端开发和数据库管理有一定了解。为了确保程序的稳定性和用户体验,还需要进行性能优化、安全防护等方面的考虑。如果在开发过程...
这本书通过丰富的实例和习题,为读者提供了一条逐步深入CPS设计的路径,旨在培养读者在设计和分析嵌入式系统时,对物理和计算组件相互作用的理解。对于想要从事或已经在CPS领域工作的人来说,这是一本不可多得的参考...