Mac OS X への Io のインストール

本記事の Io とは Io 言語のことです.*1

さて,本題に入ります.Mac OS X に Io をインストールするのなら,MacPorts が便利です.

$ sudo port install Io

するだけでインストールできます.しかし,MacPorts がインストールする Io には問題があります.それは,dylib が働かず addon のロードに失敗するという問題です*2

これを解決するには,MacPorts ではなくソースからインストールしなければなりません.しかし,Io 言語には次のような問題があるので簡単ではありません.

  • Io はリビジョンによってビルドできたりできなかったりする.最新のリビジョンをもってくればいいかというとそうではない
  • Io はコミュニティが小さいので,サポート各 OS についても最新のバージョンしかサポートできない.Mac OS X でいうと,Lion 以外は自力で解決しないといけない

そこで,Io のインストール手順をパッチとともに紹介しようと思ったのですが,手順が長くなるので自家製 port (以下,passingloop-ports)にまとめ,GitHub で公開しました.この passingloop-ports を使うと,

$ sudo ports install Io@20110908

するだけで Io をインストールすることができます.

本記事では執筆時点で私の環境:

を対象に,passingloop-ports の導入法と,Io のインストール方法を紹介します.

passingloop-ports の導入

passingloop-ports を導入するには,

  • (1) GitHub から passingloop-ports を入手
  • (2) PortIndex を作成
  • (3) sources.conf に passingloop-ports を追加

します.

(1) GitHub から passingloop-ports を入手
$ git clone https://passingloop@github.com/passingloop/passingloop-ports.git
(2) PortIndex を作成
$ cd passingloop-ports
$ portindex
(3) sources.conf に passingloop-ports を追加

(1) で作成した passingloop-ports の URL を ${prefix}/etc/macports/sources.conf に追加します.デフォルトでは sources.conf の最終行に rsync の URL が書かれていますので,その一行上に追加するのが分かりやすいでしょう.

file:///Users/passingloop/passingloop-ports
rsync://rsync.macports.org/release/tarballs/ports.tar [default]

上の例では,ユーザ passingloop のホームディレクトリに passingloop-ports を置いています.

passingloop-ports による Io のインストール

これで,passingloop-ports を使う準備ができました.試しに,

$ port list Io
Io                             @20110908       lang/Io
Io                             @2009-11-04     lang/Io

と Io を探してみると 2 つ表示されました,上の @20110908 が passingloop-ports によるものなので,こちらをインストールします.

$ sudo port install Io@20110908

依存関係のあるパッケージも port がまとめてインストールしてくれます.インストールが無事終ったら早速使ってみましょう.

% io_static 
Io 20110905
Io> Random
==>  Random_0x1004df370:
  bytes            = Random_bytes()
  flip             = Random_flip()
  gaussian         = Random_gaussian()
  setSeed          = Random_setSeed()
  value            = Random_value()

ちゃんと Random プロトタイプが使えます.これで 7つの言語 7つの世界 第 3 章 Io 言語のセルフスタディにとりかかれます.

MacPorts の問題点

余談ですが,sudo port install Io@20110908 でインストールされる依存パッケージに yajl1 があります.MacPorts の公式 ports にも yajl が含まれているのですが,この yajl port が古いバージョンだったり壊れていたりいるので,yajl1 として passingloop-ports で作りなおしています.

MacPorts は 1万2000種類以上もの多くのソフトウェアが使えるというのが魅力なのですが,ソフトウェアの人気が無くなったり port メンテナが忙しかったりで,古いバージョンのまま放置されている ports が混じっています.今回 passingloop-ports で作り直した Io と yajl も,そういった古いバージョンの ports です.

Ports の種類は多いけど,その中には古いまま放置されている ports が含まれているので注意が必要」というのが MacPorts の問題点かもしれません.

おわりに

本記事では MacPorts で Io をインストールするための passingloop-ports とその利用法を紹介しました.くわえて,Io の問題点として,

  • リビジョンによってビルドできたりできなかったりすること
  • 最新でないバージョンの OS へのサポートが不十分

すなわち,「インストールに手間がかかる」ことを指摘しました.また,MacPorts の問題点として,

  • 動かない古いバージョンの ports が放置されていること

を指摘しました.

Io を MacPorts でインストールしようとすると,これらの Io と MacPorts の問題点を両方踏んでしまうので,自家製 ports を作って対処することになりました.この ports7つの言語 7つの世界 第 3 章 Io 言語のセルフスタディをやるためだけに作ったようなものなのですが,きっと,セルフスタディよりも ports 作成のほうが時間かかっています.

ここまで長々と MacPorts による Io のインストール方法を説明してきたのですが,もし,Lion を使っているのなら Homebrew でインストールできる そうです.実を言うと,こちらのほうが楽そうです.

*1:検索用

*2:7つの言語7つの世界第3章のセルフスタディを進めていくと,2 日目で Random プロトタイプを使えずに詰みます.