[Java 7] As alterações aprovadas:

Olá

[quote=chun]O que me deixa cheateado é que certas “coisinhas” poderiam ser implementadas sem nenhum problema… apenas alterando o proprio javac… e nao a VM (como no caso do bigdecimal , do Multicatch) e os caras simplesmente se negam a fazer isso…

é lamentavel…
[/quote]

Chun, o que escrevo abaixo não é diretamente para você mas para todos nós que estamos nos lamentando de que falta isto ou aquilo.

Frases tiradas de http://blogs.sun.com/darcy/resource/JavaOne/J1_2009-TS-4060.pdf

[color=darkblue]Asking the right question…Why don’t you…

A better question… Why don’t we…

Project Coin

Participatory effort! Call for proposals:
● Write a detailed proposal
● Prototype optional
● Analysis and critiques on open mailing list
[/color]

Porque poucos brasileiros participam? Somos chupins?

O projeto foi feito justamente para facilitar a participação de gente de todo o mundo. E como está escrito acima, nem precisava escrever muito código. Bastava um protótipo para ilustrar a proposta.

[]s
Luca

[quote=chun]O que me deixa cheateado é que certas “coisinhas” poderiam ser implementadas sem nenhum problema… apenas alterando o proprio javac… e nao a VM (como no caso do bigdecimal , do Multicatch) e os caras simplesmente se negam a fazer isso…

é lamentavel…
[/quote]

A Sun em particular tem muito cuidado com o que coloca na especificação do Java. E existem implicações além do que nós- comuns utilizadores - percebemos. às vezes uma alteração não entra porque viola algum dos principios do Gosling. Por exemplo, porque java não tem suporte nativo para o operador + para bigdecimal se o tem para String ?
Porque String é um objetivo java.lang e bigdecimal é java.math. Ou seja,String é essencial para java,bigdecimal não é.
E o bigdecimal tinha muitos problemas no inicio. Era implementado nativamente por causa de performace via jni e não permitia fazer calculos corridos. Por isso a IBM propos a class MathContext.

BigDecimal evolui muito porque foi utilizado muito. Agora que cada vez mais é utilizado, vem a demanda de operadores.

Mas quanto resulta de new BigDecimal(“1”).divide(new BigDecimal(“3”)) ? Resulta ArithmeticException.
Isso não é o que vc espera quando faz 1/3… Portanto, colocar + e - seria trivial, mas / e * não.
Por isso está sendo melhor investigada essa opção.

Lembrem-se que todo o guarda-chuva java 7 eram sugestões. Algumas entram, outras não. Isso não diz nada sobre o mérito da sugestão,nem que elas não podem ser adicionadas no futuro.

O foco do java 7 ( por ser uma versão impar) é o miolo do java. Mas desta vez a jvm e não o compilador como no java 5. Por isso o foco foi em adicionar invokedynamic (que acelera o desenvolvimento de novas linguagens para a jvm,inclusive as que suportam operações com bigdecimal como groovy). A ideia é : se existe em outra lignaugem da jvm vamos dar velocidade nisso em vez de colocar no Java e mudar o compilador. O projeto coin são pequenas alterações no compilador. Na realidade,quase que nem no compilador e sim na linguagem em si que permite literais. Repare que isso seria impossivel sem auto-boxing.

As coisas estão interligadas e existem dependencias. Por exemplo, a proposta de closures dependeria de introduzir um pacotefatasma de interfaces e o invokeDynamic. Essa coisa do pacote fantasma não é elegante (um dos principios do Gosling) e por isso ficou na geladeira. Espera-se que até o java 9 a implementação melhore para algo mais inteligente (tlv surripiando o que o groovy faz), contudo a peça que faz funcionar, já está lá : o invokedynamic. O uso deste novo tipo de invocação/reflection/método tem muitas implicações práticas que ainda vão ser vista nos proximos anos, e isso terá uma nova luz ao problema das closures.

quanto a performance, o Java 7 é sem duvida melhor devido a várias alterações feitas na jvm. o G1 é o mesmos interessa aqui,porque as features boas já existem quase todas no java 6 só que nos updates. Nem todo o mundo atualiza os jre ejdks,mas existem muitos forward ports de funcionalidades de performance. As mais novas são a melhor integração com a api gráfica nativa para aumentar a performance do swing e fx e a API de paralelização que permite acelerar calculos e algoritmos em geral tirando partido dos multicore hoje já comuns.

Só lembrando que no dia 30 de Outubro de 2009 o Java 5 sairá de linha. Java 7 não é apenas melhor,mais rápido e com melhor suporte a outra linguagens na jvm. Ele é, tb, inevitável.

(P.S. A API de Path é show e há muito tempo pedida ,mais que closures :wink: e só agora a temos)

sergiotaborda…

Olá ! Vamos por partes :smiley:

  1. Primeiramente esse negocio de abordar apenas a JVM no Java7 é balela, pois no java5 (onde ouve mudanca na linguagem) muita coisa foi implementada apenas pelo javac (ex: Generics)… justamente para evitar uma mudanca brusca na JVM… Sim… poderiamos ter varias outras solucoes do tipo (inclusive o bigDecimal)

  2. Esse negocio de 1/3 gerar uma exception já existe até em tipos primitivos, entao esta disculpa nao cola:

int a = 1;
int b = 0;
int c = a/b; // BOOM !

  1. Closures em java… incluindo ou nao um pacote fantasma , abriria o leque para diminuicao da verbosidade de Java… e isso seria muito bom… alem do que poder utilizar “function pointers” eh algo muito util para coisas nao triviais…

Esse negocio de “ter que analisar melhor” eh pura balela… tem tempo suficiente para fazerem isto…

[quote=Luca]Olá

[quote=chun]O que me deixa cheateado é que certas “coisinhas” poderiam ser implementadas sem nenhum problema… apenas alterando o proprio javac… e nao a VM (como no caso do bigdecimal , do Multicatch) e os caras simplesmente se negam a fazer isso…

é lamentavel…
[/quote]

Chun, o que escrevo abaixo não é diretamente para você mas para todos nós que estamos nos lamentando de que falta isto ou aquilo.

Frases tiradas de http://blogs.sun.com/darcy/resource/JavaOne/J1_2009-TS-4060.pdf

[color=darkblue]Asking the right question…Why don’t you…

A better question… Why don’t we…

Project Coin

Participatory effort! Call for proposals:
● Write a detailed proposal
● Prototype optional
● Analysis and critiques on open mailing list
[/color]

Porque poucos brasileiros participam? Somos chupins?

O projeto foi feito justamente para facilitar a participação de gente de todo o mundo. E como está escrito acima, nem precisava escrever muito código. Bastava um protótipo para ilustrar a proposta.

[]s
Luca[/quote]

Luca ,

E voce acha realmente que NINGUEM entrou lá para sugerir o Multicatch ? Com certeza sugeriram e mesmo sabendo da GRANDE utilizade do mesmo não foi implantado…

[quote=chun]sergiotaborda…

Olá ! Vamos por partes :smiley:
[/quote]

É,vamos,porque parece que não fui claro.

O que eu disse foi: versões impares atacam o miolo do java:jvm,compiladores,e outras ferramentas do sdk como javadoc.
No 5 o compilador foi o cara. Novos bytecodes não foram introduzidos. a JVM não mudou (ela foi mantida,é diferentes).
No 7 o compilador é que foi mantido e foi a jvm que mudou. Novos bytecodes foram adicionados (invokedynamic)

Ou seja, no 5 o foco era alterar a linguagem e a jvm foi atrás. no 7 o foco é alterar a jvm e a linguagem foi atrás.
Generics foi implementado apenas por truques de compilação sem mudar o byte code. My point exactly.

Lol…achei que era obvio que estavamos falando de numeros decimais (BigDecimal).
O ponto é que bigdecimal substituiria Double. 1/3 com double não dá erro. com devide dá.
Para não dar vc precisa passar um MathContext implicatamente ou explicitamente.
Esta necessidade fica escondida com o uso do operador /. NO grrovy que usa isso,é feito um arredondamento forçado.
Isso não é uma boa opção no caso geral e Java é uma linguagem de uso geral (ao contrário de groovy que é linguagem de script)

Sim, poderiam ter ido com a proposta atual.Mas isso tem implicações no futuro. Um dos principios do Gosling é que sempre haja retrocompatibilidade ou seja,todas as aplicações 1.0 tem que correr na jvm.
Se no 7 liberassem isso e no 9 se arrependencem e liberassem de outra forma,seria um desastre porque aplicações pré-9 não funcionariam. Como isso é algo no bytecode então tem que ser avaliado com muito cuidado.

Eu perfiro esperar 4 anos do que ter esse problema (aliás,é um dos grandes diferenciais da plataforma java para a .NET e ninguem no java vai abrir mão disso.). No meio tempo,se quer mesmo usar closures e operador + com bigdecimal basta usar groovy que até compila para .class …

Sergio,

Quanto ao comparativo entre INTEIROS e NUMEROS DECIMAIS , eu explicitei como estes contextos podem ser “mascarados” no BigDecimal da mesma forma que muitos contextos são mascarados na JVM… apenas mais um truque , que teria impacto identico ao exemplo dado em inteiros primitivos…

O que não dá para misturar é dizer que o a inclusão do invokedynamic inviabilisou a inclusao de qualquer outra alteracao na JVM… ou dá ?

Quantoa espera de 4 anos… se voce somar a quanto tempo closures poderiam ter sido incorporadas (ou pelo menos discutivas) a JVM… vai perceber que serão MAIS 4 anos… e não 4 anos…

Quanto a groovy compilar para .class não quer dizer muito… pois se for algo ao estilo do JRuby , estou dispensando.

[quote=chun]Sergio,

Quanto ao comparativo entre INTEIROS e NUMEROS DECIMAIS , eu explicitei como estes contextos podem ser “mascarados” no BigDecimal da mesma forma que muitos contextos são mascarados na JVM… apenas mais um truque , que teria impacto identico ao exemplo dado em inteiros primitivos…
[/quote]

Não,não teria. É isso que estou tentando dizer.

Eu não disse isso.Aliás,acho que ninguem disse isso.

existem coisas como o file watch dog que fazem falta à anos (mais de 6) e só agora estão ai. O ponto que queria deixar claro
é que a ideia tem que amadurecer,pessoas têm que a implementar como o que ha e só depois essas mesmas pessoas serão chamadas a propor um padrão. Entenda que o fato de ser um padrão para todo o futuro do java é algo muito,muito, forte. E não se pode por algo apenas porque é bonito , da moda, ou inventado por alguem…o pacote de util.concurrent é outro exemplo
e até mesmo as coleções do java são um exemplo deste processo de amadurecimento ( o apache collections é anterior)

Portanto, não serão mais 4 anos. Serão apenas mais 4 anos :wink:
4 anos é muito tempo. Pode ser que até lá a Oracle tenha desmantelado o java… :twisted:
Mas pode ser que no java 8 sejam incuidas mais algumas coisas que tornaram a implementação de closures trivial no 9.
O que eu queria deixar claro é que ha processo de maturação necessário e que a não inclusão das coisas não é má vontade. É proteção.

  1. Poderia explicar o PORQUE não ? (Referente ao BigDecimal) , o que impediria eles de implementarem isto ?

2)Voce colocou : “Por isso o foco foi em adicionar invokedynamic” falando assim parece que o foco tem que ser apenas UM por versao…

  1. Em dias de hoje… todo esse protecionismo vai arruinar Java.

Não era a JVM da Apache que previa “features plugaveis” na JVM? O que permitiria expandi-la de forma organizada e daria a liberdade para qualquer um extender a linguagem java ?

Aproposito… saiu essa JVM ?

A ÚNICA coisa que me interessa pra “segurar” um pouco as pessoas no Java era uma maneira para não se precisar usar getters/setters, não tem, o demais pra mim é tudo firula.
:frowning:

Quem esta testando Ruby e/ou Scala, não vai voltar JAMAIS pro Java, até o Java 8, podem escrever, a maioria de nós que estamos nesse tópico já não vai trabalhar mais com Java.

Vou fazer questão de cotar isso no tópico do Java 8 rs

[quote=chun]1) Poderia explicar o PORQUE não ? (Referente ao BigDecimal) , o que impediria eles de implementarem isto ?
[/quote]

Tecnicamente nada. Filosoficamente muito. É esse o ponto.
Com todas as gafes que o sistema numerico do java tem ,BigDecimal e Biginteger ainda sao um porto seguro.
Quando virar tudo a mesma coisa mais problemas vao acontecer.são esses problemas que têm que ser analizados para
ter a certeza que vale a pena. No groovy o bigdecimal é usado por default, mas a devisão força o arredondamento ( seja http://groovy.codehaus.org/Groovy+Math ) e ainda por cima o arredondamento mais danoso. É isso que vc quer por padrão no java ? quer seus calculos financeiros feitos assim ? E calculos cientificos ?
Java é usado para muitas coisas e algumas delas precisam de ter cuidado com BigDecimal.Se já é dificil educar os programadores agora ,imagine quando eles poderem fazer 1/3 …

Não.Se vc reler vc vai entender que estou falando em comparação como o bigdecimal. Invokedynamic (novo bytecode) tinha prioridade em cima de alterações do compilador. Vc sabe ha quanto tempo um bytecode novo foi incorporado à jvm ? vc imagina o que isso significa ? então sabe que é coisa séria. Muitos recursos são aplicados nisso.

Eu acho exatamente o contrário. Foi ele que colocou o java no mapa e foi ele que obrigou a microsoft a criar o .NET
e é ele que marca a diferença entre as duas plataformas. Para mim o respeito ao codigo legado é mais importante que novas features. E isto tb é importante para muitas empresas que entendem o que Produto de Software significa.
Experimente correr codigo .NET 1 em .NET 3 :twisted:

Sergio:

  1. A minha vontade não é colocar BIGDECIMAL por padrao… apenas facilitar as coisas… se voce analisar o ESCOPO consegue-se fazer algo descente sem todos estes impactos.

  2. Recursos em P&D a Sun aplica aos milhoes… nao eh motivo para focar em uma unica feature… acho que eh uma questão mais de protecionismo do que qualquer coisa.

  3. Protecionismo demais me cheira a “burrocracia”.

Luca, em algum lugar tem a lista dos brasileiros que mandaram propostas?

E sobre tudo isso que nao entrou, tambem sou meio conservador hoje em dia: deixem o Java simples, para ele nao acumular 100 mil features a la C++, e vamos inovar nas outras linguagens que tambem rodam sobre a JVM.

"

show!

Olá

[quote=Paulo Silveira]Luca, em algum lugar tem a lista dos brasileiros que mandaram propostas?

E sobre tudo isso que nao entrou, tambem sou meio conservador hoje em dia: deixem o Java simples, para ele nao acumular 100 mil features a la C++, e vamos inovar nas outras linguagens que tambem rodam sobre a JVM.
[/quote]

Não sei da lista mas vi aqui muita gente reclamando e acho que eles não mandaram sugestão para o lugar certo na hora certa.

Eu também não gostaria de ver a linguagem Java muito modificada como foi o caso da introdução dos generics no Java 5. Entre outras coisas, cria dificuldades na homologação de novas versões na cabeça de gente que tem poder mas que não tem tempo para avaliar corretamente as vantagens de migrar. O switch aceitando Strings não influi nos sistemas atuais.

Mas gostaria de ver o Java evoluir através da inclusão de novas facilidades na API do tipo usa quem quer. Algumas das inclusões prometidas não virão. Uma coisa que não afetaria nenhum sistema em uso mas que seria bom para novos sistemas seria as novas facilidades do JMX. Acabei de verificar no blog do Eamonn McManus de 16 de junho de 2009 que não entrarão no Java 7. Ver http://weblogs.java.net/blog/2009/06/16/jsr-255-jmx-api-20-postponed

Daquela minha lista de inclusões/alterações na API,não estou certo do que realmente virá e o que ficará para o Java 237

[]s
Luca

"

[quote=marcosalex]Uma diferença interessante no foco do Java é que a linguagem é projetada pra que seja fácil terceiros desenvolverem frameworks e componentes em cima.

O .NET a própria MS desenvolve seus componentes e te o framework completo, sem precisar de terceiros.

Cada lado tem suas vantagens e desvantagens. Mas acho que a Sun acaba saindo perdendo nessa, porque a maioria dos que desenvolvem no Java não gostam muito de usar componentes de terceiros porque temem que suas soluções sejam dependentes deste. E pra usar somente a ferramenta da Sun, acaba que a produtividade não fica tão grande, já que muita coisa que os outros tem pronta, você vai ter de fazer na mão.[/quote]

Bom , na realidade isso é uma feature e não um defeito.
Sim, o SE,ME e EE não são completos. Isso é proposital.
Espera-se que a equipe monte uma plataforma de aplicação em cima disso. E ai cada empresa pode montar a sua e proteger os seus investimentos. O uso de api de terceiros é uma opção a montar a sua plataforma de aplicação mas com o detalhe do vendor lock-in.
Mas depende muito do tipo de aplicação. Um produto de software, por exemplo, não pode deixar a plataforma de aplicação na mão de api de terceiros, já um projeto on demand pode (é responsabilidade dos intervenientes pedirem que seja montada uma plataforma propria)

A microsoft já dá a plataforma de aplicação.E sim,isso é uma limitação.
Por exemplo, muita gente não compreende que ASP.NET não é comparável a JSP e sim a JSF.
Mas JSF é baseado na servlet API, em servlets, que vc pode usar directamente e fácilmente se quiser.
Ja no .NET vc pode usar handlers que são semelhantes a servlets,mas não ha pq quando vc tem o ASP.NET.

O nivel da microsoft é muito mais longe da tecnologia base e mais perto da gui porque pretende ser uma plataforma RAD.
Java não pretende ser RAD, pertende ser flexivel, expansivel e durável.

:arrow: “façam como os brasileiros”, quando eu digo que a gente cobra barato pra trabalhar com Java você ainda acham que estou de brincadeira, os Brasileiros são os melhores desenvolvedores do Mundo.

[quote=sergiotaborda]
Espera-se que a equipe monte uma plataforma de aplicação em cima disso. E ai cada empresa pode montar a sua e proteger os seus investimentos. O uso de api de terceiros é uma opção a montar a sua plataforma de aplicação mas com o detalhe do vendor lock-in. [/quote]
Pergunto,

O MiddleHeaven framework futuramente, tende a ser um vendor lock-in ?