Gambit Scheme: その2 ポータビリティー

「Marc Feeley教授によるGambit Schemeの実装」の続き。

GambitはSchemeからC言語へのコンパイラだ。ポータブルなCを生成することにより、Gambit Schemeのプログラムも高い移植性を持つことになる。

インタプリタは普通に動く。引数無しだとreplに入る。


$ cat hello.scm
(print "OH HAI\n")
$ gsi hello.scm
OH HAI

早速コンパイラでCソースを生成してみる。


$ gsc -c hello.scm
$ ls -l hello.c
-rw-r--r-- 1 tengu tengu 1920 Nov 3 22:24 hello.c
$ file hello.c
hello.c: ASCII C program text

コマンドを作ってみる。


$ gsc -link hello
$ ls -l hello_.c
-rw-r--r-- 1 tengu tengu 403649 Nov 3 22:24 hello_.c
hello.cに加えさらに、hello_.cを生成。これがないとmainが無いとリンカから叱られる。

Cコンパイラの起動


$ gcc -o hello hello_.c hello.c -lgambc -lm -ldl -lutil
$ ls -l hello
-rwxr-xr-x 1 tengu tengu 10212 Nov 3 22:25 hello
$ file hello
hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
$ ldd hello
linux-gate.so.1 => (0xb7fe0000)
libgambc.so.4 => /usr/lib/libgambc.so.4 (0xb7bc5000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7b9f000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7b9a000)
libutil.so.1 => /lib/tls/i686/cmov/libutil.so.1 (0xb7b96000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7a33000)
/lib/ld-linux.so.2 (0xb7fe1000)
$ ./hello
OH HAI

ハイレベル言語で最小限度の依存のアプリケーションが組める。ここで見る限りランタイムの依存はlibgambc.so.4だ。これもstaticにリンクしてしまえば、コマンドだけを出荷することができる。これは画期的だ。早くこれを使って何か作りたい。

プレゼンでは「gsc -exe」というオプションで全部やってくれるようなこと書いてあるが、そんなオプションが無いようなことを言われた。ちなみにバージョンは:


$ gsc -v
v4.2.8

でも本格的に使うとなると必ずCソースやライブラリとリンクするようになるので、このようにCを生成して、あとはCのツールチェーンに任せるってのがクリーンなやり方なんだろう。

ポータブルなscheme

このように生成されたCコードはCPUアーキテクチャ、Cコンパイラ、OSなどに依存しないポータブルなものだ。お好みのCコンパイラでプログラムを作ることができる。つまり、Cコンパイラのある環境ならほぼGambitのプログラムが動くと考えていいようだ。

GVM: Gambit Virtual Machine

GambitコンパイラはGVMをターゲット言語とする。
gscはscheme --> GVM --> Cという流れでコードを生成していく。

GSCはビルド(configure)時にターゲットとなるOS、Cコンパイラ、32/64ビットなどの属性が解決される。つまり、一つのGSCで複数のOSやCコンパイラ向けのコードを生成するのは無理なようだ。一方、Cコンパイラを意識した最適化が行われているようである。

ランタイム環境での依存は標準Cライブラリだけと書いてあった。アプリケーションは生成したCコードとして配分できる利点がある。つまりCコンパイラさえあれば(gambitが無くとも)、どこでもそれをビルドできる。

サポートされたCPUアーキテクチャ

など。
新CPUへの移植所要時間はなんと0分から60分!

変ったプラットフォーム

ほんとうにどこにでもはびこる雑草のようなschemeだ。色々面白い使われかたされているようだ。
まだ、90ページ中22ページしかカバーしてない… 続く。