メタプログラミングの会に参加しました。
絶対迷うまい、とあらかじめ地図をしっかり頭に叩きこんでおいたのに、まさかの乗り換え時に迷子っていう悲劇が発生しました。走り回って、凹んだ。
プログラミング言語Polemy(仮)
ようは eval に評価機を指定できる言語、とでもいえばいいのかなあ。
eval(evaluator, "src")
評価機の実装は関数単位。
def evaluator.method(arg, ...)
関数側で引数の評価方法を指定できる。
def evaluator.method(type arg, value arg2, ...)
元々の発想は「C++ ではコンパイル時に型レベルで、実行時に値レベルで『計算』が行われる。それ全部好きなレベルで『計算』できるようにすればよくね?」みたいな感じで頭いいなーという感じですよね。
上の ruby みたいな何かでは evaluator は first class ぽいけれど Polemy ではそうでないので、関数の評価時に「実装にはこのレベルの計算を使ってね」みたいなことはできない。
C++ 知ってる人向けにいうと、ポリシークラスがウルトラ組み込みでウルトラサポートされるようになったぜみたいなウルトラ話です。
しかし kinaba さんの発表は本当に魔法か詐欺としか思えないレベルでわかりやすいなあと思った。今回は割合自分でも分かっている気持ちになってる話だったからかもしれないけれど、恐ろしい…
GHC の書き換え規則(と融合変換)について
この話聞くの何度目だ感があったので作業してました…ごめんなさい。最新事情は知らないけれどどういうものなのかはもう既に二回か三回聞いてるからなあ。
帰って来たNemerle
半分がやさしさではなくマクロでできている言語の紹介。この後に特別面白い話が続いた影響で完全に話の詳細を忘れてしまいました…ごめんなさい。
二分木操作言語AATT
アスキーアートでパターンマッチを書く、といういかにもな DSL もしくはコードジェネレータの話で、面白かった。パターンと、それに対する操作を同時に書けるのは強力だけれど、両方別々にして「ツリーリテラル」だけを提供すればもっといいんじゃないかなーという話をはみがきさんにしたところ、元々が C++ のジェネレータだから、という話で、そうかーという…
なんかもうちょっと皆で叩きあえば、汎用的な何かが生まれそうな雰囲気。
Xbyakを使った計算
Xbyak 入門的な話。JIT とかはよくて、実は C++ で自然に書けることにも意味があるんだよーというような主張をされていて、使ったことはないけれど、確かにそうかもだなーと思った。というかこれなら自分でも普通に使えそうだと思った。あと herumi さんの移植性とか拡張性に対するセンスは、結構シビアというか、現実的だなあと思った。
話の後で、コンパイル時にコード生成できないのかな、と思ったけれど、アセンブラ書く必要があるっていうのは、つまり何か大量に回す何かがあるっていうことなので、コード生成のコストとか無視だよなあと自己完結した。
1999年のメタプログラミングライブラリASIS(仮)
IDE とかのために処理系が機能を提供しようっていう発想は Ada がいち早くやってたんだよ的な話。さすが Ada 俺たちに略。
ocaml も何かそういうのやってくれないかな、というのがあるんですが、まあ自分でやれってことだろう多分…
Multi-stage Programming
multi-stage プログラミングとはなんぞや、を分かる人にしか分かりそうにない風に説明したあとで、meta ocaml で let's multi-stage programming! という話。カンマ祭。あと公式のサイトはバージョンが 3.09 で古いけれど、oleg 先生が人知れず 3.11 で動くようにしているという喜ぶ人の少なそうな情報が。
Ruby Quineコードリーディング(仮)
すっかり quine キチになってしまった mametter さんのかかれた quine コードを読んでみたよ、という話。quine とか今時普通なのでネタが重要、という話を聞いた時には、世も末だと思った。
メタ文字でx86メタプログラミング
個人的に kinaba さんを抜いて(!)今回の発表で一番面白かった。内容もあるけど後半の畳み掛けるようなテンポとかもうまくて、なれてるんだろうなー感。内容はウルトラ短くまとめると、一部の記号だけで x86 コードを書いてみるよ!という話なんですが、これはゴルフとか好きな人ならこれだけでまあ入れ食いかなーと思うので、これ以上はあえて書かないことにします。
選抜されたメタ文字が html エスケープに引っかからないのは、実は狙ってたという恐ろしい発言が発表の後に飛び出て、サイボウズは怖いと思った。どんな会社だ。
C preprocessor as DSL
プリプロセッサはエミュレータとか書くときに便利だよという話。ranha 君がそのアプローチだとフラグとかのせいで綺麗にかけないと思うんですけどどうなんですかねねえねえみたいな問い詰めをしてて容赦ないなと思った。返答は、スーファミとかならともかく、PSP とかだと普通に 32bit だし困らない、ということ。比較的短めでした。
Boost.PP でラムダ
プリプロセッサガチキチガイのでちまるさんが懇親会でされた話。聞いたことあるなーと思ったけれど聞いたことなかったので聞いてよかった。まずプリプロセッサ書いててラムダが欲しくなる時点で完全についていけないと思ったけれど、ボクも型レベルラムダ欲しいと思ったことは何度もあるし、それを考えるとまあ普通のことなのかなーとか…ほぉんとぅかぁ?ちゃんとパンツはぃてぅかぁ?
発表の後に java はマクロがないためにリアル残念コードを書かされて憤死っていう話をチラッとしたりしたら java 大嫌い人間だと勘違いされてしまいましたけれど、嫌える程使ってないですしもうあそこまでどうしようもないと、早速どうでもいいという感想しか抱けないです…
しかし、懇親会では三つのディスプレイでラブライブ!の PV が流されていたり、二次会でなぜかミルキーホームズ試聴会が行われたり、どうしてこうなった?キチガイ行為は出禁にならない程度にね♪