RPN has been far my favorite notation since the late 70s when I got my first HP. I had an SR-50 before that, but the logic that is happening in an “algebraic” calculator is really complicated compared to what happens in an RPN calculator.
Which isn’t trivial, by the way. If the stack is full of zeros and you type “6 Enter +” what will you get? Most HP calculators use a semihidden feature called a “stack lift flag” that controls whether the “X” register will push its result into “Y” when something else tries to go into X, and they will give you 12 as a result, because the Enter duplicates X into Y and the + eats them both and sums them and writes the result into X. But the more Forth-like 28S (the most wonderful calculator ever devised IMHO) would give you 6 because Enter only terminates digit entry (if I am remembering this right). Forth, of course, doesn’t use Enter, it only requires numbers be separated by whitespace, which causes them to be separate tokens. And the 28S would behave the same way if you typed the Space key between numbers. Fans will remember it also had DUP, SWAP, DROP and other Forth names for what other HPs called Enter (sort of) and X<>Y and ClrX.
And Forth seemed like the cleverest thing I had ever been able to follow, 20 years ago, and still hasn’t really been replaced (though OOP certainly has a unique zing all its own).
Lots of systems use stacks. I think probably a fair number of “algebraic” calculators have been implemented internally as RPN or other stack systems, though some like the SR-50 had separate registers for addition/subtraction, multiplication/division, exponentiation, and monadic operators.
Usually you use one stack, at least consciously. In RPN there is a number stack that you think of as THE stack. In Forth there is a number stack and a return stack. The number stack is practically the same as in RPN. The return stack has processor addresses on it. You enter a subroutine by putting the address where you left off onto the return stack, then going off elsewhere to run the subroutine, then pulling the address off the return stack and resuming execution there. After a little thought you won’t be surprised to learn this is a very common way of managing subroutines. In Forth there’s an outer interpreter and an inner interpreter that parse the tokens in each word definition in the dictionary, and you reach Forth Nirvana when you learn that the inner interpreter is actually just a “return” instruction in Assembly. Just to keep things lively, Forth provides functions that move a value from the return stack to the number stack, and vice versa, and you use these to move things out of your way for a moment. When the square root of your velocity can become an interrupt handling vector, you can get things mighty crashed mighty fast, which gave Forth a scary reputation, but as C. H. Ting once said, it’s the user’s computer, if he wants to crash it, he should be able to. Ting once entertained a concert hall full of people by wiring resistors sized in factor-of-two succession to the pins of a parallel port of an IBM PC, and programming it to play Bach like a synthesizer. In Forth, of course.
And loads of programming is done with stacks, though programmers are often not conscious of it. You know you can manipulate values with a computer without giving them names. Of course, you can name a value, but you can also for example pass it as an argument into a function, or have it implicitly in there as an intermediate result. A simple view is that things that are named get put in the “heap”, which associates information with names, and things that are not named are often sitting in a stack. Of which, by the way, there are often many. I don’t mean locations in the stack, “registers” as HP called them. I mean stacks that are separate and isolated and don’t know about each other.
It’s all wonderful. God knows how many of us first got thinking about stacks and about how to organize stuff so you can use it, just by reading HP manuals with the little Charlie Chaplin figure rolling things into and out of the stack with his cane…