数学与程序设计语言的融合

时间:2009-10-19 14:33:03

标签: math language-features logic language-design lambda-calculus

似乎数学和计算机编程语言的融合有一种强烈的运动,这可以从lambda演算对现代语言的影响中得到证明。 大部分时间我都没有用数学思考,我认为有逻辑。在我看来,许多可以数学建模的现象也可以在逻辑上建模。

我认为我们不会看到纯逻辑语言或纯数学语言对通用编程有吸引力,但我想清点每种范例的好处。我想知道:

  • 在数学上建模编程语言或语言特征有什么好处?
  • 根据形式逻辑原理对语言建模有什么好处?
  • 通用语言可以放弃逻辑还是数学?
  • 哪些语言真正展示了这两种方法的好处?
  • 哪些硬件功能使一种方法比另一种方法更具吸引力?

4 个答案:

答案 0 :(得分:8)

首先,我没有看到逻辑和数学之间的区别;后者只是前者系统地应用于特定的结构。

此外,我不相信在编写高效,可维护的代码完成工作时,基于数学/逻辑的编程语言的理论之美非常值得。

至于你的具体问题。

  

建模有什么好处   编程语言或语言   数学的特点?   在形式逻辑原理上建立语言有什么好处?

正确性证明变得更加容易 - 尽管我们是否能够达到真实系统的实用性是值得怀疑的。

  

可以放弃通用语言   无论是逻辑还是数学?

取决于你对“forgo”的意思。你可以拥有一种没有数学运算的语言(虽然你必须得到相当的无效;图灵机是我能想到的唯一一种甚至没有增量或减量的机器),你当然可以拥有一种不关心形式主义的语言(汇编程序,C)。但我认为没有逻辑的编程语言是不可能的(虽然它可能是一个变态的逻辑,参见Malbolge

  

哪些语言真正展示了这两种方法的好处?

好吧,如果你认为Lambda演算是一种逻辑形式,那么自从1958年以来,Lisp一直很好地展示了它的好处,这种语言是其他语言渴望(但不管理)的表达能力。

然后是Prolog,这是我所知道的另一种“严肃”语言,它试图明确地建立在形式逻辑之上。并且 - 令人惊讶的是 - 它擅长逻辑和其他任何东西。

  

哪些硬件功能使一种方法比另一种方法更具吸引力?

无。 Lisp Machines的失败证明IMO非常确定编译器+通用硬件比专用硬件更强大。然而,有人可能会说,今天系统的简单强大功能正在制造完全忽略硬件限制的语言,而以前它们并不存在。

答案 1 :(得分:2)

因为计算机科学是一门特殊的数学分支 - 所以数学和编程语言没有融合。编程语言应用于数学。它是由具有深刻数学知识的人创造的工具,供他人使用(大多数时候知识不太深刻)。您可以将它与灯光开关进行比较 - 您可以在不学习物理的情况下使用它,但它仍然是应用物理学。有时(特别是如果你有问题),有必要拥有“知识”。那你需要特殊的背景。

答案 2 :(得分:1)

嗯,说实话,很多这些所谓的“现代编程语言”只是使用各种编程语言超过50年的东西。

答案 3 :(得分:1)

  

在数学上建模编程语言或语言特征有什么好处?   在形式逻辑原理上建立语言有什么好处?

这些都是一回事:形式逻辑只是数学的一个分支。使用形式数学的两个主要好处是优化和安全。当算法没有副作用(即参考透明),并且仅使用纯数学表达时,编译器可以根据数学规则重构算法。这使编译器更容易优化代码并利用并行体系结构。另一个重要的好处是能够证明代码的某些属性。

  

可以放弃通用语言   无论是逻辑还是数学?

没有。如果没有逻辑或数学,你会怎么做布尔运算或算术运算?你可能在这里指的是我不明白的东西。

  

哪些语言真正展示了这两种方法的好处?

Haskell,ML,OCaML,Miranda,Alice,Oz,Erlang,Twelf,Coq,Prolog,都表现出更严格的数学应用于编程。

  

哪些硬件功能使一种方法比另一种方法更具吸引力?

我不相信硬件会因严格的数学编程方法的好处而改变很多东西。引用透明代码的好处主要在于编译器级别。