ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

IronPython 1.0.1 release

掲示板を眺めていると、IronPython 1.0.1が出ているらしいですね。
早速DLしてみました。


どこが変わったんだろう?と思って、ぐぐってみたんですが、日本語で関心もってらっしゃる方は、あまり居られない模様。
ぱっと見た所、↓石坂さんという方だけっぽい。うーむ。

変更点はBug Fixと.NETアセンブリのDLLを起動時にロードするための機構の追加のようです。

しょうがないので、1.0と1.0.1のドキュメントをdiffって見るテスト。


FAQでは、以下の違いがありますね。

  • Q: How do I create a .NET array?が記述追加。
    多次元配列の作り方の説明が盛り込まれています。
    なお、1.0でも使用可能なやり方です。(試してみた)
  • Q: How does IronPython's threading model relate to CPython's with respect to object operations?が新規追加。
    要するに、CPythonとIronPythonのスレッドモデルの違いについての言及かな?
    CPythonはグローバルロックを使っているけど、IronPythonは別の手法を使っているというように読み取れるなぁ。
  • Q: Why does ipy.exe appear to access the internet sometimes?が新規追加。
    要するに、ipy.exeがネットにアクセスしているように見えるのは何故か?という話題の模様。答えは、えーと、.NETの署名が影響している。かな?


Libの下に、site.pyがあるんですが、1.0では空だったんですが、1.0.1ではコードが追加されています。
コードを読み取る限り、以下の挙動が追加になったのかな?

  • ipy.exeの下に、DLLsフォルダがあれば、"sys.path.append("DLLs")"する。
  • DLLsの下位フォルダを探索し、.dllファイルが見つかれば、"clr.AddReference(file)"する。


なお、チュートリアルは変化無しですが、別に用意されている IronPython-1.0.1-Samples-All.zip の方の中身が変化あります。
以下のサンプルが追加されています。


Pycは、いわゆる py2exe のようなものだと思えば良いです。

$ ipy pyc.py

pyc: The Command Line Python Compiler

Usage: ipy.exe pyc.py [options] file [file ...]

Options:
    /res:rfile.resource[,(public|private)]    Include public or private resource
 file
    /main:main_file.py                        Main file of the project (module t
o be executed first)
    /out:output_file                          Output file name (default is main_
file.<extenstion>)
    /target:dll                               Compile into dll
    /target:exe                               Compile into console executable
    /target:winexe                            Compile into windows executable
    /platform:x86                             Compile for x86 only
    /platform:x64                             Compile for x64 only
    /platform:Itanium                         Compile for Itanium
    /r: or /reference:                        Add referenced assembly
    /? /h                                     This message

Example:
    ipy.exe pyc.py /main:Program.py Form.py /target:winexe /r:System.Drawing /r:
System.Windows.Forms


$ ipy pyc.py /main:console_hw.py
Input Files:
        console_hw.py
Resource Files:
Output:
        console_hw.exe
Target:
        ConsoleApplication

実行にあたっては、EXE単体でなく、アセンブリモジュールが必要となりますので、ご注意を。
(最低、IronMath.dllとIronPython.dllが必要。ところで、console_hw.pyをコンパイルしたら、EXEは7kバイト程度でした。すご)


余談ですが、このコンパイラ。ソースがたったの169行で出来てます。(中身は、引数の処理ばっか)
で、どうやって実現しているかと言うと、IronPythonアセンブリモジュール内に、IronPython.Hosting.PythonCompilerクラスがあり、これがEXEを作ったり、DLLを作ったりといった処理を行ってくれてます。わーお。