ocaml 中的流真的被使用了吗?
Are streams in ocaml really used?
查看不同的 ocaml 项目,我没有看到曾经使用过的语言中的 built-in Streams。即使在最近的 Real World Ocaml 书中,也完全没有提到 Streams,这很奇怪。
这是什么原因?是因为 Lwt 或 Core 取代了它们吗?
我想我已经在 this bug report 中回答了这个问题。
Streams 可用于 OCaml 中的 'lazy evaluation',尤其是因为 OCaml 是一种急切的语言,所以在需要惰性求值(如 Haskell 中)时肯定会有用的情况。
引用 lecture in Cornell on streams,
Streams are actually useful in real life. Some applications:
- compilers reading source file from text
- network sockets
- audio and video signal processing
- voice recognition
- approximating solutions to equations using convergent series
所提供的参考资料还使用流来延迟计算素数,这与使用埃拉托色尼筛法计算大素数的常规方法相比非常非常快。所以我觉得流在语言中肯定有一席之地,因为它允许在 OCaml 中进行延迟评估。
我的教授使用 Streams 来解释惰性求值的概念,在 Real World OCaml 中没有提到它的原因 可能是语言本身是渴望的,流与该概念不平行,并且流不能是多线程的。 (然而,这是猜测)
Streams 在 camlp4 语法支持下非常好,没有它它们几乎无法使用。所以,这是很久以前的事了(尽管理论上它仍然可用)。根据 Drup 的参考资料,它们甚至会在不久的将来(今年)从核心语言中删除,并且大概会被移至独立的库中。
这并不是说,流作为一种数据结构有问题。这仍然是许多 OCaml 项目中使用的非常有价值的技术,他们只是使用不同的库来实现它。有 Core Sequence
、Batteries Enum
、Simon Craunes 的 gen
和 sequence
包、Joseph Abrahamson 的 fstream
包等等。
查看不同的 ocaml 项目,我没有看到曾经使用过的语言中的 built-in Streams。即使在最近的 Real World Ocaml 书中,也完全没有提到 Streams,这很奇怪。
这是什么原因?是因为 Lwt 或 Core 取代了它们吗?
我想我已经在 this bug report 中回答了这个问题。
Streams 可用于 OCaml 中的 'lazy evaluation',尤其是因为 OCaml 是一种急切的语言,所以在需要惰性求值(如 Haskell 中)时肯定会有用的情况。
引用 lecture in Cornell on streams,
Streams are actually useful in real life. Some applications:
- compilers reading source file from text
- network sockets
- audio and video signal processing
- voice recognition
- approximating solutions to equations using convergent series
所提供的参考资料还使用流来延迟计算素数,这与使用埃拉托色尼筛法计算大素数的常规方法相比非常非常快。所以我觉得流在语言中肯定有一席之地,因为它允许在 OCaml 中进行延迟评估。
我的教授使用 Streams 来解释惰性求值的概念,在 Real World OCaml 中没有提到它的原因 可能是语言本身是渴望的,流与该概念不平行,并且流不能是多线程的。 (然而,这是猜测)
Streams 在 camlp4 语法支持下非常好,没有它它们几乎无法使用。所以,这是很久以前的事了(尽管理论上它仍然可用)。根据 Drup 的参考资料,它们甚至会在不久的将来(今年)从核心语言中删除,并且大概会被移至独立的库中。
这并不是说,流作为一种数据结构有问题。这仍然是许多 OCaml 项目中使用的非常有价值的技术,他们只是使用不同的库来实现它。有 Core Sequence
、Batteries Enum
、Simon Craunes 的 gen
和 sequence
包、Joseph Abrahamson 的 fstream
包等等。