サンフランシスコを拠点とするプログラマのEdgar Aroutiounian氏が先日,Jeffrey A. Scofield氏が先頃公開したiOS用のOCamlクロスコンパイラであるOCamliOSのパッケージを開発した。InfoQはAroutiounian氏に話を聞いた。
OCamlコンパイラのパッチを長年メンテナンスしているScofield氏の説明によると,先日Gerd Stolpmann氏の協力のおかげで,それを公式のOCaml GitHubリポジトリのブランチ内に反映する方法が見つかったのだという。どこかの時点で,このブランチを公式OCamlリリースにマージする必要がある,と氏は述べている。
Scofield氏とStolpmann氏の開発成果であるOCamliOSを,Aroutiounian氏がOPAMパッケージにまとめあげて,OCaml開発者が簡単にインストールできるようにした。氏はさらに,OCamlコードをiOSのObjective-Cアプリに統合する方法を示す簡単なサンプルも提供している。以下のOCamlスニペットは,Objective-Cから呼び出されるコールバックを登録するものだ。
let make_string () =
print_endline "Hello Word from OCaml";
"Hello World "
let () =
Callback.register "make_string" make_string
#define CAML_NAME_SPACE
#import <Foundation/Foundation.h>
#include <caml/callback.h>
#include <caml/mlvalues.h>
int main (int argc, char **argv)
{
caml_startup(argv);
caml_callback(*caml_named_value("make_string"), Val_unit);
NSLog(@"Now using objective-c code");
return 0;
}
OCamlコードをスタンドアロンのiOS用実行ファイルにコンパイルすることは可能だが,App Storeを通じて流通するアプリや静的Cライブラリの開発には適していない。また,OCamlから利用可能なパッケージは,現時点では標準ライブラリに限られている。それ以外のパッケージサポートは,今後追加される予定だ。
InfoQはAroutiounian氏から,opam-ios
とOCaml for iOSの詳しい使用方法を聞くことにした。
opam-iosは,実際には何を提供するのでしょう?
プログラマの利便性です。OPAMはOCaml用の高度なパッケージマネージャですから,これを使ってiOS OCamlコンパイラを,OCamlの世界で第一級市民にしたいと思ったのです。
iOSアプリ開発にopam-iosを使用することによって,どのようなメリットがあるのでしょう?opam-iosを通してOCamlを使用したiOSアプリとは,どのようなものになるのですか?
メリットは,OCamlが設計の開始時点から考えられた,真の関数型プログラミング言語であることです。非常にフレキシブルですし,GUIなどで必要ならば,C言語によるObjective-C呼び出しを使って既存コードを再利用することもできます。私が想定しているのは,ビジネスロジックをOCamlで記述して,Objective-CはGUI表示に使用するような方法です。ただしOCamlはオブジェクト指向プログラミングもサポートしているので,Objective-CオブジェクトをOCamlオブジェクトとしてラップするようなことも可能です。
OCamlのiOSサポートは完成の域に達していると考えてよいのでしょうか?今後どのような機能追加を考えていますか?
iOS用のコンパイラにパッチを書くのは,さほど難しくはありませんでした。基本的な状況としては,Appleが使用しているARMアセンブラは,基本的には古いバージョンからのフォークなので,Linuxのアセンブラの出力とは多少違う部分があります。ですから本当のヒーローは,それをセットアップしてパッチを当てたコンパイラで実行し,再現することに成功したGerd StolpmannとPsellos.comの連中なのです。今現在のこれはパッチ適用バージョンのコンパイラですが,近いうちに正式にコンパイラの一部となる予定です。
そのようなことなので,今後の追加予定としては,バージョン毎にパッケージを充実させていきたいと思っています。例えば,現在用意されているのはiOS SDK 8.3までですが,コンパイラを追加することでSDK 9.2あたりまでは対応できるようになります。PsellosのJeffが素晴らしい仕事をしてくれていて,つい先頃のリリースでは,最新で最高のOCaml 4.02.3とiOS SDK 9.2に対応しました。ほぼ最新バージョンといっていいでしょう。
OCamliOSはOS X 10.11で動作し,iOS 7.0以降を対象とするコードを生成する。 opam-iosは,OCamlのパッケージマネージャであるopamからインストール可能だ。