Ubuntu 14.04にAliceMLをインストールする

Ubuntu 14.04にAliceMLをインストールする方法を書きます。
なお、今回は/usr/local/aliceml/で作業を行いますので、他のディレクトリで作業を行う場合は適時読み替えて下さい。

まず初めにAliceMLのビルドに必要なパッケージをインストールします。

# apt-get install smlnj smlnj-runtime ml-lex ml-lpt ml-yacc
# apt-get install g++ libsqlite3-dev libgtk2.0-dev libgmp-dev gawk libtool \
       libc6-dev-i386 libgnomecanvas2-dev gtk2-engines-pixbuf libxml2-dev \
       autoconf texinfo

パッケージのインストールが完了したら、AliceMLのGithubのリポジトリからソースをクローンし、サブモジュールの初期化、更新を行います。

# cd /usr/local/
# git clone https://github.com/aliceml/aliceml.git
# cd aliceml
# git submodule init
# git submodule update

次に、SEAMのビルドに必要なツールをビルドします。

# cd make
# make setup

make setupが終わるとSEAMのビルドに必要なツールへのパスが表示されるので、環境変数PATHに追加します。

# export PATH=/usr/local/aliceml/seam-support/install/bin/:$PATH

最後に、SEAMとAliceMLをビルドします。

# make all

作業は以上になります。make allが完了するとAliceMLのコンパイラなどの実行ファイルが存在するディレクトリとAliceMLのライブラリが格納されいるディレクトリのパス(ALICE_HOME)が表示されるので、.bashrcなどに書いておくとよいと思います。

export PATH=/usr/local/aliceml/distro/bin/:$PATH
export ALICE_HOME=/usr/local/aliceml/distro/share/alice
広告

Alice MLの紹介

この投稿はマイナー言語Advent Calendar 2014 21日目の記事です。

Aliceとは

Aliceはドイツのザールラント大学のProgramming Systems Lab でデザインされたStandard MLの方言で、
遅延評価、並列処理、制約プログラミングをサポートしています。

プログラミング言語Aliceの特徴

  • Future(並列プログラミングのデザインパターン)
  • 高階モジュール
  • パッケージ
  • Pickling
  • コンポーネント
  • 分散プログラミング
  • 制約プログラミング

Alice Programming Systemの特徴

Aliceプログラミングシステムの特徴として以下のものがあります。

  • JITをサポートしたポータブルな仮想マシン
  • 対話システム
  • バッチコンパイラ
  • 静的リンカ
  • インスペクタ
  • エクスプローラ
  • Gtk+
  • SQL
  • XML

他にもAliceLexやAliceParserなどのライブラリがあります。
詳しくは、Alice MLの公式ページをご覧ください。

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を渡すことで
起動します。(インタプリタ起動前に必要な環境変数のエクスポートを行っています。)