17

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

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

4

6 回答 6

27

有许多。想到 Haskell、OCaml 和 F#。如果您是 Windows 开发人员,F# 非常好,并且得到 Microsoft 的大力支持(以及非常强大的 StackOverflow 社区)。Lisp 家族语言(Common Lisp、Scheme、Clojure)是动态函数式语言的例子。

ActionScript 3 具有可选的静态类型。另一方面,Haskell、OCaml 和 F# 编译器使用类型推断来确定性地推断类型。当您第一次查看用 OCaml 编写的代码时,由于缺少显式类型,因此它具有动态类型语言的整洁外观和静态类型的类型安全性。我认为动态语言的可选静态类型(一个好主意)最终将被类型推断所取代,并且 10 年后静态与动态的争论将变得毫无意义。

于 2011-11-16T05:57:29.870 回答
18

我对像你这样的人(可能具有静态类型、OO、命令式背景)的最佳推荐是Scala。Scala 是一种命令式功能混合体,对 OO 的支持比 Java 和大多数其他语言更好。Scala 编译为 JVM 字节码(也支持 .net,但使用较少)并提供非 Java JVM 语言中无与伦比的 Java 互操作性。我在我的编译器 - jgo中使用了 Scala,并且发现编写 Scala 代码非常有趣和令人满意。学习 Scala 的最佳资源是Programming in Scala,由语言设计师自己编写。

如果您不想要混合语言,而是更喜欢直接加入 FP 的竞争,我会选择 Haskell。Haskell 是一种纯函数式语言;没有可变性或效果的(一流)概念。我最喜欢的 Haskell 资源是诙谐的Learn You a Haskell for Great Good!. 事实上,无论您是否打算使用 Haskell,我都强烈建议您阅读一些 LYAH,因为它是对静态类型 FP 世界的精彩介绍。我什至在考虑语言选择之前就开始阅读它。

于 2011-11-16T20:37:52.577 回答
10

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

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

于 2011-11-16T08:49:46.537 回答
5

haskell 跃入脑海(尽管它的类型系统可能是目前最先进的),ML 语言家族,F# AFAIK。

于 2011-11-16T05:56:06.900 回答
4

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

没有尾调用消除:

于 2016-05-31T20:01:58.593 回答
2

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

于 2011-11-16T11:02:31.300 回答