当前位置: 首页 > news >正文

Continuation Passing Style 连续传递样式

编辑于 2024年08月18日 20:07
Continuation就是回调

function a (num a, num b) => a + b变成 func a (num a, num b, func c) => c(a + b)

有啥用?

转为尾递归

尾递归是啥? 递归就是函数调用自己 如果调用在最末尾

像这样

func a( ...) => {...return a(...)
}

函数调用前需要保存当前函数中的变量,需要占用栈空间,栈空间比较小,容易内存溢出。如果用尾递归,只需要保存被调用函数用到的参数,这一般存在寄存器中,而当前函数的变量一定不会被再次使用,当前函数用的栈空间可以被重新利用。

一般情况下,编译器将尾递归优化为循环,像这样:

func a(...args) => {...return ...args2
}
while(...){...args = a(...args)
}

在汇编层面不需要压栈保存寄存器而是使用。

但是如果调用后面还有代码的话就做不了优化,所以把后面要做的事也就是一个函数在调用时传递。这就是cps变换

如果所有代码都自动进行这种转换,栈空间就不需要了。也就是只使用用闭包。

这种方式也存在问题,闭包中存储的函数上下文信息不会像栈一样自动回收,这种方式需要垃圾回收器。

call/cc

function callcc(f, k) {return f(k)
}
callcc((x)=> x(4 * 3),(y)=> 1 + y
)

call/cc(调用的函数, 回调函数) 就是把调用函数的返回值传给回调函数

http://www.jsqmd.com/news/18247/

相关文章:

  • 中国企业DevOps工具链选型指南:政务、出海与跨国协作的实战解析
  • 【2025-10-17】首听EB病毒
  • Bean 生命周期的关键阶段和详细流程
  • 数字媒体技术-培优讲练-知识点总结
  • Jmeter解决响应乱码的问题
  • https://juejin.cn/post/7529730683963588627
  • 实用指南:计算机毕业设计Python农作物产量预测分析 农作物爬虫 农产品可视化 农产品推荐系统 机器学习 深度学习 大数据毕业设计(源码+LW文档+PPT+详细讲解)
  • PCB布线一定不能走直角吗?一个或许有些离经叛道又颠覆常识的答案
  • 邮件大附件怎么发送的有效方案与技巧分享
  • 告别客服焦虑!用PandaWiki打造724小时AI在线客服
  • 替代ftp的文件传输协议:提升数据安全与传输效率的新选择
  • Jmeter解决临界部分控制器,锁限流的问题
  • Gitee DevOps:中国企业的研发效能加速器
  • 软件中版本号V1.0.0含义
  • LabVIEW继电保护检测 - 教程
  • 软件测试-缺陷管理篇
  • 数据安全交换系统介绍及其应用场景分析
  • vue项目引入iconfont(阿里巴巴矢量图标库)
  • DBeaver 设置语言为中文
  • 什么是文件摆渡系统?全面解析企业数据安全交换的核心工具
  • Gitee崛起:中国开发者生态的战略升级与未来布局
  • Docker Compose v2.35.1 更新!
  • 国内开发者如何选择最适合的代码管理工具?Gitee、GitHub、Bitbucket横向评测
  • 2025国产ITSM厂商选型指南:聚焦五大ITSM平台,赋能企业数字化运维
  • 【完整源码+数据集+部署教程】医疗设备显示器图像分割系统: yolov8-seg-C2f-SCConv - 详解
  • 基于STM32和MQ-5传感器实现天然气浓度检测并通过串口显示
  • 2025 年容器 / 结构 / 不锈钢 / 金属 / 过滤器铆焊厂家推荐北京大疆实业:精密制造与全链条服务的实践样本
  • 2025年10月销量第一证明机构推荐榜:尚普与华信人权威对比
  • 理解C++20的革命特性——协程支持1 - 实践
  • 国产代码托管平台Gitee的崛起:为何越来越多人选择它而非GitHub?