5

Pythonを学びたいのですが、C#開発者として.Netで一日中働いているので、IronPythonと統合されたIronPythonスタジオをダウンロードしてインストールすることにしました。元のPythonとどの程度異なるか、類似していますか?.Net開発者として、従来のPythonスクリプトを.Net環境で問題なく実行できると期待できますか、それともこれは同じ古い移行ユートピアですか?何が期待できますか?

前もって感謝します。

編集:Dic。2009-IronPythonは最近2.6にアップグレードされました。可能であれば、回答をアップグレードしてください。

4

2 に答える 2

3

あなたの状況では、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コミュニティの「文化」をより正確で、ずさんなコーディングに変えていますが、もちろん、何十億行もの古いずさんなコードがあるので、注意が必要です;-)。

于 2009-10-30T18:05:33.617 に答える
1

ほとんどのPythonスクリプトは、IronPythonで完全に機能します。

これは、最新リリースのIronPythonに含まれていないパッケージとモジュールのリストです。

スクリプトがこれらに依存しない限り、ほとんどの場合、変更なしで機能します。ただし、IronPythonの「パワー」の多くは、Python標準ライブラリの代わりに.NETフレームワーククラスを使用するようにスクリプトを移行することで実際に機能します。

于 2009-10-30T16:33:26.843 に答える