IronPython vs. C # для небольших проектов - PullRequest
8 голосов
/ 31 января 2009

В настоящее время я использую Python для большинства моих программных проектов (в основном для быстрой разработки небольших программ и прототипов). Я хотел бы потратить время на изучение языка, который дает мне возможность использовать различные инструменты и API-интерфейсы Microsoft при любой возможности. Я пытаюсь сделать выбор между IronPython и C #. Поскольку Python - мой любимый язык программирования (в основном из-за его краткости и четкого синтаксиса), IronPython звучит как идеальный вариант. И все же, прочитав об этом немного, у меня возникло несколько вопросов.

Для тех из вас, кто использовал IronPython, когда-нибудь станет неясно, где заканчивается классический Python и начинается .NET? Например, кажется, что между библиотеками .NET и стандартной библиотекой Python функциональные возможности существенно перекрываются, поэтому, когда мне нужно выполнить строковые операции или проанализировать XML, мне неясно, какую библиотеку мне следует использовать. Кроме того, мне неясно, когда я должен использовать Python по сравнению с типами данных .NET в моем коде. Например, что из следующего я буду использовать в своем коде?

d = {} 

или

d = System.Collections.Hashtable()

(Кстати, кажется, что если я сделаю много вещей, подобных последним, я могу потерять некоторую лаконичность, поэтому я предпочитаю Python в первую очередь.)

Другая проблема заключается в том, что ряд инструментов разработчика Microsoft, таких как .NET CF и Xbox XNA, недоступны в IronPython. Есть ли еще ситуации, когда IronPython не дал бы мне полного охвата C #?

Ответы [ 2 ]

11 голосов
/ 31 января 2009

Я создал крупное приложение в IronPython, связанное с C #.

Это почти полностью без проблем. Единственное, чего не хватает в IronPython из-за ощущения «питона», это библиотеки на основе C (для них нужно использовать .NET) и IDLE.

Язык взаимодействует с другими языками .NET, как сон ... В частности, если вы встраиваете интерпретатор и связываете переменные по ссылке.

Кстати, в IronPython объявлен хеш:

d = {}

Просто помните, что на самом деле это объект IronPython.Dict, а не словарь C #. Тем не менее, преобразования часто работают незаметно, если вы передаете их в класс .NET, и если вам нужно преобразовать явно, есть встроенные модули, которые делают это просто отлично.

В общем, замечательный язык для использования с .NET, если у вас есть причина.

Просто совет: избегайте среды разработки Visual Studio IronPython, как чумы. Я обнаружил, что автоматическое завершение строки испорчено на отступах между пробелами и табуляциями. Теперь это трудная для отслеживания ошибка, вставленная в код.

3 голосов
/ 31 января 2009

Я бы посоветовал взглянуть на Boo [http://boo.codehaus.org/], - язык на основе .NET с синтаксисом, основанным на Python, но обеспечивающим полный спектр функциональных возможностей .NET 3.5.

IronPython отлично подходит для использования библиотек, ориентированных на .NET, но он не очень подходит для создания из-за различий в типизации языков. Так как Boo выполняет типизацию на основе логического вывода во время компиляции, за исключением случаев, когда типизированная утка явно запрашивается (или конкретный тип задается пользователем), она позволяет создавать библиотеки .NET-ориентированные, легко используемые из кода C # (и других языков) для чего IronPython не подходит; кроме того, поскольку он должен делать меньше самоанализа во время выполнения, Boo компилируется в более быстрый код.

...