Linux kernelにSchemeを組み込み 51
ストーリー by yasu
次はPerl 部門より
次はPerl 部門より
moriwaka曰く、"Linuxカーネルはオープンソースであることもあって、これまでもhttpサーバーが組み込まれたりしてきたが、ついに言語処理系を組み込むツワモノが現れた。
SchemixはLinuxのカーネルパッチとして実装されたScheme処理系である。専用のデバイスファイル /dev/schemix をインターフェースとしてSchemeのREPL (read, eval, print loop) を行う。現在はlinux 2.4.20向けのパッチがリリースされている。"
理由はいくつか書かれているが、
It's fun
が大きそうだ。
kernelにインタープリタ (スコア:2, 興味深い)
って最近では特に珍しい物じゃないと思います. SolarisやFreeBSDではFORTHインタープリタが組み込まれていますし.
ただ, それをデバイスとして使用できるという点とLisp系言語だという点では面白い試みだと思います. FORTHはやっぱり言語としてクセが有りすぎ(簡単で面白いのですが)なので, いじくるならLispという人は多いのではないでしょうか.
Re:kernelにインタープリタ (スコア:2, 参考になる)
Scheme は一種のマルチタスクだの例外処理だのが言語規格内でできます(継続と末尾呼出の最適化)しコールバック関数の類がさくっと書けます(λクロージャ)。Scheme を選んだ理由はこう云うところにもあるんじゃないでしょうか。
Re:kernelにインタープリタ (スコア:1, 参考になる)
Re:kernelにインタープリタ (スコア:1, 参考になる)
VM=Virtual Machine, CMS=Coversation Monitor System, YMS=?
くわしくは「OSシリーズ11 VM」(共立出版)あたりを見て下さい。
大昔なので、AC
NetRexx (スコア:1)
Rexxの生みの親であるMike Cowlishawの手によってJava上に実装されたNetRexx [ibm.com]があるので、Javaが動くプラットフォームならRexxが使えます。
Re:kernelにインタープリタ (スコア:1, 参考になる)
Solaris、っていうよりSPARCマシンのあれは、 OpenBootPROMモニタではないですか? PCならばBIOSに相当するものであって、 カーネルが動かしているものではないと思います。
Re:kernelにインタープリタ (スコア:0, 参考になる)
Re:kernelにインタープリタ (スコア:0)
Re:kernelにインタープリタ (スコア:1)
FreeBSDの場合、FORTHが組み込まれているのはカーネル本体(/kernel)じゃなくて、ブートローダー(/boot/loader)だと思うんですが。
Re:kernelにインタープリタ (スコア:1)
やあご指摘ありがとうございます. /usr/src/sysの下にあるだけでkernelに組み込まれていると思い込んでいることがバレバレのおバカなコメントですね.
# いまだにboot1とboot2の区別が理解できていないのでID
Re:kernelにインタープリタ (スコア:0)
Lispよりも覚えている人が多いんじゃないでしょうか
Re:kernelにインタープリタ (スコア:1, 興味深い)
cがまともに書ければ、lispなんて簡単にできるでしょう。
------------------------- Excess and Obsolete
Re:kernelにインタープリタ (スコア:2, 参考になる)
Cにしろ、BASICにしろ、構文解析が必要なプログラミング言語なので、軽く実装するのは難しいでしょう。
FORCEやLISP系言語が使われるのは、これらが構文解析の不要な言語だからじゃないですかね。
Re:kernelにインタープリタ (スコア:1)
なんで R5RS [schemers.org]ではいれちゃったんだよ。
インタープリタといえば (スコア:1)
10 print kernelversion$
run
とやって 2.4.xx と返ってくるとか。
#でも、どっかの、BASICで一躍羽振りを良くした会社が
#インタプリタを提供すると揉めそうだなあ(苦笑).
Re:インタープリタといえば (スコア:2, おもしろおかしい)
Warning: unable to open an initial console
Warning: unable to exec /sbin/init
Warning: unable to exec /etc/init
Warning: unable to exec /bin/init
Warning: unable to exec /bin/sh
Kernel panic: No init found. Try passing init= option to kernel.
Re:インタープリタといえば (スコア:1)
print kernelversion$
とやって 2.4.xx と返ってくるとなるのかもしれず
これって、スクリプト自体が、カーネルに組み込まれたってことでいいんですよね?
Re:インタープリタといえば (スコア:0, オフトピック)
動いてるカーネルにadbでパッチ当てって普通だよね?
Re:インタープリタといえば (スコア:0)
次はPerl ってことは (スコア:2, おもしろおかしい)
Re:次はPerl ってことは (スコア:1)
# 初期の Smalltalk で、Lisp 実装のがあったような記憶……
どこまでSchemeなんだろう (スコア:2, 興味深い)
さらに Scheme でコードを書いてそれをデバイスドライバにできるみたいですから、通常の実行形式としても Scheme のコードが動いたりするのですかね。
サンプルコードの末尾に、カーネルの exported variables も操作できる、っていう例が載っていますけど、これって一体なんでしょう。カーネルで使っているグローバル変数をいじれるんでしょうか。だとしたらまったく secure じゃない…ちがうのかなあ。
内部はどうなってるんでしょうね。システムで使うリソースがすべて Scheme のオブジェクトだったりしたら面白いんですけど。あ、さすがにパフォーマンスに問題が出るか…。そのあたりはどうやって折り合いをつけてるんでしょうね。どっかで変換かけてるだけなのかな。
以上、中途半端な興味しかないので流し読みしての感想。
Mini-Scheme由来 (スコア:2, 参考になる)
ソース見ました。TinySchemeを元にしているんですね。
TinySchemeはMini-Schemeを元に作られています。 Mini-Schemeは1ファイルのソースのみだけどちゃんとGCもついてるScheme処理系。 元々Atsushi Moriwakiさん(たぶん森脇淳さん)が作られて、 その後Akira KIDAさんがメンテされていた、と ドキュメント [indiana.edu]には 書かれています。AM-Scheme [vector.co.jp]とはどういう関係なのかな?
# ちなみにMini-SchemeはPUBLIC DOMAIN。
Lisp Machine (スコア:1)
Re:Lisp Machine (スコア:0)
Re:Lisp Machine (スコア:1)
やっぱ
Contents Address Register
Contents Data Register
とかいうレジスタ名でないといけないのでしょうか?
(レジスタ名はたぶん間違っているはず...)
Re:Lisp Machine (スコア:0)
いや、ネタでしょ。
なにがうれしいのか (スコア:1)
Scheme でデバイスドライバとか作って、それをCに変換して
とかできちゃったりするのでしょうか?
いや、先日の Squeak の記事を思い出してふと思ったのですが
インタプリタでプロトタイプつくれるならいいかも。
Re:なにがうれしいのか (スコア:0)
「楽しい」「楽しくない」なので無問題。
Re:なにがうれしいのか (スコア:1)
just for fun ONLYってことはないでしょうね。(うまく出来ているならば)実用性も十分期待できる。
言語の能力が(Cより)高いと、プロトタイピングも楽でしょうね。てゆーか楽です。
Cみたいな中級言語で苦労して書くのは、本番コード、つまり最後の一回だけで済ませられる(のが究極の目標)ってことで。
余談:
Squeak入門 過去から来た未来のプログラミング環境 [yfcbookshelf.com]、読み始めました。
で、最初のほうに書いてあって今更知ったんですが、Squeak→Cトランスレータって、
Squeak(Smalltalk)言語のフルセットじゃなくサブセットを変換の対象とするんですってね。
フルセットの(妥当なコスト範囲での)変換は無茶だろうなとクビをかしげていたんですが、長年の疑問が解決。
#注:真人間ならソースを読んでとっくの昔に気付いているべきことなんですが(笑)
余談2:
Javaの(本家の)VMは極端だとしても、インタプリタ処理系が「遅い」のって、その処理系の起動にかかるコストも結構大きいっぽいですよね。
カーネル内に存在し、いわば常時立ち上がってるままの処理系なら、その辺は気にしなくて済むわけで。
RDBMS+OS (スコア:1)
いや、昔Oracleがしくじったのは知っていますが。
Re:RDBMS+OS (スコア:1)
次世代あたりからその手の機能が入りだすよーな予感が。
あれ?次世代ファイルシステムって・・・・・CVS?
-----------------
#そんなワタシはOS/2ユーザー:-)
それはお懐かしや (スコア:1)
Re:RDBMS+OS (スコア:0)
せめて WebDAV にしてください。
Re:RDBMS+OS (スコア:0)
> PCから作業する時にガバっとサーバーから取り出す
有名なところでは、AndrewFS とか CodaFS がまさにそういうのを
実現したものです。
Re:RDBMS+OS (スコア:0)
事実M$は、その方向で進むんじゃなかったっけ?
Windows のレジストリみたいになりそう (スコア:1)
まあでも考え方としては悪くないと思います。
Re:RDBMS+OS (スコア:1)
いや、Relationalじゃなかったかな.. とにかくそこら辺「かっこいい」 と聞いた記憶があります。
# とかいてフォローを待ってみたり
やめた方がいいような(;´Д`) (スコア:1)
そうすると、確かにカスタマイズが容易になりますが、WindowsのActiveXやVBScriptのような使いかたが出来たりしたりすると、それらと同じくセキュリティ上致命的な問題を恒常的に抱える羽目になるのではないでしょうか?
# 杞憂で終わればいいのですが…
Re:やめた方がいいような(;´Д`) (スコア:1)
ブート時に init=/bin/scheme というのが、schemeマシンとしてはいいのでは?など、デバイスにした理由がよくわからじ。
Re:やめた方がいいような(;´Д`) (スコア:0)
Schemeがカーネル「内部」で動くことに意味があるのであって、外で動くこととは明確に違う。カーネル内部の変数が見えたり内部APIが呼べたりするのはいろいろ面白そうだ。
Re:やめた方がいいような(;´Д`) (スコア:1)
これをセキュリティ穴と呼ぶなら、LodableKernelModule(てゆーんだっけ?)も穴なのでしょうか?
コードのフォーマットがバイナリかテキスト(Schemeソース)かが違うだけ、ですよねえ…?
これまたやっぱり知らないんですが、同じようにLKMも穴扱いされて使われないもの、なのでしょうか?
たとえば問題のデバイスファイルを、
一般ユーザー権限じゃアクセスできないようにpermission設定するとかすれば
いいんじゃないかな(てゆーか最低限それくらいはするよね)、
と思ったんですが、Unix的にはそういうものではないんでしょか?
Re:やめた方がいいような(;´Д`) (スコア:0)
そうすると、どこらへんがセキュリティ上致命的な問題を恒久的に抱えている構造なのしょうか?
# Artane.なんぞの発言を気にするほうが間違っているか…
Re:やめた方がいいような(;´Д`) (スコア:0)
おそらくこの機能はデバッグ時など特定の場合にのみ有効にするのが前提なんだと思います。
scheme と lisp と (スコア:1)
emacs 組み込みの kernel を是非
きっと多機能 kernel だ
「それがどうした、おれたちには関係ない」
Re:scheme と lisp と (スコア:0)
Re:scheme と lisp と (スコア:1)
妄想してしまうがとりあえずEmacsのお世話になってるのでID
-- やさいはけんこうにいちば〜ん!
Re:scheme と lisp と (スコア:0)
というのはともかく、elispはcommon lisp系なのでschemeとは微妙に違います。
# とはいいつつ defun と define の違いくらいしか知らないので AC で
しまいには (スコア:1)
Windowsを組み込むとか...
Mac OSXを組み込むこと...はないか...
# つまりはPCエミュレータを組み込めばよい?
最近はよくあること。 (スコア:1)
インタプリタは組み込み済。ブート後
ユーザーランドから組み込む機能は今の所
無いけど。ACPIといいまつ。
これはOpenFirmと違ってFirmwareの機能では無いです。