Solidity
為什麼乙太坊虛擬機設計為基於堆棧的語言?
我聽說乙太坊即將變成一種 Web Assembly(一種基於寄存器的語言,eWASM)。Web Assembly 是基於寄存器的,這意味著它們更快。
那麼為什麼乙太坊到目前為止使用基於堆棧的語言呢?它基於基於堆棧的語言有什麼優勢,還是有其他特殊原因?
基於堆棧的機器比基於寄存器的機器更容易實現,我認為這最終是這裡的決策因素。上面連結的文件“乙太坊協議的史前史”暗示了這一點。
WebAssembly 也是基於堆棧的,但是程序集被設計成結構化的:塊由觸發堆棧清理的 END 指令顯式終止。這使得基於寄存器的翻譯相對簡單。EVM 的情況並非如此:堆棧是全域的,沒有程式碼塊的這種概念,並且有時會自願引入堆棧差異(編譯器優化等)。