Esta notícia foi originalmente publicada em 03 de janeiro e faz parte da coleção das melhores notícias de 2008 publicadas na InfoQ
A tendência aparentemente é clara; nos próximos anos teremos um aumento na adoção de novas linguagens de programação. Inicialmente não para substituir as que estamos atualmente utilizando, mas fazer um mix das linguagens e utilizar a linguagem indicada para o problema.
Mas qual é a linguagem correta para um problema em particular? Em um post recente de seu blog, o desenvolvedor de JRuby Ola Bini mergulha no assunto a partir de um novo ângulo. Programação multilíngüe, também conhecida como programação poliglota, já foi coberta anteriormente pela InfoQ, mas Bini descreve o fenômeno no contexto de como nós estaremos construindo sistemas no futuro; quais os tipos de linguagem nós poderemos utilizar – e para quê.
Bini descreve 3 camadas diferentes e as linguagens, ou os tipos de linguagem, que se aplicam nestas camadas. Não, não o modelo clássico de apresentação, negócio e camadas de dados;
Bini divide o mundo de forma diferente:
- Uma camada estável – não muitas funcionalidades na aplicação,construído com linguagens esáticas.
- Uma camada dinâmica – uma porção de funcionalidades na aplicação, construído com linguagens dinâmicas.
- Uma camada de domínio - uma porção de funcionalidades na aplicação, construído com linguagens especificas de domínio.
Bini descreve a camada estável:
A primeira camada é o que eu chamo de camada estável. Ela não é uma parte muito grande da aplicação em termos de funcionalidade. Mas é a parte sobre qual todo o resto é construído, e é uma parte muito importante deste processo. Esta camada é a camada onde o tipo estático seguramente vai ajudar.“
A camada dinâmica é onde a maior parte das funcionalidades da aplicação existe:
“A segunda camada é a camada dinâmica. É onde talvez metade do código da aplicação se encontra. Os tipos de linguagem aqui são predominantemente dinâmicas, linguagens fortemente tipadas [...]”
Também considerando a camada dinâmica, ele complementa:
“É um lugar bom e produtivo para ser, e obviamente, com minha fascinação por linguagens da JVM, acredito que é a interação entre esta camada e a camada estável que é realmente poderosa.”
Na camada de domínio, Bini aposta no movimento emergente de DSL.
“A terceira camada é a camada de domínio. Ela deve ser implementada com DSL, uma ou mais dependendo das necessidades do sistema. Na maioria dos casos isto é provavelmente o suficiente para implementá-la como uma DSL interna dentro da camada dinâ mica, e nesses casos a segunda e terceira camada não são distinguidas facilmente. Mas em alguns casos é permitido ter uma DSL externa com quem se pode interagir. Um típico exemplo pode ser algo com uma engine de regras (como Drools).”
Davida N. Welton escreve uma resposta ao post de Bini, onde ele descreve suas dúvidas a respeito desta evolução:
“Eu tenho dúvidas, e acho que ele deveria considerar como base os fatores sociológicos e econômicos ao dirigir esta mudança. Linguagens de programação são, no final, a respeito de pessoas em todas as suas esquisitices, então para entender onde as linguagens estão caminhando, você tem que considerar estes fatores humanos [...]”.
Weltonse refere a um artigo que ele escreveu há alguns anos atrás que analisa a economia das linguagens de programação . Neste artigo, Welton acredita que desde que a maioria das implementações de linguagens são livres nos dias de hoje, a única maneira de obter uma melhor economia utilizando uma nova linguagem é se ela torna o código:
- Fácil de escrever – maioria das pessoas pode utilizar isto.
- Mais eficiente - Poupa recursos.
- Altaqualidade – menos acerto de bugs.
- Mais produtiva – Permite você fazer coisas complexas facilmente.
Ola Bini conclui explicando que ele não acredita em uma próxima grande linguagem, mesmo em uma camada:
“Mas eu preciso deixar uma coisa clara – Não a acredito que teremos um campeão em qualquer uma destas camadas. Na verdade, Eu acho que isso seria claramente um mau negócio se qualquer uma linguagem ganhasse em qualquer camada. Isso significa que estou visualizando um futuro onde teremos Jython, JRuby e Rhino e diversas outras linguagens coexistindo em uma mesma camada. Não é necessário qualquer rivalidade ou guerra de linguagens.”
Bini tem feito grandes contribuições para tornar linguagens mistas no nível da máquina virtual possível com seu trabalho em JRuby, e muitos outros tem feito o mesmo com outras linguagens. Na outra grande plataforma de máquina virtual, a Microsoft se prepara para múltiplas linguagens inicialmente fornecendo implementações de VB.NET, C# e C++ para a Commom Language Runtime. Recentemente, eles também lançaram a Dynamic Language Runtime, na mesma plataforma que IronPython e IronRuby foram construídos, o que enfatiza que .NET é uma plataforma multilíngüe.
Mas o artigo deixa questões interessantes:
- A visão de Ola Bini de diferentes camadas e linguagens é a caminho que o futuro irá tomar?
- Quais são os prós e contras de misturar linguagens em uma única máquina virtual?
- Existem outras maneiras potenciais de misturar linguagens de uma maneira melhor? (Exemplos poderia ser as aplicações orientadas a serviço onde cada serviço é implementado na maioria das linguagens suportadas, ou no caso de uma aplicação web restful; divida ela verticalmente dentro de várias pequenas aplicações em nível de URL.)
Em breve, como será que os sistemas do futuro utilizarão as linguagens de programação?