2010-04-09 43 views
0

我正在设计和重新思考与汇编程序相似的低级解释编程语言。语言设计:结合Gotos和函数

我很快越过功能/循环/ goto的决定,问题就来了,并认为,而像whilefor循环会太高层次,不合宜的,goto方法是等级太低,难以维护和一般邪恶的一次。 像你一样的函数从大多数具有返回值和参数的语言中都知道它们不适合语言的概念。

于是,我就一个函数和一个转到它能够

  • 递归
  • 高效循环

之间什么事情弄清楚后一些思考,我想出了子程序的想法:

  • 它们有一个像功能一样的开始和结束
  • 他们有一个名称,但像一个goto没有参数
  • 你可以进入一个连跳和结束前再出去它与return(不给回任何结果,只会停止子程序)
  • 处理就像正常的代码 - >像转到

所以我想知道全球范围:

  • 以上是好想法? (dis)的优点是什么?
  • 会有更好的功能和goto组合,甚至是一个全新的想法吗?
+0

所以你基本上实现GOSUB? – David 2010-04-09 15:18:23

+0

你的意思是来自BASIC的东西?可能的,但我不知道GOSUB是否支持递归。 – sub 2010-04-09 15:18:45

+0

如果你的子程序没有参数或变量,那么关于递归的问题是无关紧要的。 – PauliL 2010-04-09 15:35:22

回答

0

上面的想法是否好?

或者至少直到你给什么问题你正试图通过设计一种新的语言解决的一个更好的解释。

什么是(dis)优点?

没有功能抽象,没有递归,只通过共享可变状态编程。非常薄弱的​​构成原则。难以用于人类程序员,并且没有意义作为编译器目标。


要想在某个地方找到像这样的项目,必须有一个目标。如果你的目标是学习某些东西,那么你最好学习一些优秀的语言,并试图弄清楚你可以窃取什么,你可以结合什么,或者你可以实现什么。如果你有一个真正的问题需要解决,而且它不能用标准的汇编语言来解决,那么有趣的是—告诉我们它是什么。

你可以尝试使用谷歌搜索“便携式汇编语言”,看看你有没有什么有趣的东西。

0

我认为,当你在装配层面时,GOTO会停止变得邪恶,并开始只是程序实际上如何工作工作

但无论如何,你的子例程是否需要参数?即使他们没有,你的商店如何注册状态以避免递归溢出?

+0

我用跳转位置的堆栈,所以解释器知道子例程后返回的位置。但是,为了避免内存占用,缓慢和溢出,子程序调用自身 - >循环时不使用堆栈。 – sub 2010-04-09 15:24:37

+0

Sub,如果你在子程序自己调用时没有存储返回地址,它不是真正的递归。通过使用“递归”来实现循环没有意义。改用goto。 – PauliL 2010-04-09 15:40:22

0

要实现的子程序只是一样GOSUB在Basic或CALL在大会。

递归仅在递归算法中使用时才有意义。这需要具有参数,局部变量和返回值的函数。

然而,在一些简单的脚本语言,只有具有全局变量,有PUSHPOP存储在堆栈(就像寄存器推和汇编语言弹出)变量指令。这些可以用于局部变量和递归的低级实现。

我在Rosetta Code的一些Vedit宏语言例子中使用了这种方法,例如参见Towers of HanoiBezier curve