当前位置: 首页 > 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.gsyq.cn/news/26098.html

相关文章:

  • Bean 生命周期的关键阶段和详细流程
  • https://juejin.cn/post/7529730683963588627
  • PCB布线一定不能走直角吗?一个或许有些离经叛道又颠覆常识的答案
  • 替代ftp的文件传输协议:提升数据安全与传输效率的新选择
  • Gitee DevOps:中国企业的研发效能加速器
  • 软件中版本号V1.0.0含义
  • LabVIEW继电保护检测 - 教程
  • 数据安全交换系统介绍及其应用场景分析
  • DBeaver 设置语言为中文
  • 国内开发者如何选择最适合的代码管理工具?Gitee、GitHub、Bitbucket横向评测
  • 2025国产ITSM厂商选型指南:聚焦五大ITSM平台,赋能企业数字化运维
  • 理解C++20的革命特性——协程支持1 - 实践
  • 飞驰云联亮相军工数字化转型发展峰会 共筑军工数字生态新范式
  • 2025 年土工布生产厂家最新推荐榜权威发布:聚焦 3 万平厂房与 50 年寿命产品,优选实力品牌
  • 2025年10月留香沐浴露排行:蓝蕨等五款香水级体验评测
  • 2025 年工业连接器厂家最新推荐榜单:聚焦 M8/M12 / 防水 / 重载 / 以太网品类,精选优质国产企业助力高效采购
  • 2025 年药包材辅导公司最新推荐榜:GMP 验证 / 质量体系 / 实验室装修等服务优质机构权威评选
  • 2025年10月防脱生发产品推荐榜:十款临床验证口碑对比
  • 界面控件DevExpress WPF v25.2新功能预览 - 聚焦AI功能提升
  • 【开题答辩实录分享】以《 Python基于大数据的四川旅游景点数据分析与可视化》为例进行答辩实录分享 - 实践
  • ida pro 9.2 接入 ida-pro-mcp
  • 2025 年淬火炉源头厂家最新推荐榜:聚焦技术创新与市场口碑深度解析,精选优质企业供采购参考
  • 2025 年国际物流服务公司最新推荐排行榜:覆盖海运快递跨境专线,精选优质企业助力跨境电商商家高效选择合作伙伴
  • 2025 年最新推荐立体画厂家权威榜单:涵盖 3D 光栅 / 装饰 / 三维等品类,助力精准选优质厂家
  • WSL1升级为WSL2
  • 详细介绍:关于容器Docker
  • 实用指南:【办公类-116-01】20250929家长会PPT(Python快速批量制作16:9PPT相册,带文件名,照片横版和竖版)
  • 完整教程:计算机视觉进阶教学之Mediapipe库(一)
  • 2025年发电机厂家推荐排行榜,发电机组,柴油发电机组,康明斯发电机,玉柴发电机,高压发电机,大功率发电机公司推荐
  • 2025年信息流代运营服务商权威推荐榜:专业投放策略与高转化效果深度解析