著作一覧 |
堪能した。(以下は、GaucheNightというエンターテインメントにおけるロールに基づいて観客としての立場から書くから、実際のその人とは関係ないことだ。それにリアルタイムにメモを取ったわけではないから、うろ覚えでの再構成)。
黒田さんは実におもしろい。(最初のうちは)ぼそっと否定するわけだが、それが実にいい味出してる。たとえば、Schemeに対する5つの誤解に対して、「どこが誤解なんだ?」
山下さんがこれまた実にいい。なんていうか、主義に殉ずるって感じ(っていうか、そうじゃん)なんだがこれっぽっちも悲壮感がないところがおもしろい。最初からいきなり飛ばしてたけど、ちょっと失念。マクロの95%は不要。関数呼び出しのコストなんて考えない。
まつもとさんは、マクロは良くない。なぜならば、言語のセマンティクスを破壊する(おれの言語を変えるな)。黒田さんから、そりゃアローガンスと突っ込みが入るが、まあ、それがこの場で唯一の言語開発者なんだから、そういうもんだろうということで収まる。
で、黒田さんは(Common Lisp原理主義者ではなく)仕様原理主義者の立場から、Schemeを批判する。たとえば、コンパイルが無い。そこで、河合さんから、それは言語仕様にコンパイルが無いという意味か? と疑問が入る。それは、当然、その通り。だとすると、Common Lisp以外の言語は全部、だめということになるんじゃないか? もちろん、その通り。
つまり、仕様が完全であれば、処理系がどうなろうとどうでも良い。したがって、ソースコードの価値を最も高く保つことができるのは、ただ、Common Lispだけ。処理系独自の拡張は悪。
そこらあたりから、なぜShcemeがだめかという話になり、たとえばドットリストはエラーだという話になる。エラーにならないけど……、いやそれは実装がそうなっているというだけで、仕様上は未定義だ。なるほど、という感じ。
さらに、Common Lispの言語仕様の順番の話とか(まず構文、次にリーダ、それによって内部にオブジェクトが展開されるので、そのオブジェクトについて定めるという順序になっているという話とか(これかな? 目次を見ると確かに、syntax, evaluationと来てから、typesとかに入っていくけど。Common Lisp Hyper Spec……いや、そうじゃなくてChapter2が字句、リーダ、語句の順となっている点か)、これはなんか目から鱗な話だった)
で、やましたさんが、関数の引数の拡張の話をしておしまい(ここはHaskelでどういう意味を持つのかわからなかったので、理解できなかった)。
追記:完全なコンパイラの話があった。Haskelのコンパイラかな? IPアドレスの比較がBignumになるけど、それをアプリケーション的に最適化するためにアセンブリ出力するマクロを作る話を黒田さんがしたのをやましたさんが受けてだったような(追記:間違い。スターリン(なんて意味深な名前なんだ)というSchemeの処理系)。あるいはHaskelをS式で組んだ実装の話。でもREPLが無い。コンパイラだから。(脈絡がないから、記憶がごっちゃになってるようだ)
public class FizzBuzz { public static void Main() { for (int i = 1; i <= 100; i++) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); if (i % 3 == 0) { sb.Append("Fizz"); } if (i % 5 == 0) { sb.Append("Buzz"); } System.Console.WriteLine((sb.Length == 0) ? (object)i : sb); } } }5分くらいかかった。
ジェズイットを見習え |