语言设计:结合Gotos和函数

时间:2010-04-09 15:10:09

标签: function language-design interpreter goto

我正在设计并且正在重新思考与汇编程序有相似之处的低级解释编程语言。

我很快就遇到了函数/ loops / gotos决策问题,并认为虽然whilefor这样的循环过于高级且不合适,但它们的级别太低,无法维护而且一般都是邪恶的。 像你这样的函数从大多数具有返回值和参数的语言中都知道它们也不符合语言的概念。

所以我试图找出一个函数和一个能够

的goto之间的东西
  • 递归
  • 高效循环

经过一番思考后,我想出了子程序的想法:

  • 他们有一个像功能一样的开头和结尾
  • 他们有一个名字,但没有像goto
  • 这样的参数
  • 您可以使用跳转进入一个并在return结束之前再次跳出它(不会返回任何结果,只会停止子程序)
  • 处理就像普通代码一样 - >全球范围如goto

所以我想知道:

  • 上述想法是否合适?什么是(dis)优势?
  • 是否有更好的功能和goto组合,甚至是一个全新的想法?

3 个答案:

答案 0 :(得分:0)

我认为当你处于汇编级别时,GOTO不再是邪恶的,而是开始只是程序实际工作

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

答案 1 :(得分:0)

您正在实施的子程序与Basic中的 GOSUB 或程序集中的 CALL 相同。

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

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

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

答案 2 :(得分:0)

  

上述想法是否合适?

没有

或者至少在您通过设计新语言对您正在尝试解决的问题做出更好的解释之前。

  

(dis)优势是什么?

没有功能抽象,没有递归,只能通过共享可变状态进行编程。组成原理很弱。难以用于人类程序员并且没有任何关系作为编译器目标。


要想拥有像这样的项目,你必须有一个目标。如果你的目标是学习一些东西,你最好学习一些优秀的语言,并试图找出你可以窃取的东西,你可以结合的东西,或者你可以实现的东西。如果你有一个真正的问题,你试图解决它,并且它无法通过标准汇编语言解决,那很有趣 - 告诉我们它是什么。

您可以尝试谷歌搜索“便携式汇编语言”,看看你是否有任何有趣的东西。