Сравнение IronPython и Original Python. Что я могу ожидать от первого? - PullRequest
5 голосов
/ 30 октября 2009

Я хочу изучать Python, но я весь день работаю в .Net как разработчик C #, поэтому я решил скачать и установить IronPython и интегрированную студию IronPython. Насколько он отличается от оригинального Python? Как разработчик .Net могу ли я без проблем запустить обычный скрипт Python в среде .Net или это все та же старая утопия миграции? Что я могу ожидать о?

Заранее спасибо.

РЕДАКТИРОВАТЬ: Dic. 2009 - IronPython был недавно обновлён до версии 2.6. Пожалуйста, обновите ваши ответы, если это возможно.

Ответы [ 2 ]

3 голосов
/ 30 октября 2009

В вашей ситуации совершенно разумно изучать IronPython (тем более, что эта книга делает большую работу, помогая вам в этом!). У вас будет доступ практически ко всем функциям Python 2.5 (не уверен, когда IronPython обновится до версии Python 2.6, но 2.5 уже вполне пригоден для использования), плюс всех известных вам библиотек и сборок .Net. и любовь, и инструменты, такие как надстройки Visual Studio.

Различия между CPython и IronPython (и Jython, в этом отношении, который применяет ту же концепцию, что и IronPython, к JVM - Джим Хугунин был создателем Jython задолго до того, как он перешел в Microsoft, где он создал IronPython, оба проекта теперь) thrive) в основном занимаются сборкой мусора и многопоточностью: IronPython и Jython полагаются на свои базовые платформы (таким образом, вы получаете сборку мусора по меткам и зачисткам и бесплатную многопоточность), CPython катит свою собственную (так что это в основном GC с подсчетом ссылок, с время от времени помечайте и убирайте, чтобы разрешить ссылочные циклы и поточная обработка затруднена глобальной блокировкой интерпретатора).

Хорошо закодированный скрипт Python не полагается на детали реализации, о которых идет речь (он никогда не предполагает, что GC происходит немедленно, никогда не предполагает, что операция является атомарной при многопоточности, за исключением тех немногих, как методы Queue.Queue, которые явно задокументировано), но, конечно, в дикой природе есть множество скриптов, которые неаккуратны. Например:

data = open('x.txt').read()

это оставляет файловый объект открытым, пока он не будет собран мусором; в среде подсчета ссылок сбор происходит немедленно (поэтому файл закрывается как можно скорее), в среде разметки и разметки это не так (поэтому процесс, использующий такие конструкции, часто ошибочно сохраняет некоторые файлы, возможно, много файлов, бесполезно открываются гораздо дольше, чем нужно, тратя системные ресурсы и т.) *

Итак, правильное Вместо этого используется код Python:

# needed in 2.5, unneeded but innocuous in 2.6
from __future__ import with_statement

with open('x.txt') as f: data = f.read()

, который делает гарантирующим немедленное закрытие файла в каждой реализации (оператор with очень удобен для этого; -).

Это не влияет на ваше изучение Python и не препятствует повторному использованию правильно кодированного кода Python, но если и когда вы захотите повторно использовать код Python с неаккуратным кодированием (особенно в долго работающем сервере, сервисе, демоне) процесс, и в) вам, возможно, потребуется в будущем его ужесточить. Так, между прочим, будут ли люди, которые хотят использовать более новые и лучшие версии CPython, такие как Unladen Swallow & c, как только эти версии реализуют более совершенные механизмы сборки мусора, избавятся от GIL и других улучшений; надеюсь, это уже меняет «культуру» сообщества Python в сторону более правильного, менее неаккуратного кодирования, но, конечно, вокруг исчисляется несколько миллиардов строк старого неаккуратного кода, поэтому требуется некоторая осторожность; -).

1 голос
/ 30 октября 2009

Большинство сценариев Python отлично работают в IronPython.

Вот список пакетов и модулей, не включенных в IronPython в последней версии.

Пока ваш скрипт не использует их, он, скорее всего, будет работать без изменений. Тем не менее, большая часть «мощи» IronPython действительно вступает в игру, перенося ваши сценарии на использование классов платформы .NET вместо стандартной библиотеки python.

...