ようこそゲストさん

したっぱプログラマーの日記(The diary of a minor programmer)

2008/04/06(日) お花見 in Tokyo

未分類

今日は日帰りで東京に お花見に行ってきました。
初めて東京で お花見。場所は新宿御苑。

参加者はプログラマーが多くて、花を見ながらschemeの"継続"とc言語のsetjmp,longjmpは何が違うの?といった話で盛り上がった。

きれいな花を見ながらのプログラムトークは、また格別でした。

1: mynz 2008年04月07日(月) 午後4時50分

Cのsetjmp/longjmpはスタックの内側から外側にジャンプするだけだけど、Schemeの継続は継続自体は 外から内側に入ることもできるし、 オブジェクトとして扱えるから、変数に収束することもできる。

GUIのイベントドリブンモデルやWebサーバ処理のように一定時間以内にメインループに処理を返さなければならない場合など、現状コールバック呼び出しの環境と継続を途中で保持し、後で好きな場所・タイミングで継続を再開できる。なので、割り込みや並列処理がスマートに表現できるよ。

2: わけん 2008年04月07日(月) 深夜0時14分

> setjmp/longjmpはスタックの内側から外側にジャンプするだけだけど
外から内も行けるような気がするのですが…。僕の勘違いですか?
って思って実際やってみたら駄目でした。スタック保持してないんですね。


> 変数に収束することもできる。
収束ってのはどういうことでしょう?


僕の現状の理解をまとめます。C++で言うと「Delegator(一般名称じゃない?)を作ってそれを、スレッド作ってそこに投げる。」みたいなものなんかなぁと。それをスマートに記述できるイメージ。コンパクトで持ち運び可能なスレッドみたいな。
ずれてますかねぇ?

ところでAmazonでGauche本買ってみようと思ったら、売り切れてましたorz

3: mynz 2008年04月07日(月) 深夜2時02分

収束ってのは英語のbindの直訳らしい。Cでいう代入よりも、Javaでいうリテラルに対して名前を与える行為が近いと思う。

わけんの理解がずれているかどうかは、 “みたいなもん”の程度と求める精度次第。

でも、昨日話したとおり、C/CPPの知識を持ち出して、Scheme/Lispを理解しようとすると本質を見誤るよ。

4: mynz 2008年04月08日(火) 午後5時39分

なんか自分、ずっと"収束"って書いているけど、"束縛"の間違いだね。
こりゃまた、恥ずかしい。

5: わけん 2008年04月08日(火) 午後11時00分

> わけんの理解がずれているかどうかは、 “みたいなもん”の程度と求める精度次第。
大きくずれては いないってことですね。

> C/CPPの知識を持ち出して、Scheme/Lispを理解しようとすると本質を見誤るよ。
おっしゃることは分かりました。本質を知るにはある程度の量、読み書きしないと駄目そうですね。実用性を見いだせればなぁ。

> なんか自分、ずっと"収束"って書いているけど、"束縛"の間違いだね。
boostのbindと同じ考えで良いんですよね?
間違ったのは「Oh! 最近、Englishばかり使ってて日本語しゃべってなかったから間違っちゃったYo!」ってことなんですよね。

6: mynz 2008年04月08日(火) 深夜1時27分

いや、正直自分の感覚からすれば、わけんのC++を用いた解釈は無理があると思う。もっと素直なジャンプだよ。

束縛がboostのbindと同等かは、まぁ外していないと思う。

自分、声に出して技術的なコトを語ることがあまりないから、用語などを間違って使う/覚えていることがよくあるんだよ。

7: わけん 2008年04月09日(水) 午後11時24分

ズレているようなので考え直してみました。
うーん、まず、GUIのイベントドリブンモデルやWebサーバ処理に利用できるってのが、分からないです。マルチスレッドにして、そっちにタスクを投げといて、メインループは回し続けるってのなら分かるし、自分がGUIやWebサーバーの処理を書くとしたら、そういうコードになってしまうと思います。

やはり、継続を効果的に使ったコードを実際に見てみないと駄目だなぁと思いました。

> 自分、声に出して技術的なコトを語ることがあまりないから、用語などを間違って使う/覚えていることがよくあるんだよ。
もったいない!是非その知識を、もっと語って聞かせてください!


名前:  非公開コメント   

  • TB-URL  http://wkpn.net/blog/0820/tb/