我在这里看到很多关于函数式语言的讨论。为什么你要使用传统语言而不是传统语言呢?他们在哪些方面做得更好?他们更不擅长什么?理想的函数式编程应用程序是什么?


当前回答

我要指出的是,你所说的关于函数式语言的一切,大约20年前,大多数人都在谈论面向对象语言。在那时候,OO是很常见的:

* The average corporate programmer, e.g. most of the people I work with, will not understand it and most work environments will not let you program in it
* It's not really taught at universities (or is it nowadays?)
* Most applications are simple enough to be solved in normal IMPERATIVE ways

改变必须来自某个地方。无论接受过早期技术培训的人是否认为变革没有必要,有意义的重要变革都会发生。尽管当时有很多人反对,但你认为向OO的转变是好的吗?

其他回答

函数式语言使用不同于命令式语言和面向对象语言的范式。他们使用无副作用函数作为语言的基本构建块。这使得很多事情成为可能,也让很多事情变得更加困难(或者在大多数情况下与人们习惯的不同)。

函数式编程的最大优点之一是无副作用函数的执行顺序并不重要。例如,在Erlang中,这用于以一种非常透明的方式启用并发。 因为函数式语言中的函数与数学函数的行为非常相似,所以很容易将它们翻译成函数式语言。在某些情况下,这可以使代码更具可读性。

传统上,函数式编程的一大缺点也是没有副作用。如果没有IO,很难编写有用的软件,但是如果函数中没有副作用,IO很难实现。因此,大多数人从函数式编程中得到的最多的就是从一个输入计算一个输出。在现代混合范式语言(如f#或Scala)中,这更容易。

许多现代语言都有函数式编程语言的元素。c# 3.0有很多函数式编程特性,你也可以在Python中进行函数式编程。我认为函数式编程流行的原因主要有两个原因:并发正在成为常规编程中的一个真正的问题,因为我们拥有越来越多的多处理器计算机;而且这些语言越来越容易使用。

f#可能会流行起来,因为微软正在推动它。

Pro:

f#将成为Visual Studio下一个版本的一部分 微软建立社区已经有一段时间了——布道者、书籍、与知名客户合作的顾问,以及在微软会议上的大量曝光。 f#是第一个类。net语言,也是第一个具有强大基础的函数式语言(我不是说Lisp, Haskell, Erlang, Scala, OCaml没有很多库,他们只是没有。net那么完整) 强烈支持并行

合同:

即使你精通c#和。net, f#也很难上手——至少对我来说是这样的:( 可能很难找到好的f#开发人员

所以,我给f# 50:50的机会变得重要。其他函数式语言在不久的将来也不会出现。

讨论中忽略的一点是,最好的类型系统存在于当代FP语言中。更重要的是,编译器可以自动推断所有(或至少大部分)类型。

有趣的是,在编程Java时,有一半的时间花在编写类型名上,然而Java到目前为止还不是类型安全的。虽然你可能从来没有在Haskell程序中写过类型(除非作为一种编译器检查的文档),但代码是100%类型安全的。

函数式编程将很可能成为工程师和科学家用来解决他们所面临的问题的工具。它不会像早期的语言那样占领世界。然而,最难打败的产品是Excel,如果我是一名工程师,需要做计算,Excel是很棒的。

However, F# is going to be another source and will likely fill design needs by the non-Computer Scientists. Let's face it, Computer Scientists have done a great job of creating a WHOLE new way of doing things. Object Oriented Programming is GREAT. But sometimes you just need a way to solve an equation, get a solution and graph it. That's it. Then a language like F# fills the bill. Or maybe you want to build a finite state machine, F# again could be one of the solutions, but then C could be a solution as well.

但是当涉及到并行处理时,Excel大放异彩,f#也会及时出现。但是要以友好的方式,F#= friendly。

FP无疑是下一个最佳范例。现在哪种语言可能是下一步,这是很难的东西,但我相信可能是Haskell, f#, Clojure, Ocaml或Erlang。或者是带有更多FP结构和更好的并行性/性能支持的Python,或者是带有parrot的Perl 6,看起来非常有趣。