Limboプログラミング

Infernoで使われているLimboって,どんなプログラミング言語だろう.

Infernoはセットトップブックなど,ネットワークでつながれた情報家電をターゲットにしているので,その手の割と非力な計算機による分散システム上で使われることを想定している.そこで,Limboは,ハードウェアのメモリ保護機構の支援がなくても,安全に拡張できることを考えた言語らしい.

モジュラプログラミング,コンパイルおよびランタイムの強い型チェック,型付きチャネルによるプロセス間通信,ガベージコレクション,抽象データ型のサポートが,キーワードとして並んでいる.構文はCに近く,PascalがModulaに進化したのと同じ方向性と考えればいいのかな?

Hello worldは,こんな感じ.最初にモジュールのインタフェースを定義して,中身を実装するという流れ.

implement Command;

include "sys.m";
include "draw.m";

sys:	Sys;

Command: module
{
	init: fn (ctxt: ref Draw->Context, argv: list of string);
};

init(ctxt: ref Draw->Context, argv: list of string)
{
	sys = load Sys Sys->PATH;
	sys->print("Hello, world!\n");
}

このファイルをhello.bとすると,limboでコンパイルすると,hello.disというdisバイトコードが生成される.

; limbo hello.b
; hello.dis
Hello, world!

argvは使わないから,省略したら,しっかりタイプチェックではじかれた.

; hello.dis
link typecheck Command->init() 87113e19/4244b354
sh: hello.dis: link typecheck Command->init() 87113e19/4244b354

参考資料