Python против C # /. NET - какие основные различия следует учитывать при использовании одного для разработки большого веб-приложения? - PullRequest
55 голосов
/ 06 августа 2010

Моя организация в настоящее время поставляет веб-приложение, в основном на основе серверной части SQL Server 2005/2008, каркаса моделей / контроллеров Java и представлений на основе ColdFusion. Мы решили перейти на более новую платформу и после внутренних исследований и мини-проектов сузили выбор между Python и C # /. NET.

Позвольте мне начать с того, что Я понимаю, что любая из технологий будет работать отлично, и я ищу ключевые отличия (и связанные плюсы и минусы) У этих языков много общего, а много нет - Я ищу ваше мнение об их ключевых различиях.

Пример компромисса / дифференциатора Я ищу:

Хотя кажется, что вы можете добиться большего с меньшим количеством кода и быть более креативным с Python, поскольку .NET более структурирован, может быть легче освоить понимание и модификацию кода, написанного кем-то другим.

Некоторая дополнительная информация, которая может быть полезна:

Наша команда инженеров составляет около 20 человек, и мы работаем в небольших командах из 5-7 человек, из которых мы часто меняем людей. Мы работаем над кодом, который кто-то другой написал столько же, сколько и над новым.

С python мы пойдем по маршруту Django, а с .NET мы пойдем с MVC2. Наши серверы - это серверы под управлением Windows IIS.

Некоторые вещи, которые нам нравятся в ColdFusion, включают в себя то, что его очень легко работать с запросами, и что мы можем «оперативно развертывать» исправления на наших веб-серверах, не перезагружая их и не прерывая их.


Я читал некоторые другие нити X и Y, в которых использовались эти два языка, и нашел их очень полезными, но хотел бы напрямую поставить Python против .Net. Заранее благодарим за то, что позволили мне поделиться своим опытом по этому сложному вопросу!

Ответы [ 4 ]

42 голосов
/ 06 августа 2010

.NET не является языком.Возможно, это Python против C # или Python / Django против C # / ASP.NET (или выберите любую «веб-работу», которую вы хотите; есть много-много разных решений для Python и .NET, и выбор Django или MVC2 из битой можетстрого ограничивая лучшие жизнеспособные варианты).В противовес Python и ".NET": IronPython (Python "в .NET")

Я бы рассмотрел: Комфорт разработчика сязык и, если они равны в Python и ".NET", я бы рассмотрел сроки выполнения разработки и выбрал язык / "веб-работу", которая минимизировала это (опять же, это не должно быть предыдущими ограничениями).

В то время как модульное / интеграционное тестирование является обязательным для любого [большого] проекта, я считаю, что статически типизированный язык (C # / F #) может значительно уменьшить количество «глупых ошибок»."относящиеся к типам.

Откройте игровое поле: -)

Редактировать для комментария:

Тогда вы просто сравниваете языки.

В этом случае C # - очень скучный императивный статически типизированный язык с ОО на основе классов с единичным наследованием / интерфейсом (но несколько более изящных трюков, чем Java, что является просто каменным веком).Это тот же базовый тип ОО, что и у Python , и исключая статический / динамический бит, , оба языка строго типизированы (механика различна, но конечный результат очень похож вязыковой спектр).На самом деле, Python имеет MI, но это кажется менее приемлемым в Python как использование ключевого слова 'lambda', и, поскольку python динамически типизирован, отсутствует поддержка во время компиляции для определения контрактов интерфейса / типа (однако, есть некоторые модули, которыепопробуйте это представить).

Если вы можете изучать / знать Python, то вы можете изучать / знать C #. Это не смена парадигмы.Некоторые ключевые слова здесь, фигурные скобки, должны сказать, какой тип вы имеете в виду, другую базовую библиотеку ... другую среду (вам нужно бороться с некоторыми, чтобы получить REPL, но это выполнимо в VS.) Как разработчики любят / изучают /использовать это другая история.Хотя я и раньше называл C # императивом, приятно видеть добавление некоторых «функционально-подобных» функций, таких как расширения LINQ / IEnumerable и замыкания без делегатов, даже если базовый синтаксис C # очень процедурный - еще раз, довольноочень похоже на python (для выражений, вложенных функций, деления операторов / выражений).

В то время как новый «динамический» действительно размывает линию (очень редко его можно использовать - практически все то же самое)места, в которых, возможно, приходилось возвращаться к размышлениям в предыдущих версиях C # - это неправда, но дело в том, что это, как правило, «неправильный путь», за исключением тех немногих случаев, когда это оказывается «лучшим / единственным»way "), 'var' нет.То есть тип переменной 'var' - , известный во время компиляции , а не имеет ничего общего с динамической типизацией ;это все вывод типа.Некоторые языки, такие как F # / SML и Haskell, имеют гораздо более мощный вывод типов, устраняя необходимость «всех этих уродливых объявлений типов» (хотя явное аннотирование разрешенных типов или наборов типов может сделать намерение более ясным) при сохранении статической типизации.

Лично все остальное, кроме , я бы использовал статически типизированный язык.Я не говорю о C # (и я определенно не говорю о Java!), Но статически типизированные языки могут выдвинуть ошибки типов наверх и требуют предварительных явных контрактов (это большой, большой выигрышдля меня).Несмотря на то, что вы упускаете некоторые изящные динамические трюки, почти всегда есть лучший способ выполнить то же действие на целевом языке - вы просто должны думать об этом языке и использовать отвертку для винта и молоток дляГвоздь.Например, не ожидайте, что код Python, основанный на (ab) использовании local () или global (), будет перенесен в C # как есть.

С другой стороны, большинство статически типизированных языков (здесь C #) требуют явной компиляции вначале (но это не так уж плохо, так как это делает симпатичные сборки), а инструменты типа "REPL" не используются как первоклассные граждане (это первоклассный гражданин в F # / VS2010). Кроме того, если у вас есть необходимая библиотека для Python / C # (а она недоступна на другом языке), это может стать решающим фактором в отношении выбора одного языка перед другим.

30 голосов
/ 23 мая 2013

Я написал очень подробный ответ на Quora по этому поводу: Как Python сравнивается с C #?

TL; DR

  • Ответ огромен, но (надеюсь) довольно всеобъемлющий.Я программировал на C # / .NET почти 10 лет, поэтому знаю это очень хорошо.И я программирую на Python в Quora в течение ~ 7 месяцев, поэтому я надеюсь, что знаю это очень хорошо.

  • Python - победитель в: простоте обучения, кроссплатформенной разработке, доступности открытыхисходные библиотеки

  • C # - победитель в: стандартной библиотеке, возможностях языка, процессе и инструментах разработки, производительности, скорости развития языка
  • Примерно ровно: синтаксис (Python лучше читается, C #имеет более согласованный синтаксис), принятие.
6 голосов
/ 27 февраля 2014

Я бы также посоветовал нам сравнивать время выполнения, а не ограничивать языковые возможности, прежде чем делать такие шаги.Python запускается через интерпретатор CPython, где C # работает на CLR в своих реализациях по умолчанию.

Многозадачность очень важна в любом крупномасштабном проекте;.NET может легко справиться с этим через потоки ... а также воспользоваться преимуществами рабочих процессов в IIS (ASP.NET).CPython не предлагает возможности истинной многопоточности из-за GIL ... блокировки, которую каждый поток должен получить перед выполнением любого кода, для истинной многозадачности вам нужно использовать несколько процессов.

Когда мы размещаем приложение ASP.NETв IIS для одного рабочего процесса ASP.NET все еще может использовать преимущества потоков для одновременного обслуживания нескольких веб-запросов на разных ядрах, где CPython использует параллельные вычисления для разных ядер.

Все это приводит к большому вопросу о том, как мы будем размещать приложение Python / Django в Windows.Мы все знаем, что процесс разветвления в Windows намного дороже, чем в Linux.Так что в идеале нужно разместить приложение Python / Django;лучшей средой будет Linux, а не windows.

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

3 голосов
/ 10 марта 2015

Основная проблема в отрасли - это динамическая природа питона.Потому что у вас есть какая-то безопасность со статическим типизированным языком.

Но теперь у нас есть современные IDE, такие как PyCharm.Они объединяют pylint и pep8 «проверку кода» и «проверку стиля» при вводе кода.Это устраняет самые глупые ошибки.Так что теперь у вас почти такая же безопасность в python.

Другое дело, если вам нужна «статическая проверка типов», делайте это самостоятельно, когда вам это нужно.Это прагматическая природа python.

GIL - это проблема, но вы можете использовать gevent или ZMQ для выполнения своего рода потоков.Но работа над PyPy STM продолжается.

Python работает практически везде, и у вас есть выбор различных, в основном совместимых, сред выполнения (12 в Википедии) Список интерпретаторов Python в Википедии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...