IronPython - IronPython

IronPython
Ironpython-logo.png
Оригинальный автор (ы) Джим Хугунин , Microsoft
Разработчики) Дино Вихланд,
.NET Foundation
Первый выпуск 5 сентября 2006 г . ; 15 лет назад ( 2006-09-05 )
Стабильный выпуск
2.7.11  Отредактируйте это в Викиданных / 17 ноября 2020 г . ; 11 месяцев назад ( 17 ноября 2020 г. )
Предварительный выпуск
3.4.0-alpha1 / 20 апреля 2021 г . ; 5 месяцев назад ( 2021-04-20 )
Репозиторий
Написано в C #
Операционная система Windows , Linux , macOS
Платформа .NET Framework , .NET , Mono
Тип Реализация языка программирования Python
Лицензия Лицензия Apache 2.0
Веб-сайт железный python .net Отредактируйте это в Викиданных

IronPython - это реализация языка программирования Python, ориентированная на .NET Framework и Mono . Джим Хьюгунин создал проект и активно участвовал в нем до версии 1.0, которая была выпущена 5 сентября 2006 года. IronPython 2.0 был выпущен 10 декабря 2008 года. После версии 1.0 он поддерживался небольшой группой в Microsoft до версии 2.7 Beta 1. выпускать. Microsoft отказалась от IronPython (и его родственного проекта IronRuby ) в конце 2010 года, после чего Хугунин ушел работать в Google. В настоящее время проект поддерживается группой добровольцев на GitHub . Это бесплатное программное обеспечение с открытым исходным кодом, которое может быть реализовано с помощью Python Tools для Visual Studio, который является бесплатным расширением с открытым исходным кодом для Microsoft Visual Studio IDE.

IronPython полностью написан на C # , хотя часть его кода автоматически генерируется генератором кода, написанным на Python.

IronPython реализован поверх Dynamic Language Runtime (DLR), библиотеки, работающей поверх Common Language Infrastructure, которая обеспечивает динамическую типизацию и отправку динамических методов, среди прочего, для динамических языков. DLR является частью .NET Framework 4.0, а также является частью Mono, начиная с версии 2.4 2009 года. DLR также можно использовать в качестве библиотеки в более старых реализациях CLI.

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

  • Версия 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. IronPython 2.6.1 должен быть скомпилирован из исходных кодов для работы в .NET Framework 3.5. 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 .

Отличия от CPython

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

Silverlight

IronPython поддерживается в Silverlight (который не поддерживается Microsoft и уже потерял поддержку в большинстве веб-браузеров, за исключением Internet Explorer 11, поддержка которого прекратится в октябре 2021 года). Его можно использовать как движок сценариев в браузере, как и движок JavaScript . Скрипты IronPython передаются как простые клиентские скрипты JavaScript в <script>-tags. Затем также можно изменить встроенную разметку XAML .

Технология, лежащая в основе этого, называется гештальт.

// DLR initialization script.
<script src="http://gestalt.ironpython.net/dlr-latest.js" type="text/javascript"></script>

// Client-side script passed to IronPython and Silverlight.
<script type="text/python">
    window.Alert("Hello from Python")
</script>

То же самое и с IronRuby .

Лицензия

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

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

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

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

Примеры

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

from BookService import BookDictionary
 
booksWrittenByBookerPrizeWinners = [book.Title for book in BookDictionary.GetAllBooks() 
                                    if "Booker Prize" in book.Author.MajorAwards]

В этом случае предположим, что .NET Framework реализует класс BookDictionary в модуле с именем BookService и публикует интерфейс, в котором можно отправлять и выполнять сценарии IronPython.

Этот сценарий при отправке в этот интерфейс будет перебирать весь список книг, поддерживаемых фреймворком, и выбирать книги, написанные авторами, получившими Букеровскую премию.

Что интересно, ответственность за написание собственно аналитики лежит на клиентском разработчике. Требования к разработчику на стороне сервера минимальны, по сути, он просто предоставляет доступ к данным, обслуживаемым сервером. Этот шаблон проектирования значительно упрощает развертывание и обслуживание сложных каркасов приложений.

Следующий сценарий использует .NET Framework для создания простого сообщения Hello World.

import clr
clr.AddReference("System.Windows.Forms")

from System.Windows.Forms import MessageBox
MessageBox.Show("Hello World")

Представление

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

Смотрите также

использованная литература

внешние ссылки