Arantium Maestum

プログラミング、囲碁、読書の話題

論文メモ:Abstract machines for programming language implementation

Abstract machines for programming language implementationを読んだのでメモ。

どのようなAbstract Machineがどのようなプログラミング言語の実装に使われてきたのか、というサーベイ。2000年に書かれており筆頭著者はHaskell界隈ではそれなりに知られている(多分)Stephen Diehl。Write You a HaskellGHC Internalsなど、Haskellの言語実装について調べている場合参考になる記事が多い。最近は仮想通貨やNFTに対する批判でも有名。

@sin_clavさんにもおすすめされた:

この論文では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

有名どころではJVMPython 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そしてPythonGuido van Rossumがいるのも興味深い。

参考文献を追っていくだけでも相当長い間楽しめそうな論文である。ちなみにSECD、G Machine、WAMについてより詳細を知りたい場合はThe Architecture of Symbolic Computersという本がおすすめ。