7

似乎数学和计算机编程语言的融合正在发生强烈的运动,这在 lambda 演算对现代语言的影响中得到了明显的证明。大多数时候我不思考数学,我思考逻辑。在我看来,许多可以用数学建模的现象也可以用逻辑建模。

我认为我们永远不会看到纯逻辑语言或纯数学语言在通用编程中获得牵引力,但我想盘点一下每种范式的好处。我想知道:

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

4 回答 4

9

首先,我看不出逻辑和数学之间有什么区别。后者只是前者系统地应用于特定结构。

此外,我不相信以数学/逻辑为基础的编程语言的理论美在通过编写高效、可维护的代码来完成任务时真的很有价值。

至于你具体的问题。

对编程语言或数学语言特征建模有什么好处?根据形式逻辑原则对语言建模有什么好处?

正确性证明变得容易得多——尽管我们是否会达到它们对现实生活系统变得实用的地步是值得怀疑的。

通用语言可以放弃逻辑或数学吗?

取决于您对“放弃”的含义。您可以拥有一种没有数学运算的语言(尽管您必须变得非常深奥;图灵机是我能想到的唯一一种甚至没有增量或减量的语言),并且您当然可以拥有一种对形式主义毫不关心的语言(汇编器,C)。但我认为没有逻辑的编程语言是不可能的(尽管它可能是一种变态的逻辑,参见Malbolge

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

好吧,如果你认为 Lambda 演算是一种逻辑形式,那么自 1958 年以来,Lisp 就已经很好地展示了它的优势,它的表达能力是其他语言渴望(但无法做到)达到的。

然后是 Prolog,这是我所知道的唯一一种试图明确基于形式逻辑的“严肃”语言。而且 - 令人惊讶的是 - 它擅长逻辑的东西,很少有其他东西。

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

没有任何。Lisp Machines的失败非常明确地证明 IMO 编译器+通用硬件比专用硬件更强大。然而,有人可能会说,当今系统的简单粗暴力量正在使完全忽略硬件约束的语言在以前没有的地方变得实用。

于 2009-10-19T15:02:37.863 回答
2

由于计算机科学是数学的一个特殊分支 - 数学和编程语言没有融合。编程语言是应用数学。它是由具有深厚数学知识的人创建的工具,供其他人使用(大多数时候知识渊博)。你可以把它比作电灯开关——你可以在没有学习过物理的情况下使用它,但它仍然是应用物理。有时(特别是如果你有问题)有必要拥有“知识”。然后你需要特殊的背景。

于 2009-10-19T14:50:05.283 回答
1

好吧,老实说,很多这些所谓的“现代编程语言”只是实现了 50 多年来在各种编程语言中出现的东西。

于 2009-10-19T14:55:35.317 回答
1

对编程语言或数学语言特征建模有什么好处?根据形式逻辑原则对语言建模有什么好处?

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

通用语言可以放弃逻辑或数学吗?

不。如果没有逻辑或数学,您将如何进行布尔运算或算术运算。你可能在这里的意思是我不明白的。

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

Haskell、ML、OCaML、Miranda、Alice、Oz、Erlang、Twelf、Coq、Prolog,都展示了更严格的数学在编程中的应用。

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

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

于 2009-10-24T14:14:30.693 回答