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

Types 有静态类型的函数式语言吗?,types,programming-languages,functional-programming,static-typing,Types,Programming Languages,Functional Programming,Static Typing,我来自静态类型的背景,研究函数式编程,但我对动态类型并不完全感兴趣。我很好奇有什么样的选择 一个开始的答案是:ActionScript3是静态类型的,提供了一些功能范例,尽管AS3程序并不经常使用它们。haskell突然想到(尽管它的类型系统可能是最先进的),ML语言家族,F#AFAIK 有很多。哈斯克尔、奥卡姆和F#浮现在我的脑海里。如果你是一名Windows开发人员,F#非常好,并且得到了Microsoft的良好支持(以及一个非常强大的StackOverflow社区)。Lisp族语言(Com

我来自静态类型的背景,研究函数式编程,但我对动态类型并不完全感兴趣。我很好奇有什么样的选择


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

haskell突然想到(尽管它的类型系统可能是最先进的),ML语言家族,F#AFAIK

有很多。哈斯克尔、奥卡姆和F#浮现在我的脑海里。如果你是一名Windows开发人员,F#非常好,并且得到了Microsoft的良好支持(以及一个非常强大的StackOverflow社区)。Lisp族语言(Common Lisp、Scheme、Clojure)是动态函数式语言的示例


ActionScript3有可选的静态类型。另一方面,Haskell、OCaml和F#编译器使用类型推断来确定推断类型。当您第一次看到用OCaml编写的代码时,由于没有显式类型,它看起来像是动态类型语言的杂乱无章,具有静态类型的类型安全性。我的观点是,动态语言的可选静态类型(一个好主意)最终将被类型推理所取代,10年后静态与动态的争论将是毫无意义的。

类型理论首次应用于函数式编程(类型化lambda演算),比任何命令式语言早得多


对于最高级的静态类型系统(您在命令式世界中找不到任何可比的系统),请查看并查看。

如果您熟悉Java生态系统,在编译为Java源代码时,非常类似Haskell的语言可能值得一看。

我对您这样的人的最佳推荐(大概是静态类型、OO、命令式背景)是。Scala是命令式功能的混合体,与Java和其他大多数语言相比,它对OO的支持更好。Scala编译为JVM字节码(.net也受支持,但使用较少)提供了非Java JVM语言无法比拟的Java互操作性。我在年使用Scala,并发现编写Scala代码非常有趣和令人满意。学习Scala的最佳资源是语言设计师自己编写的


如果你不想要一种混合语言,而是更愿意直接加入FP的竞争,我会选择Haskell。Haskell是一种纯粹的函数式语言;没有(一流的)易变性或效果的概念。我最喜欢的Haskell资源是witty。事实上,无论你是否打算加入Haskell,我都强烈建议你阅读一些LYAH,因为这是一篇关于静态类型FP世界的精彩介绍。我甚至在考虑语言选择之前就开始阅读它。

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

  • (1978-1997)
  • (1983-1986)
  • (1985-1995)
  • (1996年至今)
  • (1990-2010)
  • (2005年至今)
没有尾部呼叫消除:

  • (1999年至今)
  • (2008年至今)

事实上,类型理论与lambda演算和图灵机的数学传统是一样的,它早于编程语言。@当然,同上-我只是不想将函数编程与lambda演算(以及组合逻辑和类似逻辑)分开,因此函数式编程本身早于计算。类型理论实际上也早于lambda演算。我知道的最早的例子是Russell&Whitehead的Princia Mathematica(1910–1913)的类型理论;简单类型理论是类型化lambda演算的前身,可以追溯到20世纪20年代。请参阅“现代函数语言"是静态类型的,具有高效的类型推断。@ericsoco:我不这么认为。这些只是我在互联网上很快找到的语言的最后更新。@jon_harrop为什么在回答中特别提到尾部调用消除?@ericsoco:我个人不认为没有保证TCO的语言是功能lan语言,因为它们不能有力而有效地表达基本的函数式习惯用法,如延续传递样式。然而,许多人认为Scala和C#是函数式语言,所以我不想完全排除它们。@JonHarrop什么是TCO?我相信是的。这条评论已经过时了。F#现在在Linux和Linux上得到正式支持截至2021年2月,由于其Github项目缺乏活动,Frege看起来已经死了。