Должен ли я перейти с C ++ на Python? ... или другой язык? [закрыто]

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

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

В настоящее время программы, выполняющие все эти задачи, написаны C++и работают довольно быстро на одном среднем сервере. Я изучаю возможности использования более «современного» языка, с которым более вероятно знакомство начинающих программистов. ( C++Кажется, что правильное распределение памяти в наши дни вызывает проблемы у многих новых программистов)

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

Мне нравится идея, что нет необходимости компилировать программы каждый раз, когда мы вносим изменения. Я понимаю, что интерпретируемые языки, вероятно, не достигнут той же производительности, что и в настоящее время.

Наши системы Linuxоснованы, что также ограничивает некоторые варианты.

Будем Pythonвесьма благодарны за любые комментарии по поводу функциональности и производительности, которыми могут пользоваться, или предложения по альтернативным языкам.

12.08.2008 12:24:41
13 ОТВЕТОВ
РЕШЕНИЕ

Мне нравится идея, что нет необходимости компилировать программы каждый раз, когда мы вносим изменения. Я понимаю, что интерпретируемые языки, вероятно, не достигнут той же производительности, что и в настоящее время.

Это самая большая проблема; Вы можете жить с хитом производительности. Вы можете попытаться использовать Python и расширить его текущими модулями C ++ для повышения производительности. Тем не менее, переключение всей системы кажется большим усилием, если единственная причина - отсутствие таланта в C ++. Наем людей, которые знают C ++, кажется более дешевым вариантом.

20
12.08.2008 12:38:01
Бедные программисты, как правило, плохо владеют всеми языками, поэтому изменение всего, чтобы удовлетворить нужды, не будет решением. Я бы порекомендовал научить их, как быть лучше, это окупится значительно. (и используйте STL и хорошую библиотеку XML - tinyXML - это хорошо)
gbjbaanb 2.01.2010 15:50:24
@gbjbaanb С другой стороны, я бы предпочел, чтобы плохие программисты использовали Python, а не C ++. Например, разработчик Python не может создавать межмодульные глобалы. У него не может быть проблем с порядком инициализации глобальных переменных. Он вынужден создавать что-то модульное, и немного сложнее получить те ужасно плохие проекты в Python, которые могут нанести ущерб всей системе. Тем не менее, я в основном энтузиаст C ++ (проверьте мой профиль), но я видел катастрофический вид кодирования C ++ из первых рук и думаю, что такой язык, как Python, на самом деле будет лучше в руках менее опытных программистов.
stinky472 2.03.2012 02:33:11
У такого разработчика меньше способов аварийно завершить работу программы на Python. Доступ к переменной с «None» вызовет исключение, а не неопределенное поведение (например: нарушение доступа или segfault). Не существует приведения типа C-ish / побитовой логики (просвечивание / обход типов), которую разработчики C ++ иногда делают по дурной привычке. У них также нет возможности замедлить систему сборки, игнорируя важные идиомы, такие как pimpls для центральных заголовков. Таким образом, предполагая, что таким кодовым обезьянам будет трудно получить правильный код или дизайн [...]
stinky472 2.03.2012 02:35:26
[...] Я бы предпочел доверять им Python, а не C ++, так как результат плохого кодирования не так катастрофичен. Конечно, я бы предпочел, чтобы они просто поняли, что делают, и если на этом форуме есть безработные разработчики, некоторые из этих топ-пользователей действительно имеют большой опыт, когда дело доходит до общих концепций разработки и использования C ++.
stinky472 2.03.2012 02:37:40

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

Я бы посоветовал вам потратить пару недель, чтобы познакомиться с языками программирования, которые вы рассматриваете. Я бы тоже проверил Руби. Может, немного поиграть с Хаскеллом?

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

6
12.08.2008 12:33:03

Что важнее: быстро заставить работать программы или быстро работать?

Если вы имеете дело с большим количеством больших файлов, то вам лучше остаться в C ++ и научить своих выпускников-программистов, что такое указатель (!)

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

Если загрузка обработки каждой записи невелика, вы можете быть удивлены тем, как мало вы теряете производительность: ввод-вывод файла почти наверняка будет обрабатываться в скомпилированной (C) библиотеке, поэтому издержки интерпретатора могут быть относительно низкими. Стоит попробовать, я бы предложил.

Из императивных языков Perl является очевидным вариантом, Python популярен, а Ruby имеет высокий профиль (и, вероятно, более чистые функции ОО, чем первые два). Кроме того, существует несколько более эзотерическая сфера функциональных языков, но я не компетентен комментировать их.

10
12.08.2008 12:52:05

Другой альтернативой является встраивание Python в вашу программу на C ++. Вы можете оставить большую часть своего приложения неизменной и обращаться к Python за частями, которые часто меняются или нуждаются в гибкости, которую обеспечивает язык сценариев.

Из документов Python

В предыдущих главах обсуждалось, как расширить Python, то есть, как расширить функциональные возможности Python, подключив к нему библиотеку C-функций. Это также возможно сделать наоборот: обогатите свое приложение C / C ++, встроив в него Python. Встраивание предоставляет вашему приложению возможность реализовать некоторые функциональные возможности вашего приложения на Python, а не на C или C ++. Это может быть использовано для многих целей; Одним из примеров может быть предоставление пользователям возможности адаптировать приложение под свои нужды, написав несколько скриптов на Python. Вы также можете использовать его самостоятельно, если некоторые функции могут быть написаны на Python проще.

5
29.10.2015 06:21:42

Или следует попытаться сохранить ваши правила синтаксического анализа в базе данных, а не оставлять их жестко закодированными внутри вашего кода. Как справедливо процитировал Кен Даунс , минимизируйте код, максимизируйте данные . Таким образом, вам не нужно будет перекомпилировать каждый раз, когда меняется крошечное правило.

0
12.08.2008 19:00:43

Я не хочу говорить это, но если вы хотите что-то, с чем ваши знакомые разработчики будут знакомы, переходите на Java. Java - это язык, с которым самые последние выпускники будут наиболее знакомы. Вы все еще должны компилировать, но время компиляции будет короче, чем в C ++. Он будет работать на Linux и почти везде. У него есть хороший сборщик мусора. Это довольно быстро. И я упоминал, что ваши разработчики будут знакомы с этим? Нет, это не "круто", как Python, но это очень проверенный язык.

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

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

3
12.08.2008 19:10:43
-1 для Java (на самом деле не особо помогает OP), но +1 для «людей, которые плохо управляют памятью, как правило, плохо со всеми языками».
gbjbaanb 2.01.2010 15:47:28

Если вы можете обойтись без использования Python, Ruby, Groovy или Perl против C ++, вам лучше использовать один из этих языков более высокого уровня. Производительность значительно возрастет. Если вы обнаружите, что вам нужно больше производительности, тогда переходите на Java. Каждый должен знать и использовать хотя бы один динамически типизированный язык.

0
8.09.2008 02:43:44

следует перейти на python, который сделает все возможное в сети, если вам нужно быстрее перейти на c / c ++

0
22.09.2010 12:51:56

Я бы предложил попробовать Groovy. Поддержка XML хороша, и анализ, а также проверка данных не должны быть сложными.

Однако некоторые люди отметили, что миграция может быть не самой яркой идеей. Разве вы не можете попытаться выделить общие вещи в «объекты macher» и «объекты проверки», чтобы новые программисты использовали вашу библиотеку C ++ вместо того, чтобы пытаться писать подверженный ошибкам новый код, который только дублирует существующие фрагменты?

Также обязательно используйте современный файловый IO (iostreams), а не C, как IO в C ++, что должно сильно помочь с проблемами с памятью.

Также полезно посмотреть на библиотеки повышения.

2
1.06.2011 11:48:51

Производительность в Python может быть очень большой проблемой. Однажды мне пришлось создать программу с использованием алгоритма оптимизации в списке задач. Я начал с Python, создал его очень быстро и чисто, а потом увидел, что понадобится много времени, чтобы получить результат. Перезаписывая его построчно на C ++, мы получили более чем 100-кратное улучшение скорости ...

Так что иногда это не означает потери производительности на 5-10%, как вы можете видеть. Вы должны исследовать это в вашем случае (может быть, небольшой тест?).

2
1.06.2011 12:04:44
Эпизодекс: Скажите, пожалуйста, почему python генерирует результаты "так поздно" и почему c ++ генерирует результаты "так рано ??".
cupcake 5.01.2012 06:31:31
В основном потому, что python - это язык сценариев, который, я думаю, медленнее по определению, чем скомпилированный. В моем конкретном случае мне пришлось вычислять миллионы операций в списках целых чисел. Расширенные списки Python намного медленнее, чем использование простого массива с фиксированной длиной в C ++ (мне не нужны были какие-либо дополнительные возможности этих списков). И последнее, но не менее важное, насколько я знаю, C ++ (или C) - следующий по скорости язык после Assembler;).
Episodex 9.01.2012 14:10:43
спасибо, но я прочитал в Stackoverflow в одном из комментариев пользователя, что, если Python работает медленно, не беспокойтесь, потому что процессорное время намного дешевле, чем время разработчика.
cupcake 8.02.2012 16:04:48

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

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

Для меня это огромная разница между работой с простым C ++, библиотекой std и STL и работой с мощной библиотекой, такой как Qt. Вероятно, изучение положительных героев тоже очень полезно.

3
1.06.2011 12:06:25

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

0
1.06.2011 12:13:30

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

Что касается других языков, вы можете следить за GO lang. Мой друг использовал это довольно широко. Это современный скомпилированный язык. Это имеет тенденцию быть ясным, кратким и современным. Приложения GO обычно работают на скоростях, сравнимых с написанными на C ++, и хорошо взаимодействуют с сетью. На данный момент он не очень зрелый, но выглядит многообещающе.

Удачи!

0
6.06.2012 00:57:28
Я уверен, что ваш совет отличный, но я больше не думаю, что он актуален, почему вы пишете вопрос, заданный 4 года назад?
Inbar Rose 21.10.2012 08:22:48