BT

A sua opinião é importante! Por favor preencha a pesquisa do InfoQ!

Inesperadamente o JDK 7 incorpora Closures "Simples", mas é adiado para o fim de 2010

| por Dio Synodinos Seguir 3 Seguidores , traduzido por Renato Monteiro Marco Seguir 0 Seguidores em 14 dez 2009. Tempo estimado de leitura: 4 minutos |

Para melhorar a experiência das pessoas que acessam o InfoQ Brasil, nós criamos uma série de funcionalidades que te permitem ficar pode dentro das últimas tendências e das novidades de seu interesse, sem que você seja incomodado por coisas irrelevantes. Receba e-mails periódicos e notificações sobre seus tópicos favoritos!

Em sua apresentação na conferência de Devoxx, Mark Reinhold anunciou que o JDK 7 virá com "Closures". Com a inclusão desse recurso tão discutido, o lançamento do JDK 7 deverá ficar somente para Setembro de 2010.

Joseph D. Darcy, engenheiro chefe do Projeto Coin, que busca fazer pequenas alterações na linguagem para o Java 7, confirmou que a nova versão virá com uma pitada de Closures::

… JDK 7 virá com closures, algo a ser desenvolvido de closures menor que BGGA, e o prazo para lançamento do JDK 7 será estendido para algo em torno de Setembro de 2010.

Alex Miller quem citou que a Sun não apoiava closures mesmo com a criação de 3 propostas diferentes pela comunidade no passado:

Na verdade, não posso dizer o que fazer sobre aquilo. Durante anos a Sun insistiu que não há consenso em closures e atrasou a formação de um JSR ou grupo de especialistas no assunto mesmo com três propostas, em mãos, todas com protótipo.

Após o anuncio na Devoxx, Neal Gafter que era co-autor de uma das três propostas de Closures (BGGA, nome a partir das iniciais de Bracha, Gafter, Gosling e von der Ahé), liberou uma "proposta simplificada":

Mudanças nessa revisão

  • A sintaxe de controle de chamada foi movida para uma especificação separada.
  • O termo closure literal foi substituído pela expressão lambda.
  • Nós melhoramos a sintaxe para expressões lambda, emprestando um pouco de Clang (um projeto de C/C++ melhorado). Agora há duas formas de expressões lambda: uma expressão lambda tem uma expressão controlada, enquanto uma declaração lambda tem uma declaração controlada.
  • O termo closure object foi substituído por function object.
  • O termo closure conversion foi substituído por conversão lambda, com um bloco de conversão separado para a sintaxe de controle de chamada.
  • Adicionado novas semânticas para a declaração return: agora pode ser usado para retornar uma declaração lambda.
  • java.lang.Unreachable renomeado para java.lang.Nothing ala Scala.
  • Retirado suporte ao tipo null. A versão anterior usava null como uma alternativa para um tipo de exceção onde nada pode ser devolvido (thrown). O tipo Nothing veio para tal propósito.
  • Melhora na restrição. Os conceitos de tipos de função restrito e irrestrito foram removidos. Agora, todas as expressões lambda são restritas. O equivalente da especificação anterior de closure irrestrito pode ser passado para um método utilizando a sintaxe de controle de chamada control invocation syntax.
  • Adicionado suporte a referência de métodos: Adicionamos suporte para tratar referência à um método como função usando o recém introduzido #. A sintaxe é emprestada de referências-cruzadas do javadoc e da proposta de FCM.

Essa mudança repentina nos planos para o JDK 7 fez pessoas como Fabrizio Giudici opinar sobre o processo de decisão:

Não quero discutir se isso é uma coisa boa ou ruim (vocês sabem que eu acho isso ruim eu retirei qualquer julgamento já que entendo que a proposta não é BGGA nem CICE, mas algo novo). Eu estou chocado que após algumas semana a palavra final do Java 7 tenha sido dita com o Project Coin (o famoso final five or so), alguém mudou de ideia de repente. Que tipo de processo de decisão é esse?

Oh, entendí - a decisão vai ser no cara ou coroa, agora entendí de onde veio o nome do projeto. Temo que Java 7 possa se tornar a versão mais caótica de Java já liberada - uma ótima ideia se desejar matar isso antes da hora (já que não há muitas outras fontes de deterioração, como o acordo com a Oracle ou a discussão com a Jigsaw / OSGi).

Da mesma forma, Geertjan Wielenga pensa que a inclusão de Closures era um desenvolvimento bem inesperado:

Ótimas notícias e talvez melhores se ninguém questionasse tanto o por que o processo teve esse desfecho! Primeiro, temos todo um conjunto de propostas, que não surpreenderam logo de cara. E então, de repente, como um raio, temos "closures simples". (Fico imaginando se alguma das propostas existentes se chama "closures complexos". Simplicidade já não é a proposta inicial de closures?) OK, closures serão simples no sentido de não haver retornos externos (non-local return), sem controle de declaração, e sem acesso a variáveis que não estejam declaradas com final. De novo, como chegaram nesse consenso?

Cay Horstmann, disponibilizou diversos casos de uso para essa nova proposta BGGA, que é bem parecida com a proposta FCM:

Não sabemos na verdade o que a Sun pretende. Eu simplesmente analisei a proposta do BGGA 0.6a, que é presumidamente o que a BGGA é hoje. Ninguém falou que isso não parece muito com a FCM. Sem retornos externos. # para lambda. Desde que você precise anotar uma variável mutável com @Shared quando for capturar ela, entretanto as pessoas devem pensar duas vezes antes de sair escrevendo

    foreach(@Shared String v : values) 
        funcs.add( #() => v);

Como disse Alex Miller, a extensão do JDK pode fazer com que outros recursos entrem na release, como a biblioteca ParallelArray que fornece uma API funcional de estilo para mapeamento, filtro, reduzindo mais que um array de objetos Java:

Conversei um pouco com Bob Lee na QCon e ele acha que é possível que o adiamento do JDK 7 permita que o trabalho com o ParallelArray seja retomado e faça uso do novo suporte a closure.

Você pode encontrar maiores informações sobre Closures e JDK 7 aqui no InfoQ!

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT