导出从Haskell获得的知识和技能的最兼容,使用最广泛的生产语言是什么?


14

我喜欢Haskell,简洁明了。虽然Haskell用于生产软件中,但根据我所见,它并未得到特别广泛的部署。在生产项目方面,最相似且仍被广泛使用的语言是什么,这样我可能会有滚雪球般的机会在行业中使用类似的出色产品?

大量平台上是否也提供了与第一部分相同的语言?如果没有,那么具有广泛平台部署的最佳替代方案是什么?我希望将一种语言放入待办事项清单,而不是庞大的人群或家庭。确凿的证据将是一个加号。

Answers:


21

Haskell与ML语言家族关系最为密切。这当然包括OCaml之类的东西,但也包括.NET平台上的F#。这些语言与Haskell共享类型系统的基础以及如何使用数据-代数数据类型,模式匹配,类型推断等。它们在其他方面与Haskell可能有很大不同,当然-大多数ML都是严格和不纯的首先,Haskell作为用于类型系统和语言设计的研究工具而流行,这意味着大多数ML风格的语言往往没有那么强大(但可能更易于理解)的类型系统。可以肯定地说,虽然您可能会想念有关Haskell的某些信息,尤其是起初,大多数Haskell程序员可能很快就会以基本的入门级水平在ML中感到宾至如归。如果您想要一种与Haskell 总体结构相同的语言,那么ML是您的最佳选择。

Scala的功能方面同样,它也极大地借鉴了ML的传统,还引入了Haskell熟悉的一些高级类型的系统功能,以及与之集成的更标准的OOP系统。虽然倾向于使用ML风格语言的OO作为“带有基本功能工具的模型OO”,但是Scala活着并呼吸着Java风格的OO。如您所想,这对Java互操作有好处,并且为OO程序员提供了更熟悉的工作环境。但是,由于具有Haskell的背景,您很可能会因Scala中的东西混合在一起而使功能性的成语变得笨拙,并且发现大多数Java API的设计不当且不必要地难以使用,这使您很烦恼。

最后,尽管看上去有些奇怪,但Clojure实际上在更哲学的层面上与Haskell有很多共同点。从Clojure的状态,价值与身份的方法中,您会发现大部分内容 Haskell通过类型系统形式化的内容非常接近。相应地,Clojure在较小程度上强调Java互操作,而不必担心拖入OOP,因此在某些方面,Clojure进行函数式编程的方法可能与您已经熟悉的最接近。据我所知,就我所知,Clojure是Haskell之外唯一具有STM实现的语言简单,有效且有效。另一方面,Clojure来自Lisp传统,因此缺少静态类型系统,而只强调在ML影响的语言中发现的代数数据类型和模式匹配。当然,这是一个Lisp,它本身对某些人是不利的(尽管我真的不知道为什么)。

对于我自己来说,免责声明我对函数式编程的第一次经验是在Scheme中,我可能倾向于Clojure,而OCaml可能是第二选择。


1
据说F#的灵感来自OCaml,即使不是源自OCaml。前面的SO问题F#和OCaml很好地讨论了这种关系。如果您在.NET方面,F#是一个不错的选择,并且Microsoft现在将F#视为“一流” .NET语言。在JVM方面,Scala具有行业使用记录,而Clojure似乎在图表中呈上升趋势。目前,我还没有一个最佳选择,因为市场尚未宣布在此对象功能领域明显胜出。
John Tobler


3

一种功能替代方法是Erlang。顺序子集是一种非常并行的语言,它是一种纯函数式语言,具有函数式语言的许多属性,例如闭包,不可变数据和模式匹配。它可以在许多平台上运行,包括Linux,各种UNIX,Windows和macosx。现在甚至在JVM上有一个实现erjang。它可以轻松地与其他语言进行交流和共存,这就是它经常被使用的方式。

查看主要站点


3

Clojure越来越广泛地被使用,尽管它在表面上看起来并不像Haskell,但是如果您看起来更深一点,它显然是非常受Haskell启发的,并且鼓励使用非常相似的功能样式。

Haskell用户可能会发现的熟悉和吸引人的关键Clojure功能:

  • 核心语言纯粹是功能性的 -尽管可能会产生副作用,但它们被掩埋在特定位置(例如STM参考,IO功能,Java互操作性)
  • 所有数据结构都是不变且持久的
  • 懒惰 -主要是通过Clojure的无处不在的懒惰序列实现的,Haskell用户对此非常熟悉。无限的懒惰序列很好。
  • 软件事务性内存 -是处理Clojure中可变状态的主要方法。非常值得观看以下精彩视频,其中Rich Hickey解释了Clojure的身份和状态处理方法:http//www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

主要差异(根据您的观点可能是正面的也可能是负面的):

  • 这是不纯的-尽管我的观察是,惯用的Clojure风格将尽可能地坚持纯功能。
  • 动态类型而不是静态类型(尽管可以选择使用静态类型提示来优化性能)
  • 这是一种JVM语言,可以轻松访问整个Java库生态系统-在我看来,这是现实应用中的最大优势
  • Lisp语法。这样一来,您就可以得到同源的所有优点,而不必学习所有括号:-)

个人观点:我在Clojure之前学过Haskell,并且因为Haskell的优雅和数学上的纯正而喜欢它。Clojure吸引了很多灵感,并借鉴了Haskell的许多出色功能,但这是一种更加务实/实用的语言。尤其是当您想到能够利用Java库生态系统的巨大价值时,它是“完成工作”的绝佳语言。


1

如果您喜欢Haskell,但必须为JVM编写代码,那么frege对您来说可能很有趣。它被设计为尽可能接近Haskell 2010,但生成Java代码。

当然,frege本身不像“广泛使用的生产语言”(它是最近才发布的),但是Java肯定是。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.