あなたの状況では、IronPythonを研究することは完全に合理的です(特にこの本はあなたがそれをするのを助ける素晴らしい仕事をしているので!)。基本的にすべてのPython2.5機能(IronPythonがいつPythonの2.6バージョンにアップグレードされるかはわかりませんが、2.5はすでにかなり使用可能です)に加えて、知っていて大好きなすべての.Netライブラリとアセンブリ、およびそのようなツールにアクセスできます。 VisualStudioアドインとして。
CPythonとIronPythonの違い(さらに言えば、JVMにIronPythonと同じ概念を適用するJython-Jim Huguninは、IronPythonを作成したMicrosoftに移るずっと前から、Jythonの作成者でした。両方のプロジェクトが現在成功しています)。主にガベージコレクションとスレッド化:IronPythonとJythonは、基盤となるプラットフォームに依存しています(つまり、マークアンドスイープのガベージコレクションとフリースレッドを取得します)。 -参照ループを解決するために時々スイープし、グローバルインタープリターロックによってスレッド化が妨げられます)。
適切にコーディングされたPythonスクリプトは、問題の実装の詳細に依存しません(GCがすぐに発生するとは想定せず、Queue.Queueのメソッドなど、明示的に文書化されているいくつかのメソッドを除いて、操作がスレッド化の下でアトミックであるとは想定しません。 )、しかしもちろん、ずさんなスクリプトがたくさん出回っています。例えば:
data = open('x.txt').read()
これにより、ガベージコレクションが行われるまでファイルオブジェクトが開いたままになります。参照カウント環境では、収集はすぐに行われます(したがって、ファイルはできるだけ早く閉じられます)。マークアンドスイープ環境ではそうではありません(したがって、このような構造を使用するプロセスでは、一部のファイル、場合によっては多くのファイルが誤って保持されることがよくあります。必要以上に長く無用に開いて、システムリソースを浪費します&c)。
したがって、適切なPythonコーディングは代わりに次のようになります。
# needed in 2.5, unneeded but innocuous in 2.6
from __future__ import with_statement
with open('x.txt') as f: data = f.read()
これは、すべての実装でファイルを即座に閉じることを保証します(with
ステートメントはそのように非常に便利です;-)。
これはPythonの学習に影響を与えることはなく、適切にコーディングされたPythonコードの再利用を妨げることもありませんが、(特に長時間実行されるサーバー、サービス、デーモンプロセスなどで)ずさんなコーディングのPythonコードを再利用する場合は)将来、それをいくらか引き締める必要があるかもしれません。したがって、Unladen Swallow&cなどのより新しくより優れたCPythonバージョンを使用したい人は、これらのバージョンがより優れたガベージコレクションメカニズムを実装し、GILやその他の拡張機能を削除した後はどうでしょうか。うまくいけば、これはすでにPythonコミュニティの「文化」をより正確で、ずさんなコーディングに変えていますが、もちろん、何十億行もの古いずさんなコードがあるので、注意が必要です;-)。