Afinal, haverá Closures no Java 7?

[quote=Alexandre Gazola]Acho que estão começando a “forçar a barra” com a linguagem Java… espero que não acabe virando um “C++ da vida” (estendendo a linguagem C)…

Seria melhor continuar focando esforços em aprimorar o suporte às linguagens dinâmicas na JVM, em vez de tentar fazer Java ser “a linguagem” para desenvolver todo e qualquer sistema.

[]´s[/quote]
Não entendi o c++ da vida.
Toda linguagem tem que evoluir. É pior ficar criando várias linguagenzinhas para cada problema.

A tendência que temos hoje é criar linguagens específicas para resolver problemas específicos. É melhor que criar um pato que nada, anda e voa, mas não é ótimo em nenhuma dessas tarefas.

A tendência que temos hoje é criar linguagens específicas para resolver problemas específicos. É melhor que criar um pato que nada, anda e voa, mas não é ótimo em nenhuma dessas tarefas.[/quote]

Uai, e o java não atende suas necessidades?
Imagino que ter que ficar alternando entre várias linguagens pode ser ainda mais cansativo.

A tendência que temos hoje é criar linguagens específicas para resolver problemas específicos. É melhor que criar um pato que nada, anda e voa, mas não é ótimo em nenhuma dessas tarefas.[/quote]

Cuidado. Criar DSL e criar Linguagens de Programação são coisas bem diferentes. Linguagens como ruby,e groovy ou javascript podem ser uma boa base para criar DSL mas são uma linguagem de programação só.

Java é uma linguagem de utilidade genérica o que significa que a sua preocupação não é em criar DSL.

[quote=juliocbq]
Uai, e o java não atende suas necessidades?
Imagino que ter que ficar alternando entre várias linguagens pode ser ainda mais cansativo.[/quote]

São dois mercados distintos. Linguagens pra um domínio específico x linguagens de uso geral.
Já trabalhei com VHDL, uma linguagem pra fazer especificação e simulação de hardware. Inclusive no meu mestrado usei Haskell pra fazer um compilador funcional mais eficiente e simples que o VHDL.

[quote=marcosalex][quote=juliocbq]
Uai, e o java não atende suas necessidades?
Imagino que ter que ficar alternando entre várias linguagens pode ser ainda mais cansativo.[/quote]

São dois mercados distintos. Linguagens pra um domínio específico x linguagens de uso geral.
Já trabalhei com VHDL, uma linguagem pra fazer especificação e simulação de hardware. Inclusive no meu mestrado usei Haskell pra fazer um compilador funcional mais eficiente e simples que o VHDL.

[/quote]

O flex e o Bison também fazem isso e são bibliotecas para c++, e existem também para java. Por isso penso que não há necessidades de tantas variações.
Já usei prolog para criar sistemas especialistas e resolver problemas de busca em profundidade, mas poderia facilmente fazer com java ou c++, ou c# também.
Acho mais fácil evoluir a linguagem que criar uma outra para certos problemas

[quote=juliocbq][quote=marcosalex]O flex e o Bison também fazem isso e são bibliotecas para c++, e existem também para java. Por isso penso que não há necessidades de tantas variações.
Já usei prolog para criar sistemas especialistas e resolver problemas de busca em profundidade, mas poderia facilmente fazer com java ou c++, ou c# também.
Acho mais fácil evoluir a linguagem que criar uma outra para certos problemas[/quote]

Questão de gosto.
E o flex e bison são bem mais limitados que o VHDL, principalmente se você trabalhar com FPGAs. As bibliotecas teriam de evoluir muito ainda, enquanto o outro é focado.

[quote=marcosalex]

Questão de gosto.
E o flex e bison são bem mais limitados que o VHDL, principalmente se você trabalhar com FPGAs. As bibliotecas teriam de evoluir muito ainda, enquanto o outro é focado.[/quote]
Eu nunca usei vhdl, vou pesquisar para ver como funciona.

[quote=entanglement]Na documentação da ferramenta Javadoc, aparece a notação #:

{@link package.class#member label}

Exemplo:

[code]
/**

  • Use the {@link java.lang.String#split(java.lang.String) } method instead.
    */
    [/code][/quote]

Isso é exatamente pra gerar o anchor HTML do link (#). Se closure usar # é para imitar anchor HTML.

A idéia (que está nas propostas FCM e CFJ) é usar o “#” para significar uma referência a um método qualquer. Ficaria mais claro (e além disso seria mais adequado para o uso com “invokedynamic”) que criar “inner classes”.

Por exemplo:

class ExemploOrdenacao {
    public static int comparar (String c1, String c2) {
        return c1.compareTo (c2);
    }
    public static int compararDecrescente (String c1, String c2) {
        return c2.compareTo (c1);
    }
    public static int compararIgnorandoMaiusculas (String c1, String c2) {
        return c1.compareToIgnoreCase (c2);
    }
    public static void main (String[] args) {
        String[] s = {"abc", "def", "ghi" };
        Arrays.sort (s, #comparar(String,String) );
        Arrays.sort (s, #compararDecrescente(String,String) );
        Arrays.sort (s, #compararIgnorandoMaiusculas(String,String) );
    }
}

Fonte: http://www.java.net/story/openjdk-project-lambda-approved

Da home do Project Lambda:

Fonte: http://openjdk.java.net/projects/lambda/

No início do ano vi algumas notícias dizendo que não vai ter closures no Java 7.

A dúvida ainda continua no ar: vai ter ou não vai ter closures no Java 7?

[quote=ceklock]No início do ano vi algumas notícias dizendo que não vai ter closures no Java 7.

A dúvida ainda continua no ar: vai ter ou não vai ter closures no Java 7?
[/quote]

Bom, o Java 7 sai esse ano, daí a gente vai descobrir. heheheh

[quote=marcosalex][quote=ceklock]No início do ano vi algumas notícias dizendo que não vai ter closures no Java 7.

A dúvida ainda continua no ar: vai ter ou não vai ter closures no Java 7?
[/quote]

Bom, o Java 7 sai esse ano, daí a gente vai descobrir. heheheh[/quote]

amém.

Vale a pena dar uma lida nesse artigo

Eu não sei não… Acho que essa história de closures pode trazer danos ao Java. Quem quer “lambda expressions” pode usar uma linguagem de script pra isso.

Pra falar a verdade ainda não entendi qual vai ser a grande vantagem de usar closures.

P.S: interessante o artigo citado acima.

[quote=ceklock]Eu não sei não… Acho que essa história de closures pode trazer danos ao Java. Quem quer “lambda expressions” pode usar uma linguagem de script pra isso.

Pra falar a verdade ainda não entendi qual vai ser a grande vantagem de usar closures.
[/quote]

A vantagem maior é pros desenvolvedores de ferramentas e frameworks e não pro desenvolvedor comum.

Java 7 : Oracle pushes a first version of closures

http://www.baptiste-wicht.com/2010/05/oracle-pushes-a-first-version-of-closures/

[quote=nofan]Java 7 : Oracle pushes a first version of closures

http://www.baptiste-wicht.com/2010/05/oracle-pushes-a-first-version-of-closures/[/quote]

Bom, pra mim, entrando ou não closures, não vai fazer diferença, mas muita gente ficava falando mal do Java por causa desse recurso. Então, vai ser bom se ele vier com ele.