Alternativas modernas compiláveis para C / C ++ [closed]

37

Estou pensando em criar um novo produto de software. O desempenho será crítico, por isso tenho receio de usar uma linguagem interpretada ou que use uma camada de emulação (leia java).

O que me leva a pensar em usar C (ou C ++), no entanto, estes são bastante longos no dente. Eu não usei nem por um longo tempo. Eu imaginei que nos últimos 20 anos alguém provavelmente criou algo que é razoavelmente popular, legal para codificar e compilar.

Quais alternativas mais modernas existem para C para escrever código compilado de alto desempenho?

Se o C ++ é um animal diferente do que era 15 anos atrás, eu consideraria isso, eu acho que eu tinha uma suposição de que ele tinha alguns problemas inerentes.

A paralelização seria importante, mas provavelmente não em várias máquinas.

    
por Jeremy French 28.08.2012 / 15:40
fonte

12 respostas

54

Existe uma linguagem em desenvolvimento chamada A Linguagem de Programação Ferrugem , que persegue objetivos semelhantes aos do C ++, especialmente abstrações sem custo e controle preciso 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 compilam código nativo. Há Delphi e D também, é claro, mas eles não são tão rápidos, populares ou usados. A linguagem Go do Google pode ser uma candidata, mas ainda é muito nova e tem como objetivo um domínio um pouco diferente.

No entanto, observe que o C # (assumindo a plataforma Microsoft) e o Java podem não ser tão lentos, mesmo que sejam 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 do tempo anterior não são capazes de aplicar devido à falta de informações do estado e ambiente do programa.

Francamente eu pessoalmente não consideraria C como candidato se o C ++ for uma opção, principalmente porque o C ++ moderno é mais seguro, funciona em maior nível de abstração, é mais expressivo e praticamente não tem perda de desempenho em relação a C em alguns casos, o C ++ é notavelmente mais rápido). Simplificando, o C ++ fornece tudo o que o C fornece e 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 ++.

    
por 28.08.2012 / 15:47
fonte
18

Há também Ada , que é compilado para código nativo e é portátil em várias plataformas dentro do limites de sua biblioteca padrão. A linguagem está viva e bem, com a mais recente atualização padrão de idioma em andamento (conhecida como Ada 2012).

Resumo rápido para quem não conhece a Ada:

  • com digitação strong
  • Suporte interno para simultaneidade
  • Orientado a objetos ou processual, dependendo de seus requisitos
  • Suportado pelo conjunto de ferramentas GNU (o GCC contém o frontend do Ada)
  • Excelente também para desenvolvimento de software, ou seja, quando você precisa interagir diretamente com o hardware
  • Suporta programação genérica (pacotes genéricos, procedimentos, funções)
  • Recursos suportam desenvolvimento de software em grande escala (pacotes, pacotes filhos, compilação separada, distinção estrita entre especificação e implementação)
por 29.08.2012 / 14:56
fonte
17

If C++ is a different beast than it was 15 years ago, I would consider it, I guess I had an assumption that it had some inherent problems.

15 anos atrás, não havia nenhum 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.

    
por 28.08.2012 / 16:34
fonte
11

C / C ++ é bastante longo no dente ... isso é uma coisa boa . Isso implica que eles foram projetados bem o suficiente (ahem) que eles ainda são muito úteis, que muitas pessoas usá-los para tarefas cotidianas, e que você vai encontrar um grande corpo de desenvolvedores whop são especialistas neles. A maturidade é algo a ser valorizado.

Se você gasta todo o seu tempo procurando algo novo, só porque é novo e pensa, portanto, que deve ser de alguma forma melhor, você está em uma grande decepção. Isso se aplica a linguagens de software, sistemas GUI (note, Microsoft e Gnome) e amantes (note, jovens mulheres :))

Agora admitimos que, se a sua experiência com C ++ tiver 20 anos, quando o código C ++ foi geralmente codificado como C, então talvez seja hora de reavaliar a linguagem, todos os recursos que estavam lá no dia e que nunca foram usados são usados muito mais hoje, e alguns esforços de padronização expandiram um pouco a linguagem para fazer com que parecesse muito diferente daqueles antigos desenvolvimentos no estilo C. Não que C seja ruim também - é uma linguagem perfeita para muitos tipos de tarefas de codificação!

    
por 28.08.2012 / 16:44
fonte
11

Por que as pessoas sempre insistem em procurar novos idiomas?

C ++:

  • É o número 4 da linguagem TIOBE, mas pisa toda a competição se combinado com C
  • Tem muitos quadros
  • É muito fácil codificar em
  • É muito fácil ajustar
  • Tem um desempenho muito bom
  • É muito seguro
  • Tem um suporte muito bom na indústria
  • A plataforma cruzada
  • Não precisa de VMs extras / Frameworks / implantação de bagunça se feito corretamente
  • Será fácil conseguir um emprego para você
  • Tem todo o material necessário para criar o .so / .dll para iniciar em sistemas muito antigos
  • É fácil solucionar problemas
  • muito expressivo
  • Muito dinâmico
  • e monte de outras coisas interessantes

A única desvantagem do C ++ é que você precisa aprender um pouco. É isso.

Compare isso com outros idiomas que são um ou mais de:

  • Estreito suportado (OCML, Fortran, ...)
  • Lenta (Java, Javascript)
  • Experimental (Silverlight)
  • Um alvo em movimento (.NET 1/2/3/4/5? qual é o último agora?)
  • Plataforma bloqueada (.NET)
  • Suporte de estrutura deficiente (Fortran)
  • Tem pequenas comunidades (qualquer coisa fora do top 10)
  • São pesadelos para solucionar problemas (Qualquer coisa com conceitos de alto nível a prova de erros e outras coisas)
  • Precisa de 500MB de pré-formatação na máquina do cliente (JVM / .NETVM)

IMHO, quanto menos idiomas usarmos e apoiarmos, melhor será a situação.

Isso faz com que melhorias automáticas nas estruturas da linguagem, suporte, documentação, trabalho de comitês de padronização, melhores livros, mais conhecimento, software de suporte mais fácil, melhores padrões, mais ciclos de suporte ao idioma e código mais habilidoso escrito na linguagem. p>

Eu sei que as pessoas vão recusar isso, mas pense nisso, realmente.

    
por 29.08.2012 / 01:11
fonte
8

O padrão atual do C ++ é C ++ 11 , que foi publicado em 2011. Portanto, não é um padrão de 20 anos. E tem havido numerosos padrões no meio. Cada um deles introduziu 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, tenha em mente que C e C ++ são idiomas muito diferentes.

    
por 28.08.2012 / 17:24
fonte
5

Eu não sou um grande especialista nessa língua, mas acho que OCaml poderia ser uma opção interessante de se olhar.

OCaml é uma linguagem compilada, funcional / orientada a objetos. Para obter uma comparação de desempenho com o C ++, consulte C ++ vs OCaml: comparação do Ray tracer . Claro, este é um exemplo muito específico e deve-se fazer testes mais extensos para ter uma melhor percepção do desempenho do OCaml.

    
por 28.08.2012 / 22:59
fonte
3

Depende do que seu produto vai fazer. Se o desempenho for realmente crítico, a linguagem preferida é ainda 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 seu domínio de problema requer alta concorrência. O Objective-C é legal, embora eu não saiba o quão bem suportado está fora do ecossistema da Apple (além dos compiladores e do 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.

    
por 28.08.2012 / 16:44
fonte
3

Quando você diz que seu projeto é sensível ao desempenho, você quer dizer toda linha de código dele? Ou, como o normal, existe uma porcentagem menor que é crítica no desempenho, enquanto o restante é o código de negócios comum da fábrica?

Depois de responder isso, qual é o maior risco para o seu projeto: que o resultado final é muito lento ou que você nunca o conclui em primeiro lugar?

Supondo que você responda o segundo para ambos, você deve desenvolver em uma linguagem de nível mais alto que suporte interoperabilidade nativa (Python, Ruby, a Família .Net, todos têm isso). Primeiro, termine o projeto. Em seguida, perfil, otimizar, enxaguar, repita. Somente depois disso, considere reescrever o segmento de escolha do seu aplicativo no código nativo e integrar esse código nativo com o produto finalizado.

    
por 28.08.2012 / 18:07
fonte
1

Vala é semelhante a Java e C #, compila para código nativo (ou código-fonte C, se você preferir), e é < um href="https://code.google.com/p/vala-benchmarks/wiki/BenchResults"> muito rápido . Ele requer o GLib para seus bits orientados a objetos, e é escrito por hackers do Linux para hackers do Linux, então se o seu domínio for Windows, pode não ser muito bom.

    
por 28.08.2012 / 21:22
fonte
1

Objective-C é uma alternativa moderna e compilada para C e C ++. Ele possui gerenciamento de memória determinista e coleta de lixo e o tempo de execução OO de passagem de mensagem foi otimizado para desempenho.

Está disponível através do GCC e do CLang e existem bibliotecas de aplicações, como GNUStep e Cocotron, que funcionam em várias plataformas.

Se você estiver fazendo um trabalho de alto desempenho, presumiremos que isso é meio processamento de números ou outro trabalho de divisão e conquista em vez de interface do usuário, o que significa que você pode fazer a interface do usuário em qualquer idioma que seja mais fácil para você, por exemplo HTML através de um mini servidor http.

    
por 29.08.2012 / 16:40
fonte
0

Eu nunca usei isso, mas um amigo meu jura Cython que permite usar primitivas de estilo C em desempenhe partes críticas do seu código enquanto mantém a sintaxe geral do python e seja capaz de tirar o máximo proveito das construções de nível superior de pythons para reduzir o tempo de desenvolvimento em qualquer outro lugar.

    
por 28.08.2012 / 17:55
fonte