Хорошо ли Python для больших программных проектов (не основанных на сети)? - PullRequest
27 голосов
/ 30 августа 2008

Сейчас я занимаюсь в основном разработкой на C / C ++, но я написал несколько небольших утилит на Python для автоматизации некоторых задач, и я действительно люблю его как язык (особенно производительность).

За исключением производительности (проблема, которая иногда может быть решена благодаря простоте взаимодействия Python с модулями C), считаете ли вы, что она подходит для производственного использования при разработке отдельных сложных приложений (например, текстовый процессор или графический инструмент)?

Какую IDE вы бы предложили? На мой взгляд, IDLE, поставляемый с Python, недостаточно даже для небольших проектов.

Ответы [ 13 ]

32 голосов
/ 03 ноября 2008

Мы использовали IronPython для создания нашего флагманского приложения для работы с электронными таблицами (производственный код 40kloc - и это Python, что означает, что IMO означает, что loc для каждой функции мало) на Resolver Systems , поэтому я определенно скажу, что оно готово для производственного использования сложных приложений.

Есть два способа, которыми это может быть бесполезным для вас ответом: -)

  1. Мы используем IronPython, а не обычный CPython. Это дает нам огромное преимущество возможности использовать библиотеки классов .NET. Возможно, я настраиваю себя на это, но я бы сказал, что я никогда не видел приложение CPython, которое выглядело бы «профессионально» - поэтому доступ к набору виджетов WinForms был для нас огромным выигрышем. IronPython также дает нам возможность легко перейти на C #, если нам нужно повышение производительности. (Хотя, честно говоря, у нас никогда не было необходимости для этого. Все наши проблемы с производительностью на сегодняшний день были связаны с тем, что мы выбрали тупые алгоритмы, а не потому, что язык был медленным.) Использование C # из IP гораздо проще, чем написание расширения C для CPython.
  2. Мы магазин по экстремальному программированию, поэтому мы пишем тесты, прежде чем писать код. Я не стал бы писать производственный код на динамическом языке без предварительного написания тестов; отсутствие шага компиляции должно быть чем-то покрыто, и, как отмечали другие люди, рефакторинг без него может быть сложным. (Ответ Грега Хьюгилла говорит о том, что у него была такая же проблема. С другой стороны, я не думаю, что я бы писал - или особенно рефакторинг - производственный код на любом языке в эти дни без написания тестов в первую очередь - но YMMV .)

Re: интегрированная среда разработки - у нас все было хорошо, когда каждый использовал свой любимый текстовый редактор; если вы предпочитаете что-то более тяжелое, тогда WingIDE довольно уважаем.

23 голосов
/ 30 августа 2008

Вы найдете в основном два ответа на это & ​​ndash; религиозный (Да! Конечно! Это самый лучший язык!) и другой религиозный (ты, должно быть, шутишь! Питон? Нет ... он недостаточно взрослый). Возможно, я пропущу последнюю религию (Python ?! Используйте Ruby!). Правда, как всегда, далеко не очевидна.

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

Минусы : поскольку динамический язык имеет гораздо худшую поддержку IDE (для правильного завершения синтаксиса требуется статическая типизация, будь то явная в Java или предполагаемая в SML), его объектная система далеко from perfect (интерфейсы, кто-нибудь?) и легко получить грязный код, в котором есть методы, возвращающие либо int, либо boolean, либо object, либо что-то вроде при неизвестных обстоятельствах.

Мой дубль & ndash; Я люблю Python для сценариев, автоматизации, крошечных веб-приложений и других простых четко определенных задач. На мой взгляд, это лучший динамический язык на планете. Тем не менее, я бы никогда не использовал бы его любой динамически типизированный язык для разработки приложения значительного размера.

Скажи & ndash; было бы неплохо использовать его для переполнения стека, в котором участвуют три разработчика, и я думаю, что не более 30 тыс. строк кода. Для больших вещей & ndash; Сначала ваша разработка будет очень быстрой, а затем, когда команды и кодовая база растут, все замедляется сильнее, чем в Java или C #. Вам нужно компенсировать отсутствие проверок времени компиляции, написав больше юнит-тестов, рефакторинг усложняется, потому что вы никогда не знаете, что прервал рефакоринг, пока вы не запустите все тесты или даже целое большое приложение и т. Д.

Сейчас & ndash; решите, насколько большой будет ваша команда и насколько большим должно быть приложение, как только оно будет готово. Если у вас 5 или менее человек, а целевой размер примерно равен переполнению стека, пишите на Python. Вы закончите в кратчайшие сроки и будете довольны хорошей кодовой базой. Но если вы хотите написать второй Google или Yahoo, вам будет намного лучше с C # или Java.

Заметка о C / C ++, которую вы упомянули: если вы не пишете критически важное для производительности программное обеспечение (скажем, массивный параллельный raytracer, который будет работать в течение трех месяцев, снимая фильм) или очень критически важную систему (скажем, Mars Marsander, который будет летать три года подряд и имеет только один шанс получить право, или вы потеряете $ 400 млн.) не используйте его. Для веб-приложений, большинства настольных приложений, большинства приложений в целом это не очень хороший выбор. Вы умрете при отладке указателей и распределении памяти в сложной бизнес-логике.

18 голосов
/ 30 августа 2008

На мой взгляд, Python более чем готов к разработке сложных приложений. Я вижу силу питонов больше на стороне сервера, чем написание графических клиентов. Но взгляните на http://www.resolversystems.com/. Они разрабатывают целую электронную таблицу на python, используя порт .net ironpython.

Если вы знакомы с eclipse, взгляните на pydev , который обеспечивает поддержку автозаполнения и отладки для python со всеми другими полезностями eclipse, такими как svn. Парень, разрабатывающий его, только что купил aptana , так что это будет хороший выбор на будущее.

@ Marcin

Минусы: как динамический язык, имеет способ хуже поддержка IDE (правильный синтаксис завершение требует статической типизации, будь то явный в Java или предполагаемый в SML),

Вы правы, что статический анализ может не обеспечивать полного завершения синтаксиса для динамических языков, но я думаю, что pydev отлично справляется со своей работой. Более того, у меня другой стиль разработки при программировании на Python. У меня всегда открыт сеанс ipython, и с одним F5 я получаю не только идеальное завершение ipython, но и самоанализ объектов и манипуляции.

Но если вы хотите написать второй Google или Yahoo, вы будете намного лучше с C # или Java.

Google просто переписал jaiku для работы над App Engine, все на python. И, насколько я знаю, они тоже используют много Python внутри Google.

13 голосов
/ 30 августа 2008

Мне действительно нравится python, обычно это мой любимый язык для небольших (не-gui) вещей, которые я делаю самостоятельно.

Однако для некоторых более крупных проектов Python, которые я рассмотрел, я обнаружил, что это не совсем то же самое, что программирование, скажем, на C ++. Я работал над анализатором языка, и мне нужно было представить AST на Python. Это, безусловно, входит в сферу возможностей Python, но у меня возникли некоторые проблемы с рефакторингом. Я много менял представление своего AST и менял методы и классы, и обнаружил, что упустил строгую типизацию, которая была бы мне доступна в решении C ++. Печатание уток в Python было почти слишком гибким, и я обнаружил, что добавляю много кода assert, чтобы попытаться проверить мои типы во время работы программы. И тогда я не мог быть уверен, что все правильно напечатано, если у меня не было 100% тестирования покрытия кода (чего я не делал в то время).

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

Я не использовал Python для каких-либо графических элементов, поэтому я не могу комментировать этот аспект.

8 голосов
/ 30 августа 2008

Python считается (среди программистов Python :) отличным языком для быстрого прототипирования. Там нет много постороннего синтаксиса, мешающего вашим мыслительным процессам, поэтому большая часть работы, которую вы делаете, имеет тенденцию идти в код. (При написании хорошего кода на Python требуется гораздо меньше идиом, чем при написании хорошего C ++.)

Учитывая это, большинство программистов на Python (CPython) приписывают философию «преждевременная оптимизация - корень всего зла». Написав высокоуровневый (и значительно более медленный) код Python, можно оптимизировать узкие места, используя привязки C / C ++, когда ваше приложение приближается к завершению. На этом этапе становится более понятным, какие ваши ресурсоемкие алгоритмы используются посредством правильного профилирования. Таким образом, вы пишете большую часть кода в очень удобочитаемой и понятной манере, позволяя ускорить процесс в будущем. По этой самой причине вы увидите несколько модулей библиотеки Python, написанных на C.

Большинство графических библиотек в Python (т.е. wxPython) в любом случае являются просто оболочками Python для библиотек C ++, так что вы в значительной степени пишете в бэкэнд C ++.

Чтобы ответить на ваш вопрос IDE, SPE (Python Editor Стани) является хорошей IDE, которую я использовал, и Eclipse с PyDev выполняет свою работу также. Оба OSS, поэтому они могут попробовать!

[Редактировать] @Marcin: Был ли у вас опыт написания> 30k LOC на Python? Также забавно, что вы упомянули о масштабируемости Google, так как они самые большие сторонники Python! Также небольшая организация под названием NASA также часто использует Python;) см. «Один кодер и 17 000 строк кода позже» .

5 голосов
/ 05 ноября 2008

Ничего не добавить к другим ответам, кроме , что если вы выбираете python, должен использовать что-то вроде pylint , о котором никто до сих пор не упомянул.

4 голосов
/ 30 августа 2008

Один из способов оценить, для чего используется python, - посмотреть, какие продукты используют python в данный момент. Эта страница википедии содержит длинный список, включающий различные веб-платформы, системы управления контентом, системы управления версиями, настольные приложения и интегрированные среды разработки.

Как говорится здесь - "Некоторые из крупнейших проектов, использующих Python, - это сервер приложений Zope, YouTube и оригинальный клиент BitTorrent. В крупные организации, использующие Python, входят Google, Yahoo !, ЦЕРН и НАСА. ITA использует Python для некоторых своих компонентов. "

Короче говоря, да, это «подходит для производственного использования при разработке автономных сложных приложений». Так много других языков, с различными плюсами и минусами. Какой язык лучше подходит для вашего конкретного случая использования, слишком субъективен, чтобы отвечать, поэтому я не буду пытаться, но часто ответом будет «тот, который ваши разработчики знают лучше».

2 голосов
/ 30 августа 2008

Рефакторинг неизбежен на больших кодовых базах, и отсутствие статической типизации делает это намного сложнее в python, чем в статически типизированных языках.

1 голос
/ 13 ноября 2008

Python - это удовольствие от использования. Я использую его регулярно, а также пишу много кода для работы на C #. Есть два недостатка написания кода пользовательского интерфейса в Python. Одна из них заключается в том, что не существует единой структуры пользовательского интерфейса, которая была бы принята большинством сообщества. когда вы пишете в c #, библиотеки времени выполнения .NET и библиотеки классов должны работать вместе. В Python каждая библиотека пользовательского интерфейса имеет собственную семантику, которая часто расходится с питоническим мышлением, в котором вы пытаетесь написать свою программу. Я не виню авторов библиотеки. Я пробовал несколько библиотек (wxwidgets, PythonWin [Wrapper вокруг MFC], Tkinter). При этом я часто чувствовал, что пишу код на языке, отличном от Python (несмотря на то, что это был python), поскольку библиотеки Точно Pythonic они порт с другого языка, будь то C, C ++, TK.

Так что для меня я напишу код пользовательского интерфейса в .NET (для меня C #) из-за IDE и согласованности библиотек. Но когда я смогу, я напишу бизнес-логику на python, потому что она понятнее и веселее.

1 голос
/ 13 ноября 2008

И, насколько я знаю, они тоже используют много Python внутри Google.

Ну, я бы на это надеялся, создатель python все еще работает в Google, если я не ошибаюсь?

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

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