Стоит ли переходить с C++ на Python? ... Или на другом языке?

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

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

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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
13
0
9 977
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

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

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

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

Ответ принят как подходящий

I like the idea of not needing to compile the programs each time we make a change. I understand that the interpreted languages probably wont hit the same performance we currently get.

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

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

gbjbaanb 02.01.2010 18:50

@gbjbaanb С другой стороны, я бы предпочел, чтобы плохие программисты использовали Python, чем C++. Например, разработчик Python не может создавать межмодульные глобальные объекты. У него не могут возникнуть проблемы с порядком инициализации глобальных объектов. Он как бы вынужден разрабатывать вещи в некоторой степени модульным образом, и немного сложнее получить эти катастрофически плохие проекты в Python, которые могут нанести ущерб всей системе. Тем не менее, я в основном энтузиаст C++ (проверьте свой профиль), но я лично видел катастрофический вид программирования на C++ и думаю, что такой язык, как Python, действительно был бы лучше в руках менее опытных программистов.

stinky472 02.03.2012 06:33

У такого разработчика меньше возможностей разрушить программу на Python. Доступ к переменной с «None» вызовет исключение, а не неопределенное поведение (например, нарушение прав доступа или segfault). Нет C-ish type casting / bitwise kind of logic (x-raying / bypassing types), которые разработчики C++ иногда делают по дурной привычке. У них также нет возможности замедлить работу системы сборки, игнорируя важные идиомы, такие как pimpls для центральных заголовков. Итак, если предположить, что обезьянам с таким кодом будет сложно получить правильный код или дизайн [...]

stinky472 02.03.2012 06:35

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

stinky472 02.03.2012 06:37

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

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

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

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

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

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

От Документы Python

The previous chapters discussed how to extend Python, that is, how to extend the functionality of Python by attaching a library of C functions to it. It is also possible to do it the other way around: enrich your C/C++ application by embedding Python in it. Embedding provides your application with the ability to implement some of the functionality of your application in Python rather than C or C++. This can be used for many purposes; one example would be to allow users to tailor the application to their needs by writing some scripts in Python. You can also use it yourself if some of the functionality can be written in Python more easily.

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

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

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

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

-1 для Java (на самом деле не очень помогает OP), но +1 для «людей, которые плохо управляют памятью, как правило, плохо работают со всеми языками».

gbjbaanb 02.01.2010 18:47

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

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

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

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

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

Также может быть полезно поискать библиотеки наддува.

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

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

Эпизодекс: Расскажите, пожалуйста, почему python генерирует результаты «так поздно» и почему C++ генерирует результаты «так рано ??».

cupcake 05.01.2012 10:31

В основном потому, что python - это язык сценариев, который, как мне кажется, по определению медленнее, чем скомпилированный. В моем конкретном случае мне пришлось вычислить миллионы операций над списками целых чисел. Расширенные списки Python намного медленнее, чем использование простого массива фиксированной длины в C++ (мне не понадобились какие-либо дополнительные функции этих списков). И последнее, но не менее важное: насколько мне известно, C++ (или C) - следующий по скорости язык после Assembler;).

Episodex 09.01.2012 18:10

спасибо, но я прочитал в Stackoverflow в одном из комментариев пользователя, что если Python работает медленно, не волнуйтесь, потому что время процессора намного дешевле, чем время разработчика.

cupcake 08.02.2012 20:04

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

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

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

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

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

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

Удачи!

Я уверен, что ваш совет отличный, но я не думаю, что он больше актуален, почему вы публикуете вопрос, заданный 4 года назад?

Inbar Rose 21.10.2012 12:22

Другие вопросы по теме