Por que essas tentativas de diluir Scala com Xtend e Kotlin? [fechadas]

26

Então agora o Eclipse ofereceu o Xtend e o JetBrains está oferecendo o Kotlin - os quais parecem ser versões diluídas do Scala. Minha pergunta é por que? Eu tenho jogado com Scala um pouco e não é que difícil. Isso é apenas uma reação à dificuldade inerente ao salto do imperativo para o funcional ou há algo mais em ação aqui?


EDIT: Desculpas. Relendo a pergunta como eu a publiquei originalmente, posso ver onde ela soa um pouco como corrico. A maneira como eu formulava a pergunta parecia ser a melhor maneira de fazer a pergunta. Eu já vi postagens de blog com o efeito "Scala é muito difícil / Scala é muito complexo" e também "Kotlin é uma tentativa de fazer Scala, mas mais simples". Vou deixar o fraseado como era originalmente, mas sinceramente não estava tentando trollar.

Onorio Catenacci
fonte
20
Parece-me bastante intolerante simplesmente supor que uma nova linguagem que tenha alguma semelhança com Scala deve ser uma "versão diluída de Scala", escrita por pessoas para quem Scala é muito difícil. É menos provável que você obtenha respostas bem consideradas colocando a pergunta dessa maneira.
22611 Michael Borgwardt #
8
Montagem é apenas uma versão diluída do código da máquina, certo?
Ben Brocka
6
@BenBrocka: Não, é isomorfo ao código de máquina;)
4
Scala é ótimo. Quanto a mim, acredito que as pessoas devam desistir da necromancia do Java e reinventar as bicicletas (todas essas novas linguagens, mencionadas e não) e apenas usar e melhorar o Scala. NA MINHA HUMILDE OPINIÃO.
Ivan
2
@MichaelBogwardt um ponto justo. Estou baseando a afirmação no que vi na blogosfera. "Scala é muito difícil" e "Scala é muito complexo" parecem ser queixas relativamente comuns.
Onorio Catenacci

Respostas:

39

IMHO de alguém programando em Java nos últimos 7 anos e sendo a minha linguagem mais forte, acho o Scala bastante estranho e estou tendo dificuldades para me acostumar.

O Xtend parece mais com Java e conseguiu escrever um aplicativo simples com muito mais rapidez. É verdade que não me dei tempo suficiente com Scala, mas certamente entendo por que alguns podem ficar desanimados com isso.

Com isso dito, as pessoas escolherão um inferno familiar em vez de um céu desconhecido.

maple_shaft
fonte
19
+1: "as pessoas escolherão um inferno familiar em vez de um céu desconhecido".
Giorgio
18

O JetBrains tem uma página wiki comparando o Scala ao Kotlin, e parece haver algumas coisas que o Kotlin faz e o Scala não:

  • Segurança nula de sobrecarga zero. O Scala tem o Option, que é um wrapper sintático e de tempo de execução
  • Elenco inteligente
  • Funções de extensão estática. Em vez de agrupar em tempo de execução
  • As funções Inline de Kotlin facilitam saltos não locais
  • Modelos de string. Há um plug-in de compilador de terceiros para o scala com funcionalidade semelhante: ScalaEnhancedStrings
  • Delegação de primeira classe. Também implementado via plug-in de terceiros: Módulos Autoproxy

Portanto, chamar Kotlin de água para Scala provavelmente é uma simplificação excessiva. Quanto ao Xtend, acho que ele visa principalmente usuários de Xtext, em vez de um público mais amplo. Uma grande diferença para o Scala é que o Xtend compila para Java em vez de bytecode.

Outra linguagem "Java killer" que você deve adicionar à sua lista é o Ceilão da Red Hat , embora eu não tenha idéia se e como ele se compara ao Scala.

yannis
fonte
13
Lançamentos automáticos parecem assustadores.
Jonas
14
A indústria tem essas revoluções cíclicas em que os desenvolvedores vão de um extremo a outro e de novo e de novo. As linguagens dos codificadores avançados de recursos eram boas, então os idiotas escreveram códigos ruins e descobrimos os perigos para que as pessoas se reunissem à segurança percebida do Java, agora voltando aos codificadores de potência. Veja como o Javascript e o navegador eram bons, então os applets apareceram e a RIA com os plug-ins do navegador eram bons e o Javascript ruim, as estruturas modernas do AJAX surgiram e os plugins eram inseguros e ruins, o Silverlight chegou e as pessoas disseram que o AJAX estava morto, AGORA HTML5 é moda e plugins ruins de novo! :)
maple_shaft
3
@ Jonas eu não sei mesmo se eu concordo com ele, mas é um fenômeno que tenho notado. Certamente, a cada revolução, surge uma solução mais sofisticada, mas cada solução sempre tem um calcanhar de Aquiles. A solução do problema do calcanhar faz com que alguns olhem para trás em soluções anteriores de idéias, mas com o tempo as pessoas esquecem por que essas soluções antigas foram abandonadas originalmente. Com o tempo, porém, a cada revolução, o salto continua diminuindo. O Java + XTend pode certamente não ser tão sofisticado quanto o Scala, no entanto, os problemas são menores que o investimento para mudar completamente para um novo idioma.
Maple_shaft
2
@ Jonas Bem, apenas uma simplificação excessiva de nível extremamente alto da evolução tecnológica caberia em um comentário. Eu concordo com maple_shaft, porém, a evolução tecnológica tem uma sensação iterativa .
yannis
3
@ Jonas estes elenco não são moldes automáticos, mas inteligentes: se você olhar para você vai ver que não é o mesmo: kotlinlang.org/docs/reference/typecasts.html
cy6erGn0m
11

Eu tenho usado o Scala como minha língua principal no último ano (com o Java como um segundo próximo, ambos em uma grande base de códigos Java herdada.) Ainda preciso procurar recursos bastante básicos se não os tiver usado em um enquanto. Claro, você pode escrever um Scala rapidamente, mas é uma linguagem extremamente rica em recursos e leva muito tempo para dominar.

Além disso, sua complexidade não é apenas um problema para humanos, mas também para IDEs e compiladores. Celyon e Kotlin são compilados diretamente para um JavaScript bastante limpo. O Scala pode produzir JavaScript, via GWT, embora chegar lá seja complicado e a saída do GWT não seja legível nem projetada para funcionar bem com JavaScript ou HTML externo.

Definitivamente, sou mais produtivo no Scala que no Java, e o código é mais compacto e legível (depois de conhecer um pouco do Scala.) Mas sua complexidade me faz hesitar em recomendá-lo a outras pessoas. Uma linguagem com 20% da complexidade, mas 80% da capacidade seria uma alternativa bem-vinda.

[Editado para remover a menção do código legado, veja o comentário abaixo.]

[Adendo 2017: o Scala agora suporta JavaScript como destino de construção, enquanto o Kotlin continua a adicionar recursos que fazem sentido para uma substituição Java / Groovy / JavaScript do tipo Scala. Agora eles são idiomas mais distintos do que quando escrevi isso pela primeira vez.]

David Leppik
fonte
Poderia, por favor, elaborar um pouco mais a "parte do atraso"? Por exemplo, quais métodos você quer dizer que usam Listas em vez de Seqs?
kiritsuku
Vou editar que, uma vez refletida, a biblioteca Scala padrão raramente faz isso. JSONArray pega uma lista, mas a maioria dos construtores não. Independentemente disso, ainda existe um viés na documentação em relação às Listas, principalmente porque a Programação no Scala, 2ª Edição, cobre apenas o Scala 2.8, que antecede o Vectors. E seus exemplos de código tendem a ter construtores que levam a List onde Seq seria melhor.
precisa saber é o seguinte
Sim, para a 2.10, algumas coisas são melhores ( +:extratores, por exemplo). Espero que a programação em Scala seja atualizada em um futuro próximo. Para a versão 2.11, algumas coisas melhoram ainda mais. O stdlib já está livre de depreciações e também diminuirá um pouco. Talvez scala.util.parsingtambém seja movido para fora do stdlib. Vamos ver ... #
3100 kiritsuku
1
Devo acrescentar que meu problema real com Listas vs. Vetores é que adicionar itens a uma lista (por exemplo, Seq no Scala) é uma operação muito básica, e há muitas maneiras equivalentes de fazê-lo, todas com símbolos engraçados que são difíceis de entender. lembrar. A maneira canônica é ::, ::=ou +:=qual é o prefixo, mas a maioria das pessoas quer :+=quais anexos, mas isso não é eficiente para uma lista.
precisa saber é o seguinte
10

O JetBrains declarou claramente seus objetivos para o Kotlin :

Queremos nos tornar mais produtivos mudando para uma linguagem mais expressiva. Ao mesmo tempo, não podemos aceitar compromissos em termos de interoperabilidade Java (a nova linguagem será introduzida gradualmente e precisa interoperar sem problemas com a base de código existente) ou velocidade de compilação (nossa base de código leva tempo suficiente para compilar com javac, e não podemos nos dar ao luxo de torná-lo mais lento). O próximo passo também é bastante direto: esperamos que a Kotlin conduza as vendas do IntelliJ IDEA.

Michael Borgwardt
fonte
8

Eu usei o Scala há alguns meses no Eclipse com o Play Framework. Eu gosto do idioma, mas também há coisas que eu não gosto.

Para mim, o motivo para mudar de Java para outra linguagem é ser mais produtivo.

Até agora não fui mais produtivo com o Scala. Um dos motivos é a falta de um bom suporte para Scala no Eclipse, o plug-in Scala é ruim (por exemplo, falha na indentação) e ainda não possui muitas funções (por exemplo, nenhuma "Hierarquia de Chamada Aberta"). O compilador Scala também é lento, isso pode não ser um problema, mas eu uso o Scala com o Play Framework, que compila o código para cada solicitação e a velocidade do compilador é importante.

Jonas
fonte
2
Talvez você não tenha aprendido expressões idiomáticas suficientes do Scala. Eu usei o Scala para pequenos projetos (ferramentas) e sou muito mais produtivo no Scala do que em Java, apesar de ter muito mais experiência em Java (> 10 anos) do que em Scala (<2 anos).
Giorgio
4

Não sei sobre Kotlin, mas Scala e Xtend são dois animais muito diferentes.

Ao contrário do comum, Scala NÃO é um Java melhor. Scala é uma linguagem muito mais destacada que Java, com sua própria sintaxe e semântica, e seu próprio pacote de bibliotecas base.

Xtend É um Java melhor. Mantém a semântica Java e aprimora sua sintaxe. Cada linha do código Xtend pode ser traduzida diretamente para várias linhas de código java. Também não há tempo de execução adicional.

Eu acho que as duas abordagens estão certas, embora diferentes. Não gosto do Scala (como idioma), mas não gosto de adicionar os frascos do Scala aos meus projetos. Também não consigo usar o Scala corretamente no Android (ele adiciona problemas de peso e desempenho). O Xtend não é tão destacado, mas é bom para mim (vale muito a pena usá-lo do que a linguagem Java) e funciona em todas as plataformas como se eu estivesse escrevendo diretamente em Java.

Acredito que os dois idiomas abrangem nichos diferentes e podem coexistir sem interferir um no outro. IMHO, Scala é muito complexo, acrescentando nada de novo. Se você quiser se tornar mais funcional e menos OO, basta escolher uma das muitas linguagens funcionais mais simples, como Clojure ou JHaskell. Se você quer apenas Java com uma sintaxe melhor e um pouco de programação funcional, o Fantom seria tão bom quanto o Scala (ele se assemelha muito ao C #).

Mas acho que o Xtend está em um ponto interessante entre todas essas línguas. Ele adiciona todos os padrões sintáticos que eu queria para Java, mantendo as boas partes do Java (sua semântica). Pense nisso como Coffescript para Java.

E o suporte ao Eclipse é excelente ...

Ivan Hernandez
fonte
… E é suportado apenas no Eclipse. Direita? E Eclipse é um inferno ...
Sarge Borsch
O Xtend possui um tempo de execução adicional. Cerca de 3MB da última vez que verifiquei.
mm2001
@ mm2001 Sim, existem dependências: cerca de 300 Ko para xtend e 2 Mo para goiaba no meu pequeno projeto de teste ( github.com/pdemanget/examples/tree/master/xtend/message-send ) Mas não é um tempo de execução, eles são classes adicionais para coisas como InputOutput, as anotações adicionais. Não remove o ponto principal para mim que Scala e Xtend são dois idiomas muito diferentes, como foi dito nesta resposta.
pdem 11/07/16