Quem já usou Scala?  XML
Índice dos Fóruns » Outras Linguagens
Autor Mensagem
rubinelli
JavaEvangelist
[Avatar]

Membro desde: 26/04/2005 11:18:25
Mensagens: 469
Offline

Scala parece que deixou o Groovy para trás como a grande vedete das linguagens criadas para a JVM. Tem até gente dizendo que a Sun deveria declarar que Java 8 vai ser Scala e ponto final.

Mas alguém aqui já brincou pelo menos com Scala? O que é legal nela? O que não é tão legal? Eu pergunto do ponto de vista prático mesmo, não "a nível de pureza sintática."
[WWW]
mister__m
Virtual Machine Man
[Avatar]

Membro desde: 18/03/2005 16:13:17
Mensagens: 736
Offline

rubinelli wrote:Mas alguém aqui já brincou pelo menos com Scala? O que é legal nela? O que não é tão legal? Eu pergunto do ponto de vista prático mesmo, não "a nível de pureza sintática."


Sim, já fiz até um protótipo de quão mais limpa, legível e poderosa a JSR-310 se fosse implementada em Scala.

O que tem de bom em Scala?

  • Não ter primitivos

  • Operadores serem métodos

  • Inferência de tipos

  • Generics com covariância e contravariância na declaração e não no uso

  • Implicit conversions

  • Suporte a closures e functions

  • Suporte a object

  • Suporte a structural types

  • Existential types

  • Pattern matching

  • Suporte a definição de visibilidade muito mais refinado

  • Self-types

  • A API

  • Ter sido desenhada pra gerar bytecode (isso alguns discordariam)

  • Interoperabilidade limpa com Java


  • E mais algumas coisas que eu esqueci. O que tem de ruim? Falta de doc, suporte inferior ao Java nas IDEs e não estar todo mundo usando

    This message was edited 1 time. Last update was at 24/01/2008 18:29:02


    Michael Nascimento Santos, aka Mister M

    Summa Technologies do Brasil - http://www.summa-tech.com/
    genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
    ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
    Líder da JSR-310 - Date and Time API
    Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
    SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
    JSR Community @ java.net - http://community.java.net/jsr
    Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80
    Twitter - @mr__m
    [WWW]
    louds
    Moderador
    [Avatar]

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

    Scala é bem legal, porém o sistema de tipos é incrivelmente complexo. Apesar de ser um ótimo exercício teórico, ter virtual types e generic types na mesma linguagem é muito perigoso do ponto de vista de uniformidade e simplicidade. Apesar de ter casos que um resolve que o outro não e vice-versa, deveriam ter escolhido apenas um dos dois.

    Se generics já tem algumas sutilezas, virtual types com path dependant types são bem complicados de explicar. Sem falar que produzir um compilador que gere mensagens de erro úteis é incrivelmente dificil (basta ver que nhaca que o compilador do scala vomita nesse caso).

    Porém, no entanto, acho que o maior problema de Scala é a plataforma no qual executa, não a linguagem em sí.

    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]
    wmitsuda
    JavaEvangelist

    Membro desde: 25/02/2005 17:02:40
    Mensagens: 334
    Offline

    Por coincidência, saiu no developerworks um primeiro artigo de uma série sobre Scala:

    The busy Java developer's guide to Scala
    http://www.ibm.com/developerworks/java/library/j-scala01228.html

    Sun Java Certified POG Master Developer
    http://www.willianmitsuda.com
    [WWW]
    rubinelli
    JavaEvangelist
    [Avatar]

    Membro desde: 26/04/2005 11:18:25
    Mensagens: 469
    Offline

    Vocês podem dar uma palhinha de como ficam os generics em Scala? No Java eu já acho que tem umas coisas piradas, ainda mais quando mistura com autoboxing...
    [WWW]
    louds
    Moderador
    [Avatar]

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

    rubinelli wrote:Vocês podem dar uma palhinha de como ficam os generics em Scala? No Java eu já acho que tem umas coisas piradas, ainda mais quando mistura com autoboxing...


    Scala tem suporte a existencial types, então vc pode escrever coisas como:

    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]
    cv
    Moderador
    [Avatar]

    Membro desde: 04/04/2003 00:32:12
    Mensagens: 7842
    Localização: São Paulo, SP
    Offline

    medo++
    [Email] [WWW] [Yahoo!] [MSN] [ICQ]
    rubinelli
    JavaEvangelist
    [Avatar]

    Membro desde: 26/04/2005 11:18:25
    Mensagens: 469
    Offline

    Caramba, é o Existencialismo aplicado à programação!

    Que tipo de problema você resolve com uma construção dessas, louds? Aquele "[T for some {T}]" está especialmente misterioso.
    [WWW]
    saoj
    JWizard
    [Avatar]

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

    A sintaxe me pareceu incrivelmente enrolada e complexa. Java ganhou o mainstream porque a sintaxe era bem fácil. Basicamente fez com que OO fosse acessível para meros mortais.

    E agora então com Ruby, fica ainda mais complicado ter que fazer um closure assim:



    Ao invés de assim:



    Acho que o pessoal deveria se inspirar no Ruby e fazer linguagens com uma sintaxe parecida... E que rodem sem problemas dentro da JVM como a Scala...

    Acho também que poderiam haver outros projetos competindo com o JRuby. Não precisa ser 100% compatível com o Ruby. Precisa ter uma sintaxe parecida, as sacadas mais importantes (closures, tudo é objeto, tudo é expressão, alias, operadores são métodos, etc) e rodar bonito dentro da JVM. Não sei se foi essa a intenção do Scala, mas a sintaxe ficou intimidadora... Talvez se removesse os tipos ou deixásse-os opcionais como ActionScript ficaria mais legível?

    This message was edited 6 times. Last update was at 25/01/2008 19:28:15


    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]
    mister__m
    Virtual Machine Man
    [Avatar]

    Membro desde: 18/03/2005 16:13:17
    Mensagens: 736
    Offline

    rubinelli wrote:Vocês podem dar uma palhinha de como ficam os generics em Scala? No Java eu já acho que tem umas coisas piradas, ainda mais quando mistura com autoboxing...


    Em Scala, generics são especificados usando colchetes ao invés do par menor/maior:



    O legal é a declaração da covariância/contravariância junto com o tipo genérico. Ao invés de fazer como em Java, onde em todo lugar que você usa uma Collection, você normalmente declara como: Collection<? extends String>, em Scala você tem a opção de fazer isso na definição do tipo genérico, uma vez só.

    Michael Nascimento Santos, aka Mister M

    Summa Technologies do Brasil - http://www.summa-tech.com/
    genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
    ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
    Líder da JSR-310 - Date and Time API
    Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
    SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
    JSR Community @ java.net - http://community.java.net/jsr
    Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80
    Twitter - @mr__m
    [WWW]
    mister__m
    Virtual Machine Man
    [Avatar]

    Membro desde: 18/03/2005 16:13:17
    Mensagens: 736
    Offline

    rubinelli wrote:Que tipo de problema você resolve com uma construção dessas, louds? Aquele "[T for some {T}]" está especialmente misterioso.


    Não sou o louds, mas espero que minha resposta sirva

    Um dos usos de forSome é permitir o uso de tipos genéricos sem ter que declará-los explicitamente no uso, como por exemplo:


    Michael Nascimento Santos, aka Mister M

    Summa Technologies do Brasil - http://www.summa-tech.com/
    genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
    ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
    Líder da JSR-310 - Date and Time API
    Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
    SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
    JSR Community @ java.net - http://community.java.net/jsr
    Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80
    Twitter - @mr__m
    [WWW]
    mister__m
    Virtual Machine Man
    [Avatar]

    Membro desde: 18/03/2005 16:13:17
    Mensagens: 736
    Offline

    saoj wrote:



    Esse exemplo pode ser simplificado para:



    Os tipos só são requeridos quando não podem ser inferidos, as chaves podem ser suprimidas quando o método tem apenas uma expressão e para rodar como script, não é necessário um object.

    This message was edited 1 time. Last update was at 26/01/2008 22:34:38


    Michael Nascimento Santos, aka Mister M

    Summa Technologies do Brasil - http://www.summa-tech.com/
    genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
    ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
    Líder da JSR-310 - Date and Time API
    Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
    SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
    JSR Community @ java.net - http://community.java.net/jsr
    Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80
    Twitter - @mr__m
    [WWW]
    saoj
    JWizard
    [Avatar]

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


    Os tipos só são requeridos quando não podem ser inferidos, as chaves podem ser suprimidas quando o método tem apenas uma expressão e para rodar como script, não é necessário um object.




    http://recipes.mentaframework.org/posts/list/41.page

    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]
    mister__m
    Virtual Machine Man
    [Avatar]

    Membro desde: 18/03/2005 16:13:17
    Mensagens: 736
    Offline



    No seu exemplo, creio que o método hello não precise ter o retorno declarado.

    This message was edited 1 time. Last update was at 28/01/2008 15:31:18


    Michael Nascimento Santos, aka Mister M

    Summa Technologies do Brasil - http://www.summa-tech.com/
    genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
    ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
    Líder da JSR-310 - Date and Time API
    Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
    SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
    JSR Community @ java.net - http://community.java.net/jsr
    Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80
    Twitter - @mr__m
    [WWW]
    saoj
    JWizard
    [Avatar]

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

    mister__m wrote:
    No seu exemplo, creio que o método hello não precisa ter o retorno declarado.



    Tem razão. É a prática!

    Já mudei la...

    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]
     
    Índice dos Fóruns » Outras Linguagens
    Ir para:   
    Powered by JForum 2.1.8 © JForum Team