kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

メタプログラミングの会

思えば、@kinabaさん主催の型レベルプログラミングの会に触発されて、今年の年始に、今年の目標の一つとして「メタプログラミングの会」を開催すると決めたのがきっかけでした。それから10月くらいまでずっと忘れていたのですが、色々あって、今年の暮れになってようやく開催することができました。

今回は自分で初めてUSTREAMを使った配信を試みたのですが、USTREAMによる配信の経験が無かった事もあり、あまりうまく行かず、配信を期待してくださった方々には申し訳なかったと思います。次回以降配信をするときは今回の教訓を生かしてもうちょっと良いクオリティの配信ができればと思います。幹事としての手際については、以前よりは回数をこなして慣れてきたせいもあって、昔のScala勉強会のときよりは、だいぶマシになったかなあと思います。もちろん、まだ拙い部分についてはご指摘いただければ次回以降に生かしたいと思います。

次にお礼について。まずは、メタプログラミングの会を開催する直接のきっかけになった@kinabaさん、どうもありがとうございます。会場および懇親会会場を快く提供してくださった株式会社Speee様、どうもありがとうございます。特に、懇親会をその場で行うことが出来たのはとても助かりました。また機会があればよろしくお願いいたします。また、発表者の皆様、どうもありがとうございます。当初、あまり発表が集まらずちょっと焦っていた部分もあるのですが、皆様が面白い発表を持ち寄ってくださったおかげで盛り上がったと思います。最後に、参加者の皆さま、ありがとうございます。

と、前置きはこれくらいにして特に面白かった/印象に残った発表とかについての感想をば。

メタプログラミング指向?言語Polemyの設計や実装についてのお話。Polymy自体は、パターンマッチやクロージャを持った普通の?関数型言語っぽいものだが、@valueや@typeといったレイヤと呼ばれる一種のアノテーションのようなものをプログラムの項に付加することによって、同じプログラムに異なる意味を与える、という発想が非常に新鮮で楽しかった。たとえば、@type(1 + 1)の意味は"int"になるし、@value(1 + 1)の意味は2になるといった具合。@nantokaは自分で定義することもできて、それによって既存のプログラムに新しい「意味」を与えることもできるらしい。その副産物として、マクロ定義も@macroというレイヤを定義することで簡単に実現できてしまった、というのが非常に興味深い。実装はD言語で行ったとのことだが、そのために使われたD言語のコンパイルタイムプログラミングのテクニックは、D言語にあまり詳しくない自分にとっては面白かった。この発表を聴いて、久しぶりに新しい言語を実装したいという情熱が沸いてきた。

  • 『二分木操作言語AATT』(y-hamigakiさん)

二分木(今のところ赤黒木のみらしい)に対するパターンマッチング専用のDSLであるAATTについてのお話。AATTは以前はC++で実装されていて、C++のプログラムを生成していたらしいのだが、今回はそれをDのメタプログラミング機能を用いて実装してみたとのこと。mixinコード中で再帰呼び出しが出来ない→gotoでいいじゃん、などの制限を回避するための技巧が楽しかった。AATT自体についても今回初めて聞いたのだが、ASCII ARTでパターンマッチを記述するのではなく、木構造エディタみたいなのでグラフィカルにパターンマッチングを記述できると実用的にも案外面白いんじゃないか、等と思った。

  • 『Xbyakを使った計算』(@herumiさん)

Xbyakについては、X86JITアセンブラがあるということで、その存在自体は以前から知っていたが、実際にどのようにしてXbyakを使うのか、他のインラインアセンブリ言語との比較については調べたことが無かった。C++自体は普段使うことは、ほぼ無いのだが、既存のインラインアセンブリ言語と比較して、C++のセマンティクスと自然に統合されている分、「ツールとして」使いやすそうだという印象を受けた。