[Pesquisar este blog]

quinta-feira, 5 de janeiro de 2017

Além do Java na JVM

Já se foi o tempo em que a Java Virtual Machine - JVM – era dedicada exclusivamente ao Java. Como a especificação da máquina virtual é pública, muitos desenvolvedores criaram linguagens de programação compiladas em bytecode, o formato próprio da JVM, permitindo que seus programas sejam executados em uma JVM.


Essa estratégia:
  • permite que tais linguagens sejam tão portáteis quanto o Java, pois os programas construídos com estas linguagens podem ser executados em qualquer plataforma onde exista uma 
  • possibilita que estas linguagens tenham características que o próprio Java não possui, servindo como um ambiente de pesquisa; e
  • constitui uma alternativa para que linguagens existentes sejam portadas para a JVM, aumentando as possibilidades de sua utilização.
Em algumas versões a linguagem de programação Java recebeu melhorias substanciais, como, por exemplo, os genéricos na versão 5; ou as expressões lambda, as referências para métodos e a API Stream da versão 8. Mas além disso não ser uma constante cada versão, seria impossível satisfazer todos os grupos, opiniões e necessidades da comunidade. Daí que este uso alternativo da JVM é tanto atraente como conveniente.

Assim, surgiram nestes últimos anos várias linguagens de programação novas voltadas para a JVM, como as conhecidas Scala e Groovy, mas existem outras como Xtend, Ceylon, Kotlin, X10 e Fantom.

Da mesma maneira, linguagens consagradas como o Python e Lisp estrearam na JVM respectivamente com Jython e Closure. O JRuby é um outro exemplo de linguagem portada para a JVM.

Neste post falaremos um pouco sobre o Scala e o Groovy.

Scala

Desenvolvida por Martin Odersky, a partir de 2001, como evolução de seus projetos de linguagens de programação envolvendo os paradigmas da orientação a objetos e funcional. Scala é considerada um linguagem multiparadigma de propósito geral. Seu nome é uma abreviação de scalable language.
É similar ao Java, com sintaxe básica bastante semelhante, compartilhando sua API. Mas possui diversas características próprias, que fazem seu código bastante distinto tem relação ao Java. Seus programas podem ser executados na JVM e podem ser integrados a outras aplicações Java. Um exemplo do tradicional programa Hello World com Scala:

object HelloWorld {
    def main(args: Array[String]): Unit = {
        println("Hello, world!")
    }
}

Aqui object define um singleton (um objeto único) denominado HelloWorld, no qual def declara um método denominado main que recebe um array de tipo String como argumento e tem Unit como valor de retorno. O código do método apenas efetua a impressão de uma string.

Neste exemplo coexistem elementos quase idênticos ao Java, junto de outros bastante diferentes.

Do ponto de vista de programação Scala é puramente orientada a objetos, não possuindo tipos primitivos. Também é funcional, tanto que todos os seus operadores são funções implícitas.

Scala possui um design muito interessante, pois a combinação de seu sistema de tipos, o fato de seus métodos poderem ser usados como operadores e parâmetros, além da construção de closures permite ampliar sua sintaxe substancialmente.

A linguagem de programação Scala é utilizada por grande companhias, como Twitter, Linkedin, Netflix, FourSquare, Tumblr, AirBnB e outras.

Para saber mais sobre o Scala, veja os links no final deste post.


Groovy

Desenvolvida por Guillaume Laforge, a partir de 2003, como uma alternativa ao Java. É um linguagem de programação dinâmica, orientada a objetos e funcional, que combina características do Smalltalk, Python, Ruby, entre outras. Atualmente é mantida como um projeto da Apache Software Foundation, considerada um linguagem multiparadigma de propósito geral. Seu nome é uma abreviação de scalable language.
Possui sintaxe similar ao Java, com a qual compartilha a API e pode se integrar facilmente. Mas possui várias características inexistentes no Java, como tipagem estática e dinâmica; sintaxe nativa para arranjos, listas, arrays associativos e expressões regulares, além de closures e sobrecarga de operadores. Programas Groovy são compilados dinamicamente para bytecodes Java, podendo então ser executados na JVM e, com isto, integrados a outras aplicações Java. Um exemplo do tradicional programa Hello World com Groovy:

class HelloWorld {
    static void main(String[] args) {
        println "Hello, World"
    }
}

Aqui class define uma classe denominada HelloWorld, na qual existe a declaração de um método estático denominado main que recebe um array de tipo String como argumento e não tem valor de retorno (void). O código deste método usa println para efetuar a impressão de uma string.

Neste exemplo todos os elementos são idênticos ao Java. Mas o Groovy oferece muitas outras possibilidades.

Do ponto de vista de programação Groovy é uma linguagem opcionalmente (fracamente) tipada, dotada de orientada a objetos e programação funcional. Permite a compilação estática, metaprogramação em tempo de compilação e execução, inferência de tipos e capacidade de scripting.

Devido a proximidade sintática com Java, é de fácil aprendizado, mas suas capacidades diferenciadas a tornam muito flexível, customizável e escalável. Sua integração transparente com Java e a quantidade de bibliotecas, ferramentas e frameworks de seu ecossistema a tornam muito interessante.

A linguagem de programação Groovy é utilizada pelas equipes de desenvolvimento de grande companhias, como IBM, Cisco, Sony, Target, MTv, Nestle, Oracle, SAS e outras.

Para saber mais sobre o Groovy, veja os links no final deste post.

Para Saber Mais