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

ソフトウェアの基礎を読む – 1

ソフトウェアの基礎の「Basics_J: 関数プログラミングとプログラムの証明」完了しました。
コードはこちら

この章で学んだこと。

  • Coqでの関数の定義方法
  • Coqでの証明の流れ
  • 基本的なタクティックの使い方

次は、「Lists_J: 直積、リスト、オプション」をやります。明日から仕事なのであまりかけそうにない…

Emacs+ProofGeneralの環境構築

ProofGeneralを下記のURLからダウンロードして解凍後、~/.emacs/dに移動する。
URL: http://proofgeneral.inf.ed.ac.uk/download

~/.emacs.d/ProofGeneral/でmakeを実行。エラーが発生した場合は以下の記事が参考になるかも
Emacs24でProofGeneralを立ち上げた時に警告が出た時の対処

makeが完了したら、init.elに以下のEmacsLispプログラムを追加

(load-file (expand-file-name "~/.emacs.d/ProofGeneral/generic/proof-site.el"))

環境構築は以上で終了。

Screenshot from 2014-09-02 04^%05^%33

使い方:

C-c C-h       - Help
C-c C-n       - Next Step
C-c C-u       - Undo Srep
C-c C-RET  - Goto Point
C-c C-a C-p - Print
C-c C-a C-c - Check

Emacs24でProofGeneralを立ち上げた時に警告が出た時の対処

Emacs24でProofGeneralを立ち上げると以下のような警告が表示されたので
対応した時のメモ。

Warning (emacs): Proof General compiled for GNU Emacs 24.2 but running on 
GNU Emacs 24.3: "make clean; make" is recommended.

以下の記事を参考にしてProofGeneral/generic/pg-response.elを修正して、make clean && makeすると
解決できます。
http://blog.elliptium.net/2013/03/Emacs-24-3-1-ProofGeneral-4-2

Emacs+GNU GLOBALの環境構築

Gaucheのソースコードを読むためにEmacs+GNU GLOBALの環境構築をしました。
まずはGNU GLOBALのインストール

>sudo apt-get install global

次に、以下のプログラムを.emacs.elに追加する。

(autoload 'gtags-mode "gtags" "" t)
(setq gtags-mode-hook
   '(lambda ()
       (local-set-key "\M-t" 'gtags-find-tag)
       (local-set-key "\M-r" 'gtags-find-rtag)
       (local-set-key "\M-s" 'gtags-find-symbol)
       (local-set-key "\C-t" 'gtags-pop-stack)))

(add-hook 'c-mode-common-hook
    '(lambda()
        (gtags-mode 1)
        (gtags-make-complete-list)))

関数名などの上にカーソルをおきM-tを押すと定義場所にジャンプします。C-tで元の位置に戻ります。

UbuntuにSpiderMonkeyをインストールする

JavaScriptの勉強をするためにSpiderMonkeyをインストールしました。
少し戸惑ったのでメモをば

>wget http://ftp.mozilla.org/pub/mozilla.org/js/js-185-1.0.0.tar.gz
>tar xvzf js185-1.0.0.tar.gz
>cd js-1.8.5/js/src
>autoconf2.13
>./configure
>make
>sudo make install

C++のコンパイラがインストールされてないと./configureで失敗します。
上のコマンドを実行した後は端末上で./jsとタイプすればSpiderMonkeyが起動します。

Windows + Emacs + Gauche の環境構築

Windowsの方にも環境を構築しました。
その際少し手間取ったのでメモ。
まず、Emacs と Gauche の入手
Emacs http://ftp.gnu.org/gnu/emacs/windows/
Gauche http://practical-scheme.net/gauche/download-j.html

Emacsを適当な場所に配置し、Gaucheをインストールした後にEmacsとGaucheをコマンドプロンプトから扱えるように
環境変数を通します。
次に Emcas を起動し C-x C-f とタブを二回押すとホームディレクトリが表示されます。
表示されたホームディレクトリに .emacs.dフォルダを作るのですがエクスプローラーからでは作成できないので
コマンドプロンプトから mkdir .emacs.d で作成してください。
次に作成した.emacs.d フォルダの下に以下のプログラムを init.el として保存してください。

(setq process-coding-system-alist
       (cons '("gosh" utf-8 . utf-8) process-coding-system-alist))
(setq scheme-program-name "gosh -i")
(autoload 'scheme-mode "cmuscheme" "Major mode for Scheme." t)
 (autoload 'run-scheme "cmuscheme" "Run an inferior Scheme process." t)
(defun scheme-other-window ()
   "Run scheme on other window"
   (interactive)
   (switch-to-buffer-other-window
    (get-buffer-create "*scheme*"))
   (run-scheme scheme-program-name))
 (define-key global-map
   "\C-cS" 'scheme-other-window)

これで完了です。
C-c S で画面が分割され、Gauche インタプリタが起動するでしょう。
もしこれでダメでしたら、Emacas を起動し Options -> Save Options でオプションを保存
どこかに.emacs.d フォルダが作成されていないか確認してみてください。
私の場合は C:\Users\user\AppData\Roaming\ にありました。

Python の IDlE の配色を変えてみる

PythonのIDLEのレイアウトをかえてみました。
参考にしたサイトのURL : http://aikotobaha.blogspot.jp/2011/12/python-idle.html

[mycolor]
definition-foreground = #678CB1
error-foreground = #FF0000
string-background = #293134
keyword-foreground = #93C763
normal-foreground = #E0E2E4
comment-background = #293134
hit-foreground = #E0E2E4
builtin-background = #293134
stdout-foreground = #678CB1
cursor-foreground = #E0E2E4
break-background = #293134
comment-foreground = #66747B
hilite-background = #2F393C
hilite-foreground = #E0E2E4
definition-background = #293134
stderr-background = #293134
hit-background = #000000
console-foreground = #E0E2E4
normal-background = #293134
builtin-foreground = #E0E2E4
stdout-background = #293134
console-background = #293134
stderr-foreground = #FB0000
keyword-background = #293134
string-foreground = #EC7600
break-foreground = #E0E2E4
error-background = #293134

「Options」→「Configure IDLE」→「Highlighting」→「Custom Theme」で選択
こんな感じになります。


idle