Una Stack Machine es un modelo computacional donde todas las operaciones se realizan sobre operandos que se encuentran en la cima de una pila (stack) y los resultados se colocan de nuevo en ella. A diferencia de las Register Machines, que utilizan un conjunto de registros de propósito general, las Stack Machines tienen un conjunto de instrucciones más simple, típicamente 'push' para colocar un valor en la pila, 'pop' para retirarlo, y operaciones aritméticas/lógicas que toman sus operandos de la pila y depositan el resultado. Esto elimina la necesidad de especificar explícitamente los operandos en las instrucciones, lo que puede llevar a un código más compacto y una lógica de control más sencilla.
En el mundo real, las Stack Machines son fundamentales para la implementación de muchas máquinas virtuales y lenguajes de programación. Ejemplos prominentes incluyen la Java Virtual Machine (JVM), que ejecuta bytecode Java, y la Common Language Runtime (CLR) de .NET. PostScript, el lenguaje de descripción de páginas, también es una Stack Machine. Además, lenguajes como Forth y Factor están intrínsecamente diseñados alrededor de una arquitectura de pila. La WebAssembly (Wasm) es otro ejemplo moderno y de alto rendimiento de una Stack Machine, diseñada para ser un objetivo de compilación portátil para lenguajes de alto nivel.
Para un arquitecto, comprender las Stack Machines es crucial debido a sus implicaciones en el rendimiento, la portabilidad y la seguridad. Su diseño simplificado puede facilitar la implementación de máquinas virtuales ligeras y portátiles, ideales para entornos distribuidos o de recursos limitados. El bytecode compacto que generan es beneficioso para la transmisión de código a través de redes. Sin embargo, la gestión de la pila puede introducir overhead si no se optimiza, y la depuración puede ser más compleja que en arquitecturas basadas en registros. La elección de una Stack Machine como base para una plataforma o lenguaje implica un trade-off entre la simplicidad del compilador/intérprete y la eficiencia de ejecución, especialmente en arquitecturas de hardware que favorecen los registros. Su naturaleza determinista y aislada también las hace atractivas para entornos sandboxed y de seguridad crítica.