無料ブログはココログ

« 開発環境 | トップページ | AndroidでMindをどうやって動かすか(2) »

2013年5月 3日 (金)

AndroidでMindをどうやって動かすか(1)

 Mindは(Windows,Linuxとも)だいぶ以前から、コンパイラが「Mコード」と呼ぶ中間コードを生成し、(Mindで言う)「カーネル」の中にある「ディスパッチャ」と呼ぶごく小さなルーチンがそれを逐次実行する方式になっている。
 たとえばMindのオブジェクトコードは拡張子が .mco というバイナリファイルになっていおり、OSから見ると単なるデータファイルのように見えるがこれがプログラムの本体である。

 検討初期からAndroidでも基本的にこの機構のまま行けるだろうと思ったが実際その通りだった。
 ちなみに現段階ではコンパイラはAndroid向けを別途作ったわけではなく、LinuxのMindコンパイラをそのまま使っている。MコードがOS非依存になっているおかげである。(将来的には内部の文字コードの関係から別開発の必要が生じるかも知れないが)

 Androidではプログラム記述がJava必須となっている。しかしJNIという機構があり部分的に C, C++ で記述できることになっている。一方、現行のMindは「カーネル」(ディスパッチャやプリミティブな機能の定義部分)が C記述であるため、C を媒介にすることで間接的にMindを動かすことができるだろうと考え、やってみたところこれもその通りだった。
 Java, C, Mind の処理分担を図で示すと以下のようになる。

001_3_cut_3

 図では三つが同じ分量のように見えるが、当然ながらユーザが記述したプログラムはMindのコードとなるため、プログラム規模が一定以上あればMindのコードが多くを占めることになる。
 これは重要な点だが、MindのソースコードがCやJavaに変換されるわけではない。CやJavaのプログラムも併用するのは確かだが、それらはMindの実行時、最下位レベルではCPUやOSを駆動する必要からそこを経由するに過ぎない。

- 文字コードについて -

 今のところ内部処理はLinux版のMindを(コンパイラ、ランタイムライブラリとも)そのままEUCコードで走らせており、Android側との境界でUTF-8に変換している。
 本来であればMindの内部処理もUnicodeにしておけば良いのだが、Mindの利点である高度な文字列操作を行うには同じUnicodeでも固定幅コード(Mindの実績ではUCS2)を使う必要があるため、Androidとの境界でコード変換が必要(たとえば UTF-8 ←→ UCS2)という点では変わりない。



参考URL: 「日本語プログラミング言語Mind」 (スクリプツ・ラボ)

« 開発環境 | トップページ | AndroidでMindをどうやって動かすか(2) »

コメント

謎に包まれたMindの実行形態、そしてMコード。楽しく読ませていただきます。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/100109/57300954

この記事へのトラックバック一覧です: AndroidでMindをどうやって動かすか(1):

« 開発環境 | トップページ | AndroidでMindをどうやって動かすか(2) »