IronPythonとcPythonの比較
IronPythonと「標準」Python(「cPython」)の間には、いくつかの小さな違いと非互換性があります。一部はIronPythonの直接エラーであり、将来のバージョンで削除する必要があります。ただし、その他は「実装の詳細」と見なされ、そのまま残ります。それらのいくつかは非常に挑戦的なトピックです。
ユーザーにとって最も明白な違いは、文字列の処理です。オリジナルのcPythonには、「バイト文字列」と「Unicode文字列」の2つの異なる文字列タイプがあります。この概念は、IECのデータ型STRINGおよびWSTRINGに似ています。 IronPythonは、常にUnicode対応で内部的にUTF-16を使用する.NET文字列を使用するだけです。ただし、IronPythonは、cPythonとの違いをプログラマーから隠すためのトリックを実装しています。 (興味深い:新しいPythonバージョン3では、開発者は文字列処理を完全に作り直しました。その結果、IronPythonに非常に近いモデルになりました。その後は常にUnicode文字列が使用され、生のバイトを処理するための個別のデータ型があります)
cPythonはIronPythonとは完全に異なる内部データ構造を使用するため、Cで記述されたPythonモジュールをIronPythonにインポートすることはできません。ほとんどの標準ライブラリモジュールはIronPythonで再実装されました。ただし、一部のモジュール(TKインターフェイスなど)は、IronPythonに明示的に移植されていない限り使用できません。一方、IronPythonは、.NETフレームワーク(上記のように)を含む.NETアセンブリへのアクセスを提供します。これは、この機能を十分に補います。
cPythonは参照カウントと決定論的ガベージコレクターを使用して循環ガベージをクリーンアップしますが、IronPythonは非決定論的.NETガベージコレクターに依存しています。ほとんどの場合、この違いは重要ではありません。ただし、Python標準ライブラリまたは.NET Frameworkからファイルやその他のリソースを開くときは、後でそれらを必ず閉じる必要があります。を使用するのが最善です with
Pythonコンテキストマネージャーまたは.NETを使用したステートメント IDisposable
インスタンス。
詳細については、以下を参照してください。 コンテンツマネージャー と .NET IDisposable