論文メモ:Abstract machines for programming language implementation
Abstract machines for programming language implementationを読んだのでメモ。
どのようなAbstract Machineがどのようなプログラミング言語の実装に使われてきたのか、というサーベイ。2000年に書かれており筆頭著者はHaskell界隈ではそれなりに知られている(多分)Stephen Diehl。Write You a HaskellやGHC Internalsなど、Haskellの言語実装について調べている場合参考になる記事が多い。最近は仮想通貨やNFTに対する批判でも有名。
@sin_clavさんにもおすすめされた:
あっ知ってる論文! この論文わりとサクッと読めてよいですよ。最高にナイスなサーベイです。
— t-sin (@sin_clav) March 30, 2022
この論文ではAbstract Machineの定義をかなり広くとっており:
Abstract machines are machines because they permit step-by-step execution of programs; they are abstract because they omit the many details of real (hardware) machines.
The extremes of this spectrum are characterized as follows:
• An abstract machine is an intermediate language with a small-step operational semantics.
• An abstract machine is a design for a real machine yet to be built.
と非常に抽象的なものからハードウェアとして実装可能なものまで全てAbstract Machineの範疇だと定義している。
結果かなり広範囲かつ多数のAbstract Machineを扱うことになり、あまり個々のAbstract Machineの内容には立ち入らず、以下の9つの分類の中で代表的なAbstract Machineを列挙しつつ多少コメントする、という形をとっている:
- imperative programming languages
- object-oriented programming languages
- string processing languages
- functional programming languages
- logic programming languages
- hybrid programming languages
- parallel programming languages
- Special-purpose abstract machines
- Concrete abstract machines
有名どころではJVMやPython Bytecode Interpreter、SECDやZinc Abstract Machine、Krivine's MachineやG Machine、Warren's Abstract Machine、Symbolics Lisp MachineやScheme-81 Chipあたりがカバーされている。FelleisenのCEK Machineは言及されていない。
他に面白そうだなと思ったのはPascalのP4 Machine、SASLのSK Machine、並列処理のPCKS Machine、項書き換えのabstract rewriting machine、WAMベースの第五世代コンピュータ計画やBerkeley Abstract Machineのハードウェアなど。
謝辞にK&RのBrian Kernighan、Tcl作者(& A Philosophy of Software Design著者)John OusterhoutそしてPythonのGuido van Rossumがいるのも興味深い。
参考文献を追っていくだけでも相当長い間楽しめそうな論文である。ちなみにSECD、G Machine、WAMについてより詳細を知りたい場合はThe Architecture of Symbolic Computersという本がおすすめ。