Python или IronPython

Как IronPython сочетается с реализацией Python по умолчанию для Windows от python.org? Если я изучаю Python, буду ли я изучать немного другой язык с IronPython, и без каких библиотек я бы обошелся?

Есть ли в качестве альтернативы какие-либо плюсы IronPython (за исключением скомпилированных классов .NET IL), которые сделали бы его более привлекательным вариантом?

Ответов (8)

Решение

Есть ряд важных отличий:

  1. Взаимодействие с другими языками .NET. Вы можете использовать другие библиотеки .NET из приложения IronPython или, например, использовать IronPython из приложения C#. Эта совместимость увеличивается по мере продвижения к большей поддержке динамических типов в .NET 4.0. Подробнее об этом см. В этих двух презентациях на PDC 2008.
  2. Лучшая поддержка параллелизма / многоядерности из-за отсутствия GIL. (Обратите внимание, что GIL не запрещает многопоточность на одноядерной машине - он ограничивает производительность только на многоядерных машинах.)
  3. Ограниченная возможность использования расширений Python C. Проект Ironclad делает значительные успехи в улучшении этого - они почти заставили Numpy работать!
  4. Меньшая кроссплатформенная поддержка; в основном у вас есть CLR и Mono . Однако Mono впечатляет и работает на многих платформах - и у них есть реализация Silverlight под названием Moonlight .
  5. Отчеты об улучшении производительности, хотя я не изучал это внимательно.
  6. Отставание по функциям: поскольку CPython является эталонной реализацией Python, он имеет «новейшие и лучшие» функции Python, тогда как IronPython неизбежно отстает. Многие люди не считают это проблемой.

Python - это Python, с той лишь разницей, что IronPython был разработан для работы в среде CLR (.NET Framework) и, как таковой, может взаимодействовать и использовать сборки .NET, написанные на других языках .NET. Поэтому, если ваша платформа - Windows, и вы также используете .NET или ваша компания, вам следует подумать о IronPython.

Это также зависит от того, хотите ли вы, чтобы ваш код работал в Linux. Не знаю, будет ли IronPython работать на чем-либо, кроме платформ Windows.

См. Сообщение в блоге. IronPython - ворота с односторонним движением . В нем обобщены некоторые вещи, которые я узнал о IronPython, задавая вопросы на StackOverflow.

Ну так вообще шустрее.

Не может использовать модули и имеет только подмножество библиотеки.

Вот список отличий.

Есть некоторые тонкие различия в том, как вы пишете свой код, но самая большая разница заключается в доступных вам библиотеках.

С IronPython у вас есть все доступные библиотеки .Net, но за счет некоторых «обычных» библиотек Python, которые, я думаю, не были перенесены на виртуальную машину .Net.

По сути, вы должны ожидать, что синтаксис и идиомы будут одинаковыми, но сценарий, написанный для IronPython, не запустится, если вы попытаетесь передать его «обычному» интерпретатору Python. Вероятно, наоборот, более вероятно, но и здесь вы найдете различия, я думаю.

Одним из плюсов IronPython является то, что, в отличие от CPython, IronPython не использует глобальную блокировку интерпретатора, что делает многопоточность более эффективной.

В стандартной реализации Python потоки захватывают GIL при каждом доступе к объекту. Это ограничивает параллельное выполнение, что особенно важно, если вы планируете полностью использовать несколько процессоров.

Pro: вы можете запустить IronPython в браузере, если установлен SilverLight.