0

我正在设计并正在重新考虑一种与汇编程序相似的低级解释编程语言。

我很快就遇到了函数/循环/gotos 决策问题,并认为虽然循环喜欢while并且for会太高级且不合适,但 goto 会太低级、无法维护并且通常又是邪恶的。像您这样的函数从大多数具有返回值和参数的语言中都知道,它们也不适合该语言的概念。

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

  • 递归
  • 高效循环

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

  • 它们像函数一样有开始和结束
  • 他们有名字但没有像 goto 这样的参数
  • 你可以用 jump 进入一个并在它结束之前再次退出它return(不返回任何结果,只会停止子程序)
  • 像普通代码一样处理 -> 像 goto 这样的全局范围

所以我想知道:

  • 上面的想法好吗?有什么(缺点)优点?
  • 会有更好的函数和 goto 组合,甚至是一个全新的想法吗?
4

3 回答 3

0

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

但是不管怎样,你的子程序带参数吗?即使他们没有,您的商店如何注册状态以避免递归溢出?

于 2010-04-09T15:22:18.460 回答
0

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

只有将递归用于递归算法时,递归才有意义。这需要带有参数、局部变量和返回值的函数。

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

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

于 2010-04-09T16:34:16.800 回答
0

上面的想法好吗?

不。

或者至少在你更好地解释你试图通过设计一门新语言解决的问题之前是这样。

有什么(缺点)优点?

没有功能抽象,没有递归,只能通过共享可变状态进行编程。非常弱的构图原理。对于人类程序员来说很难使用并且没有作为编译器目标的意义。


要完成这样的项目,您必须有一个目标。如果你的目标是学习一些东西,你最好学习一些很棒的语言,并试图弄清楚你可以窃取什么,你可以组合什么,或者你可以实现什么。如果你有一个真正的问题要解决,而标准的汇编语言无法解决它,那很有趣——告诉我们它是什么。

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

于 2010-04-10T03:34:06.967 回答