当前位置: 首页 > 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.hskmm.com/?act=detail&tid=35592

相关文章:

  • Gitee DevOps:中国企业的研发效能加速器
  • PCB布线一定不能走直角吗?一个或许有些离经叛道又颠覆常识的答案
  • 邮件大附件怎么发送的有效方案与技巧分享
  • 软件测试-缺陷管理篇
  • 数据安全交换系统介绍及其应用场景分析
  • 后端学习笔记
  • LabVIEW继电保护检测 - 教程
  • DBeaver 设置语言为中文
  • 什么是文件摆渡系统?全面解析企业数据安全交换的核心工具
  • Gitee崛起:中国开发者生态的战略升级与未来布局
  • Docker Compose v2.35.1 更新!
  • 飞驰云联亮相军工数字化转型发展峰会 共筑军工数字生态新范式
  • 国内开发者如何选择最适合的代码管理工具?Gitee、GitHub、Bitbucket横向评测
  • 2025国产ITSM厂商选型指南:聚焦五大ITSM平台,赋能企业数字化运维
  • 2025年10月留香沐浴露对比榜:蓝蕨经典香型与四款热门香型横评
  • 2025 最新土工膜生产厂家推荐榜权威发布:聚焦 50 年寿命与 28MPa 强度,涵盖防渗 / HDPE / 复合等全品类标杆企业
  • 2025 年土工布生产厂家最新推荐榜权威发布:聚焦 3 万平厂房与 50 年寿命产品,优选实力品牌
  • 如何在linux驱动程序保存文件
  • 2025年10月留香沐浴露排行:蓝蕨等五款香水级体验评测
  • 2025年10月防脱生发产品推荐榜:十款临床验证口碑对比
  • 2025 年国内优质不锈钢厂家最新推荐排行榜:含沈阳/东三省区域及水箱油罐等产品优质服务商楼梯/激光切割/桥梁杆/真空罐/扶手不锈钢厂家推荐
  • 2025 顶管源头厂家最新推荐榜单:F 型混凝土 / 水泥 / 电力 / 矩形 / 市政排水大口径优质供应商精选
  • 2025 年台车炉厂家最新推荐榜,技术实力与市场口碑深度解析,助力企业精准选型天然气/燃气/热处理/全纤维/翻转式台车炉厂家推荐
  • 2025 年淬火炉源头厂家最新推荐榜:聚焦技术创新与市场口碑深度解析,精选优质企业供采购参考
  • 2025 年贵阳家居品牌最新推荐榜,技术实力与市场口碑深度解析贵阳家居实木家具/贵阳家居布艺沙发/贵阳家居多功能沙发家居公司推荐
  • vim编辑器常用命令
  • ida pro 9.2 接入 ida-pro-mcp
  • 2025 年国际物流服务公司最新推荐排行榜:覆盖海运快递跨境专线,精选优质企业助力跨境电商商家高效选择合作伙伴
  • 跟着GPT5学习bert分类中[CLS]标记 hidden state的作用
  • 2025 年最新推荐立体画厂家权威榜单:涵盖 3D 光栅 / 装饰 / 三维等品类,助力精准选优质厂家