Quem acha que Generics é a coisa mais idiota do Java 5.0?  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Junta uma implementação que é mais gambiarra que as soluções já existentes, uma justificativa que acabou virando uma mentira. Mais corner-cases que casos comuns. Sintaxe para usos mais avançados lembra templates do c++, para quem não conhece, leia confusa, complexa e pouco intuitiva.

Toda a porcaria que Generics são se deve ao fato da Sun querer manter compatibilidade com versões anteriores e não alterar o bytecode gerado. No final das contas mudaram o formato e não temos como programar com generics para java 1.4.

Erasure gera uma quantidade de corner-cases tão grande que eu não vejo vantagens em usar alêm daquilo que a biblioteca prove.

Generics são uma bomba?

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
kuchma
Moderador
[Avatar]

Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline

Quanto aos generics, nao fui a fundo. De momento achei particularmente meio inutil o lance de static imports.


Marcio Kuchma
[WWW] [ICQ]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

generics são elgais, agora os programadores C++ não tem o que falar. Ah, ele é só açúcar sintático? Não rola reflection direito?



É,

_o/

[]s

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

É sempre assim, quando as pessoas têm medo de mexer em alguma coisa.
Em vez de tomar uma decisão corajosa, como o pessoal do .NET :lol!: (a parte de generics foi construída "em paralelo" à infraestrutura já existente, então temos List, que é igual à nossa velha conhecida java.util.List, e GenericList<>, que é igual à nova java.util.List<>, se não me engano), fizeram uma solução que é basicamente para "autocasting". A única coisa interessante é a parte do "foreach".
Por exemplo, percorrer os pares chave-valor retornados por java.lang.System.getenv() em J2SE 5.0 é agora bastante fácil:



A parte mais chata é descobrir a declaração certa da variável "env" no código acima, devido aos "generics". O programa acima, sem o "foreach", é meio complicado (meio é modo de dizer)



A declaração de "it' é meio complicada (meio é modo de dizer), só para evitar o cast em Map.Entry<String,String> entry = it.next();, que nos velhos tempos seria apenas Map.Entry entry = (Map.Entry) it.next();
[WWW]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

pcalcado wrote:generics são elgais, agora os programadores C++ não tem o que falar. Ah, ele é só açúcar sintático? Não rola reflection direito?
[]s


Não rola reflection, não rola coisas básicas que eu não acreditei quando soube que não teria.



Fiquei muito puto quando soube que isso não rola.
Se tivessemos todo poder dos templates do c++ sem meta-programação com suporte total via reflection, teriamos uma ferramenta muito poderosa e não 1 ninho de vespas como vai ser...

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

A parte de "metadata" parece que vai ser de alguma valia. Nisso eles não tiveram de mexer em bytecodes, mas a JVM precisa ser atualizada para entender direito essa parte de metadata. Mas isso foi mais ou menos copiado do .NET (só que o conceito do .NET foi um pouco ampliado, já que temos vários tipos de "anotações", não só de "tempo de execução" como é o caso do .NET).
[WWW]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2666
Localização: Chicago, EUA
Offline

Acredito que Generics é uma solução no vazio, uma perda de tempo. Tentaram solucionar um problema inexistente, pelo menos para mim. Poluiram a sintaxe da linguagem a troco de quê?

Se alguém conseguir me explicar as reais vantagens disso ficarei bastante contente.

Seria economizar casting ??? Acho que não, pois o bytecode precisa ser compatível com as VMs anteriores.

Seria evitar ClassCastExceptions dentro de uma collection ??? Acho que não pois se o cara quer uma lista de um objeto só, então use um array, ou extenda a lista para só aceitar esse tipo de objeto.

Deve haver alguma situação muito particular onde isso é vantajoso, mas não justifica alterar a parada toda só por causa dessa situação incomum.

Whatever...

Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

saoj wrote:
Seria economizar casting ??? Acho que não, pois o bytecode precisa ser compatível com as VMs anteriores.


O velho açúcar sintático, economiza pro programador...

Alan Perlis wrote:
Syntactic sugar causes cancer of the semi-colon.


[]s

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2666
Localização: Chicago, EUA
Offline

pcalcado wrote:O velho açúcar sintático, economiza pro programador...


Hehehe. Entendi, economiza digitação para o programador, depois que algum condenado digitou toda a maluquice dos Generics na API.

A economia que eu me referia era o tempo que a VM gasta para fazer um cast de um objeto, que eu acho é bem pequeno.

Com Generics o casting seria desnecessário SE O BYTE CODE NÃO ESTIVESSE SENDO GERADO COM O CASTING PARA SER COMPATÍVEL COM AS OUTRAS VMS !!!!

Não é isso que acontece ????

Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

Há muitos meses atrás detonei os generics achando que complicam a leitura do código em troca de pouca vantagem. Só estou reafirmando a mesma opinião aqui porque sei que o louds que abriu este tópico estudou muito o uso de generics e não levantou esta lebre atoa.

Particularmente não me vejo em uma equipe que use generics nos próximos 2 ou 3 anos que é o tempo mínimo para alguém simplificar seu uso para o programador normal. Até lá já estaremos com Java 6.0 com outras coisas realmente úteis.

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

A especificação de Generics diz que ela não deveria diminuir a performance do código em mais que 5%.

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2666
Localização: Chicago, EUA
Offline

louds wrote:A especificação de Generics diz que ela não deveria diminuir a performance do código em mais que 5%.


Então diminui ao invés de aumentar !!!??? Putz, que ótimo!

Essa parada que eu falei do casting faz sentido, louds? Ou seja, no bytecode o Generics some e entra o casting ?

Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Não, com Generics os castings somente apenas do código.
O bytecode gerado é quase igual ao gerado hoje para um código sem generics.

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Como disse é um "automatic casting".
Uma coisa que achava muito legal em Java, no começo, é que você lia o código e sabia exatamente o que estava acontecendo (diferentemente do C++, que pode criar um monte de objetos e destruí-los sem você saber direito o que está acontecendo, até que uns 5 anos mais tarde, você consegue saber todas as regras de escopo, criação e destruição de objetos, operadores e outras coisas mais cabeludas).
Agora está ficando igual ao C++. Por exemplo, isto aqui:

é equivalente em bytecodes ao seguinte código (basta ver o que o seu compilador gerou com javap, já que o jad não está funcionando direito ainda com o J2SE 5.0):

ou seja, tem um cast "automático" na linha onde pergunto o sobrenome do "josé". Grande coisa. Mas isso pode dar algum problema porque casts são sempre casts, codificados ou não (e sempre lançam ClassCastException...)
Outra coisa "automática" que é uma droga é o "static import". Quando criarem uma versão do Checkstyle ou PMD que suporte o J2SE 5.0 vou sugerir que todos os "static import" sejam tratados como "warnings".
Mas para não dizer que tudo que é automático é uma droga, o "foreach" é muito legal, e os "annotations" (metadata) também são muito legais.
[WWW]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Os cast automáticos não seriam problema se Generics fosse typesafe mesmo.

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team