Existe um ponto para escrever em C ou C ++ em vez de C # sem saber especificamente o que faria um programa mais rápido?

4

Eu escrevi uma pequena biblioteca em Python para manipular os arquivos STFS do xbox 360 para serem usados em meus aplicativos da web. Eu gostaria de reescrevê-lo para uso em muitos programas de desktop que as pessoas estão escrevendo para modding 360 jogos, mas eu não sou bem se eu deveria continuar usando c # ou mergulhar em C + + ou mesmo C.

STFS é um sistema de arquivos em arquivo usado pelo xbox 360 e pelo O trabalho da biblioteca seria extrair / injetar arquivos, o que poderia levar muito tempo para ser feito. O que eu sei em C # vem de tutoriais e recursos da Internet, assim como qualquer coisa que eu aprenda sobre C ++, então o que eu estou perguntando é se é melhor me levar a uma linguagem de nível um pouco inferior sem saber de antemão os recursos da linguagem que aumentam desempenho, ou continue assumindo que as otimizações do compilador e que a minha falta de experiência significará que a linguagem que escolho não importará.

    
por mowwwalker 13.06.2012 / 07:51
fonte

8 respostas

17

A vantagem do C # sobre C ++ é a velocidade e o momento de desenvolvimento (a menos que você seja um dos muito poucos gurus do C ++, que pode alegar fazer um RAD competitivo em C ++ e não se machucar o processo, mas, novamente, boa sorte em encontrar companheiros de equipe que possam razoavelmente reivindicar a mesma coisa). As otimizações do compilador não ajudarão você a codificar mais rapidamente e com menos erros, especialmente provenientes de um plano de fundo em Python.

Você pode ajustar seu desempenho se realmente for um problema, escrevendo partes críticas de código em C ++ / CLI, ou mesmo C com PInvoke, mas - se você estiver no mundo da Microsoft - normalmente haverá um lugar para C # código alto em sua pilha, enquanto C / C + + pode ser completamente ausente em algumas soluções. Portanto, talvez você deva começar com C # e complementar com C ++, não vice-versa.

    
por 13.06.2012 / 08:15
fonte
6

Você deve primeiro considerar se os idiomas com os quais você já está familiarizado são adequados para a tarefa. Se você concluir que não conhece idiomas que sejam adequados para a tarefa, deve investigar qual seria o melhor para aprender.

A partir da breve descrição que você deu, eu diria que o C # é bem adequado para desenvolvimento de desktop e integração com XBOX. Então, por que perder tempo e esforço aprendendo C ++ (com sua curva de aprendizado)? Mas se a sua exigência for para o programa ser potencialmente portátil, por exemplo, o C # perde imediatamente pontos. Portanto, certifique-se de definir seus requisitos para si mesmo adequadamente.

    
por 13.06.2012 / 07:57
fonte
5

Se o seu aplicativo lida com muitas alças e conexões, você pode preferir o C ++ para o gerenciamento de recursos RAII. Coletores de lixo não funcionam para identificadores de recursos compartilhados. Se você estiver usando c # ou java, será forçado a se desvincular do estilo "malloc" antigo com chamadas de liberação explícitas.

O C ++ lida com o gerenciamento de recursos de uma maneira mais limpa e elegante que não é possível em outros idiomas. C ++ está anos-luz à frente do C #. E não há sinal de C # ou Java se recuperando, já que a melhor resposta para o RAII é "usar" blocos que não são RAII, apenas um açúcar sintático sobre um try / finally / close explícito. Ele não possui o fail-safe embutido na pilha. ou seja, você deve se lembrar de tentar / fechá-lo como você sempre fez, mas com uma sintaxe mais agradável.

Eu já vi inúmeros sistemas C # e Java falharem porque os desenvolvedores deixaram conexões e manipuladores para o coletor de lixo ...

    
por 13.06.2012 / 13:21
fonte
3

Isso soa como uma forma extrema de otimização prematura para mim. Não faça isso. Como @vski disse - (Supondo que a escolha seja C #, C ++ ou C), fique com C # e use para C ++ em um local de código onde (no evento extremamente improvável) isso possa fazer a diferença.

Editar: Em resposta ao comentário de @gbjbaanb:

Isso também leva à pergunta: "Você está reescrevendo o aplicativo Python realmente necessário ou está otimizando prematuramente."

    
por 13.06.2012 / 08:53
fonte
2

Eu escolherei primeiro a ferramenta que facilitará o desenvolvimento e a manutenção (C #). Como dito anteriormente, existem opções para otimizar mais tarde, se necessário, e você pode otimizar dentro do C #.

    
por 13.06.2012 / 12:17
fonte
2

Não é dado que seu código irá correr mais rápido por si só usando uma linguagem de baixo nível como C ou C ++. Python ou C # devem funcionar bem, e com código bom pode ser quase tão rápido quanto código C ou C ++. Se seu código for muito lento, você poderá criar o perfil dele para ver quais partes otimizar, mas não se preocupe com isso ao escolher o idioma a ser usado na implementação.

Em vez de trocar de idioma, você provavelmente se sairia muito melhor gastando algum esforço na compra de um livro para uma educação mais aprofundada sobre o que já conhece ou sobre as melhores práticas, perfis etc.

No entanto, uma coisa que pode valer a pena é a portabilidade . Usando C ou C ++ seu código pode ser mais portátil, e ter menos dependências em ambientes de tempo de execução, etc. Isso pode ser valioso para outros usuários usando seu código, já que eles não precisam instalar um grande ambiente de tempo de execução. ou idioma apenas para executar o seu programa. Se você assumir que a maioria dos usuários terá essas partes no lugar de qualquer maneira, isso também se torna um ponto discutível.

    
por 13.06.2012 / 13:14
fonte
1

A partir de sua descrição, parece que o gargalo para o desempenho aqui será em E / S, e quando se trata de leituras / gravações aqui, nenhum idioma mostrará qualquer diferença significativa. Portanto, se o desempenho do código intermediário de modificar os dados for sua preocupação com o desempenho, você provavelmente poderá modificar quaisquer dados lidos enquanto continua a ler mais em um thread separado, tornando a escolha da linguagem aqui para desempenho bastante discutível, IMO.

    
por 13.06.2012 / 14:36
fonte
-1

Eu encorajo você a escrever em assembly lol. Maior curva de aprendizado, mas se for a velocidade que você quer, uma montagem bem escrita pode fornecê-la.

O próximo corredor em velocidade seria C. Embora todos digam que não é muito mais rápido que C ++, não é o único benefício. C é IMO foi escrito melhor e tem muito mais potencial para um aumento na velocidade. Classes em C ++ adicionam um pouco de sobrecarga e complexidade desnecessária de aprender a linguagem. Sem eles, você também pode escrever C e obter esse aumento de velocidade.

Embora eu não tenha escrito nenhum C # ou sequer tenha visto o código-fonte de um programa C #, sei que não gosto dele, já que sou um cara do Linux. Assim, por que não recomendo strongmente o C #. Isso soa como um programa útil para muitos usuários do Linux também.

O Python parece ser uma boa escolha para mim, parece mais instável devido ao alto nível de abstração para uma função de nível mais baixo. Ele permitiria que ele fosse movido entre o Linux Windows e o Mac.

    
por 21.06.2012 / 15:36
fonte