Python или IronPython
Как IronPython сочетается с реализацией Python по умолчанию для Windows от python.org? Если я изучаю Python, буду ли я изучать немного другой язык с IronPython, и без каких библиотек я бы обошелся?
Есть ли в качестве альтернативы какие-либо плюсы IronPython (за исключением скомпилированных классов .NET IL), которые сделали бы его более привлекательным вариантом?
Ответов (8)8
Есть ряд важных отличий:
- Взаимодействие с другими языками .NET. Вы можете использовать другие библиотеки .NET из приложения IronPython или, например, использовать IronPython из приложения C#. Эта совместимость увеличивается по мере продвижения к большей поддержке динамических типов в .NET 4.0. Подробнее об этом см. В этих двух презентациях на PDC 2008.
- Лучшая поддержка параллелизма / многоядерности из-за отсутствия GIL. (Обратите внимание, что GIL не запрещает многопоточность на одноядерной машине - он ограничивает производительность только на многоядерных машинах.)
- Ограниченная возможность использования расширений Python C. Проект Ironclad делает значительные успехи в улучшении этого - они почти заставили Numpy работать!
- Меньшая кроссплатформенная поддержка; в основном у вас есть CLR и Mono . Однако Mono впечатляет и работает на многих платформах - и у них есть реализация Silverlight под названием Moonlight .
- Отчеты об улучшении производительности, хотя я не изучал это внимательно.
- Отставание по функциям: поскольку CPython является эталонной реализацией Python, он имеет «новейшие и лучшие» функции Python, тогда как IronPython неизбежно отстает. Многие люди не считают это проблемой.
Python - это Python, с той лишь разницей, что IronPython был разработан для работы в среде CLR (.NET Framework) и, как таковой, может взаимодействовать и использовать сборки .NET, написанные на других языках .NET. Поэтому, если ваша платформа - Windows, и вы также используете .NET или ваша компания, вам следует подумать о IronPython.
См. Сообщение в блоге. IronPython - ворота с односторонним движением . В нем обобщены некоторые вещи, которые я узнал о IronPython, задавая вопросы на StackOverflow.
Есть некоторые тонкие различия в том, как вы пишете свой код, но самая большая разница заключается в доступных вам библиотеках.
С IronPython у вас есть все доступные библиотеки .Net, но за счет некоторых «обычных» библиотек Python, которые, я думаю, не были перенесены на виртуальную машину .Net.
По сути, вы должны ожидать, что синтаксис и идиомы будут одинаковыми, но сценарий, написанный для IronPython, не запустится, если вы попытаетесь передать его «обычному» интерпретатору Python. Вероятно, наоборот, более вероятно, но и здесь вы найдете различия, я думаю.
Одним из плюсов IronPython является то, что, в отличие от CPython, IronPython не использует глобальную блокировку интерпретатора, что делает многопоточность более эффективной.
В стандартной реализации Python потоки захватывают GIL при каждом доступе к объекту. Это ограничивает параллельное выполнение, что особенно важно, если вы планируете полностью использовать несколько процессоров.
Pro: вы можете запустить IronPython в браузере, если установлен SilverLight.