编程默认不可变的语言?

siv*_*udh 21 programming-languages

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

并且,为了使其变量,您需要声明一个额外的不可变限定符?

Jus*_* L. 36

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


编辑:响应您的编辑:

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

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


编辑2:回应人们支持我:

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


Edit3:这是维基百科的函数式编程语言列表:

  • APL
  • 慈善(纯功能)
  • 清洁(纯功能)
  • 卷曲
  • 咖喱
  • 二郎神
  • F#
  • Haskell(纯功能)
    • CAL
  • Ĵ
  • 喜悦
  • 风筝
  • 口齿不清
    • Clojure的
    • Common Lisp
    • 迪伦
    • 小b
    • 商标
    • 方案
  • 青葱的
  • 数学
  • 米兰达
  • ML
    • 标准ML
    • 爱丽丝
    • Ocaml程序编写
    • Mythryl
  • Nemerle
  • 蛋白石
  • OPS5
  • Poplog
  • [R
  • Q
  • REFAL
  • 罗素
  • 斯卡拉
  • 电子表格

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

(据我所知,函数式编程语言是唯一通过哲学来鼓励不可变变量的语言.默认情况下,可能有一些语言具有不可变的变量,这些变量不是范式的功能.这个概念对我来说听起来很奇怪,但我可以'考虑到那里庞大,庞大,庞大的编程语言,保证一个"永不"的声明.我只是说,据我所知,它是极不可能的)

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

  • Scala和Ada还需要明确描述变量是否可变. (4认同)

Sco*_*ski 7

是.

Haskell和Erlang就是两个例子.


Nor*_*sey 6

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

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

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


mtg*_*red 5

Clojure是一种Lisp方言,目标是Java虚拟机专门使用不可变数据.

http://www.clojure.org

  • @ewerli>我认为你在Clojure中误解了不变性的概念.Clojure的作者Rich Hickey在本主题演讲中深入解释了不变性的基本概念:http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey (2认同)

B T*_*B T 5

Rust 可能是您想要了解的东西。它是一种命令式语言,令人惊讶的是,它经常遵循函数式编程哲学。