Подтвердить что ты не робот

Должен ли я перемещаться из С++ в Python?... Или другой язык?

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

Кроме того, поиск полезных библиотек может быть полезен.

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

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

Удачи!