NetBSDカーネル内部で動作するLuaを試す
2013/12/14(土) 5:06 NetBSD はてブ情報 はてブに登録 はてブ数

NetBSDカーネル内部でLuaが動作するというのはGSoC 2010から始まり、成果が出たという報告の後、少しの間が空いて、2013年10月に本体にマージされたというニュースが話題になりました。

これを機に、新しいプログラミング言語を覚えようということで動作をさせるべく試してみました。

動作確認した環境はNetBSD/amd64 20131208です。

まず、luaデバイスを作ります。
# cd /dev
# ./MAKEDEV lua
モジュールを二つロードします。luacoreというのはprintなどを使うために必要です。
# modload lua
# modload luacore
luaモジュールをロードすると/var/log/messagesに次のようなログが出ます。
Dec 14 19:13:52 dec /netbsd: lua0: Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
sysctlを使ってlua関係の操作が詳細に表示されるようにしておくと便利です。最初はうまく動かず苦労したのですが、この設定をしておくとエラーが詳細に表示されるので非常に助かりました。
# sysctl -w kern.lua.verbose=1
kern.lua.verbose: 0 -> 1
Luaのステータスを作ります。コンテキストみたいなものかなぁ。
# luactl create s1
s1 created
/var/log/messagesに次のようなログが出ます。
Dec 14 19:14:28 dec /netbsd: lua0: state s1 created
coreモジュールを使えるようにします。
# luactl require s1 core
core required by s1
/var/log/messagesに次のようなログが出ます。
Dec 14 19:14:53 dec /netbsd: lua0: requiring module core to state s1
Luaスクリプトを作ります。やはりhello world!です。
# cat test.lua
core.print("hello world!\n")
スクリプトをロードして実行します。
# luactl load s1 ./test.lua
./test.lua loaded int s1
実行結果は/var/log/messagesを見るとわかります。
Dec 14 19:15:40 dec /netbsd: lua0: loading ./test.lua into state s1
Dec 14 19:15:40 dec /netbsd: hello world!
luacoreのソースを見ると、printだけでなく様々な関数が用意されています。

やはり、panicは試してみたいところです。

先のスクリプトのprintをpanicに置き換えますと、ちゃんとpanicしました。
hello world!とのんびりと世界に挨拶をしつつpanicによって世界が崩壊するさまは、なかなか味わい深いものでした。

名前:  非公開コメント   

  • TB-URL  http://www.tokuda.net/diary/0818/tb/