DLR と Python な週末

金曜の夜に MVP ラウンドテーブル: IronPython and Dynamic Language に,土曜日には Python Workshop the Edge 2007 に参加してきました.

MVP ラウンドテーブル: IronPython and Dynamic Language

雨の降る夕闇の新宿にて.
翌日の Python Workshop the Edge 2007 にあわせて来日される Mahesh Prakriya 氏の予定を一日早めていただいて実現したというラウンドテーブルです.
氏の発表自体は基本的に翌日の Python Workshop the Edge 2007 で紹介された内容と同じだった *1 のですが,こちらではディスカッションに長い時間をとっていただいたので,主に .NET 絡みについて色々突っ込んだお話をすることができました.荒井さんに感謝.

Python Workshop the Edge 2007

晴天の駒場にて.
最近になって片言の Python を使い始めたばかりの私にとっては,読書一ヶ月分ぐらいの一日でした.
さらに,懇親会のじゃんけん大会ではなぜかつきまくりで『Python クックブック 第2版』を頂いてしまいました.ちょうど帰りに買って帰ろうと思っていたところに思わぬラッキーです.
セッションから懇親会まで通して,非常に雰囲気の良いワークショップだったのが印象的でした.きっと日本 Python ユーザ会の皆さんの人徳のおかげでしょう.
だからこそ,でしょうか.懇親会の締めの言葉を聞きながら,あのすばらしい雰囲気を残すにはどうすればよいのかは確かにもっともな問題提起と感じました.
私も DLR 絡みで IronPython を紹介していく機会が増えていくかもしれませんが,「.NET ではこうする」を振りかざし,『The Zen of Python』をないがしろにしてしまうことのないように気をつけなければと思った次第です.また,.NET コミュニティから Python の世界に入る人が迷わないためにも,「C# プログラマのための IronPython ガイド」みたいなものをちょくちょく書いていきたいと思います.
まずは『Python クックブック 第2版』を熟読して,Pythonic 成分をたっぷり補充するところから始めることにしましょう*2

Python クックブック 第2版

Python クックブック 第2版

*1:時制がややこしい

*2:なにより同書の "クックブック" の精神に大きく感銘を受けました.どういう心構えで本を書くべきか,という点でも是非読んでおくべき一冊ですね.

IronPython 2.0 Alpha 2

さて,まるで昨日のワークショップにあわせたかのように,IronPython 2.0 Alpha 2 がリリースされています.
リリースノートを見てもやはり DLR (Dynamic Language Runtime) 実装部分に注力しているようです.DLR と聞くと何か特別なランタイムを想像される方もおられるかもしれませんが,現状では .NET 2.0 の上で動く,実行時コード生成・オブジェクト交換ライブラリが DLR で,(Iron)Python はそのすばらしいテストベッドと見ることができます.我々が IronPython 2.0 Alpha 2 としてダウンロードしたソースコードのうちのかなりの部分が,実質的な DLR そのものです.
実際ソースコードをダウンロードしてみた方はご存じでしょうが,IronPython 2.0 Alpha 2 は Visual C# 2005 の上で開発されている .NET 2.0 アプリケーションにすぎません.今すぐにでも,既存の .NET 2.0 アプリケーションと組み合わせて遊ぶことができるという点は非常に重要です.
CodeDOM は実質的に IDE のデザイナでしか使用されませんでした.頭をかきむしりながら DynamicMethod に IL を並べる作業は,生産的な作業とはとてもいえません.C# 3.0 の Expression Tree を利用した実行時コード生成は,興味深くはありますが,現時点では Orcas のベータ版を使わなければ試せません.そんな中,(動的) 言語実装という視点で作られた実行時コード生成ライブラリが,既存の .NET 2.0 アプリケーションに今すぐ組み込める形で実験されているのは非常にすばらしいことです.CodeDOM に絶望した方も,LCG で IL を苦労して出力していた方も,DLR Abstract Syntax Tree を使って今不満をぶつければ,その不満のいくつかは最終版までに解消される可能性があるのです.