Programação de desktops multiplataforma: C ++ vs. Python [fechado]

11

Tudo bem, para começar, tenho experiência como programador amador de Obj-C / Cocoa e Ruby w / Rails. Eles são ótimos, mas não são realmente úteis para escrever aplicativos de plataforma cruzada (espero que o GNUStep seja um dia completo o suficiente para que o primeiro seja multiplataforma, mas esse dia não é hoje).

C ++, pelo que sei, é extremamente poderoso, mas também um gigante enorme e feio que pode levar meia década ou mais para dominar. Também li que você pode facilmente, não apenas dar um tiro no próprio pé, mas também estourar sua perna inteira, pois o gerenciamento de memória é totalmente manual. Obviamente, tudo isso é bastante intimidador. Está correto?

O Python parece fornecer a maior parte do poder do C ++ e é muito mais fácil entender o custo da velocidade. Quão grande é esse sacrifício? É significativo ou pode ser ignorado?

O que me fará escrever aplicativos rápidos, estáveis ​​e altamente confiáveis ​​em um período de tempo razoável?

Além disso, é melhor usar o Qt para sua interface do usuário ou manter front-ends nativos separados para cada plataforma?

EDIT: Para maior clareza, existem dois tipos de aplicativos que quero escrever: um é um frontend de banco de dados extremamente amigável e conveniente e o outro, que sem dúvida virá muito mais tarde, é um editor mundial 3D.

John Wells
fonte
Você está fazendo perguntas para as quais as respostas serão altamente subjetivas - IMHO que não é construtivo, votando assim no fechamento. Você também está fazendo pelo menos 4 perguntas diferentes em uma. Como pode alguém, além de você saber se C ++ ou Python é a melhor escolha para você ? Sugiro que você tente criar um pequeno aplicativo GUI com Python (que não deve demorar mais de um dia), e o mesmo aplicativo com C ++, e compare você mesmo.
Doc Brown
Acho que o que realmente estou tentando perguntar é o que estou procurando, o que é objetivamente a melhor escolha?
John Wells
Você pode fornecer um contexto extra - o que seu aplicativo de desktop precisa fazer? Muita matemática? Aplicativo de produtividade? Acesso ao banco de dados? Um jogo?
JBRWilkinson 23/09/12
Adicionada edição para esclarecer o que eu quero fazer.
John Wells
Eu optaria por usar o mesmo idioma do sistema operacional e / ou da biblioteca da GUI. Você pode fazer manipulações muito mais detalhadas na interface do usuário com mais facilidade. Tente simular algo tão simples quanto a tela cheia (pressione F11 no seu navegador) em um idioma de alto nível, como Java ou C #. Eu descanso meu caso. As soluções nativas são portáveis ​​para uma variedade maior de dispositivos do que as soluções de alto nível, como java (ironicamente).
Lord Tydus 23/09/12

Respostas:

8

C / C ++ é rápido. A realidade é que a maioria dos aplicativos não precisará desse desempenho com o estado dos hardwares atuais. A maneira usual é desenvolver o aplicativo em uma linguagem de alto nível, como python, e otimizar quando necessário com linguagens de nível inferior, como C / C ++.

O Python oferece um grande aumento de produtividade, é fácil de aprender e razoavelmente rápido. Existe o Cython , que você pode usar para escrever extensões C para usar em seu aplicativo python com sintaxe semelhante a python para acelerar gargalos.

Para aplicativos GUI padrão, o python pode fornecer desempenho suficiente. E python tem algo muito legal chamado Kivy , uma estrutura de interface gráfica do usuário que roda em Mac, Windows, Linux, Android e iOS, e suporta multi-touch. A parte do bônus é que as partes críticas de desempenho são otimizadas com C, usando o Cython.

Hakan Deryal
fonte
1
Você provavelmente está certo sobre velocidade. O Kivy parece muito capaz, mas pode desenhar widgets nativos do sistema?
19412 John Wells
Não, ele usa seu próprio mecanismo gráfico para widgets, usando o OpenGL ES. O Qt provavelmente será sua melhor aposta para widgets nativos entre plataformas.
Hakan Deryal 23/09/12
5

Eu iria com o Python, pois oferece um grande aumento de produtividade. Você ainda pode escrever partes do seu aplicativo que precisam de velocidade em C ++; existe um projeto Cython que permite usar bibliotecas C ++ diretamente em Python. Se você está preocupado com a segurança de suas fontes, o Cython também pode ajudar com isso, você pode usá-lo para compilar seu código python normal em código C ++.

Eu recomendaria incorporar o mecanismo Chrome e usar tecnologias como: HTML5 + CSS3 + Javascript + JQuery + Canvas para a interface do usuário.

Existe uma estrutura que facilita a incorporação do mecanismo Chrome no seu aplicativo C ++, chamado CEF - Chromium Embedded Framework . Ele suporta Windows, Linux, Mac OS.

Se você gosta de Python, dê uma olhada no CEF Python , é um projeto que fornece ligações python para a estrutura CEF (usando Cython ). Atualmente, o python CEF suporta apenas o Windows, mas há planos para outros SOs.

Aqui está uma lista de aplicativos que foram bem-sucedidos usando o CEF (extraído daqui ):

  • Adobe Brackets - editor de código para a Web
  • Adobe Edge - ferramenta de autoria de multimídia
  • AppJS - crie aplicativos de desktop usando o Node.js
  • AOL Instant Messenger - cliente Windows usa CEF
  • Cubiez - integra seu conteúdo favorito na área de trabalho
  • Desura - plataforma de jogos online
  • Dish World IPTV - plataforma de streaming de vídeo
  • Evernote - software de anotação
  • ExeOutput - permite implantar aplicativos html5 / php como aplicativos de desktop
  • GitHub para Windows - software cliente GitHub para Windows
  • Janetter - software cliente do twitter
  • mChef - plugin do navegador mIRC
  • MediaMan - software organizador
  • MetaVR - software de simulação geográfica
  • MTG Studio - software para organização de jogos
  • OpenSpace3D - plataforma de desenvolvimento 3D
  • Rdio - plataforma de streaming de música
  • Spotify - plataforma de streaming de música
  • Cliente Steam - plataforma de jogos online
  • Tencent QQ - programa de mensagens instantâneas e navegador da web
  • Trend Micro - software de segurança na Internet
  • WBEA Desktop - permite implantar aplicativos html5 como aplicativos de desktop

Também dê uma olhada nesta entrada do blog: Construindo um aplicativo com qualidade de desktop em tecnologias da Web - Equipe de editores de colchetes, explicando como eles foram criados usando a estrutura CEF e tecnologias da web como: jQuery , Bootstrap , MENOS CSS , requireJS , Jasmine for Unit testing , JSlint .

Disclaimer: Eu sou o autor do projeto CEF Python.

Czarek Tomczak
fonte
Obrigado pela sua contribuição! O CEF parece bastante bom, mas espero fornecer uma experiência nativa em cada plataforma, se possível, o que é difícil de reproduzir com HTML, CSS e JS.
John Wells
@JohnWells, por que nativo? As pessoas estão acostumadas com a experiência na web. Veja o Windows 8, cada próximo sistema operacional da Microsoft tem menos a ver com o nativo, eles estão forçando as tecnologias da Web e este é o futuro, não existe algo como "experiência nativa", é uma coisa do passado.
Czarek Tomczak
Depende do software que você está falando. Os aplicativos orientados para o consumidor podem ficar bem com a sensação de "web", mas isso não é tão bom com o software centrado na criação de conteúdo. Além disso, embora o Windows 8 possa ser voltado para a tecnologia da web, o Mac OS ainda está firmemente fundamentado em terras nativas e seus usuários tendem a não gostar de softwares que se desviam disso.
John Wells
1
JBRWilkinson, mas eu realmente não quero escrever CSS imitando widget (no caso do CEF) para cada plataforma, se não for necessário.
John Wells
1
Sendo um usuário de Mac, a experiência nativa é muito importante para mim. A meu ver, nada é pior do que um aplicativo que não aparece e age de acordo com o sistema operacional em que está sendo executado. Mesmo algo como um grande aumento de produtividade não é suficiente para superá-lo.
John Wells
5

O modo Qt do C ++ é ótimo e limpo; portanto, abandone a parte "feio gigante", experimentei os dois e, pessoalmente, sou muito mais produtivo / confortável com o Qt / C ++ do que com a ligação Qt do Python. Esse é o meu conselho se você optar por usar o Qt. Além da experiência nativa que o widget Qt fornece, o Qt5 e o QtQuick2 com tecnologia QML e a capacidade de incorporar JavaScript e HTML5 no seu aplicativo, oferece uma aparência moderna da Web, se você optar por fazê-lo.

Então, por que não gosto de Python em aplicativos de desktop e prefiro mantê-lo para scripts ou coisas do lado do servidor?

  • O Python quebra um pouco a alegria de plataforma cruzada, seu cliente precisa instalar o Python para executar seu aplicativo (especialmente no Windows), e as diferentes versões do Python que estão no site oficial do python agora deixam o cliente confuso, qual baixar / instalar .

  • Python para executar, criar aplicativos maiores (em termos de tamanho).

  • Aplicativos Python, consomem mais memória.

Esse é um ponto de vista pessoal. O sistema pai do Qt, ponteiros inteligentes, não permite que você atire no pé nem nas pernas, o C ++ 11 oferece ainda mais recursos.

01walid
fonte
3
"seu cliente precisa instalar o Python para executar seu aplicativo" - você pode distribuir dlls python com seu aplicativo, não há necessidade de o usuário instalar o python manualmente. Você não precisa usar py2exe ou outros fabricantes de erros de buggy (pela minha experiência), consulte Python Embedding , são apenas algumas linhas de código c ++, substitua PyRun_SimpleString por PyRun_SimpleFile, você pode compilá-lo facilmente e não sobrecarregar o tamanho do seu aplicativo. "Aplicativos Python, consomem mais memória." - use o Cython para otimizar partes exigentes de memória do seu aplicativo.
Czarek Tomczak