気が向いたので。まだ問題を見てない方は、問題を見てからやったら楽しいかも。けっこう適当だよ。
- ErlangでOOPを実現する方法を説明せよ
- 例外を用いるべき場面を説明せよ
- ふつうはok/{error,reason()}でエラーとるが、エラー処理のネストが深くなったりtype/specが収拾つかなくなったりするときはまあ例外でもいいと思う。ここは宗教論争とか水掛け論になれば合格レベルかな。messagepack/erlangではリストにつけたしてくタイプの末尾再帰の関数のエラー処理で苦労した挙句例外を使うしかなかったので、例外を使う場面があってもいいと思う。
- BERTについて説明せよ
- supervision treeとは何か?
- 日本語でいうとプロセス監視ツリーってところ?OTP使ってたら常識だよね。
- 状態機械を実装する方法を説明せよ
- Erlangで静的に型チェックを行う方法とは?
- Dialyzerを使う。コンパイラに組み込んでくれたらエエのにね…。TypErでtype/specが出せるかどうかもよい指標
- 1マシンで何プロセスまで立ち上げてよいか説明せよ
- 4000万プロセスまで立ち上げたという強者がおりますね。軽量プロセスひとつにつき300ワードくらいのオーバーヘッドと言われていて、どこぞのネイティブスレッドがMB単位でスタックを確保するのとは違いますね。
- 戦闘機とカンガルーのどちらが優れているか?
- 英語だとカンガルーが即戦力で強いが、日本語になるとカンガルーは急に弱くなる。最終的には戦闘機の圧勝。戦闘機を乗りこなしたヤツだけがカンガルーを使ってもいいよ。
- 現実世界は全てActorであるか?
- 確信犯的に「はい」と答えたらまあいいんじゃないでしょうか。ぼくはActorだとは思わないけど。
- Erlangの言語仕様で残念な点を1個以上説明せよ
- Erlangの処理系の実装で残念な点を1個以上説明せよ
プリエンプティブじゃないところとか?*1個人的にはIOまわりの仕組みがprim_inet/prim_fileを結局みないといけないところかなあ。もっとIOと密結合しても面白かったのになと思う。
- Erlangはプログラミング言語ではない。理由を説明せよ
- プロセス間のメッセージングに ! を使うべきでない理由を説明せよ
- OTP使ってたら!なんて悪だよなあと気付くはず。noproc喰らった日には涙目だよね。
- Erlangで書かれたソフトウェアのデバッグとQAの方法を説明せよ
- Erlangで書かれたプログラムを高速化する方法を2つ挙げよ
- hipeでネイティブコンパイルするか、NIFで書きなおすか。ただしIO入った処理はNIF使っちゃいけないからね。
- 1秒間に"OTP"と30回発声できるか?
[ spawn(fun()->open_port({spawn, "say OTP"},[]) end) || _ <- lists:seq(1,30) ].
本当はメモリのリソース設計とかGCとかその辺りにも触れておきたいのだが、私がよく分かってないという><
補足
Erlangのプロセスはプリエンプティブですね。ウソつきましたごめんなさい。
Scheduling is preemptive. Regardless of priority, a process is preempted when it has consumed more than a certain amount of reductions since the last time it was selected for execution.