是否真的使用了ocaml中的流?

时间:2015-05-12 17:43:58

标签: stream ocaml ocaml-lwt

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

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

3 个答案:

答案 0 :(得分:9)

I think I pretty much answer this question in this bug report.

答案 1 :(得分:2)

Streams非常适合使用camlp4语法支持,没有它,它们根本不可用。所以,这已经过去很长时间了(尽管理论上它仍然可用)。根据Drup的参考,它们甚至可以在不久的将来(今年)从核心语言中删除,并且可能会被移到一个独立的库中。

这并不是说流作为数据结构有问题。这仍然是许多OCaml项目中使用的非常有价值的技术,它们只是使用实现它的不同库。有核心Sequence,电池Enum,Simon Cruanes的gensequence套餐,Joseph Abrahamson的fstream套餐来命名少数。

答案 2 :(得分:1)

Streams可以用于OCaml中的“懒惰评估”,特别是因为OCaml是一种渴望的语言,所以有一些有用的案例是懒惰的评估(如在Haskell中)是理想的。

引用lecture in Cornell on streams

  

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

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

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

我的教授使用Streams以一种急切的语言解释懒惰评估的概念,在Real World OCaml 中没有提到的原因可能是语言本身渴望和流是与该概念不平行,并且流不能是多线程的。 (但这是猜测)