quinta-feira, setembro 08, 2005

Desenvolva um aplicativo e execute-o no Windows, no Linux e no Mac

Um aplicativo multi-plataforma é o sonho de muitos desenvolvedores. A linguagem C surgiu com a promessa de ser multiplataforma, pois livraria os programadores de programarem em Assembly.

Com o passar dos anos, verificou-se que simplesmente utilizar o C não tornava um aplicativo multi-plataforma. Várias diferenças de arquiteturas de hardware e de bibliotecas tornavam a portabilidade um pesadelo.

A Sun lançou o Java como sendo a solução definitiva para o problema de portabilidade. Write once. Run Everywhere é o lema. De fato, Java é uma excelente linguagem que quase que elimina todos os problemas de portabilidade.

Como isso é conseguido? Ao invés de gerar um binário compatível com o processador (que é o que todas as linguagens compiladas fazem), o Java gera um pseudo-código: os byte-codes.
Este código é interpretado por uma máquina virtual java (jvm).

A máquina virtual Java (desenvolvida em C) é um programa compilado especificamente para a plataforma em que será executada.

É responsabilidade máquina virtual interpretar os byte-codes e executar as operações para o programa em java. Para cada nova plataforma, basta o desenvolvimento da nova jvm pelo fabricante e nossos códigos em Java podem ser executados, sem nenhum esforço adicional do programador.

Apesar desta solução ser ideal para a maioria dos casos, às vezes ela não é conveniente. Há vários motivos para que alguém não queira ou não possa programar em Java:


  • desconhecimento da linguagem
  • necessidade de rodar o programa em máquinas mais antigas, onde há sérias restrições de memória e processador
  • desejo que o programa tenha a mesma aparência que os aplicativos nativos.
Desde 1992 existe um framework denominado wxWidgets que tem as seguintes premissas:


  1. ser rápido
  2. programação fácil
  3. fácil portabilidade
  4. mesma aparência que aplicativos nativos
  5. baixo custo

Como que o wxWidgets consegue os objetivos acima?

A velocidade é obtida por duas coisas:

  1. a biblioteca é implementada em C / C++, ou seja as mais rápidas linguagens de programação são utilizadas.
  2. Não existe um interpretador (como acontece com o Java).

Epa! Se o código é em C, então ele é nativo. Como que pode ser portável?

Todas as classes disponibilizadas pelo wxWidgets são implementadas com as bibliotecas nativas de cada plataforma.Por exemplo, no MS Windows, as bibliotecas usam o SDK WIN32. No Linux, usam o GTK+.

Deste modo, o código fonte é sempre o mesmo. O desenvolvedor só precisa recompilar o programa na plataforma de seu interesse. Esta abordagem permite ao aplicativos desenvolvidos com wxWidgets terem a mesma cara dos outros programas, sem nenhum esforço extra.

Você programa para várias plataformas diferentes sem ter que aprender classes diferentes para cada uma delas. Além disso, a licensa do wxWidgets permite que você desenvolva aplicativos comerciais sem necessidade de pagar royalties e sem precisar liberar o código fonte.

Vou escrever mais sobre o wxWidgets (e sobre Java também), para tentar te mostar como funciona esta framework e como portar um aplicativo feito com a MFC da Microsoft.

Quer saber mais? Leia o livro do Julian Smart, principal desenvolvedor do wxWidgets.

Nenhum comentário: