默认情况下不可变的编程语言?

时间:2010-06-29 00:27:42

标签: programming-languages

默认情况下,是否存在“变量”不可变(const,final等)的编程语言?

而且,为了使它变量,你需要声明一个额外的不可变限定符吗?

6 个答案:

答案 0 :(得分:36)

Functional Programming范式的哲学强烈倾向于所有“变量”是不可变的,而“可变”变量只允许在极端情况下(即I / O)。因此,大多数函数式编程语言(如各种 Lisp 方言和 Haskell )(通常都会)强化不可变变量。当然,有些语言比其他语言提供更多的灵活性,但中心的范式/哲学仍然存在,这会阻碍它。


编辑:回复您的修改:

如果您正在寻找具有友好性的C语言常量,那么采用全新的编程范式并不是您的解决方案。在函数式编程中,一切是不可变的(在大多数情况下),并且您通常会看到一种全新的基本哲学和编程方法。

这个不是真的是一个解决方案,如果你想要的是更容易声明常量。


Edit2:回应那些支持我的人:

虽然我做得正确(我希望)回答提问者的问题,但我不确定这是一个答案,结果是有用的,因为他的新编辑/评论。但是,我希望可能会睁开眼睛看一个全新的编程世界=)


Edit3:这是函数式编程语言的Wikipedia's List

  • APL
  • 慈善(纯功能)
  • 清洁(纯功能)
  • 卷曲
  • 咖喱
  • 二郎
  • F#
  • Haskell(纯功能)
    • CAL
  • Ĵ
  • 风筝
  • Lisp的
    • Clojure的
    • Common Lisp
    • 迪伦
    • 小b
    • 标志
    • 方案
  • 茂盛
  • 数学
  • 米兰达
  • ML
    • 标准ML
    • 爱丽丝
    • ocaml的
    • Mythryl
  • Nemerle
  • 蛋白石
  • OPS5
  • Poplog
  • - [R
  • Q
  • REFAL
  • 罗素
  • Scala的
  • 电子表格

这些语言中的大多数都有一些非功能异端的微小元素/影响;标有“纯粹功能性”的那些没有。

(据我所知,函数式编程语言是唯一通过哲学来鼓励不可变变量的语言。默认情况下,可能有一些语言具有不可变的变量,这些变量不是范式的功能。这个概念对我来说听起来很奇怪,但是鉴于广泛的,庞大的,大量的编程语言,我不能保证一个“永不”的声明。我只是说,据我所知,这是非常不可能的)

一位意见提供者建议 ADA 是一种势在必行/面向对象的编程语言,默认情况下使用不可变变量。

答案 1 :(得分:7)

Haskell和Erlang是两个例子。

答案 2 :(得分:6)

我能想到的最接近的模拟是Objective Caml。由let绑定的变量总是不可变的,但结构的字段(在Caml中称为记录)仅在默认情况下是不可变的,并且可以将单个字段标记为mutable

在功能语言中,Objective Caml已被证明对C程序员非常有吸引力。 OCaml在语言和库中都有很多命令式构造,因此迁移路径并不那么奇怪。如果你真的想要对象和类系统,它们也在那里。

Microsoft的.NET语言F#是Objective Caml的后代,但是已经进行了很多更改以确保它是.NET语言,并且我没有被告知可变性。 但是,如果您想尝试使用函数式语言作为当前编程风格的相对较小的变化,您可能希望调查Objective Caml或F#。

答案 3 :(得分:5)

Clojure是一种Lisp方言,针对Java虚拟机专门处理不可变数据。

http://www.clojure.org

答案 4 :(得分:4)

XSLT中的所有变量可能只是不可变的。

答案 5 :(得分:2)

您可能想看看锈迹斑斑的东西。它是一种命令式语言,遵循函数式编程哲学surprisingly often