DLR Specification

そんな中、メーリングリストに"New hosting API spec available..."なんてメールが流れてきました。

It’s available as both doc (http://compilerlab.members.winisp.net/dlr-spec-hosting.doc) or PDF (http://compilerlab.members.winisp.net/dlr-spec-hosting.pdf). There’s probably still a few small mismatches from 2.0B2 but it should be pretty accurate to the state of world. Where there are differences the spec should be correct going forward we just need to fix the code J.

読んでみると、ソースにはなかったメソッドなどの説明もあるし、逆にあまり記述のないクラスもあります。

「ひょっとして、まだ作りかけなの?」

まあ、結論から言うと、C#からIronPythonを「呼べないことはない」が「面倒」であるということのようです。

#結局、動的言語というのはリファレンスの辞書のお化けをたどっていく
#わけで、それを手でやるのは面倒だし、そういうWrapperを用意して
#やらないといけないわけです。

IronPython1 & IronPython2

先にも書いたとおり、IronPython1とIronPython2の違いというのを私は全然理解しておりませんでした。
まあ、メジャーバージョンアップはPython 2.5対応とか、内部的な修正とかそんなもんだろうとたかをくくっていたわけです。

それにしても、根本となるPythonEngineクラスのメソッドの互換性がないんじゃ、ちょっと困るなぁと思い、IronPython1とIronPython2のソースを比較してみると。。。

「なんじゃこりゃ?中身が全然違うじゃん!」

なんというか、ScriptEngineクラスというのが抽象化されて、全ての動的言語を統一的に扱えるよう、抜本的な変更が加えられていたようです。
いわゆるDLR(Dynamic Language Runtime)というやつの本格実装がIronPython2で行われていたのでした。
いろいろ漁ってみると、どうやらIronRubyでも新しいScriptEngineクラスを使って実装されているらしい。

#どうりで、最近IronLispやらIronLuaやらという話を聞くようになったのも
#こういうカラクリだったのね。

しかし、このScriptEngineクラスの導入でIronPythonオブジェクトをC#から扱う方法がよくわからくなってしまいました。

なんといっても、

「ドキュメントがないっぽい。」

んです。

C#からIronPythonのオブジェクトを操作できるか?

DLLが作れないので、仕方がないから直接C#からIronPythonのオブジェクトの操作、今回の場合はメソッドを呼べるか?という話になり、簡単に呼べるんじゃない?なんて言いながら、どこかのサンプルコードを拾ってきてテストしてみると。。。

PythonEngineクラスにメソッドがないと怒られました。なんで?

IronPythonからDLLが作れない?

今までは、もっぱら、「C#でコーディングしたプログラムやライブラリ」をIronPythonで継承したりして動的に拡張するといった使い方をしていました。

で、その逆もできるだろうと何の疑問ももっていませんでした。

ということで、IronPythonをベースにしてdllを作ってもらうようお願いしておりました。

なぜなら、

  • pycを使って、exeやdllにコンパイルできるというのをどこかで読んだから。
  • VS2005 SDK付属のIronPythonアドインを使って、簡単にexeやらdllやら作れたから。

であります。

使用していた環境はFePy r0.7(いわゆるIron Python Community Edition:IPCE)というものだったのですが、ipyとipy2のどちらを使うか?
という話になったとき、なんとなく雰囲気でipy2にしよう!という話になりました。

とっ、ところが。。。

「なんだか、DLLにコンパイルできないんです。」
「えっ?どうして。」
「とにかく、pycでコンパイルしようとすると、実行が終わるまでコンパイルが終了しないみたいなんです。」
「なにーっ?」

こちらでも検証してみようということになって、VS2005のIronPythonアドイン上でDLLプロジェクトを作成、ソースを組み込んでコンパイルしてみると、

「Error:ブロック内でyield文は使用できません。」

あっ、そうか。ipy1相当なんだった。
Python 2.4まではそんな話があったような。。。(遠い目)

しかし、なんでコンパイルできないんだろう?

Erlounge update - Shibuya

表題のようなErlangオフラインミーティングが渋谷であるようです。

概要は下記の通りです。

When:
2008/04/22, Tuesday, 19:00~21:30

Where:
les hydropathes
parco 1 bldg. [level b1] - 15-1 udagawa-cho - shibuya-ku - tokyo
+81 3 5456-9123

http://www.brussels.co.jp/

How Much:
probably around ~5,000 - 6,000 Y per person
(based on experience from a previous visit but it really depends on how much we order)

コーディネーターはnorton@alum.mit.edu:title=Joseph Wayne Norton]さんだそうですので、詳細はメールで聞いてみてください。

#是非参加したいですけど、いけるかなぁ。。。。

Scientific & Technical Programing in Erlang

Erlangで並行・分散プログラミングが容易に書けるという話があったので、自分で代数演算や画像処理のプログラムなどをマルチスレッドで高速化できるのではないか?と考えて、いろいろ、ああでもない、こうでもないとscratchのコードを書いていたのですが、同じようなことを考える方がやはりいるもんですね。

Scientific & Technical Programing in Erlang
http://www.dotpas.org/estp/

ためしにベクトル演算のルーチンを見てみたのですが、要素数限定のようで、ちょっと私が書こうとしていたのとは違ってました。残念!