Vejo que a maioria dos aplicativos que incluem conteúdo pesado da GUI geralmente é desenvolvida em C ++. A maioria dos jogos / navegadores é codificada em C ++.
Não podemos simplesmente desenvolver aplicativos GUI melhores com os idiomas dinâmicos mais recentes? Eu sei que java não seria uma ótima escolha. Mas e linguagens como python, nativamente construídas em C? Os idiomas mais recentes não deveriam ser melhores que seus ancestrais? Por que ainda precisamos preferir o C ++ antigo aos idiomas mais recentes?
E também gostaria de saber, o que é responsável em C ++ pela melhor velocidade de processamento da GUI? Por outro lado, o que falta nos outros idiomas mais recentes?
programming-languages
c++
Vamsi Emani
fonte
fonte
Respostas:
Eu sou uma daquelas pessoas que escrevem aplicativos C ++ GUI (principalmente para Windows). Com o Qt, para ser mais preciso. Minhas razões:
new
, raramente façodelete
algo explicitamente, porque uso ponteiros inteligentes ouQObject
hierarquia.Como você pode ver, essas são principalmente preferências pessoais. Acho importante que meu trabalho seja agradável e o C ++ fornece isso para mim.
fonte
Porque a velocidade é importante.
Os jogos usam C ++ para tarefas principais, onde 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, pois o próprio IDE não precisa executar muitas tarefas intensas de desempenho. (O compilador, o vinculador e outras ferramentas não são necessariamente escritos no .NET - embora, como apontamos em um comentário, alguns pareçam estar (por exemplo, VB.NET))
Os navegadores também precisam ser rápidos. Afinal, eles são uma espécie de sistema operacional secundário. Por outro lado, você pode argumentar que grandes partes do Firefox são realmente "escritas em" javascript, pois a estrutura Mozilla parece depender muito do javascript.
Resumindo: eu não diria que C ++ é necessariamente preferido, mas se você tiver um gargalo de desempenho, precisará se aproximar do metal e conhecer C ++ (bom ou C). Às vezes, será mais fácil fazer tudo em C ++ - uma linguagem.
fonte
Os aplicativos da GUI que você vê escritos em C ++ geralmente são feitos por motivos herdados. O Python (com Qt ou Gtk) é muito viável para aplicativos da GUI, assim como o C # se você trabalha em uma casa Windows. Ao iniciar algo novo, ou é muito muito preferido para C ++ por causa da falta de trabalho de canalização que tem de ser feito.
fonte
Como não importa quantos testes de desempenho o .NET e as multidões mostrem, não importa o quão próximos eles cheguem nos benchmarks, no final, o aplicativo C ++ é o melhor. É mais rápido na inicialização a frio, é mais rápido e tem mais maneiras de melhorar.
Ouvi inúmeras provas, nas fases iniciais do projeto, de que o .NET é o caminho a percorrer, mas, uma vez escolhido, eles sempre acabam sendo um grande problema.
Além disso, hoje em dia o C ++ é bastante seguro e fácil de usar, especialmente com estruturas como Qt ou WTL.
fonte
A maioria dos mecanismos de jogos é codificada em C ++. Muitos mecanismos de navegador também são codificados em C ++. Mas a GUI do navegador geralmente é codificada usando algum script leve (JavaScript, Python). Com exceção notável 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 script Lua ]
Também pegue a popular biblioteca C ++ GUI como o Qt. Na versão atual (4.7), ele usa QML para a GUI. QML é basicamente JavaScript com ligações Qt.
Então, realmente não há C ++ vs linguagens dinâmicas, é misto.
fonte
A primeira razão será: (antigo) hábito
Segundo motivo: menos confiabilidade em máquinas virtuais, intérpretes que precisam ser instalados etc.
E ainda existem excelentes IDEs para desenvolver código em C ++.
fonte
O motivo é que você tem muito mais controle sobre tudo o que acontece. Se você fosse escrever photoshop em C #, teria sérios problemas de desempenho para algumas tarefas. Em um idioma de nível inferior e com mais controle, você pode usar atalhos, otimizar onde necessário para coisas mais intensas. Obviamente, isso pressupõe que você esteja usando C ++ em código não gerenciado, não C ++ em .NET.
Veja aqui um exemplo rápido.
fonte
C ++ é digitado estaticamente. Isso permite otimizar a execução do código antecipadamente, solicitando que um compilador ajuste suas abstrações ao processo do sistema disponível em uma determinada plataforma. Até agora, as linguagens dinâmicas precisam de uma camada de software adicional (= o intérprete), que diminui o acesso aos recursos do sistema.
fonte
A maioria dos motivos apresentados são técnicos ou "acima da tabela" ... aqui estão os motivos comerciais ou "abaixo da tabela":
distribuir código compilado vs distribuir código fonte. ao desenvolver em c / c ++, você distribui os binários. se você estiver desenvolvendo em um dos idiomas modernos, você distribui a fonte. é difícil vender a idéia de ofuscadores para a gerência que precisa responder aos acionistas / investidores para não se incomodar.
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 sacudirão 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 nas linguagens mais recentes, porque não conhecem as linguagens mais recentes.
fonte
Eu estenderia o escopo do problema da GUI para o software que se espera ser competitivo. O C ++ não impõe nenhum imposto na plataforma de destino, pois diz respeito ao poder de processamento, tempo de execução instalado, estruturas etc. Portanto, ele funcionará em hardware de cliente mais limitado do que em uma solução semelhante escrita em uma linguagem gerenciada / interpretada. No caso de um software comercial bem-sucedido, o custo de desenvolvimento (potencialmente mais alto no caso de C ++) é amortizado pelo número de vendas.
Além disso, o C ++ geralmente oferece acesso direto às APIs do sistema (como a GUI), o que oferece a melhor oportunidade de otimizar a utilização e diferenciar-se de soluções semelhantes.
fonte
Eu acho que muito disso tem a ver com as APIs para kits de ferramentas da GUI. Todos eles têm uma API C / C ++, mas nem todos possuem (digamos) ligações Python. E, às vezes, os kits de ferramentas foram escritos com o C ++ em mente, portanto, mesmo que eles tenham suporte para outras linguagens, eles não os suportam totalmente (por exemplo, eles não suportam um Python
tuple
como argumento).fonte
Você está mencionando navegadores e jogos como exemplos. Ambos são aplicativos bastante críticos para o desempenho; portanto, tê-los em um idioma de baixo nível para velocidade faz sentido.
Muitos outros aplicativos são menos limitados ao desempenho e podem ser facilmente escritos 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 C ++.)
No entanto, há uma certa falta de estruturas para as linguagens de programação mais recentes. Por exemplo, realmente não existe uma biblioteca GUI nativa viável para Python. Claro, você pode usar PyQt ou PyGtk e eles funcionam bem, mas no final, isso só faz interface com o código C novamente. Novamente, o C # (e possivelmente o Obj-C) parece ser a exceção e, talvez, o MacRuby ou o IronPython possam mudar esse jogo.
fonte
Para que uma linguagem substitua C ++ ou Java, ela precisa fazer o que há muita falta nessas linguagens, além de executá-las com seus próprios pontos fortes. Além disso, grandes investimentos foram direcionados para esses idiomas. Isso significa que há uma biblioteca C ++ padrão em muitas plataformas, que navegadores, jogos e programas podem usar facilmente. Portanto, é provável que haja alguma 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á 10 anos, escrito em Python desde o início. Python não era tão popular quando o Anaconda era novo.
O Go do Google (golang.org) está evoluindo muito rápido. O compilador ainda está para ser inicializado. Para sua popularidade decolar, sua biblioteca precisa se estabilizar, o compilador deve ser inicializado e mais pessoas precisam usá-lo. Ouvi dizer que um programa de produção fora do Google está escrito em Go e é relatado que ainda não houve um tempo de inatividade em pouco mais de um ano.
fonte