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

StackOverflow https://stackoverflow.com/questions/8748

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Наши системы - это Linux на основе которых также ограничиваются некоторые параметры.

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Из самого Документы на Python

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Удачи вам!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top