Введение

Реализация языка программирования Python

IronPython — это реализация языка программирования Python, предназначенная для фреймворков .NET и Mono. В настоящее время проект поддерживается группой добровольцев на GitHub. Это бесплатное программное обеспечение с открытым исходным кодом, которое можно использовать с Python Tools для Visual Studio — бесплатным расширением для интегрированной среды разработки Microsoft Visual Studio. IronPython полностью написан на C#, хотя часть его кода автоматически генерируется генератором кода, написанным на Python. IronPython реализован на основе Dynamic Language Runtime (DLR) — библиотеки, работающей на Common Language Infrastructure, которая предоставляет динамическую типизацию и динамическую диспетчеризацию методов, среди прочего, для динамических языков. DLR является частью .NET Framework 4.0 и также входит в состав Mono начиная с версии 2.4 (2009 год). DLR также может использоваться как библиотека для более ранних реализаций CLI.

Статус и дорожная карта

Джим Хугунин создал проект и активно участвовал в его разработке до версии 1.0, которая была выпущена 5 сентября 2006 года. IronPython 2.0 был выпущен 10 декабря 2008 года. После версии 1.0 проект поддерживался небольшой командой в Microsoft до выпуска 2.7 Beta 1. Microsoft прекратила поддержку IronPython (и его сопутствующего проекта IronRuby) в конце 2010 года, после чего Хугунин перешел на работу в Google. В настоящее время проект поддерживается группой волонтеров на GitHub. Релиз 2.0, выпущенный 10 декабря 2008 года и обновленный до версии 2.0.3 23 октября 2009 года, ориентирован на CPython 2.5. IronPython 2.0.3 совместим только с .NET Framework 3.5. Релиз 2.6, выпущенный 11 декабря 2009 года и обновленный 12 апреля 2010 года, ориентирован на CPython 2.6. Версии IronPython 2.6.1 бинарно совместимы только с .NET Framework 4.0. Для работы на .NET Framework 3.5 IronPython 2.6.1 необходимо компилировать из исходного кода. IronPython 2.6.2, выпущенный 21 октября 2010 года, бинарно совместим как с .NET Framework 4.0, так и с .NET Framework 3.5. Релиз 2.7 был выпущен 12 марта 2011 года и ориентирован на CPython 2.7. Релиз 2.7.1 был выпущен 21 октября 2011 года и ориентирован на CPython 2.7. Релиз 2.7.2.1 был выпущен 13 марта 2012 года и обеспечивает поддержку библиотек формата ZIP, SQLite и скомпилированных исполняемых файлов. Релиз 2.7.4 был выпущен 7 сентября 2013 года. Релиз 2.7.5 был выпущен 6 декабря 2014 года и состоит в основном из исправлений ошибок. Релиз 2.7.6 был выпущен 21 августа 2016 года и содержит только исправления ошибок. Релиз 2.7.7 был выпущен 7 декабря 2016 года и содержит только исправления ошибок. Релиз 2.7.8 был выпущен 16 февраля 2018 года и включает исправления ошибок, реорганизацию кода и обновленную тестовую инфраструктуру (включая значительное тестирование на Linux под Mono). Это также первый релиз с поддержкой .NET Core. Релиз 2.7.9 был выпущен 9 октября 2018 года и включает исправления ошибок и реорганизацию кода. Он предназначен для того, чтобы стать последним релизом перед IronPython 3. Релиз 2.7.10 был выпущен 27 апреля 2020 года и добавляет поддержку .NET Core 3.1. Релиз 2.7.11 был выпущен 17 ноября 2020 года и устраняет проблемы при работе на .NET 5. Релиз 2.7.12 был выпущен 21 января 2022 года и решает проблемы с .NET 6 и удаляет поддержку .NET Core 2.1.
Релиз 3.4.0 был выпущен 12 декабря 2022 года и является первым релизом с поддержкой Python 3.x.

Различия с CPython

Существуют некоторые различия между эталонной реализацией Python, CPython, и IronPython. Некоторые проекты, разработанные на основе IronPython, могут не работать в CPython. И наоборот, приложения CPython, зависящие от расширений языка, реализованных на C, несовместимы с IronPython, если они не реализованы с использованием .NET Interop. Например, в 2011 году Microsoft создала обертку для NumPy, что позволило запускать код и библиотеки, зависящие от него, непосредственно из .NET Framework.

Лицензия

До версии 0.6 IronPython распространялся на условиях Common Public License. После назначения руководителя проекта в августе 2004 года IronPython стал доступен в рамках инициативы Microsoft Shared Source. Эта лицензия не одобрена OSI, однако авторы утверждают, что она соответствует определению открытого исходного кода. С выходом альфа-версии 2.0 лицензия была изменена на Microsoft Public License, которая была одобрена OSI. Последние версии распространяются на условиях лицензии Apache 2.0.

Расширяемость интерфейса

Одно из ключевых преимуществ IronPython заключается в его роли как слоя расширяемости для прикладных фреймворков, написанных на языке .NET. Относительно просто интегрировать интерпретатор IronPython в существующий .NET-фреймворк. После интеграции разработчики могут использовать скрипты, написанные на IronPython, которые взаимодействуют с .NET-объектами в этом фреймворке, тем самым расширяя функциональность его интерфейса, не изменяя при этом базовый код фреймворка. IronPython активно использует рефлексию. При передаче ссылки на .NET-объект он автоматически импортирует типы и методы, доступные для этого объекта. Это обеспечивает интуитивно понятный опыт работы с .NET-объектами из скриптов IronPython.

Выступление

Производительность IronPython по сравнению с CPython, эталонной реализацией Python, зависит от конкретного используемого теста. IronPython показывает более низкие результаты, чем CPython, в большинстве тестов, выполненных с использованием скрипта PyStone, но превосходит CPython в других тестах. IronPython может работать эффективнее в Python-программах, использующих потоки или несколько ядер, благодаря наличию JIT-компилятора и отсутствию блокировки глобального интерпретатора (Global Interpreter Lock).