有静态类型的函数式语言吗?

时间:2011-11-16 05:53:30

标签: types programming-languages functional-programming static-typing

这对谷歌来说是件难事,也许SO有更好的答案?

我来自静态类型的背景和调查函数式编程,但我对动态类型并不完全兴奋。好奇有什么样的选择。

一个开始的答案:ActionScript 3是静态类型的并提供了一些功能范例,尽管AS3程序并不经常使用它们。

6 个答案:

答案 0 :(得分:19)

有很多。 Haskell,OCaml和F#浮现在脑海中。如果您是Windows开发人员,F#非常好并得到Microsoft的良好支持(以及非常强大的StackOverflow社区)。 Lisp系列语言(Common Lisp,Scheme,Clojure)是动态函数语言的例子。

ActionScript 3具有可选的静态类型。另一方面,Haskell,OCaml和F#编译器使用类型推断来确定性地推断类型。当您第一次看到用OCaml编写的代码时,缺少显式类型会使其具有静态类型安全性的动态类型语言的无杂乱外观。我认为,动态语言的可选静态类型(一个好主意)最终将被类型推断所取代,从现在起10年后,静态与动态的争论将毫无意义。

答案 1 :(得分:15)

对于像你这样的人(可能是静态类型,OO,强制性背景),我的最佳建议是Scala。 Scala是一种命令式功能混合体,它比OO和大多数其他语言更好地支持OO。 Scala编译为JVM字节码(也支持.net,尽管使用得少得多),并提供了非Java JVM语言之间无法比拟的Java互操作性。我在my compiler中使用Scala,并且发现编写Scala代码非常有趣和令人满意。学习Scala的最佳资源是 Programming in Scala ,由语言设计师自己编写。

如果你不想使用混合语言,而是喜欢直接跳到FP的战斗中,我会选择Haskell。 Haskell是一种纯函数式语言;没有(一流的)可变性或影响的概念。我最喜欢的Haskell资源是机智的 Learn You a Haskell for Great Good! 。事实上,无论你是否打算使用Haskell,我都会非常推荐阅读一些LYAH,因为它是对静态类型FP世界的精彩介绍。在考虑语言选择之前,我开始阅读它。

希望这个答案有所帮助。

答案 2 :(得分:7)

类型理论首先应用于函数式编程(类型化的lambda演算),早在任何命令式语言之前。

对于最先进的静态类型系统(在命令式世界中找不到任何可比较的东西),请查看CoqAgda

答案 3 :(得分:5)

haskell跳跃于脑海(虽然它的类型系统可能是最先进的),ML系列语言,F#AFAIK。

答案 4 :(得分:2)

如果您熟悉Java生态系统,那么类似Haskell的语言Frege可能值得一看,因为它编译为Java源代码。

答案 5 :(得分:1)

一些静态类型语言,具有一流的词法闭包和保证尾部调用消除:

没有尾部呼叫消除:

  • C#(1999年至今)
  • Scala(2008年至今)