アイアンパイソン

アイアンパイソン
原作者ジム・ヒューガニンマイクロソフト
開発者Dino Viehland、.NET Foundation
初回リリース2006年9月5日[ 1 ] (2006年9月5日
安定版リリース
3.4.2 / 2024年12月20日 ( 2024-12-20 )
プレビューリリース
3.4.0-beta1 / 2022年4月30日 ( 2022-04-30 )
リポジトリ
書かれたC#
オペレーティング·システムWindowsLinuxmacOS
プラットフォーム.NET Framework.NETMono
タイプPythonプログラミング言語の実装
ライセンスApacheライセンス2.0
Webサイトアイアンパイソン.net ウィキデータで編集する

IronPythonは、 .NETおよびMonoフレームワークを対象としたPythonプログラミング言語の実装です。このプロジェクトは現在、 GitHubボランティアグループによってメンテナンスされています。IronPythonは無料のオープンソースソフトウェアであり、MicrosoftのVisual Studio IDE用の無料のオープンソース拡張機能であるPython Tools for Visual Studioを使用して実装できます。[ 2 ] [ 3 ]

IronPython は完全にC#で書かれていますが、そのコードの一部はPython で書かれた コード ジェネレーターによって自動的に生成されます。

IronPythonは、動的言語ランタイム(DLR)上に実装されています。DLRは、共通言語インフラストラクチャ上で実行されるライブラリで、動的言語に動的な型付けや動的メソッドディスパッチなどを提供します。[ 4 ] DLRは.NET Framework 4.0の一部であり、2009年のバージョン2.4以降はMonoの一部でもあります。[ 5 ] DLRは、古いCLI実装のライブラリとしても使用できます。

現状とロードマップ

Jim Huguninがこのプロジェクトを作成し、2006年9月5日にリリースされたバージョン1.0まで積極的に貢献しました。[ 6 ] IronPython 2.0は2008年12月10日にリリースされました。[ 7 ]バージョン1.0の後、2.7 Beta 1がリリースされるまで、 Microsoftの小さなチームによってメンテナンスされていました。Microsoftは2010年後半にIronPython(および姉妹プロジェクトのIronRuby)を放棄し、その後HuguninはGoogleで働くために去りました。[ 8 ]現在、このプロジェクトはGitHubのボランティアグループによってメンテナンスされています。

  • 2008年12月10日にリリースされ、2009年10月23日に2.0.3として更新されたリリース2.0は、CPython 2.5を対象としています。[ 9 ] IronPython 2.0.3は.NET Framework 3.5までしか互換性がありません。
  • 2009年12月11日にリリースされ、2010年4月12日に更新されたリリース2.6は、CPython 2.6を対象としています。[ 10 ] IronPython 2.6.1バージョンは、.NET Framework 4.0とのみバイナリ互換性があります。IronPython 2.6.1を.NET Framework 3.5で実行するには、ソースからコンパイルする必要があります。2010年10月21日にリリースされたIronPython 2.6.2は、.NET Framework 4.0と.NET Framework 3.5の両方とバイナリ互換性があります。
  • リリース2.7は2011年3月12日にリリースされ、CPython 2.7を対象としています。[ 11 ]
  • リリース2.7.1は2011年10月21日にリリースされ、CPython 2.7を対象としています。[ 12 ]
  • リリース2.7.2.1は2012年3月13日にリリースされました。ZIPファイル形式のライブラリ、SQLite、コンパイルされた実行ファイルのサポートが有効になりました。[ 13 ]
  • リリース2.7.4は2013年9月7日にリリースされました。[ 14 ]
  • リリース2.7.5は2014年12月6日にリリースされ、主にバグ修正で構成されています。[ 15 ]
  • リリース2.7.6は2016年8月21日にリリースされ、バグ修正のみで構成されています。[ 16 ]
  • リリース2.7.7は2016年12月7日にリリースされ、バグ修正のみで構成されています。[ 17 ]
  • リリース2.7.8は2018年2月16日にリリースされ、バグ修正、コードの再編成、テストインフラストラクチャの更新(Mono環境下のLinuxでの重要なテストを含む)が含まれています。また、 .NET Coreをサポートした最初のリリースでもあります。[ 18 ]
  • リリース2.7.9は2018年10月9日にリリースされ、バグ修正とコードの再編成が含まれています。これはIronPython 3のリリース前の最後のリリースとなる予定です。[ 19 ]
  • リリース2.7.10は2020年4月27日にリリースされ、.NET Core 3.1のサポートが追加されました。[ 20 ]
  • リリース 2.7.11 は 2020 年 11 月 17 日にリリースされ、.NET 5で実行する場合の問題が解決されています。
  • リリース2.7.12は2022年1月21日にリリースされ、.NET 6の問題が解決され、.NET Core 2.1のサポートが削除されました[ 21 ]
  • リリース3.4.0は2022年12月12日にリリースされ、Python 3.xをサポートする最初のリリースです。[ 22 ]

CPythonとの違い

Pythonのリファレンス実装であるCPythonとIronPythonの間にはいくつかの違いがあります。[ 23 ] IronPython上に構築された一部のプロジェクトは、CPythonでは動作しないことが知られています。[ 24 ]逆に、Cで実装された言語拡張機能に依存するCPythonアプリケーションは、.NET相互運用性で実装されていない限り、IronPythonと互換性がありません。 [ 25 ]例えば、NumPyは2011年にMicrosoftによってラップされ、それに依存するコードとライブラリを.NET Frameworkから直接実行できるようになりました。[ 26 ]

シルバーライト

IronPythonはSilverlight(Microsoftによって非推奨となっており、ほとんどのウェブブラウザでは既にサポートが終了している[ 27 ] )でサポートされています。JavaScriptエンジンと同様に、ブラウザ内でスクリプトエンジンとして使用できます[28]。IronPythonスクリプトは、単純クライアントサイドJavaScriptスクリプトのように-タグで渡されます。また、埋め込まれたXAML<script>マークアップを変更することも可能です。

この背後にある技術はゲシュタルトと呼ばれます。

<!-- DLR 初期化スクリプト --> < script src = "http://gestalt.ironpython.net/dlr-latest.js" type = "text/javascript" ></ script ><!-- IronPython と Silverlight に渡されるクライアント側スクリプト --> < script type = "text/python" > window . Alert ( "Hello from Python" ) </ script >

IronRubyでも同じことが言えます。

ライセンス

バージョン0.6までは、IronPythonはCommon Public Licenseの条件の下でリリースされていました。[ 29 ] 2004年8月にプロジェクトリーダーが採用された後、IronPythonはMicrosoftのShared Source Initiativeの一部として利用可能になりました。このライセンスはOSI承認ではありませんが、作者はオープンソースの定義を満たしていると主張しています。[ 30 ] 2.0アルファリリースでは、ライセンスはMicrosoft Public Licenseに変更され、[ 31 ] OSI承認済みとなりました。最新バージョンはApache License 2.0の条件の下でリリースされています。

インターフェースの拡張性

IronPythonの主な利点の一つは、.NET言語で記述されたアプリケーションフレームワークの拡張レイヤーとして機能することです。既存の.NETアプリケーションフレームワークにIronPythonインタープリタを統合するのは比較的簡単です。一度導入すれば、下流の開発者はフレームワーク内の.NETオブジェクトとやり取りするIronPythonで記述されたスクリプトを使用できるようになります。これにより、フレームワークのコードベースを変更することなく、フレームワークのインターフェースの機能を拡張できます。[ 32 ]

IronPythonはリフレクションを多用しています。.NETオブジェクトへの参照を渡すと、そのオブジェクトで利用可能な型とメソッドが自動的にインポートされます。これにより、IronPythonスクリプト内から.NETオブジェクトを操作する際に、非常に直感的な操作が可能になります。

以下のIronPythonスクリプトは、.NET Frameworkオブジェクトを操作します。このスクリプトは、サードパーティのクライアント側アプリケーション開発者が提供し、インターフェースを介してサーバー側フレームワークに渡すことができます。インターフェースもサーバー側コードも、クライアントアプリケーションに必要な分析機能をサポートするために変更されていないことに注意してください。

BookServiceからBookDictionaryをインポートbooksWrittenByBookerPrizeWinners = [ book . Title in BookDictionary . GetAllBooks ( ) if " Booker Prize" in book . Author . MajorAwards ]

この場合、.NET Framework がBookServiceというモジュールにBookDictionaryクラスを実装し、IronPython スクリプトを送信して実行できるインターフェイスを公開していると仮定します。

このスクリプトをそのインターフェースに送信すると、フレームワークによって管理されている書籍のリスト全体を反復処理し、ブッカー賞を受賞した著者によって書かれた書籍を選択します。

興味深いのは、実際の分析機能の実装責任がクライアントサイド開発者にあることです。サーバーサイド開発者への要求は最小限で、基本的にはサーバーが管理するデータへのアクセスを提供するだけです。この設計パターンは、複雑なアプリケーションフレームワークの導入と保守を大幅に簡素化します。

次のスクリプトは、.NET Framework を使用して単純な Hello World メッセージを作成します。

clrをインポートします。clr . AddReference ( "System.Windows.Forms" )System.Windows.FormsからMessageBoxをインポートしMessageBox.Show ( "Hello World" )を出力します。

パフォーマンス

Pythonのリファレンス実装であるCPythonと比較したIronPythonのパフォーマンス特性は、使用するベンチマークによって異なります。PyStoneスクリプトで取得したほとんどのベンチマークではIronPythonはCPythonよりもパフォーマンスが劣ります、他のベンチマークでは優れています。[ 33 ] IronPythonはJITコンパイラを搭載しており、グローバルインタープリタロックも搭載していないため 、スレッドや複数のコアを使用するPythonプログラムではパフォーマンスが向上する可能性があります。[ 34 ] [ 35 ]

概要と主な特徴

  1. .NETとの統合:IronPythonを使用すると、Pythonコード内で.NETライブラリとフレームワークを直接使用できます。つまり、広範な.NETエコシステムを活用し、.NET環境固有の機能にアクセスできます。
  2. 動的言語ランタイム (DLR) : IronPython は、.NET 言語での動的な型付けと動的なメソッド呼び出しをサポートする一連のサービスである動的言語ランタイム上で実行されます。
  3. 相互運用性:IronPythonから.NETコードを呼び出すことができ、その逆も可能です。これにより、Pythonスクリプトを既存の.NETアプリケーションに統合したり、Pythonプロジェクト内で.NETコンポーネントを使用したりすることが可能になります。
  4. 構文とセマンティクス: IronPython は、基盤となる .NET プラットフォームにより若干の違いがあるかもしれませんが、標準の Python 言語 (CPython) に可能な限り近づくことを目指しています。
  5. パフォーマンス: IronPython は多くのアプリケーションで優れたパフォーマンスを提供しますが、特に Python のネイティブ ライブラリに大きく依存するタスクでは、CPython ほど高速ではない可能性があります。
  6. 互換性:IronPythonはPython 2.xと互換性がありますが、Python 3.xの機能をサポートしていません。そのため、一部の新しいPythonライブラリや構文は利用できない可能性があります。

参照

参考文献

  1. ^ 「CodePlexアーカイブ」 。 2017年12月26日時点のオリジナルよりアーカイブ2014年5月30日閲覧。
  2. ^ "IronPython.net" . 2013年7月3日閲覧。
  3. ^ 「Python Tools for Visual Studio - ホーム」 . Python Tools for Visual Studio . 2018年1月26日時点のオリジナルよりアーカイブ2013年7月3日閲覧。
  4. ^ 「動的言語ランタイムの概要」。Microsoft 2014年4月1日閲覧
  5. ^ “2009-07-02 Marek Safar・mono/Mono@340222f” . GitHub
  6. ^ 「Jim Huguninのブログ: IronPython 1.0が本日リリースされました!」 2006年9月5日. 2006年12月14日閲覧
  7. ^ 「IronPythonのリリース日」 2008年12月10日. 2009年1月25日閲覧
  8. ^ Clarke, Gavin (2010年10月22日). 「Microsoft、Iron言語を廃止」 The Register . 2012年4月5日閲覧
  9. ^ "2.0.3" . ironpython.codeplex.com. 2017年12月26日時点のオリジナルよりアーカイブ2010年10月16日閲覧。
  10. ^ "2.6" . ironpython.codeplex.com. 2018年1月13日時点のオリジナルよりアーカイブ2010年10月16日閲覧。
  11. ^ "2.7" . ironpython.codeplex.com. 2018年1月2日時点のオリジナルよりアーカイブ2011年3月12日閲覧。
  12. ^ "2.7.1" . ironpython.codeplex.com. 2017年12月26日時点のオリジナルよりアーカイブ2011年12月30日閲覧。
  13. ^ "2.7.2.1" . ironpython.codeplex.com. 2017年12月26日時点のオリジナルよりアーカイブ2012年3月24日閲覧。
  14. ^ "2.7.4" . ironpython.codeplex.com. 2018年1月16日時点のオリジナルよりアーカイブ2014年12月7日閲覧。
  15. ^ "2.7.5" . ironpython.codeplex.com. 2018年1月26日時点のオリジナルよりアーカイブ2014年12月7日閲覧。
  16. ^ "2.7.6" . github.com " . 2016年8月21日閲覧。
  17. ^ "2.7.7" . github.com " . 2018年1月5日閲覧。
  18. ^ "2.7.8" . github.com " . 2018年1月5日閲覧。
  19. ^ "2.7.9" . github.com " . 2018年10月9日閲覧。
  20. ^ “IronLanguages/ironpython2” . GitHub . 2020年6月26日閲覧
  21. ^ "リリース · IronLanguages/ironpython2" . GitHub . 2022年8月8日閲覧。
  22. ^ "リリース · IronLanguages/ironpython3" . GitHub . 2023年7月9日閲覧。
  23. ^ 「IronPython 1.0とCPython 2.4.3の違い」 . Microsoft . 2007年12月18日. 2008年2月9日閲覧
  24. ^ Foord, Michael. 「新しいプロジェクト:Pure Pythonで.NETライブラリを実装する」 。 2008年8月30日時点のオリジナルよりアーカイブ。 2008年2月9日閲覧
  25. ^ Eby, Phillip (2005年10月15日). 「Children of a Lesser Python」 . 2008年7月9日閲覧
  26. ^ 「NumPyとSciPy for .NET」2019年4月5日閲覧。
  27. ^ 「Silverlight 5 システム要件」www.microsoft.com . 2019年11月16日閲覧
  28. ^ 「Pythonでブラウザアプリケーションを書く」IronPython.net。 2013年3月17日時点のオリジナルよりアーカイブ
  29. ^ 「Original IronPython homepage」 . 2004年7月28日. 2010年2月23日時点のオリジナルよりアーカイブ2007年5月13日閲覧。
  30. ^ 「IronPythonの共有ソースライセンス」 2006年4月28日. 2007年5月13日閲覧
  31. ^ 「Microsoft permissive license」 . 2007年4月28日. 2007年5月13日閲覧
  32. ^ 「Resolver OneでIronPythonの.NETオブジェクトを使用する」 。 2009年1月14日時点のオリジナルよりアーカイブ2008年11月18日閲覧。
  33. ^ 「IronPythonパフォーマンスレポート」 。 2013年1月19日時点のオリジナルよりアーカイブ2009年10月5日閲覧。
  34. ^ "IronPython at python.org" . python.org . 2011年4月4日閲覧. IronPythonにはGILがなく、マルチスレッドコードはマルチコアプロセッサを使用できます。
  35. ^ 「Pythonの最も難しい問題、再考」。2015年10月31日時点のオリジナルよりアーカイブ2015年7月15日閲覧。