Estou pensando em escrever um novo produto de software. O desempenho será crítico, por isso tenho receio de usar uma linguagem ou interpretação ou uma que use uma camada de emulação (leia java).
O que me leva a pensar em usar C (ou C ++), no entanto, esses dois são bastante longos no dente. Eu também não uso há muito tempo. Achei que nos últimos 20 anos alguém provavelmente criou algo razoavelmente popular, agradável de codificar e compilar.
Que alternativas mais modernas existem para C para escrever código compilado de alto desempenho?
Se C ++ é um animal diferente do que era há 15 anos, eu consideraria isso, acho que tinha a suposição de que ele tinha alguns problemas inerentes.
A paralelização seria importante, mas provavelmente não entre várias máquinas.
fonte
Respostas:
Existe uma linguagem em desenvolvimento chamada The Rust Programming Language que busca objetivos semelhantes aos do C ++, notadamente abstrações de custo zero e controle fino sobre o gerenciamento de memória. Dito isto, talvez seja o candidato mais notável, apesar de ainda ser muito jovem.
Além do Rust, não existem outras alternativas populares que compilem o código nativo. Também existem Delphi e D, é claro, mas eles não são tão rápidos, populares ou usados. O idioma Go do Google pode ser um candidato, mas ainda é muito jovem e visa um domínio um pouco diferente.
No entanto, observe que C # (assumindo a plataforma Microsoft) e Java podem não ser tão lentos, mesmo que executados em cima de uma máquina virtual; a compilação just-in-time de código pode fazer algumas otimizações que os compiladores tradicionais antecipadamente não são capazes de aplicar devido à falta de informações do estado e do ambiente do programa.
Sinceramente, pessoalmente, eu não consideraria C um candidato se C ++ for uma opção, principalmente pelo fato de o C ++ moderno ser mais seguro, funcionar em um nível mais alto de abstração, ser mais expressivo e praticamente não ter perda de desempenho em relação a C (em alguns casos C ++ é notavelmente mais rápido). Simplificando, o C ++ fornece tudo o que C fornece e muito mais. A maior parte da funcionalidade C é considerada "obsoleta" e alternativas melhores, mais seguras, mais rápidas e mais intuitivas são fornecidas pela biblioteca padrão C ++.
fonte
Há também o Ada , que é compilado em código nativo e é portátil em várias plataformas, dentro dos limites de sua biblioteca padrão. O idioma está ativo e bem, com a atualização mais recente do padrão de idioma atualmente em andamento (conhecida como Ada 2012).
Resumo rápido para aqueles que não estão familiarizados com Ada:
fonte
Há 15 anos, não havia um padrão C ++. O segundo foi publicado no ano passado. As melhores práticas do C ++ mudaram muito nos 5 anos após a publicação do padrão 98 e estão mudando novamente com a publicação do 11.
fonte
Por que as pessoas sempre insistem em procurar novos idiomas?
C ++:
A única desvantagem do C ++ é que você precisa aprender um pouco. É isso aí.
Compare isso com outros idiomas que são um ou mais dos seguintes:
IMHO, quanto menos idiomas usaremos e apoiaremos, melhor será a situação.
Isso causa melhorias automáticas nas estruturas do idioma, suporte, documentação, trabalho de comitês de padronização, melhores livros, mais conhecimento, software de suporte mais fácil, melhores padrões, ciclos mais longos de suporte ao idioma e código mais qualificado escrito no idioma.
Eu sei que as pessoas vão votar contra isso, mas pense sobre isso, realmente.
fonte
const
problemas de correção e coisas assim. Qualquer pessoa que tenha lido C ++ eficaz (como o Coder afirma ter) e afirma que C ++ é fácil tem uma desconexão mental.C / C ++ é bastante longo no dente .... isso é uma coisa boa . Isso implica que eles foram projetados suficientemente bem (ahem), que ainda são muito úteis, que muitas pessoas os usam para tarefas diárias e que você encontrará um grande corpo de desenvolvedores que são especialistas neles. Maturidade é algo a ser estimado.
Se você gasta todo o seu tempo procurando por algo novo, apenas porque é novo e, portanto, pensa que deve ser de alguma forma melhor, você ficará desapontado. Isso se aplica a linguagens de software, sistemas GUI (tome nota, Microsoft e Gnome) e amantes (tome nota, jovens :))
Agora, é certo que, se sua experiência em C ++ tiver 20 anos, quando o código C ++ geralmente foi codificado como C, talvez seja hora de reavaliar a linguagem, todos os recursos existentes no dia que nunca foram totalmente usados são usados. muito mais hoje, e alguns esforços de padronização expandiram um pouco a linguagem para torná-la muito diferente dos antigos desenvolvimentos no estilo C. Não que C seja ruim também - é uma linguagem perfeita para muitos tipos de tarefas de codificação também!
fonte
O padrão atual do C ++ é o C ++ 11 , publicado em 2011. Portanto, não é um padrão de 20 anos. E tem havido vários padrões no meio. Cada um deles apresentando inúmeras melhorias de desempenho.
Os compiladores também estão melhorando constantemente. Eles são muito melhores em otimizar do que costumavam ser.
Formatos executáveis também melhoraram, há 20 anos você tinha a.out , agora você tem ELF .
No geral, a sugestão de que o C ++ não mudou em 20 anos não pode estar mais longe da verdade.
Além disso, lembre-se de que C e C ++ são linguagens muito diferentes.
fonte
Não sou um grande especialista nessa linguagem, mas acho que o OCaml pode ser uma opção interessante de se olhar.
OCaml é uma linguagem compilada, funcional / orientada a objetos. Para uma comparação de desempenho com C ++, consulte C ++ vs OCaml: comparação de rastreador de Ray . Obviamente, este é um exemplo muito específico e deve-se fazer testes mais extensos para ter uma melhor noção do desempenho do OCaml.
fonte
Depende do que o seu produto fará. Se o desempenho for realmente crítico, o idioma preferido ainda será o FORTRAN . Eu também não descartaria o Java - ele é usado em muitos aplicativos de negociação financeira de alto volume. Erlang vale a pena dar uma olhada se o domínio do problema exigir alta simultaneidade. O Objective-C é bom, embora eu não saiba o quão bem ele é suportado fora do ecossistema da Apple (além de compiladores e tempo de execução básico). Também ouvi coisas boas sobre o desempenho de Haskell, mas não tenho certeza se isso é desempenho absoluto ou apenas desempenho em relação a outras linguagens funcionais.
fonte
Quando você diz que seu projeto é sensível ao desempenho, você quer dizer todas as linhas de código dele? Ou, como normal, há uma porcentagem menor que é crítica para o desempenho, enquanto o restante é a execução normal do código comercial da fábrica?
Depois de responder, qual é o maior risco para o seu projeto: que o resultado final seja muito lento ou que você nunca o termine em primeiro lugar?
Supondo que você responda a segunda para ambos, você deve desenvolver uma linguagem de nível superior que ofereça suporte à interoperabilidade nativa (Python, Ruby, a família .Net todos têm isso). Primeiro, termine o projeto. Em seguida, perfile, otimize, enxágue, repita. Somente depois disso, considere recriar o segmento de escolha do seu aplicativo no código nativo e integrar esse código nativo ao produto final.
fonte
O Vala é semelhante ao Java e C #, compila ao código nativo (ou código-fonte C, se você preferir) e é muito rápido . Ele requer GLib para seus bits orientados a objetos e é escrito por hackers Linux para hackers Linux; portanto, se seu domínio for Windows, pode não ser muito bom.
fonte
Objective-C é uma alternativa moderna e compilada para C e C ++ diretos. Ele possui gerenciamento de memória coletado e determinístico de lixo e o tempo de execução do OO que passa a mensagem foi otimizado para desempenho.
Está disponível no GCC e no CLang e existem bibliotecas de aplicativos, como GNUStep e Cocotron, que funcionam em várias plataformas.
Se você estiver realizando um trabalho de alto desempenho, presumirei que seja um tipo de trituração de números ou outro trabalho de divisão e conquista em vez da interface do usuário, o que significa que você poderia fazer a interface do usuário no idioma que for mais fácil para você, por exemplo, HTML através de um mini servidor http.
fonte
Eu nunca usei, mas um amigo dos meus jura por Cython, que permite que você use primitivas do estilo C em partes críticas do desempenho, mantendo a sintaxe geral do python e aproveitando ao máximo as construções de alto nível dos pythons para reduzir o desenvolvimento tempo em qualquer outro lugar.
fonte