Então, depois do meu último post sobre linguagens de programação, o Vitor apareceu sugerindo a linguagem Boo. Resolvi dar uma olhada sobre o que ele tinha escrito sobre a linguagem, e também no site oficial dela.
Eu já tinha ouvido falar, mas não tinha dado a devida atenção, nem sabia que ela é feita por um brasileiro
! Provavelmente me distraí por causa da avalanche de linguagens pra .NET e Java VM, ela acabou se misturando com as outras na minha cabeça. Nem sabia qual era a diferença entre Boo e Groovy, por exemplo.
Encontrei no Boo algumas coisas bem legais. Primeiro, inspirada em Python. Boas idéias têm mesmo é que ser aproveitadas. Segundo, das modificações feitas na linguagem, a maioria eu gostei. Tipagem estática sem perder a possibilidade de duck typing (dinâmica) também. Macros! Dizem que quem programa em Lisp fica viciado nisso. Se em C e C++ eu já gosto de usar macros (menos poderosas que as do Lisp) pra evitar Ctrl+C, Ctrl+V, é bom ver aumentar o número de linguagems com esse recurso. Cada uma com macros ao seu jeito, mas OK. Boo tem também funções anônimas, especificadores public/private/etc., uso mais fácil de “super” do que em Python (esses 2 últimos itens devem facilitar bastante a orientação a objetos em Python, que era boa mas tinhas essas peculiaridades que incomodavam e se espalhavam pelo código) e outras coisas. Perdeu parâmetros nomeados que eu gosto, mas no meio de outras melhorias nem é tanto.
A impressão geral que dá é: “Finalmente uma linguagem pensada nos problemas enfrentados na prática pelos programadores”. Aliás, todas as linguagens que eu gosto têm em maior ou menor grau essa característica: recursos bem pensados, bem fundamentados, mas também objetivando usos práticos que ocorrem no dia-a-dia. Nisso eu incluo C++, D, Python, Lua e agora Boo. Não incluo C, mas o C eu desculpo por causa da idade da linguagem. Notáveis linguagens com filosofia oposta são: Java e Pascal/Delphi. Essas linguagens (isto, é tanto os criadores e quanto a comunidade) têm o costume de dizer: “Pra que você precisaria desse recurso? Ele é desnecessário”. Ainda bem que a concorrência (por exemplo, C# e Java) faz as linguagens evoluírem…
E com base nessa lógica furada, Java [não tinha* | não tem**] sobrecarga de operadores**; enums*; for-each*; switch em strings**; facilidades léxicas pra incluir strings grandes** no código; nenhum tipo de duck typing** (até C++ tem um isso com templates); ponteiros pra função**; geradores de getters e setters**; passagem de parâmetros por referência** e por aí vai. Pelo menos eu gerava os meus getters e setters em C++ com macros. Já o Pascal tem vários dialetos, mas de uma maneira geral os problemas que mais me incomodavam eram: precedência visivelmente errada de “and” e “or”; ponto-e-vírgula proibido antes do else (a dança dos ponto-e-vírgulas); impossibilidade de declarar variáveis perto do uso (provavelmente sob alegação de deixar o código mais “organizado”) e impossibilidade de inicializar variáveis na declaração; poucas ou nenhuma estrutura que crescesse dinamicamente; extensões incoerentes feitas na linguagem (muita coisa pra explicar aqui); ausência de literais de array (mas presença de literais de sets ¬¬’) e várias outras coisas…
Estou me perdendo nos assuntos, já acabei indo parar em Java e Pascal. É que essa tirania de certas linguagens me incomoda mesmo, hehehe, por ex.: “Você não precisa desse recurso, ele incentiva maus hábitos de programação!”; “Quanto mais verbosa a linguagem, mais clara ela é” ¬¬’
Falando nisso, encontrei isto no manifesto do Boo:
“”"The guys who came up with “public static void main” were probably kidding, the problem is that most people didn’t get it was a joke.”"”
Bah, muito boa frase! Expressou o que eu sempre pensei de um jeito muito engraçado!
O que falta dizer, pra concluir o texto, é que Boo é uma linguagem que eu consideraria fortemente usar no futuro, é uma pena que ela esteja ligada a esses ambientes gerenciados (.NET e Java VM – o lado bom é a quantidade de bibliotecas). Mas se eu for usar um ambiente desses, Boo parece ser uma opção muito boa.
Tags: Boo, Linguagens de programação