## Gambas, um Basic Visual para Linux

"A fenomenal quantidade de bugs e inconsistências que tornam o Visual Basic tão adorável levaram-me a iniciar este projeto". É assim que Benoit Minisini, um francês de 30 anos vivendo nos subúrbios de Paris, começa a descrever seu projeto, denominado Gambas.

Gambas é um substituto do VB para Linux. Não um clone, uma vez que Benoit nunca gostou da implementação do software da Microsoft: "Parece que a própria Microsoft está ciente da má qualidade de sua linguagem, uma vez que o VB.Net não é compatível com versões anteriores do Visual Basic. Eu acho que eles jogaram fora o interpretador do Visual Basic, e que o VB.Net é apenas um compilador .Net cuja sintaxe se parece com a do Visual Basic".

O objetivo de Gambas é ser um Visual Basic melhor que o original.

Benoit tomou emprestado do VB o que ele achava útil: a linguagem BASIC e a interface de desenvolvimento fácil de usar. Ele também tirou algumas idéias da linguagem Java, resultando em uma linguagem não apenas simples, mas também poderosa. Quão poderosa? A interface de desenvolvimento completa foi criada em Gambas, um indicador do nível de sofisticação, antes mesmo da versão 1.0.

Neste artigo tentaremos descrever o status atual da linguagem, e como ela se compara com VB. Nós veremos alguns screenshots e código fonte, para que você possa ter uma visão geral sobre a linguagem.

### Contexto

Gambas não é a primeira tentativa de se criar um substituto do VB para Linux, mas certamente é um dos projetos mais maduros.

Na verdade, existem muitas outras tentativas incompletas de se criar um clone do VB em Linux: RapidQ foi adquirido pela RealBASIC, que somente agora está lançando uma biblioteca runtime para Linux, porém sem IDE; Phoenix BASIC está paralizado por 3 anos; KBasic está parado, GNOME Basic mudou seu foco para oferecer suporte a VBA para aplicações do GNOME; entre os projetos mais promissores estão o XBasic e o HBasic, mas o primeiro é menos avançado e o segundo ainda bastante instável.

Além desses, existem muitas outras linguagens BASIC sem interfaces de desenvolvimento integradas, e outras IDEs sem a linguagem BASIC.

Gambas oferece um conjunto único de características que possibilitará a milhares de programadores em VB migrar do Windows para Linux, trazendo muito mais aplicações para o desktop livre.

### O Básico do BASIC

Um dos primeiros programas que você certamente encontrará, em qualquer linguagem de programação, é o clássico "Hello World".

#### Hello VB World

1. Inicie com um formulário em branco
2. Adicione um botão (`Command1`) e um `label` (`Label1`)
3. Escreva o código:

    Sub Command1_Click()
      Form1.Caption = "Hello World!"
    End Sub

#### Hello Gambas World

O exemplo mais simples possível, em Gambas, seria um projeto sem formulário:

    SUB main()
      PRINT "Hello World!"
    END

Mas você também pode usar um formulário, como no VB:

1. Inicie com um formulário em branco
2. Adicione um botão (`Button1`) e um `label` (`Label1`)
3. Escreva o código:

    SUB Button1_Click()
      Label1.Text = "Hello World!"
    END

O primeiro exemplo do Gambas é trivial, e ainda assim, mostra algo que o Visual Basic não consegue fazer! No VB existe um comando `Print`, mas apenas para o objeto `Debug` e outros objetos gráficos, como `Printer`, `Form` ou `Picture`. Aparentemente a Microsoft, que havia decidido que programadores não deveriam escrever diretamente para a saída padrão, voltou atrás recentemente, com o lançamento do NET.

### Diferenças

Embora o Gambas não tenha o objetivo de ser um clone do VB, ele ainda é BASIC, e portanto existem muitas similaridades entre as duas linguagens, e muitas relações um-para-um entre suas características.

Existem mais similaridades do que diferenças, mas você não pode simplesmente copiar seu antigos projetos e esperar que eles compilem no Gambas.

Entre as principais diferenças, podemos destacar:

- O Visual Basic embute o código de uma classe dentro de cada formulário ou objeto, resultando em um único arquivo que define a lógica e a interface. Gambas mantém as duas coisas separadas, em arquivos `.form` e `.class`.

VB | Gambas | Type of file
--- | --- | ---
.vbp | .project (just .project, one per directory) | Project definition file
.bas | .module | Module
.cls | .class | Class file
.frm | .form | Form definition file
.frx | (whatever you want) | Binary resource files

- No VB, arquivos de diversos projetos podem estar misturados em um único diretório. No Gambas, cada projeto tem o seu diretório.

- As medidas de tela no VB são feitas em "twips", unidades de 1/1440 de polegada. Gambas usa uma medida mais precisa, os "pixels".

#### O que o VB tem, que Gambas não tem

- No Gambas, você não consegue editar o código em `break mode`, precisando interromper a execução antes.

- Em VB, parâmetros de procedimentos são passados por referência, a não ser que você use a cláusula `ByVal`. No Gambas, parâmetros de procedimentos são passados por valor.

- Não existem variáveis de escopo global, para todo o projeto, em Gambas. Uma forma de contornar esta limitação é criar uma classe chamada Global, declarando suas variáveis como `static` e `public`, e referindo-se a elas como `Global.VariableName`. Assim, suas variáveis globais estarão claramente identificadas -- caso você realmente queira fazer uso deste recurso.

- No VB, variáveis não precisam ser declaradas a não ser que você inclua a diretiva `Option Explicit`. Em Gambas, as variáveis precisam ser declaradas, sempre, o que resulta em código superior, mesmo que seja preciso um pouco mais de trabalho.

- Em Gambas não existe a propriedade `Index`, que permite que componentes sejam agrupados no VB. É possível, porém, agrupá-los programaticamente.

- O evento MouseMove apenas é executado quando o botão do mouse está pressionado, de forma que você não pode usá-lo para os tradicionais efeitos de "mouse over". Você pode, porém, criar tooltips com o uso de uma propriedade destinada a isso.

#### O que Gambas tem, que o VB não tem

- Ao contrário do VB, você pode escrever diretamente para a saída padrão; a interface gráfica é opcional.

- Gambas possui o conceito de `control groups`, que permitem lidar com eventos originados de diversos componentes a partir de uma única subrotina. Isto reduz a necessidade de código redundante, a chance de erros, e ainda permite várias coisas que os índices do VB fazem - e muitas outras que o VB não faz.

- Enquanto o VB torna impossível rodar programas sincronamente e receber sua saída sem o uso de complexas chamadas à API do Windows (`Shell` apenas executa um programa em background), Gambas permite que isto seja feito através dos comandos `SHELL` e `EXEC`, e do objeto `Process`. Isto permite que você aproveite uma miríade de recursos proporcionados por programas externos, criando front-ends para programas de linha de comando. Isto poderá representar um fator decisivo para o surgimento de cada vez mais ferramentas gráficas no Linux.

- Além de lidar com programas externos, você pode manipular os dispositivos como se fossem arquivos (`/dev`), obter informações do kernel (`/proc`), ou usar `pipes` para trabalhar em conjunto com outros programas do Unix.

- Você pode criar janelas de formatos variados, não estando restrito a um retângulo. Para isso precisa apenas ajustar a propriedade ME.Mask de uma janela, definindo áreas transparentes. O Visual Basic requer chamadas da API e um pouco mais de trabalho.

- Em Gambas, você pode embutir um formulário dentro do outro.

- Já está em desenvolvimento o componente `Network`. De acordo com Daniel Campos, seu criador, o componente encontra-se em versão beta, e já oferece funcionalidades tais como clientes DNS/NIS, cliente e servidor para sockets TCP, UNIX e UDP ("datagramas"), e `SerialPort` - uma classe para gerenciar dispositivos seriais (RS-232, etc...).

- A interface de desenvolvimento do Gambas foi escrita em Gambas, permitindo que você customize seu ambiente de trabalho de maneira ilimitada, expandindo e utilizando seu conhecimento da linguagem.

- Gambas é software livre, e funciona em uma plataforma inteiramente livre, oferecendo total liberdade de uso, aprendizado, cópia e distribuição -- e sem custos de licença.

### Aproveitando o poder do Unix

"This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface." -- Doug McIlroy

Uma das grandes vantagens do Gambas com relação ao VB é que o Gambas foi construído segundo a filosofia Unix. Isto significa que você pode alavancar o poder do sistema operacional e de milhares de ferramentas, ao invés de escrever código.

Vejamos as possibilidades.

Existem, no Linux, ferramentas gráficas e de linha de comando para queimar CDs, tocar arquivos MP3 e baixar arquivos da internet.

Ao reconhecer este fato, você pode unificar todos estes recursos sob uma única interface, sabendo que os demais programas são especializados em fazer uma coisa, e bem.

Você não precisa depender de um fornecedor de componentes especializados. Conte com os recursos que vêm sendo desenvolvidos pela comunidade de desenvolvedores de software livre. Torne-se parte desta comunidade, contribuindo com sua experiência e conhecimentos.

Se você alguma vez já programou em BASIC, você terá de volta aquele sentimento de familiaridade assim que começar a usar o Gambas.

Programadores acostumados com o VB se sentirão em casa desde o início.

Certamente, Gambas não é VB, e portanto os desenvolvedores acostumados com a linguagem da Microsoft precisarão estar preparados para algumas mudanças. O lado bom é que a maioria destas mudanças estão lá por alguma razão específica: para fazer uma linguagem melhor. Como já dissemos no início, Gambas procurou aproveitar boas idéias de Java e outras linguagens.

### Convertendo seu código legado

Então você é um programador de VB, e possui quase uma década de código fonte em uma plataforma proprietária, que muda a cada dois ou três anos.

Você certamente conhece o problema de ter que adaptar-se às mudanças. No caso do VB, porém, muitas dessas mudanças foram criadas por questões mercadológicas, de forma a impulsionar as vendas. Problemas antigos são perpetuados, e os programadores sempre buscam o santo Graal.

Talvez você esteja considerando mudar para uma plataforma livre, que não se coloque no seu caminho; mais do que isso, que não cobre altos tributos sobre o seu trabalho. Mas a necessidade de lidar com o código legado continua.

Felizmente os desenvolvedores de Gambas já começaram a trabalhar no sentido de facilitar esta transição.

Com o lançamento do script VB2Gb, a interface de projetos inteiros em VB pode ser rapidamente convertida para Gambas. O programa encontra-se na versão 0.1, e portanto existe muito espaço para melhorias. Como na maioria dos softwares livres, as melhorias dependem basicamente do feedback de seus usuários, que também podem se envolver no projeto.

### Conclusão

Gambas é a solução mais próxima ao Visual Basic no universo do software livre. Ele não foi criado com o objetivo de imitar o VB, nem mesmo rodar código nativo do VB, mas oferece uma interface rápida de desenvolvimento baseada na linguagem BASIC.

Gambas encontra-se em progresso contínuo. Sua versão atual (0.72) é considerada uma versão alfa, sujeita a mudanças. Ainda assim, Gambas já está sendo usado em aplicações complexas, como a própria IDE. Não existe pressa para lançar a versão 1.0, pois o objetivo é fazer as coisas certas desde a primeira vez.

Gambas possui uma estratégia para o futuro. Entre as características que podemos esperar para os próximos meses, podemos citar:

- Gerenciador de relatórios (report designer)
- Sistema de persistência de objetos. (Estuda-se a aplicação do conceito de prevalência, promovido pelo brasileiro Klaus Wuestefeld)
- Expressões regulares estilo Perl
- Componente SDL - crie jogos em Gambas!

Com Gambas, qualquer um pode começar a programar aplicações gráficas em questão de minutos, o que poderá trazer muito mais programadores e aplicações para o GNU/Linux. Por isso, podemos dizer que, assim como o OpenOffice e o Mozilla, o Gambas pode será uma ferramenta essencial para o fortalecimento do GNU/Linux no desktop.

Como você pode colaborar? Comece a aprender, usar e divulgar este projeto!