Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

Статус и план действий [ править ]

  • Версия 2.0, выпущенная 10 декабря 2008 г. и обновленная до версии 2.0.3 23 октября 2009 г., нацелена на CPython 2.5. [10] IronPython 2.0.3 совместим только с .NET Framework 3.5.
  • Версия 2.6, выпущенная 11 декабря 2009 г. и обновленная 12 апреля 2010 г., нацелена на CPython 2.6. [11] Версия 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. [12]
  • Релиз 2.7.1 был выпущен 21 октября 2011 г. и нацелен на CPython 2.7. [13]
  • Выпуск 2.7.2.1 был выпущен 13 марта 2012 г. Он обеспечивает поддержку библиотек формата файлов ZIP , SQLite и скомпилированных исполняемых файлов. [14]
  • Релиз 2.7.4 был выпущен 7 сентября 2013 г. [15]
  • Выпуск 2.7.5 был выпущен 6 декабря 2014 г. и в основном содержит исправления ошибок. [16]
  • Выпуск 2.7.6 был выпущен 21 августа 2016 г. и содержит только исправления ошибок. [17]
  • Выпуск 2.7.7 был выпущен 7 декабря 2016 г. и содержит только исправления ошибок. [18]
  • Релиз 2.7.8 был выпущен 16 февраля 2018 г. и состоит из исправлений ошибок, реорганизованного кода и обновленной тестовой инфраструктуры (включая значительное тестирование в Linux под Mono ). Это также первый выпуск, поддерживающий .NET Core . [19]
  • Релиз 2.7.9 был выпущен 9 октября 2018 г. и содержит исправления ошибок и реорганизованный код. Предполагается, что это будет последний выпуск перед IronPython 3. [20]
  • Выпуск 2.7.10 был выпущен 27 апреля 2020 г. и добавляет поддержку .NET Core 3.1. [21]
  • Выпуск 2.7.11 был выпущен 17 ноября 2020 г. и устраняет проблемы при работе на .NET 5 .

Различия с CPython [ править ]

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

Silverlight [ править ]

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

Технология, лежащая в основе этого, называется гештальт. [ необходима цитата ]

// Скрипт инициализации DLR.< script  src = "http://gestalt.ironpython.net/dlr-latest.js"  type = "text / javascript" > </ script >// Клиентский скрипт передан в IronPython и Silverlight.Окно < script  type = "text / python" >  . Оповещение ( «Привет из Python» ) </ script >

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

Лицензия [ править ]

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

Расширяемость интерфейса [ править ]

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

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

Примеры [ править ]

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

из  BookService  импортировать  BookDictionary booksWrittenByBookerPrizeWinners  =  [ книга . Название  для  книги  в  BookDictionary . GetAllBooks ()  если  в книге "Букеровский приз"  . Автор . MajorAwards ] 

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

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

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

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

импортировать  clr clr . AddReference ( "System.Windows.Forms" )из  System.Windows.Forms  импортируйте  MessageBox MessageBox . Шоу ( "Привет, мир" )

Производительность [ править ]

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

См. Также [ править ]

  • Boo - язык для .NET Framework и Mono с синтаксисом, вдохновленным Python, и функциями, заимствованными из C # и Ruby.
  • Кобра
  • IronScheme
  • Jython - реализация Python для виртуальной машины Java
  • Cython
  • pypy - интерпретатор на собственном хостинге для языка программирования Python
  • Структура Дао
  • Снаряженная Ласточка - А (ныне несуществующая) ветвь CPython , что целью обеспечение высочайшей производительности используя LLVM -А только по времени компиляции

Ссылки [ править ]

  1. ^ http://ironpython.codeplex.com/releases/view/423
  2. ^ "Выпуск 2.7.11" . 17 ноября 2020 . Проверено 8 декабря 2020 .
  3. ^ "Блог Джима Хугунина: сегодня выпущен IronPython 1.0!" . 2006-09-05 . Проверено 14 декабря 2006 .
  4. ^ "Даты выпуска Ironpython" . 2008-12-10 . Проверено 25 января 2009 .
  5. ^ Кларк, Гэвин (2010-10-22). «Microsoft отсекает железные языки» . Реестр . Проверено 5 апреля 2012 .
  6. ^ "IronPython.net" . IronPython.net . Проверено 3 июля 2013 .
  7. ^ «Инструменты Python для Visual Studio - Домашняя страница» . Инструменты Python для Visual Studio . Проверено 3 июля 2013 .
  8. ^ «Обзор динамической среды выполнения» . Microsoft . Проверено 1 апреля 2014 .
  9. ^ https://github.com/mono/mono/commit/340222ffe8b958cd22d9eb0388488f326845b363
  10. ^ "2.0.3" . ironpython.codeplex.com . Проверено 16 октября 2010 .
  11. ^ "2.6" . ironpython.codeplex.com . Проверено 16 октября 2010 .
  12. ^ "2.7" . ironpython.codeplex.com . Проверено 12 марта 2011 .
  13. ^ "2.7.1" . ironpython.codeplex.com . Проверено 30 декабря 2011 .
  14. ^ "2.7.2.1" . ironpython.codeplex.com . Проверено 24 марта 2012 .
  15. ^ "2.7.4" . ironpython.codeplex.com . Проверено 7 декабря 2014 .
  16. ^ "2.7.5" . ironpython.codeplex.com . Проверено 7 декабря 2014 .
  17. ^ "2.7.6" . github.com . Проверено 21 августа 2016 .
  18. ^ "2.7.7" . github.com . Проверено 5 января 2018 .
  19. ^ "2.7.8" . github.com . Проверено 5 января 2018 .
  20. ^ "2.7.9" . github.com . Проверено 9 октября 2018 .
  21. ^ "IronLanguages ​​/ ironpython2" . GitHub . Проверено 26 июня 2020 .
  22. ^ «Различия между IronPython 1.0 и CPython 2.4.3» . Microsoft . 2007-12-18 . Проверено 9 февраля 2008 .
  23. ^ Форд, Майкл. «Новый проект: реализация библиотек .NET на чистом Python» . Архивировано из оригинала на 2008-08-30 . Проверено 9 февраля 2008 .
  24. ^ Эби, Филипп. «Дети малого питона» . Проверено 9 июля 2008 .
  25. ^ «NumPy и SciPy для .NET» . Проверено 5 апреля 2019 .
  26. ^ «Системные требования Silverlight 5» . www.microsoft.com . Проверено 16 ноября 2019 .
  27. ^ «Написание браузерных приложений на Python» . IronPython.net . Архивировано из оригинала на 2013-03-17.
  28. ^ "Оригинальная домашняя страница IronPython" . 2004-07-28. Архивировано из оригинального 23 февраля 2010 года . Проверено 13 мая 2007 .
  29. ^ «Лицензия на общий исходный код для IronPython» . 2006-04-28 . Проверено 13 мая 2007 .
  30. ^ «Разрешающая лицензия Microsoft» . 2007-04-28 . Проверено 13 мая 2007 .
  31. ^ «Использование объектов .NET из IronPython в Resolver One» . Архивировано из оригинала на 2009-01-14 . Проверено 18 ноября 2008 .
  32. ^ «Отчет о производительности IronPython» . Проверено 5 октября 2009 .
  33. ^ «IronPython на python.org» . python.org . Проверено 4 апреля 2011 . IronPython не имеет GIL, а многопоточный код может использовать многоядерные процессоры.
  34. ^ "Архивная копия" . Архивировано из оригинала на 2015-10-31 . Проверено 15 июля 2015 .CS1 maint: archived copy as title (link)

Внешние ссылки [ править ]

  • Официальный веб-сайт