我对所谓的微积分和编程语言感到很困惑。
我倾向于认为并且可能已经被告知,微积分是用于推理程序等效性的正式系统。程序具有机器指定的操作语义,(我认为?)应该是确定性的。以此方式,针对语言的(正确)演算是用于程序等效的证明方法。
对我来说,这似乎是合理的划分,但这是否是普遍接受的含义?也许这是错误的?
相关的,为什么某些操作语义是不确定的(假设它们是融合的)?保持战略选择开放会带来什么好处?
我真的很感谢这些澄清。和具体参考!谢谢!
我对所谓的微积分和编程语言感到很困惑。
我倾向于认为并且可能已经被告知,微积分是用于推理程序等效性的正式系统。程序具有机器指定的操作语义,(我认为?)应该是确定性的。以此方式,针对语言的(正确)演算是用于程序等效的证明方法。
对我来说,这似乎是合理的划分,但这是否是普遍接受的含义?也许这是错误的?
相关的,为什么某些操作语义是不确定的(假设它们是融合的)?保持战略选择开放会带来什么好处?
我真的很感谢这些澄清。和具体参考!谢谢!
Answers:
这些词的含义不是固定的,但我可以给您我的解释。
一个微积分是什么,我们有计算的杂耍式的感觉(想泰勒级数或分析积分的计算操作)。微积分告诉我们什么是操纵规则,但不能告诉我们在给定情况下应该使用哪些规则。
一个编程语言是什么,告诉我们如何来计算。它准确地告诉我们如何使用规则。我们通常让计算机使用规则,因为它要快得多。规则可能是不确定的,并且可能有很好的理由使规则不确定。演算的本质可能是不确定的(认为并发通信过程),或者确定特定的策略可能对实现技术和优化有害。
相反,标准ML是一种编程语言。它是根据操作语义(即计算规则)给出的。我们可以衍生出相等的概念(语境对等,观察上的对等),可以将其视为一种演算。
当然,在微积分及其作为编程语言的表现形式之间通常会存在有用的联系。融合归一化只是从微积分到编程语言的一种方法(尽管可悲的是,有些人已将其变成一种宗教)。演算语言和编程语言之间的相互作用很重要:可以实际使用编程语言,但是演算可以解释程序的含义。
只是为了使人们烦恼,让我也要声明,假装微积分及其操作表现形式之间没有区别,有时会导致编程界和编程界的微型宗教观点出现偏差。您可以尝试猜测我要记住的语言。(这是一种非常酷的语言!)
结石的目标不仅是研究程序的对等物,还在于研究程序。花式演算的一个例子是这其中的策略(呼叫按值或呼叫按姓名)被局部地确定。可以有一天用一种编程语言来实现它,但它首先是作为一种演算进行研究的。您还可以使用计算来研究类型系统(有些计算,例如Martin-Löf类型理论中的计算也可以计算类型)。
我认为主要区别在于,计算(相对)易于正式学习,而编程语言(相对)易于使用。这导致以下差异:
计算趋于最小化,而PL趋向于具有冗余性(当您已经拥有while循环时进行循环,如果已经拥有if则进行切换,...),以便于表达您想要的内容变得更加容易。
演算具有完全指定的语义,而PL语义通常由默认解释器/编译器描述。
一些操作语义是不确定的,因为它允许:
请注意,按值调用是不确定的:您可以选择先评估函数还是自变量。
“编程语言”和“演算”是多义性术语,也就是说,根据上下文,它们的含义不同。
在某些情况下,编程语言和计算已经收敛到同一概念,即基于可“机械”应用的一组正式规则的重写系统。
这种融合有时对我们(而不是对工作的软件开发人员或数学家)来说是难以理解的,原因是我们的工作是将具体的编程语言设想为计算的,并在具体的编程语言中实际体现计算。
为了直接回答您的问题,计算和编程语言之间的混淆(如果存在的话)不是偶然的,而是项目。我们的项目。这证明了我们作为一门科学学科的相对成功。