BT
x Por favor preencha a pesquisa do InfoQ !

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

por Dio Synodinos , traduzido por Renato Monteiro Marco em 14 Dez 2009 |

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
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

Percebemos que você está utilizando um bloqueador de propagandas

Nós entendemos porquê utilizar um bloqueador de propagandas. No entanto, nós precisamos da sua ajuda para manter o InfoQ gratuito. O InfoQ não compartilhará seus dados com nenhum terceiro sem que você autorize. Procuramos trabalhar com anúncios de empresas e produtos que sejam relevantes para nossos leitores. Por favor, considere adicionar o InfoQ como uma exceção no seu bloqueador de propagandas.