Java 1.7 (Dolphin) vai ter ponteiros?

Galera essa semana encontrei num site uma noticia que me deixou um pouco preocupado, segue link:

Lá está falando que a nova versão do java irá ter ponteiros, alguém sabe se isso é verdade :?:

Se for, :shock: …

flwsss

Isso é primeiro de abril (postado no dia 17, mas continua sendo primeiro de abril).

Uma coisa que está sendo estudada para entrar no Java 8 (nem no 7, que não vai dar tempo) é "Closures". Lá podemos ter algo parecido com "delegates" do C# ou J#, com a seguinte sintaxe:

class Teste {
    public static void main(String[] args) {
        {int, int => int} funcao; // declarando uma referência para um método que recebe 2 ints e retorna 1 int
        funcao = Math#max(int,int);  // referenciando o método max da classe Math
        int x = funcao.invoke (2, 3); // retorna o máximo de 2 e 3, que é 3
        funcao = Math#min(int,int); // referenciando o método min da classe Math
        x = funcao.invoke (2, 3); // retorna o mínimo de 2 e 3, que é 2
    }
}

Para mais detalhes, vá para http://www.javac.info .

[quote=thingol]Isso é primeiro de abril (postado no dia 17, mas continua sendo primeiro de abril).

Uma coisa que está sendo estudada para entrar no Java 8 (nem no 7, que não vai dar tempo) é "Closures". Lá podemos ter algo parecido com "delegates" do C# ou J#, com a seguinte sintaxe:

class Teste {
    public static void main(String[] args) {
        {int, int => int} funcao; // declarando uma referência para um método que recebe 2 ints e retorna 1 int
        funcao = Math#max(int,int);  // referenciando o método max da classe Math
        int x = funcao.invoke (2, 3); // retorna o máximo de 2 e 3, que é 3
        funcao = Math#min(int,int); // referenciando o método min da classe Math
        x = funcao.invoke (2, 3); // retorna o mínimo de 2 e 3, que é 2
    }
}

Para mais detalhes, vá para http://www.javac.info .
[/quote]

Closures acho que é algo legal, mas o problema é que há uma sintaxe horrorosa (too much synthatic sugar) e isso virou modinha que agora eles querem fazer tudo com closures. Ou seja, descobriram que podiam ter um martelo e agora estão pensando que tudo pode ser um prego.

Então, sou a favor de colocá-los na lingagem, mas não da forma como estão fazendo.

Se Java tivesse ponteiros eu me suicidava :lol:

ponteiros dão muito poder, mais dão muita dor de cabeça!!!

[quote=thingol]Isso é primeiro de abril (postado no dia 17, mas continua sendo primeiro de abril).

Uma coisa que está sendo estudada para entrar no Java 8 (nem no 7, que não vai dar tempo) é "Closures". Lá podemos ter algo parecido com "delegates" do C# ou J#, com a seguinte sintaxe:

class Teste {
    public static void main(String[] args) {
        {int, int => int} funcao; // declarando uma referência para um método que recebe 2 ints e retorna 1 int
        funcao = Math#max(int,int);  // referenciando o método max da classe Math
        int x = funcao.invoke (2, 3); // retorna o máximo de 2 e 3, que é 3
        funcao = Math#min(int,int); // referenciando o método min da classe Math
        x = funcao.invoke (2, 3); // retorna o mínimo de 2 e 3, que é 2
    }
}

Para mais detalhes, vá para http://www.javac.info .
[/quote]

“Closures” já existem em C#, não existe? Isso em Java vai ficar muito interessante.

Closures (e mais outras N coisas interessantes) estão disponíveis no C# 3.0 (Visual Studio 2008, requer .NET Framework 3.5 para rodar).

Realmente o C# me impressiona cada vez mais, principalmente se for usado para 3d, coisa que eu não consegui fazer com muita facilidade em java :frowning:

[quote=FilhoDoRei]Galera essa semana encontrei num site uma noticia que me deixou um pouco preocupado, segue link:

Lá está falando que a nova versão do java irá ter ponteiros, alguém sabe se isso é verdade :?:
[/quote]

Não só não é verdade como é uma descarada mentira.

+1 A sintaxe é realmente horrivel (mas a de propriedades é pior) e essa coisa de forçar o uso em todo o lugar é realmente absurdo.

+1 Suicidar não, mas que Java passaria a ser uma @#@#$@#, sim. Afinal isso é ir contra tudo o que Java representa ( portabilidade, inepencia, segurança , etc). ( Não que eu acredite que algum dia isso aconteça- afinal a sun não é a microsoft - mas seria realmente uma pena se e quando acontecer )

Eu não posso dizer por experiência própria, mas vejo meus colegas trabalhando em cima de C# com coisas em 3D e eu tenho que falar: é arrebatador. Em Java eu não vi muita coisa…

O C# tem ponteiros, mas seu uso é muito restrito.
A primeira coisa que você tem de fazer é isolar seu código dentro de uma seção “unsafe”, e ainda por cima esse tal código deve ficar em um assembly (.DLL, mais ou menos como se fosse um .jar do Java) que aceita código “unsafe”.
Ou seja, só é usado em casos muito especiais. (É como se esse pedaço do seu código usando ponteiros ficasse com uma “doença contagiosa” e tivesse de ficar isolado.) O jeito de programação padrão do C# é idêntico ao Java, porque, como no Java, não é preciso usar ponteiros em 99,995% do tempo.

Eu que postei isso no primeiro de abril.

Volta e meia alguem me pergunta se é sério (ou critica a sun sem olhar a data do post).

Dificilmente alguém lê a data dos posts :lol:

Foi erro meu, não tinha visto a data do site.

Mas gerou uma certa preocupação, por isso postei sobre o assunto!

Valeu pelas respostas!

flwsss

[quote=thingol]O C# tem ponteiros, mas seu uso é muito restrito.
A primeira coisa que você tem de fazer é isolar seu código dentro de uma seção “unsafe”, e ainda por cima esse tal código deve ficar em um assembly (.DLL, mais ou menos como se fosse um .jar do Java) que aceita código “unsafe”.
Ou seja, só é usado em casos muito especiais. (É como se esse pedaço do seu código usando ponteiros ficasse com uma “doença contagiosa” e tivesse de ficar isolado.) O jeito de programação padrão do C# é idêntico ao Java, porque, como no Java, não é preciso usar ponteiros em 99,995% do tempo.

[/quote]

No java tem uma coisa parecida: JNI. Você trabalha direto em C/C++ e utiliza o código nativo através de biblioteca (ddl-windows/so-linux). O uso desse código no java é através de métodos, como se fosse uma chamada a um método Java.

Envim, uma Gambiarra padronizada pelo JCP :smiley:

Já trabalhei com JNI e sinceramente, acho um saco! Mais que muita coisa legal podeser feita com JNI, pode :stuck_out_tongue:

Ponteiros em java seria como regredir alguns anos.

Por que vocês acham Closures um recurso tão interessante assim?

Acho que vai ser um recurso que poucos usarão e quando um programador menos informador ver, vai re-escrever o codigo. :stuck_out_tongue:

Eu acho que o programador Java não iria reescrever o código se houvesse em Java algo parecido com o LINQ, que facilita horrores a manipulação de dados em memória e em banco de dados.

Uma vez alguém me perguntou aqui como é que se fazia para totalizar e agrupar certas coisas que ele tinha em um array de objetos. A solução com LINQ era bastante simples (acho que dava 2 linhas), e lembrava um pouco SQL. Se você for fazer isso com “for” e outras coisas, vai ocorrer duas coisas:

  • Provavelmente você vai errar umas duas ou três vezes, até fazer isso funcionar direito
  • O código fica monstruoso.

[quote=thingol]Eu acho que o programador Java não iria reescrever o código se houvesse em Java algo parecido com o LINQ, que facilita horrores a manipulação de dados em memória e em banco de dados.

Uma vez alguém me perguntou aqui como é que se fazia para totalizar e agrupar certas coisas que ele tinha em um array de objetos. A solução com LINQ era bastante simples (acho que dava 2 linhas), e lembrava um pouco SQL. Se você for fazer isso com “for” e outras coisas, vai ocorrer duas coisas:

  • Provavelmente você vai errar umas duas ou três vezes, até fazer isso funcionar direito
  • O código fica monstruoso.
    [/quote]

thingol, o que seria esse tal de LINQ?

flws

[quote=FilhoDoRei][quote=thingol]Eu acho que o programador Java não iria reescrever o código se houvesse em Java algo parecido com o LINQ, que facilita horrores a manipulação de dados em memória e em banco de dados.

Uma vez alguém me perguntou aqui como é que se fazia para totalizar e agrupar certas coisas que ele tinha em um array de objetos. A solução com LINQ era bastante simples (acho que dava 2 linhas), e lembrava um pouco SQL. Se você for fazer isso com “for” e outras coisas, vai ocorrer duas coisas:

  • Provavelmente você vai errar umas duas ou três vezes, até fazer isso funcionar direito
  • O código fica monstruoso.
    [/quote]

thingol, o que seria esse tal de LINQ?

flws[/quote]

http://msdn.microsoft.com/en-us/netframework/aa904594.aspx


http://www.macoratti.net/07/12/net_linq.htm

[quote=thingol]Isso é primeiro de abril (postado no dia 17, mas continua sendo primeiro de abril).

Uma coisa que está sendo estudada para entrar no Java 8 (nem no 7, que não vai dar tempo) é "Closures". Lá podemos ter algo parecido com "delegates" do C# ou J#, com a seguinte sintaxe:

class Teste {
    public static void main(String[] args) {
        {int, int => int} funcao; // declarando uma referência para um método que recebe 2 ints e retorna 1 int
        funcao = Math#max(int,int);  // referenciando o método max da classe Math
        int x = funcao.invoke (2, 3); // retorna o máximo de 2 e 3, que é 3
        funcao = Math#min(int,int); // referenciando o método min da classe Math
        x = funcao.invoke (2, 3); // retorna o mínimo de 2 e 3, que é 2
    }
}

Para mais detalhes, vá para http://www.javac.info .
[/quote]

Não sei se entendi direito este papo de closures, mas o que o código acima faz mais do que o código abaixo?

int x = 0;
x = Math.max(2,3);
x = Math.min(2,3);

closures ( cercas) singifica básicamente que vc pode passar blocos de codigo como se fossem objetos.
Isso é util porque vc pode enviar código para dentro de outros objetos.

Isso tornas as coisas mais flexiveis e dinamicas. Mas tb mais complexas de ler. Especialmente porque a notação de closures
tente a ser muito abstrata (ou seja, não uma interface nem nada … é algo definido na hora )