関数呼び出し: Haskell, OCaml, Concurrent Clean

関数呼び出しの引数の取り扱いというのは、eagerとlazyの2種類あるわけですが、たいていの言語はどちらかだけを採用しているものなわけです。たとえばOCamlはeagerでHaskellはlazyです。
で、しかしそれだけでは不便なので、その逆を実現する機構をもっていたりします。たとえば、OCamlはlazyで、Haskellはseqとかがあります。しかし、これには限界があって、たとえばOCamlとかだと、http://d.hatena.ne.jp/KeisukeNakano/20060920/1158735496のようなことになったりします。Haskellの方はよく知らないですが、関数呼び出しの際に無駄なThunkを生成してしまうことになるのではないでしょうか。
Cleanの場合、引数の評価は、eagerとlazyの2種類の両方をサポートしているので、lazyやseqのような補助的な機構は使いません。そのため、煩雑なlazyを書く必要もなく、無駄なThunkが生成されることもないのです。

WebとGPL

http://wiredvision.jp/blog/yomoyomo/200802/200802061000.html
を読んで思ったけれど、そもそもWeb上のサービスはソースコードが公開されていても、そのサービスを再現するのが難しいということは少なくないよね。例えば、ユーザーベースとかデータベースとか応答速度とか、そういうものが無視できなかったりそこが一番重要だったり。
しかし、機能不足、機能変更、サービスの終了などで被る不利益は、GPLの対象と共通しているわけで。

      • -

ところで、Reddit経由で見た記事だけど、こういうコメントはRedditに付けろ、って感じなのかなぁ。