Alice MLの仮想マシンについて

この投稿はML Advent Calendarの21日目の記事です.

最近Aliceというプログラミング言語にはまっています。
今回はAliceが仮想マシンの基盤として使用しているSEAMについて現時点でわかったことを書きます。
SEAMに関しては引き続き調べて分かったことがあれば逐次このブログに記事を上げます。
今回書くことはSEAMのOverviewThe Alice Language Layerを読んでそれをまとめたものです。
ところどころ日本語が不自由で申し訳ないです。(´・ω・`)

プログラミング言語Aliceとは

AliceはStandard MLを元にした関数型プログラミング言語です。
Aliceの特徴として以下のものがあります。

  • 遅延評価
  • Future(並列処理のデザインパターン)
  • Package
  • Pickling
  • Components
  • 制約プログラミング
  • 分散プログラミング

SEAM(Simple Extensible Abstract Machine)とは

SEAMはC++で書かれたシンプルで拡張可能な抽象マシンです。SEAMは任意の言語、
任意のプラットフォームに対応しており、これを拡張することで特定の言語に対応した仮想マシンが手に入ります。
SEAMは主に以下のような機能を持っています。

一様なデータ表現と効率的なメモリ管理
計算に使用されるデータはSEAMが提供する抽象的な記憶装置(SEAM Store、以下Store)に格納されます。
データは抽象的なデータノードのグラフとして表現され、言語から独立したStore上でモデル化されます。
SEAMはStoreへのデータノードの割り当てと効率的なメモリ配置、ガーベジコレクションを行います。
プラットフォームに依存しない外部表現
Store値をポータブルな外部表現へと変換(Pickling)しエクスポートすることができます、
またエクスポートしたStore値を内部表現へと変換(UnPickling)することもできます。
例えば、ある言語のプログラムをネイティブコードやバイトコードに変換するなどです。
抽象実行モデル
計算は一般的な評価機インターフェイスによって定義されます。
SEAMは任意のコードと評価器を同時に使用し、自由に対話(または相互作用)できるようにサポートします。
また、FFI(Foreign Function Interface)のような一般の仮想マシンサービスは簡単に表現できます。

Aliceでの例

AliceのVMは以下の手順で構築されます。

  1. Store上でAliceのデータ型をモデル化する。
  2. Aliceコードの実行モデルをSEAMが提供する一般的な実行モデル上でモデル化する。
  3. Alice PicklingをAliceに特化した内面化ハンドラを提供することでSEAM Pickling上でモデル化する。
  4. Alice FFIをSEAM FFI上でモデル化する。
  5. AliceVMのメインモジュールを定義する。

以上の手順を踏むことで、alice.dllといくつかのAlice Componentを引数にとるAlice VM(seam実行ファイル)が手に入ります。
実際に、Aliceのインタプリタはseam実行ファイルにalice.dllと ../aliceml/distro/share/alice/tools/Toplevel.alcを渡すことで
起動します。(インタプリタ起動前に必要な環境変数のエクスポートを行っています。)

コメントを残す