Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Реализация языка программирования Python
Python programming language implementation
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.
IronPython is an implementation of the Python programming language targeting the NET and Mono frameworks. The project is currently maintained by a group of volunteers at GitHub. It is free and open source software, and can be implemented with Python Tools for Visual Studio, which is a free and open source extension for Microsoft's Visual Studio IDE. IronPython is written entirely in C#, although some of its code is automatically generated by a code generator written in Python. IronPython is implemented on top of the Dynamic Language Runtime (DLR), a library running on top of the Common Language Infrastructure that provides dynamic typing and dynamic method dispatch, among other things, for dynamic languages. The DLR is part of the NET Framework 4.0 and is also a part of Mono since version 2.4 from 2009. The DLR can also be used as a library on older CLI implementations.
Статус и дорожная карта
Джим Хугунин создал проект и активно участвовал в его разработке до версии 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.
Jim Hugunin created the project and actively contributed to it up until Version 1.0 which was released on September 5, 2006. IronPython 2.0 was released on December 10, 2008. After version 1.0 it was maintained by a small team at Microsoft until the 2.7 Beta 1 release. Microsoft abandoned IronPython (and its sister project IronRuby) in late 2010, after which Hugunin left to work at Google. The project is currently maintained by a group of volunteers at GitHub. Release 2.0, released on December 10, 2008, and updated as 2.0.3 on October 23, 2009, targets CPython 2.5. IronPython 2.0.3 is only compatible up to NET Framework 3.5. Release 2.6, released on December 11, 2009, and updated on April 12, 2010, targets CPython 2.6. IronPython 2.6.1 versions is binary compatible only with NET Framework 4.0. IronPython 2.6.1 must be compiled from sources to run on NET Framework 3.5. IronPython 2.6.2, released on October 21, 2010, is binary compatible with both NET Framework 4.0 and NET Framework 3.5. Release 2.7 was released on March 12, 2011 and it targets CPython 2.7. Release 2.7.1 was released on October 21, 2011 and it targets CPython 2.7. Release 2.7.2.1 was released on March 13, 2012. It enables support for ZIP file format libraries, SQLite, and compiled executables. Release 2.7.4 was released on September 7, 2013. Release 2.7.5 was released on December 6, 2014 and mostly consists of bug fixes. Release 2.7.6 was released on August 21, 2016 and only consists of bug fixes. Release 2.7.7 was released on December 7, 2016 and only consists of bug fixes. Release 2.7.8 was released on February 16, 2018 and consists of bug fixes, reorganized code, and an updated test infrastructure (including significant testing on Linux under Mono). It is also the first release to support NET Core. Release 2.7.9 was released on October 9, 2018 and consists of bug fixes, reorganized code. It is intended to be the last release before IronPython 3. Release 2.7.10 was released on April 27, 2020 and adds NET Core 3.1 support. Release 2.7.11 was released on November 17, 2020 and resolves issues when running on NET 5. Release 2.7.12 was released on January 21, 2022 and resolves issues with NET 6 and removes support for NET core 2.1
Release 3.4.0 was released on December 12, 2022 and is the first release to support Python 3. x.
Различия с CPython
Существуют некоторые различия между эталонной реализацией Python, CPython, и IronPython. Некоторые проекты, разработанные на основе IronPython, могут не работать в CPython. И наоборот, приложения CPython, зависящие от расширений языка, реализованных на C, несовместимы с IronPython, если они не реализованы с использованием .NET Interop. Например, в 2011 году Microsoft создала обертку для NumPy, что позволило запускать код и библиотеки, зависящие от него, непосредственно из .NET Framework.
There are some differences between the Python reference implementation CPython and IronPython. Some projects built on top of IronPython are known not to work under CPython. Conversely, CPython applications that depend on extensions to the language that are implemented in C are not compatible with IronPython
, unless they are implemented in a NET interop. For example, NumPy was wrapped by Microsoft in 2011, allowing code and libraries dependent on it to be run directly from NET Framework.
Лицензия
До версии 0.6 IronPython распространялся на условиях Common Public License. После назначения руководителя проекта в августе 2004 года IronPython стал доступен в рамках инициативы Microsoft Shared Source. Эта лицензия не одобрена OSI, однако авторы утверждают, что она соответствует определению открытого исходного кода. С выходом альфа-версии 2.0 лицензия была изменена на Microsoft Public License, которая была одобрена OSI. Последние версии распространяются на условиях лицензии Apache 2.0.
Until version 0.6, IronPython was released under the terms of Common Public License. Following recruitment of the project lead in August 2004, IronPython was made available as part of Microsoft's Shared Source initiative. This license is not OSI approved but the authors claim it meets the open source definition. With the 2.0 alpha release, the license was changed to the Microsoft Public License, which the OSI has approved. The latest versions are released under the terms of the Apache License 2.0.
Расширяемость интерфейса
Одно из ключевых преимуществ IronPython заключается в его роли как слоя расширяемости для прикладных фреймворков, написанных на языке .NET. Относительно просто интегрировать интерпретатор IronPython в существующий .NET-фреймворк. После интеграции разработчики могут использовать скрипты, написанные на IronPython, которые взаимодействуют с .NET-объектами в этом фреймворке, тем самым расширяя функциональность его интерфейса, не изменяя при этом базовый код фреймворка. IronPython активно использует рефлексию. При передаче ссылки на .NET-объект он автоматически импортирует типы и методы, доступные для этого объекта. Это обеспечивает интуитивно понятный опыт работы с .NET-объектами из скриптов IronPython.
One of IronPython's key advantages is in its function as an extensibility layer to application frameworks written in a NET language. It is relatively simple to integrate an IronPython interpreter into an existing NET application framework. Once in place, downstream developers can use scripts written in IronPython that interact with NET objects in the framework, thereby extending the functionality in the framework's interface, without having to change any of the framework's code base. IronPython makes extensive use of reflection. When passed in a reference to a NET object, it will automatically import the types and methods available to that object. This results in a highly intuitive experience when working with NET objects from within an IronPython script.
Выступление
Производительность IronPython по сравнению с CPython, эталонной реализацией Python, зависит от конкретного используемого теста. IronPython показывает более низкие результаты, чем CPython, в большинстве тестов, выполненных с использованием скрипта PyStone, но превосходит CPython в других тестах. IronPython может работать эффективнее в Python-программах, использующих потоки или несколько ядер, благодаря наличию JIT-компилятора и отсутствию блокировки глобального интерпретатора (Global Interpreter Lock).
The performance characteristics of IronPython compared to CPython, the reference implementation of Python, depends on the exact benchmark used. IronPython performs worse than CPython on most benchmarks taken with the PyStone script but better on other benchmarks. IronPython may perform better in Python programs that use threads or multiple cores, as it has a JIT compiler, and also because it doesn't have the Global Interpreter Lock.