连接和堆栈语言

2021-06-17 04:23:32

有很多方法可以对编程语言进行分类;一个是将它们定义为" concateative"或"申请"在申请语言中,通过将函数应用于参数来评估物品。这包括广泛使用中的几乎所有编程语言,例如C,Python,ML,Haskell和Java。在级联编程语言中,通过组合所有在单个数据上运行的若干功能来评估事项,从功能传递到功能。这条数据通常是堆叠的形式。另外,在连接语言中,通过连接程序表示该功能组合物。连续语言的例子包括第四,欢乐,后标,猫和因子。

虽然术语堆栈语言和连接语言有时互换地抛出,但它们实际上代表了类似但不同的语言。连接语言不一定是堆栈语言。例如,OM使用前缀表示法而不是Postfix,并将程序的其余部分传递为从功能到功能的数据。有关无堆栈的连接语言的另一个例子,请参阅DEQUE。

堆栈是计算机科学中的一个非常基本的概念,许多语言在实施中使用堆栈。任何允许递归定义的语言都使用某种类型的呼叫堆栈来保存函数调用之间的返回地址,并且通常相同的堆栈用于溢出无法在寄存器中分配的值。但是,这只是实现细节,此呼叫堆栈未直接暴露给程序员(除了用一流的持续语言语言之外;我稍后会触摸。

那么是什么让堆栈语言不同?这里的关键概念是有多个堆栈:所有堆栈语言都有一个呼叫堆栈来支持递归,但它们也具有数据堆栈(有时称为操作数堆栈)以在功能之间传递值。后者是堆栈语言程序员在谈论&#34时意味着什么;"堆。

今天广泛使用的大多数语言是申请语言:语言中的中央构造是某种形式的函数调用,其中一个函数应用于一组参数,其中每个参数本身都是函数调用的结果,名称变量或常数。在堆栈语言中,通过简单地编写功能的名称来进行函数调用;参数是隐式的,并且在进行呼叫时,它们必须已经在堆栈上。然后在函数返回后,函数调用(如果有的话)将在堆栈上留在堆栈上,用于消耗下一个函数,等等。因为只要在没有任何其他语法的情况下提到他们的名字,因为没有任何额外的语法来调用函数,因为它是指&#34的函数;单词"因为在语法中,他们真的只是单词。

有时候,人们谈论&#34的单词推动和弹出值;堆栈"其他程序员,主要是那些更喜欢术语的人和#34;连接性语言"而是谈论单词作为将堆栈作为输入的函数,并将一个全新的堆栈作为输出返回。第一个观点更直观,而且也是大多数实现的工作:在内存中的位置是数据堆栈。后者更适合正式推理:如果您的功能纯度,则更容易使用重写规则和类型系统。但是,这两个观点是等同的:因为在给定的执行线程中,只有一个堆栈是" live"在任何给定的时间点,更新堆栈就是与纯粹功能世界视图相同的语义。有关这一点的更多细节可以在曼弗雷德von thun' S纸数学基础的喜悦。

此修订版于19920年3月7日星期六创建的NMorse(删除'可能是新的'因为(No-Op)以来,纯粹的单词应该改变堆栈和堆栈..)