▼ 2008/04/06(日) お花見 in Tokyo
【未分類】
今日は日帰りで東京に お花見に行ってきました。
初めて東京で お花見。場所は新宿御苑。
参加者はプログラマーが多くて、花を見ながらschemeの"継続"とc言語のsetjmp,longjmpは何が違うの?といった話で盛り上がった。
きれいな花を見ながらのプログラムトークは、また格別でした。
- TB-URL http://wkpn.net/blog/0820/tb/
今日は日帰りで東京に お花見に行ってきました。
初めて東京で お花見。場所は新宿御苑。
参加者はプログラマーが多くて、花を見ながら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サーバーの処理を書くとしたら、そういうコードになってしまうと思います。
やはり、継続を効果的に使ったコードを実際に見てみないと駄目だなぁと思いました。
> 自分、声に出して技術的なコトを語ることがあまりないから、用語などを間違って使う/覚えていることがよくあるんだよ。
もったいない!是非その知識を、もっと語って聞かせてください!