関数型言語で書かれたOSってあるのかな

2
NOKUBI Takatsugu野首貴嗣 @knok

関数型言語で書かれたOSってあるのかな

2015-01-08 09:38:58
SODA Noriyuki @n_soda

@knok Lispを関数型言語に含めるならいっぱいありますね。 あと @masterq_mogumog さんが、こーゆーの metasepi.org/posts/2012-08-… をまとめてました。

2015-01-08 10:13:56
NOKUBI Takatsugu野首貴嗣 @knok

@n_soda qiita.com/tshinsay/items… この記事を見ていて「メモリ管理あたりは難しい」というコメントがあったのですが、実装じたいはあるのですね。「つぎはぎ感がある」というのはコメントの「穴をあけて、関数世界外で行う」というくだりがそういうところなのでしょうか

2015-01-08 10:25:22
suzaki @KuniSuzaki

Lisp Machine上のOSがあります。Symbolics上のOSがあったなーと思ったらGeneraって1982年リリースなんですね。びっくり。 en.wikipedia.org/wiki/Genera_(o… RT @knok 関数型言語で書かれたOSってあるのかな

2015-01-08 10:28:39
Hironobu SUZUKI @HironobuSUZUKI

@knok 竹内さんのeliseがあるじゃん。

2015-01-08 10:33:42
NOKUBI Takatsugu野首貴嗣 @knok

@HironobuSUZUKI 不勉強でeliseは知りませんでした。検索すると音楽の方ばかりがヒットしてつらいです…

2015-01-08 10:36:26
I moved to Mastodon. @masterq_mogumog

@knok @n_soda うーん、、、とりあえずひとつの誤解はメモリアクセスの方法が提供されていれば、如何なる作用も引き起こせる、ということだと思います。昨今ほとんどのレジスタはメモリマップされているのですから。

2015-01-08 10:40:46
Hironobu SUZUKI @HironobuSUZUKI

@knok ntt nue elise lisp で出てくる筈。

2015-01-08 10:44:03
NOKUBI Takatsugu野首貴嗣 @knok

@HironobuSUZUKI 確認できました。LISPマシンNUE上のOSがELISEなのですね

2015-01-08 10:45:44
SODA Noriyuki @n_soda

@masterq_mogumog @knok 穴を開けるのは問題ないですよね。ヒープ領域の確保も、ランタイムに一任するんじゃなくて関数型言語で記述できるようにしておけば問題なさそう。並列GCの技術も既にあるし。疑問は割り込みですが、GCを禁止して、割り込み時用に一定サイズを確保?

2015-01-08 10:48:47
I moved to Mastodon. @masterq_mogumog

@n_soda @knok 割り込みとGCは相性がわるくて、単純な思考実験をするだけでも破綻すると思います。それから、ヒープの外、つまりレジスタマップをどうやって型で管理するかもむつかしい問題な気がします。

2015-01-08 10:51:32
SODA Noriyuki @n_soda

@masterq_mogumog @knok 「割り込み処理中はGC禁止、割り込み中にメモリ確保が起きたら、割り込み時用に予約されたヒープから確保」ならOKと考えていいんでしょうか。それとも、割り込みハンドラからは、メモリ確保自体を禁止するんでしょうか?

2015-01-08 10:53:43
SODA Noriyuki @n_soda

@knok @HironobuSUZUKI あと、@KuniSuzaki さんが書かれてますが、スティーブン・レビィの「Hackers」に書かれてた、LMIやSymbolicsのLispマシンのOSの大部分は、Lispで書かれてます。

2015-01-08 10:54:47
SODA Noriyuki @n_soda

@masterq_mogumog @knok レジスタマップについては、bus_spaceみたいな抽象化をしてしまって型で管理しないというのが一つの手ですよね。あるいは Foreign Function Interface で使われている手は、一通り使えそう。

2015-01-08 10:58:15
I moved to Mastodon. @masterq_mogumog

@n_soda @knok HaskellのFFIは単に生ポインタの受け渡しになるだけです。ポインタ演算はオフセットを使うしかありません。C言語の構造体よりしょぼいプログラミングモデルになると言えます。

2015-01-08 11:06:56
SODA Noriyuki @n_soda

@masterq_mogumog @knok それはショボい。こういうのは、RPCのIDLに似た仕組みを使ってコード自動生成してやれば、もっと楽にできますよねえ。でも優先順位は低そう。

2015-01-08 11:09:51
I moved to Mastodon. @masterq_mogumog

@n_soda @knok 予約されたヒープから割り込み時にメモリを確保する方式は機能すると思います。メモリ確保を禁止すると、コンストラクタを呼べないので、おそらくプロミング不可能になると思います。

2015-01-08 11:10:46
I moved to Mastodon. @masterq_mogumog

@n_soda @knok 自動生成するしくみはあったりするのですが、、、既存のメモリマップを協調動作させるのがむづかしい場合もありますし、なにより負けっぽいです。構造体ぐらい組み込みで使わせろ感があります。。。

2015-01-08 11:12:06
SODA Noriyuki @n_soda

@masterq_mogumog @knok ありがとうございます。metasepi.org/posts/2013-02-…@takeoka さんのスライド3枚目の「あらかじめインスタンス確保」が、メモリ確保禁止ってことかなあとか思ってました。

2015-01-08 11:14:00
I moved to Mastodon. @masterq_mogumog

@n_soda @knok まぁ、、、 @takeoka さんは何もわかってないので。。。

2015-01-08 11:14:41
suzaki @KuniSuzaki

@n_soda @knok @HironobuSUZUKI ちょっと外れるけどICOTではProlog Machineを開発して、その上のOSを作っていましたね。情報処理学会誌「特集:知られざる計算機 2002/2」に色々載ってます museum.ipsj.or.jp/library/ronbun…

2015-01-08 11:15:11
SODA Noriyuki @n_soda

@masterq_mogumog @knok まあでも bus_space が裏でやってる、バスの種類依存したbyte swapやら考えると、組み込みでやるにはちょっと辛そうな気もしますです。

2015-01-08 11:15:29
I moved to Mastodon. @masterq_mogumog

@n_soda @knok @takeoka 最近は値ベースの関数型言語もあるようで、ここ1年ぐらいはさわっています。 ats-lang.org jats-ug.metasepi.org

2015-01-08 11:17:58
SODA Noriyuki @n_soda

@masterq_mogumog @knok @takeoka 泥縄で metasepi.org/doc/metasepi-i… をナナメ読みしたんですが、割り込みハンドラは専用ヒープなんですね。きれいな設計ですが、性能追求したくなったときにコピーが問題にならないか気になります。

2015-01-08 11:20:30