optimization - 如何优化简单的堆栈机器代码?

标签 optimization language-agnostic stack-machine

我一直在使用一种简单的基于堆栈的语言,而我发现自己反复做的一件事是手动优化代码块。

我想“嘿,这看起来很像计算机可以做的事情!具有明确目标和语义的重复工作。”。但是环顾四周,我找不到很多关于优化堆栈机器代码的东西。注册机器,是的。但不是基于堆栈的语言。这似乎是对“如何优化堆栈机器代码?”的普遍回应。是“不要”。

那么:如何优化堆栈机器代码?除了简单的窥视孔优化之外,还有什么通用的方法吗?是否有任何自动生成窥视孔优化的方法?

最佳答案

1 Wikipedia - Stack Machine列出了一些堆栈机器和基于堆栈的语言(可能以某种方式解决优化问题)

1.1 我对各种链接的阅读使我得出结论,基于堆栈的机器只是一种理论工具。无需“优化”它们,因为为了运行程序,此类机器将基于堆栈的代码转换为基于寄存器的代码,对其进行优化并在基于寄存器的硬件上运行。此过程通常称为 Just In Time compilation (JIT)Ahead Of Time compilation (AOT)

2 在列出的选项中Wikipedia - FORTH描述了超过 40 年的广泛使用的基于堆栈的编程语言(应该有一些与优化相关的 Material 可用)

3 谷歌搜索“forth stack machine optimization”会给出很多文章,例如

  • J1 Forth CPU,http://www.excamera.com/sphinx/fpga-j1.html
  • 优化栈代码生成初探,http://users.ece.cmu.edu/~koopman/stack_compiler/stack_co.html
  • 堆栈优化 - Peter J. Knaggs 博士,http://www.rigwit.co.uk/thesis/chap-5.pdf
  • 高效堆垛机的设计与实现,http://www.jopdesign.com/doc/stack.pdf
  • ...
  • 关于optimization - 如何优化简单的堆栈机器代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599876/

    相关文章:

    java - Java 将枚举编译成什么?

    javascript/dom——创建与重新排列 dom 节点的开销有多大?

    php - 使用 from list 和 left join 之间的区别

    algorithm - 什么是排序算法的稳定性,为什么它很重要?

    c++ - 什么是 C++ 中的不透明值?

    language-agnostic - 寄存器与堆栈

    c++ - 如果在编译时已知边缘条件,我该如何省略调用?

    为简单 VM 编译 switch 语句

    compiler-construction - SSA用于堆栈机代码