黒田節

激しく今更だけどgauche.night。

R6みたら割れるなというのはわかりますよ。
R6みればこれは出てく人当然いるだろうと思いますよ。
だって、denotational semantics なくなっちゃったでしょ。どうしようも無いですよね。
だってalgorithmic language scheme って書いてあるんですよ、タイトルに。
だからschemeが絶対に譲れない部分ってalgorithmic languageなんですよ。
programming language以前にalgorithmic languageですよね。
てことは、数学的にしっかりした背景のあるsemantics ってのを絶対捨てられないはずなんですよ。
だからdenotationalって今までやってきたはずなのに、operationalなんてなってしまったでしょ。
operationalって、言ってみればLispLispを書きましたみたいなだけの話で、あんなもの別に後ろに付録でつけてもらったって、ありがたいこともなんとも無いんですよね。
それよりも数学的な集合論に根ざしたキッチリしたdenotationalっていうのを捨てたっていうのはこれはちょっと結構由々しき問題やなていう風に僕は思ってますけど。
だから、彼らはいったい自分が何してるのかわからないんじゃないかなという感じをR6を見て僕は思いました。

どうやってもschemeschemeでいるために必要なのってのは厳密さだと思うんですよね。
で、そもそもsingleのname spaceだってcontinuationだって、あれdenotational semantics書くためにあるようなもんじゃないですか。
continuationってlongjumpをいかに意味論的にきれいに書くかっていうことで持ってきたもんだって僕は理解していて、operationalにやるんだったら別にfullのcontinuationなんて全然必要ないんですよね。

(schemeと名乗ってくれるなと)

そうですよ。それがもうすごくまともな感想だと思いますよ
僕はあれでもう道踏み外したなって感じは思いましたけど。
大体昔はおかしかったんですけどねscheme
R4から。R4から大体いがんできてますけど。僕の感じでは。
とうとうやっちゃったなって感じですよね。どうすんのって感じですけど。

R5にくらべてすごく特徴的なところがあるのかというとそうでもないんですよね。
まずfullのcontinuationを捨ててないっていうのがまずおかしいと思うんですよ。
本当にpracticalにしたかったら、昔Kent Pitmanが書いてましたけど、fullのcontinuationあるためにunwind-protectが書けないという議論になって、

(うん。書けないです)

書けないですよね。書けるわけ無いでしょ。
gaucheにunwind-protectがあるのが僕は不思議でしょうがないんですけど、まあうまいことやってるんでしょう。
ただ理屈の上では書けないです。fullのcontinuationあれば。
で、今説明すると後で、Kent Pitmanがすっごくいい例で語っているところがあるんで説明しますけど、とにかく書けないんですよ。
だけどunwind-protectが無かったら実質的なプログラムってすっごいめんどくさいことになると思うんですよね。
で、相も変わらずR6みたらwith-input-fileとかなんかwith-open-fileとか相当するなんか、ありますよね。
で、見てもらったらわかるんですけど、正常終了した時はstringっていわれるよってあるんですけど、それ以外の時はわかりませんって書いてあるんですよね。
そんな仕様でどうしてプログラム書くの?って話があるんで、あのあたりはどういうこと思ってるのかなーというのは聞きたかったですね。

結局continuationって、fullのcontinuationでなければ別にCommon Lispのrestartみたいな、dynamic extentなcontinuationは別にあっても大丈夫だと思いますけど、fullのcontinuationってものすごい重荷を背負ったことになると思うんですよね。
で、unwind-protectとfullのcontinuationどっち取りますかっていったときに、practicalな方を目指すんであればunwind-protectを取るべきだと僕は思うんですよ。
だけどそれはやめてfullのcontinuation取ってるわけですよねR6は。
だけどalgorithmic languageであることはなんか捨てたみたいな所もあって、もうどっちつかずっていうところが僕の今回のアレをざざっと見た感じの印象です。

ポータブルは大きいですよ。だからもう少し成熟すれば、例えばフリーの処理系と、コマーシャルな処理系と、それからコマーシャルな処理系の中でもむちゃくちゃ高いやつと安いやつと、そうやって出てくるわけですよね。
で、仕事の規模によってやっぱり処理系って使い分けなきゃだめなんで。
少しのプログラムを書くのに200万もするのは使えないし、逆も真で、フリーのバグに悩ませられながら何千万のオーダーの開発なんてできないんで。
そういう意味でポータビリティってものすごく大切だと僕は思いますね。
で、僕は一番そのスクリプト言語系のなかに一番不満なのはそのポータビリティってなんにも考えてない連中ばっかりで。
少なくともこいつらにエンジニアリングは語って欲しくないなと。
理学部だったら認めますけど工学部だったら学士剥奪しろよぐらい思ってます。それぐらい思ってるんですね。
ポータブルは大切ですよ。だけどなんかみんななんでそこに気づかないのかなってのが結構不思議ではあるんですけどね。
(いや、そうですよね)

Common Lispも困ったもんでscheme的な発想をする人がいて、あの仕様をチッサクしろっていう連中もいるんですよ。
僕は あのままでいいと思ってるんですけど、ただCommon Lispの一ついいなと思うのが、たとえANSIになってなくても、デファクトなものって結構あるんですね。
例えばマルチプロセシング、スレッドですね。あれって各処理系でほとんど同じなんですよ。
で、それどこから取ってきてるかというと、元々LispマシンLispのところからみんな大体引いてきてるんで、大体一緒なんですよね。
もちろんそのままコードをコンパイルできたりとかしませんけど、こちらからこちらへ移るときにものすごい変更が要るとかそいうことはあまり無い。
それからあと国際化文字のあつかいなんかも、ずいぶんむかしにexternal formatっていう概念っていうのはANSI標準じゃないんですけど昔からあって、
どこもそのexternal formatでshift_jis jis euc はたまたutf8 みたいなのを指定すれば、characterは読めるっていう形になってるんで、そういう意味では裾野は以外に広い。
なので、そいう意味ではいいと思ってるんです。
確かに今shiroさんが言われたように、例えばRPCとか使ってしまったらもうそれ最後なんですよね実は。それはそのとおりです。

でもalgorithmic languageとして、消えていくのはすごく忍びない。
僕は世の中の全てのアルゴリズム本がSchemeで書かれるようになってくれるとすごくいいなと思ってたんですけど、もうその夢だめですよね。

猛烈なアウェイ感をビールで紛らわしつつだったけど楽しかった。
Schemeではソースファイルもデータファイルも同じ扱いだってのが抽象的に感じてよくわからなかった。Gauche本ちびちび読んで確かめよう。

あと、林さんと工藤さんがいてびっくりした。工藤さん、ニフティに入ったのね