我们能否将Clojure的core.async描述为"延续传递风格"?

 NOYOKI要跑偏 发布于 2023-02-07 14:03

在Clojure的core.async库中,我们看到一个宏,它创建一个状态机,它围绕go块来创建处理阻塞IO的通道.

这似乎是在 C#async 和 Go-lang的goroutines 上进行建模.

在The Seasoned Schemer中 - 他们描述了传递延续的技巧.(这似乎是基于电话/ cc).我们还看到了David Nolen的一个图书馆在Clojure 上的分隔延续.

在这里,他们将C#描述async为" 当前延续的呼叫 ".

我的问题是我们可以将Clojure的core.async描述为" 延续传递风格 "吗?

或者是'延续'(分隔和无限制)一个超载的术语?


编辑:另外一点 - 大卫·诺伦已经说过核心.async:

在一个go块中,它给你一种错觉,你可以以同步的方式做这些事情,这样你就不必手动以连续传递方式编写代码.

Michał Marcz.. 11

我在这里看到两个问题:

    使用core.async进行编程是否类似于继续传递样式的编程?

    core.async的内部是否与CPS相关?

1.的答案是"不",因为没有明确的延续.事实上,这是重点; 使用core.async的一个主要原因是逃避回调地狱,这基本上是CPS变坏(回调是延续).

对2.的简单回答也是"否",因为go宏使用SSA内部表示来生成状态机.然而,确实SSA和CPS是相关的,因为它们用于类似的目的(即,作为编译器中的内部表示;它们在表面上感觉不同并且在语义上不完全等同,但是在实现类似核心的东西时.async你原则上可以使用其中之一).

1 个回答
  • 我在这里看到两个问题:

      使用core.async进行编程是否类似于继续传递样式的编程?

      core.async的内部是否与CPS相关?

    1.的答案是"不",因为没有明确的延续.事实上,这是重点; 使用core.async的一个主要原因是逃避回调地狱,这基本上是CPS变坏(回调是延续).

    对2.的简单回答也是"否",因为go宏使用SSA内部表示来生成状态机.然而,确实SSA和CPS是相关的,因为它们用于类似的目的(即,作为编译器中的内部表示;它们在表面上感觉不同并且在语义上不完全等同,但是在实现类似核心的东西时.async你原则上可以使用其中之一).

    2023-02-07 14:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有