Por que o C ++ ainda prefere construir aplicativos pesados de GUI nas linguagens dinâmicas mais recentes? [fechadas]

44

Vejo que a maioria dos aplicativos que incluem conteúdo pesado de GUI geralmente é desenvolvida em C ++. A maioria dos jogos / navegadores são codificados em C ++.

Não podemos simplesmente desenvolver melhores aplicativos de GUI com as mais recentes linguagens dinâmicas? Eu sei que o java não seria uma ótima escolha. Mas e as linguagens como python que são nativamente construídas em C? As línguas mais recentes não são supostamente melhores que seus ancestrais? Por que ainda temos que preferir o antigo C ++ sobre os idiomas mais recentes?

E eu também gostaria de saber, o que é que é responsável em C ++, para a melhor velocidade de processamento da GUI? Por outro lado, o que é que faltam as outras línguas mais recentes?

    
por Vamsi Emani 31.05.2011 / 07:59
fonte

13 respostas

51

Sou uma daquelas pessoas que escrevem aplicativos GUI C ++ (principalmente para windows). Com o Qt, para ser preciso. Minhas razões:

  • Eu gosto de C ++. Sou freelancer e geralmente posso escolher minhas ferramentas (sorte minha!)
  • Em um ambiente gerenciado, talvez seja difícil usar algum código não gerenciado (declarações WinAPI prolixas em C #, alguém?)
  • Menos dependências mais facilmente implementadas
  • Maior controle sobre tudo.
  • RAII (vs. GC). E mesmo se eu alocar com new , eu raramente delete nada explicitamente, porque eu usar ponteiros inteligentes ou a% hierarquia% co_de.
  • O C ++ é muito empolgante atualmente, mal posso esperar por um compilador para suportar totalmente o novo padrão.
  • Speed (apenas no final da lista. Eu sei que não é assim tão importante para o próprio GUI, mas tende a ser mais rápido porque os programas em C ++ não sofrem com a sobrecarga que tempos de execução, código de byte JIT-compilação e tecnologias semelhantes adicionar ao programa.)

Como você pode ver, estas são principalmente preferências pessoais. Acho importante que meu trabalho seja agradável e o C ++ me oferece isso.

    
por 31.05.2011 / 10:07
fonte
31

Porque a velocidade é importante.

  • Jogos usam o C ++ para tarefas principais, em que o desempenho é importante. Eles usam linguagens dinâmicas para tarefas de script em que a flexibilidade é importante.

  • Aplicativos da GUI da área de trabalho : o Visual Studio, por exemplo, é escrito em .NET e não em C ++ nativo. Parece funcionar muito bem para um IDE, já que o próprio IDE não precisa executar muitas tarefas de desempenho intenso. (O compilador, o linker e outras ferramentas não são necessariamente escritas no .NET - embora, como aponta o wawa em um comentário, alguns pareçam ser (por exemplo, VB.NET))

  • Os navegadores precisam ser rápidos também. Afinal, eles são um tipo de sistema operacional secundário. Por outro lado, você pode argumentar que grandes partes do Firefox são realmente "escritas em" javascript, como o framework Mozilla parece depender muito do javascript.

Para resumir: eu não diria que o C ++ é necessariamente preferido mas se você tem um gargalo de performance você tem que ir mais perto do metal e então você conhece C ++ (bem, ou C). Às vezes, será mais fácil fazer tudo em C ++ - uma linguagem.

    
por 31.05.2011 / 10:07
fonte
15

Os aplicativos de GUI que você vê escritos em C ++ geralmente são feitos devido a motivos herdados. Python (com Qt ou Gtk) é muito viável para aplicações GUI, assim como o C # se você trabalha em uma casa Windows. Ao iniciar algo novo, é muito muito preferido ao C ++ por causa da falta de trabalho de encanamento que tem que ser feito.

    
por 31.05.2011 / 08:12
fonte
14

Como não importa quantos testes de desempenho o .NET e o público em geral mostrem, não importa o quão próximos eles cheguem nos benchmarks, no final, o aplicativo C ++ é exibido no topo. É mais rápido na inicialização a frio, é mais rápido e tem mais maneiras de melhorar.

Eu já ouvi inúmeras provas no projeto iniciando fases em que o .NET é o caminho a seguir, mas uma vez escolhido, elas sempre acabam sendo um grande peso.

Além disso, o C ++ atualmente é bastante seguro e bastante fácil de usar, especialmente com frameworks como Qt ou WTL.

    
por 01.06.2011 / 02:28
fonte
10

A maioria dos motores de jogos são codificados em C ++. Muitos dos motores do navegador são codificados em C ++. Mas o GUI do navegador é frequentemente codificado usando algum script leve (JavaScript, Python). Com notável exceção do Source Engine, a maioria dos mecanismos de jogos também usa linguagens de script (como Lua ou Python). [para referência: lista de jogos com scripts Lua ]

Tenha também uma popular biblioteca de C ++, como o Qt. Na versão atual (4.7), ele usa QML para a GUI. O QML é basicamente JavaScript com ligações do Qt.

Portanto, realmente não há linguagens dinâmicas C ++ vs , é misto.

    
por 31.05.2011 / 10:56
fonte
6

A primeira razão será: (antigo) hábito

Segunda razão: menos confiabilidade em máquinas virtuais, intérpretes que precisam ser instalados etc.

E ainda existem alguns excelentes IDEs para desenvolver código em C ++.

    
por 31.05.2011 / 08:40
fonte
6

A razão é que você tem muito mais controle sobre tudo o que acontece. Se você fosse escrever photoshop em C #, você teria sérios problemas de desempenho em algumas tarefas. Em uma linguagem de nível mais baixo, com mais controle, você pode usar atalhos, otimizar onde for necessário para coisas mais intensas. É claro que isso pressupõe que você esteja usando C ++ em código não gerenciado, não em C ++ no .NET.

Veja aqui para um exemplo rápido.

    
por 31.05.2011 / 09:31
fonte
5

C ++ é tipado estaticamente. Isso permite otimizar a execução de código antecipadamente, fazendo com que um compilador ajuste suas abstrações ao processo de sistema disponível em uma determinada plataforma. Até agora, os idiomas dinâmicos precisam de uma camada de software adicional (= o interpretador) que reduz o acesso aos recursos do sistema.

    
por 31.05.2011 / 16:51
fonte
4

A maioria das razões dadas são técnicas ou "acima da tabela" ... aqui estão as razões do negócio ou o "abaixo da mesa":

distribuindo código compilado v.s. distribuindo o código fonte. Ao desenvolver em c / c ++, você distribui os binários. Se você está desenvolvendo em um dos idiomas modernos, você distribui a fonte. é difícil vender a idéia de obfuscators para a administração, que tem que responder aos acionistas / investidores, então não se incomode.

usuários estúpidos: pelo menos nas mentes da gerência. eles ainda percebem que seus usuários mal conseguem clicar duas vezes em um "setup.exe". Se você incluir a instalação de um intérprete como parte da configuração, eles irão sacudir a cabeça de um lado para o outro.

desenvolvedores antigos: a maioria das pessoas com experiência existe há muito tempo e não se mantém atualizada. eles programam em C ++ e não nos idiomas mais novos, porque não conhecem os idiomas mais recentes.

    
por 31.05.2011 / 13:55
fonte
4

Eu estenderia o escopo do problema da GUI para o software que deve ser competitivo. C ++ não impõe nenhum imposto sobre a plataforma de destino, pois diz respeito ao poder de processamento, tempo de execução instalado, frameworks, etc. Por isso, ele funcionará em hardware de cliente mais limitado do que uma solução semelhante escrita em uma linguagem gerenciada / interpretada. No caso de um software comercial bem-sucedido, o custo de desenvolvimento (potencialmente maior no caso de C ++) é amortizado pelo número de vendas.

Além disso, o C ++ geralmente oferece acesso direto a apis do sistema (como a GUI), o que oferece a melhor oportunidade de otimizar a utilização e diferenciar-se de soluções semelhantes.

    
por 31.05.2011 / 14:04
fonte
3

Acho que muito disso tem a ver com as APIs para kits de ferramentas GUI. Todos eles têm uma API C / C ++, mas nem todos eles têm (digamos) ligações Python. E às vezes os próprios toolkits foram escritos com o C ++ em mente, por isso, mesmo que tenham suporte para outras linguagens, eles não os suportam (por exemplo, eles não suportam um Python tuple como um argumento).

    
por 31.05.2011 / 16:53
fonte
2

Você está mencionando navegadores e jogos como exemplos. Ambos são aplicativos de performance crítica, então tê-los em uma linguagem de baixo nível para velocidade faz sentido.

Muitos outros aplicativos têm menos desempenho e podem ser facilmente gravados em outros idiomas. C # em particular parece ser muito usado. (E Obj-C, mas realmente não se qualifica como de alto nível, eu acho. Melhor que o C ++).

No entanto, há uma certa falta de frameworks para as linguagens de programação mais recentes. Por exemplo, não há biblioteca GUI nativa viável para o Python, na verdade. Claro, você pode usar o PyQt ou o PyGtk e eles funcionam bem, mas no final, isso só está interagindo com o código C novamente. Novamente, C # (e possivelmente Obj-C) parece ser a exceção e talvez MacRuby ou IronPython possam mudar esse jogo.

    
por 31.05.2011 / 10:11
fonte
0

Para um idioma para substituir o C ++ ou o Java, ele tem que fazer o que falta nesses idiomas além de executá-los com suas próprias forças. Além disso, grandes investimentos foram direcionados para esses idiomas. Isso significa que existe uma biblioteca C ++ padrão em muitas plataformas, que navegadores, jogos e tais programas podem usar prontamente. Então, há certa inércia. Os idiomas tendem a decolar lentamente, ao contrário de outros softwares.

Se você observar, o Anaconda (programa de instalação do RedHat) existe há cerca de 10 anos, escrito em Python desde o início. O Python não era tão popular quando o Anaconda era novo.

Google Go (golang.org) está evoluindo muito rápido. O compilador ainda está para ser inicializado. Para que sua popularidade decole, sua biblioteca precisa se estabilizar, o compilador deve ser inicializado e mais pessoas precisam usá-lo. Eu ouvi dizer que um programa de produção fora do Google foi escrito em Go e é relatado que ele não teve tempo de inatividade ainda em sua vida de pouco mais de um ano.

    
por 31.05.2011 / 22:46
fonte