Pergunta

Na empresa em que trabalho, fazemos muitos processamentos de transações baseados em arquivos.O processamento gira em torno da conversão de arquivos entre vários formatos para atender a vários sistemas em diversas empresas.

O processamento quase sempre envolve um XML estágio e pode incluir muita análise de texto, pesquisas de banco de dados, conversão de dados e validação de dados.

Atualmente os programas que executam todas essas tarefas são escritos em C++ e eles funcionam muito rapidamente em um servidor médio.Estou investigando as possibilidades de usar uma linguagem mais "moderna" com a qual os programadores recém-formados provavelmente estejam familiarizados.(Alocação correta de memória em C++ parece causar problemas com muitos programadores mais novos atualmente)

Com base nas breves informações fornecidas, uma linguagem como python forneceria a funcionalidade e o desempenho necessários, bem como abordaria a alocação de memória (e vários outros C++ relacionados) que surgem?

Gosto da ideia de não precisar compilar os programas cada vez que fazemos uma alteração.Entendo que as linguagens interpretadas provavelmente não atingirão o mesmo desempenho que temos atualmente.

Nossos sistemas são Linux baseado que também restringe algumas opções.

Quaisquer comentários sobre a funcionalidade e o desempenho disponíveis com Python ou sugestões de idiomas alternativos seriam muito apreciadas.

Foi útil?

Solução

Gosto da ideia de não precisar compilar os programas cada vez que fazemos uma alteração.Entendo que as linguagens interpretadas provavelmente não atingirão o mesmo desempenho que temos atualmente.

Este é o maior problema;você pode conviver com o impacto no desempenho.Você poderia tentar usar Python e estendendo-o com seus módulos C++ atuais para peças pesadas de desempenho.Ainda assim, mudar todo o seu sistema parece um grande esforço se o único motivo for a falta de talento em C++.Contratar pessoas que conheçam C++ parece ser a opção mais barata.

Outras dicas

O que é mais importante: fazer os programas funcionarem rapidamente ou fazer os programas funcionarem rapidamente?

Se você estiver lidando com um grande número de arquivos grandes, talvez seja melhor permanecer em C++ e ensinar aos seus programadores graduados o que é um ponteiro (!)

Caso contrário, eu recomendo fortemente que você procure uma solução baseada em scripts, porque o desenvolvimento nelas, quando você estiver atualizado, é muito mais rápido.E muito mais divertido, se formos honestos, pelo menos para a maioria das pessoas.

Se a carga de processamento por registro não for alta, você poderá se surpreender com a perda de desempenho:o arquivo IO quase certamente será tratado em uma biblioteca compilada (C), portanto a sobrecarga do interpretador pode ser relativamente baixa.Vale a pena tentar, eu sugiro.

Das linguagens imperativas, Perl é uma opção óbvia, Python é popular e Ruby tem um perfil alto (e provavelmente recursos OO mais limpos que os dois primeiros).Depois, há o domínio um pouco mais esotérico das linguagens funcionais, mas não estou qualificado para comentar sobre elas.

Python provavelmente removeria a maior parte do material de baixo nível que você usa em seu aplicativo.A alocação de memória não seria mais um problema.Além disso, pelo menos minha universidade parece estar adotando o Python como linguagem de programação porque os alunos não precisam escrever todas essas coisas formais para começar.Seu único problema seria a parte de desempenho, já que Python provavelmente nunca será tão rápido quanto um programa C++ compilado.

Aconselho você a dedicar algumas semanas para conhecer as linguagens de programação que está considerando.Eu também daria uma olhada em Ruby.Talvez brincar um pouco com Haskell?

Pelo que entendi, o Python parece bem equipado para lidar com tudo o que você está falando.XML, pesquisas em banco de dados, validação, análise.Geralmente é uma escolha segura, não apenas por causa da experiência de programação fácil e divertida, mas se você estiver preso, há uma comunidade incrível em torno da linguagem que ficará feliz em ajudar.

Outra alternativa é incorporar Python em seu programa C++.Você pode manter grande parte do seu aplicativo igual e chamar o Python para as partes que mudam com frequência ou que precisam da flexibilidade que uma linguagem de script oferece.

De Documentos Python

Os capítulos anteriores discutiram como estender o Python, ou seja, como estender a funcionalidade do Python, anexando uma biblioteca de funções C.Também é possível fazer o contrário:Enriqueça seu aplicativo C/C ++ incorporando Python nele.A incorporação fornece ao seu aplicativo a capacidade de implementar parte da funcionalidade do seu aplicativo no Python em vez de C ou C ++.Isso pode ser usado para muitos propósitos;Um exemplo seria permitir que os usuários adaptem o aplicativo às suas necessidades, escrevendo alguns scripts no Python.Você também pode usá -lo se parte da funcionalidade puder ser escrita em Python com mais facilidade.

Odeio dizer isso, mas se você quiser algo com o qual seus novos desenvolvedores estejam familiarizados, escolha Java.Java é a linguagem com a qual os recém-formados estarão mais familiarizados.Você ainda precisa compilar, mas os tempos de compilação serão mais curtos que os do C++.Ele será executado no Linux e em praticamente qualquer outro lugar.Tem um bom coletor de lixo.É muito rápido.E eu mencionei que seus desenvolvedores estarão familiarizados com isso?Não, não é "legal" como o Python, mas é uma linguagem testada e comprovada.

Honestamente, duvido que você tenha muitos desenvolvedores que são péssimos com C++, mas que seriam incríveis com Python de qualquer maneira.As pessoas que usam bem o Python tendem a se dar bem com o gerenciamento manual de memória.As pessoas que são ruins com gerenciamento de memória, na verdade, tendem a ser ruins com todos os idiomas.

Acho preocupante que você tenha desenvolvedores que são tão ruins com gerenciamento de memória que desejam mudar de idioma.Isso é um sinal que indica um problema, mas não tenho certeza se o problema está no idioma.

Se você concorda em permanecer com uma linguagem compilada, eu permaneceria com C++ e sugeriria escolher um bom conjunto de bibliotecas e ensinar aos novatos o uso correto e a adesão a padrões sólidos.

Se você conseguir encontrar um conjunto agradável de bibliotecas, será fácil para os novatos aprenderem a escrever códigos sólidos.Minha preferência pessoal (atual) é a biblioteca de classes Qt porque ela torna o manuseio da memória fácil e seguro e é agradável de trabalhar.Ele também oferece suporte para análise e geração de XML, possui regexp integrado, recursos de rede, é multiplataforma, ...e também é muito útil para sistemas não GUI.

Para mim, é uma grande diferença entre trabalhar com C++ simples, biblioteca std e STL e trabalhar com uma biblioteca poderosa como o Qt.Provavelmente, procurar itens de reforço também vale muito a pena.

Eu sugeriria tentar descolado.O suporte XML é bom e a análise e a validação de dados não devem ser muito difíceis.

No entanto, algumas pessoas salientaram que migrar pode não ser a ideia mais brilhante.Você não pode tentar fatorar coisas comuns em "objetos macher" e "objetos de validação" para que novos programadores usem sua biblioteca C++ em vez de tentar escrever um novo código propenso a erros que apenas duplique os fragmentos existentes?

Certifique-se também de usar IO de arquivo moderno (iostreams) e não C como IO em C++, o que deve ajudar muito com problemas de memória.

Também pode ser útil consultar as bibliotecas boost.

O desempenho em Python pode ser um grande problema.Uma vez tive que criar um programa envolvendo algoritmo de otimização na lista de tarefas.Comecei com Python, criei-o de forma super rápida e limpa, mas percebi que demoraria muito para fornecer um resultado.Reescrevê-lo linha por linha para C++ resultou em mais 100x melhoria de velocidade...

Portanto, às vezes não é uma questão de perda de desempenho de 5 a 10%, como você pode ver.Você deve investigar no seu caso (talvez um pequeno teste?).

Ou você deve tentar armazenar suas regras de análise em um banco de dados em vez de deixá-las embutidas em seu código.Como Ken Downs corretamente citado, minimizar código, maximizar dados.Dessa forma, você não precisaria recompilar toda vez que uma pequena regra fosse alterada.

Se você conseguir usar Python, Ruby, Groovy ou Perl vs.C++, seria melhor usar uma dessas linguagens de nível superior.A produtividade aumentará muito.Se você achar que precisa de mais desempenho, escolha Java.Todos deveriam conhecer e usar pelo menos uma linguagem de tipo dinâmico.

deve migrar para python, esse idioma torna tudo possível em redes, se você precisar de uma mudança mais rápida para c/c++

se a natureza do projeto que você está realizando permite que você sequer contemple tal mudança, então mova-se (supondo que você tenha alguma pista).Em muitos projetos C++, entretanto, sua única opção é migrar abaixo um ou dois níveis de abstração (por exemplo, para C ou Assembly).

Concordo com outros, você deve ficar com C++.Mudar para uma linguagem não compilada é um retrocesso.Embora muitos programadores possam ter problemas para lidar com alguns dos aspectos problemáticos da linguagem (como ponteiros), pelo menos a maioria dos programadores foi exposta a algum C++.Eu recomendo que você gaste seu tempo e dinheiro melhorando sua base de código e programadores, em vez de trocar de linguagem.

Quanto a outros idiomas, você pode querer ficar de olho no GO lang.Um amigo meu usou-o bastante.É uma linguagem compilada moderna.Tende a ser claro, conciso e moderno.Os aplicativos GO normalmente são executados em velocidades comparáveis ​​às escritas em C++ e fazem uma boa interface com a web.Não está muito maduro neste momento, mas parece promissor.

Boa sorte!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top