6

查看不同的 ocaml 项目,我没有看到使用过的语言的内置 Streams。即使在最近的Real World Ocaml书中,也根本没有提到 Streams,这很奇怪。

这是什么原因?是因为 Lwt 或 Core 取代了它们吗?

4

3 回答 3

10

我想我在这个错误报告中几乎回答了这个问题。

于 2015-05-12T22:26:36.207 回答
2

流在 camlp4 语法支持下非常好,没有它它们几乎无法使用。所以,这是很久以前的事了(尽管理论上它仍然可用)。根据 Drup 的参考,它们甚至会在不久的将来(今年)从核心语言中删除,并且可能会被移动到一个独立的库中。

这并不是说流作为数据结构存在问题。这仍然是许多 OCaml 项目中使用的非常有价值的技术,它们只是使用不同的库来实现这一点。有 Core Sequence、Batteries Enum、Simon Cruanes 的gensequence包,Joseph Abrahamson 的fstream包等等。

于 2015-05-13T13:04:58.410 回答
1

流可用于 OCaml 中的“惰性求值”,特别是因为 OCaml 是一种急切的语言,因此肯定有一些有用的情况是需要惰性求值(如在 Haskell 中)。

引用康奈尔关于流的讲座

流实际上在现实生活中很有用。一些应用:

  • 编译器从文本中读取源文件
  • 网络套接字
  • 音视频信号处理
  • 语音识别
  • 使用收敛级数逼近方程的解

提供的参考资料还使用流来惰性计算素数,与使用 Eratosthenes 筛计算大素数的正常方法相比,这非常快。所以我觉得流肯定在语言中占有一席之地,因为它允许在 OCaml 中进行惰性评估。

我的教授使用流来解释渴望语言中惰性求值的概念,Real World OCaml 中没有提到它的原因可能是语言本身是渴望的,流与该概念不平行,流不能是多线程的。(不过,这是推测)

于 2015-05-13T02:41:58.343 回答