查看不同的 ocaml 项目,我没有看到使用过的语言的内置 Streams。即使在最近的Real World Ocaml书中,也根本没有提到 Streams,这很奇怪。
这是什么原因?是因为 Lwt 或 Core 取代了它们吗?
查看不同的 ocaml 项目,我没有看到使用过的语言的内置 Streams。即使在最近的Real World Ocaml书中,也根本没有提到 Streams,这很奇怪。
这是什么原因?是因为 Lwt 或 Core 取代了它们吗?
我想我在这个错误报告中几乎回答了这个问题。
流在 camlp4 语法支持下非常好,没有它它们几乎无法使用。所以,这是很久以前的事了(尽管理论上它仍然可用)。根据 Drup 的参考,它们甚至会在不久的将来(今年)从核心语言中删除,并且可能会被移动到一个独立的库中。
这并不是说流作为数据结构存在问题。这仍然是许多 OCaml 项目中使用的非常有价值的技术,它们只是使用不同的库来实现这一点。有 Core Sequence
、Batteries Enum
、Simon Cruanes 的gen
和sequence
包,Joseph Abrahamson 的fstream
包等等。
流可用于 OCaml 中的“惰性求值”,特别是因为 OCaml 是一种急切的语言,因此肯定有一些有用的情况是需要惰性求值(如在 Haskell 中)。
引用康奈尔关于流的讲座,
流实际上在现实生活中很有用。一些应用:
- 编译器从文本中读取源文件
- 网络套接字
- 音视频信号处理
- 语音识别
- 使用收敛级数逼近方程的解
提供的参考资料还使用流来惰性计算素数,与使用 Eratosthenes 筛计算大素数的正常方法相比,这非常快。所以我觉得流肯定在语言中占有一席之地,因为它允许在 OCaml 中进行惰性评估。
我的教授使用流来解释渴望语言中惰性求值的概念,Real World OCaml 中没有提到它的原因可能是语言本身是渴望的,流与该概念不平行,流不能是多线程的。(不过,这是推测)