gtkmm

gtkmm é um wrapper em C++ para GTK+, uma biblioteca usada para criar interfaces gráficas para usuário. Sua licença é a LGPL, então você pode desenvolver software aberto, software livre ou mesmo softwares comerciais não livres usando gtkmm sem comprar licenças.

gtkmm foi originalmente denominado como gtk-- porque GTK+ já tem um sinal + no nome. Entretanto, como -- não é facilmente indexado por mecanismos de busca, o pacote geralmente ficava com o nome gtkmm, e é por isso que o adotamos por fim.

1.2.1 Por que usar gtkmm em vez de GTK+?

gtkmm permite escrever código usando as técnicas normais de C++ como encapsulamento, derivação e polimorfismo. Como um programador de C++, você já deve perceber que isso leva a um código mais limpo e melhor organizado.

O gtkmm tem melhor segurança quanto à tipagem, assim o compilador pode detectar erros que só seriam percebidos em tempo de execução ao usar C. Esse uso de tipos específicos também torna a API mais clara, porque você pode ver que tipos deveriam ser usados apenas olhando a declaração de um método.

Herança pode ser usada para derivar novos widgets. A derivação de novos widgets em código GTK+ em C é tão complicada e propensa a erros que quase nenhum programador C a faz. Sendo um desenvolvedor C++, você sabe que derivação é uma técnica essencial em orientação a objetos.

Member instances can be used, simplifying memory management. All GTK+ C widgets are dealt with by use of pointers. As a C++ coder you know that pointers should be avoided where possible.

gtkmm envolve menos código comparado ao GTK+, que usa nomes de funções com prefixos e muitas macros de conversão.

1.2.2 gtkmm comparado ao Qt

O Qt da Trolltech é o competidor mais próximo do gtkmm, então merece uma discussão.

Desenvolvedores de gtkmm tendem a preferi-lo a Qt porque gtkmm faz as coisas de uma maneira mais à la C++. Qt vem de uma época quando C++ e a biblioteca padrão não eram padronizados ou com um bom suporte por compiladores. Assim, ele duplica muita coisa faz agora parte da biblioteca padrão, tais como contêineres e informações de tipo. E mais significativo: Trolltech modificou a linguagem C++ para prover os sinais, de forma que classes Qt não podem ser usadas facilmente com classes não-Qt. O gtkmm conseguiu usar o C++ padrão para prover sinais sem alterá-lo. Veja o Perguntas frequentes para maiores detalhes nas diferenças.

1.2.3 gtkmm é um wrapper

gtkmm não é uma ferramenta nativamente em C++, mas um wrapper em C++ para uma ferramenta em C. Essa separação entre interface e implementação tem vantagens. Os desenvolvedores do gtkmm gastam a maior parte do tempo conversando sobre como o gtkmm pode apresentar uma API mais clara, sem se bagunçar devido a detalhes técnicos obscuros. Nós contribuímos um pouco na base do código do GTK+, mas também contribuem os programadores em C, em Perl, em Python, etc. Portanto, o GTK+ se beneficia de uma base de usuários mais ampla do que as de kits de ferramentas de uma linguagem em específico - há mais pessoas que implementam, mais desenvolvedores, mais testadores e mais usuários.