Por que o Scala é mais escalável que outros idiomas?

12

O Scala é cobrado como um idioma escalável, um recurso que é incluído em seu nome :

O nome Scala é um portmanteau de "escalável" e "linguagem", significando que ele foi projetado para crescer com as demandas de seus usuários.

O que significa "escalável" no contexto do Scala? O que torna o Scala mais escalável do que, digamos, o Java?

prasonscala
fonte
5
O Scala não é escalável da maneira que você pensa: você realmente deveria ler a entrevista dos desenvolvedores do Twitter sobre o Scala / Java ... Basicamente, toda vez que eles tinham problemas de escalabilidade (reais), eles acabavam removendo o código do Scala e inserindo corretamente vários threads Código Java (que, como foi indicado aqui, é muito mais fácil de fazer em Java do que em Scala). O Scala é legal para testes de digitação e prototipagem de unidades e qualquer coisa que não envolva a quantidade de dados "Real World" [TM] mencionados.
Tristan St.
5
É mais fácil escrever código multiencadeado corretamente em Java do que em Scala? como assim?
Aaron Novstrup
@Webinator Você tem um link para a entrevista?
Aaron Novstrup
Concorde com Tristan St sobre escalabilidade. Erlang é o líder do pacote em caso de programação simultânea devido à sua capacidade de criar processos em um tempo mínimo. Você simplesmente não pode criar mais de 10000 threads e interagir com ele no SCALA da maneira que pensa.
Ubermensch 16/01
3
@TristanSt. Boa divulgação do FUD, que não é absolutamente o ponto básico que recebi dessa entrevista. - "Mas, para outras partes, voltamos ao modelo tradicional de encadeamento Java. O engenheiro que trabalhava nisso, John Kalucki, descobriu que era um pouco mais fácil de testar, um pouco mais previsível. demorou alguns minutos para mudar o código que era baseado em ator para algo baseado em thread. Foram algumas pesquisas e substituições. Portanto, não é tão ruim se os atores falharem por qualquer motivo. " Conceito incrível - algumas coisas se encaixam no modelo de ator e outras não!
Derek Litz

Respostas:

14

Quando Martin Odersky fala sobre scala como uma escolha de idioma escalável, o que ele quer dizer é que o próprio idioma é apropriado para:

  • material de script
  • escrevendo aplicativos
  • escrever monstros aplicativos "corporativos" (pela falta de uma palavra melhor)

Ele certamente não está se referindo à escalabilidade da perspectiva do desempenho!

O fato de ele poder alegar que o scala é tão apropriado para scripts rápidos quanto para implantação corporativa em larga escala é o seguinte:

Script

O Scala é ótimo para scripts porque sua inferência de tipo e estilo funcional o tornam conciso e ótimo para coleções de fatiar e cortar, etc.

Formulários

O Scala é ótimo para escrever aplicativos porque é uma linguagem verificada do tipo estaticamente, com alguns ótimos recursos para trabalhar nos estilos funcionais e imperativos. O Scala é compatível com Java e, portanto, você pode aproveitar um enorme ecossistema de bibliotecas.

Implantação corporativa

O Scala compila para o bytecode e é executado na Java Virtual Machine, um sistema estável com ótimo desempenho, quando comparado às (chamadas) linguagens dinamicamente tipadas (ou seja, não tipadas). Novamente, o fato de ser digitado estaticamente significa que a refatoração é facilitada em grandes bases de código.

oxbow_lakes
fonte
Alguma evidência de suporte para "tipo estaticamente significa que a refatoração é facilitada em grandes bases de código"? Parece mais uma situação "depende", depois um fato. A única coisa que vi que linguagens digitadas oferecem definitivamente é que elas são mais fáceis de lidar com escritores de compiladores.
Derek Litz
21

O que Odersky diz é (Slide 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

"Scala é profundo onde outras línguas são amplas."

Isso significa que escalável significa flexibilidade e expressividade. Você pode criar suas próprias estruturas de controle. Por exemplo, o framework de atores é uma biblioteca, mas parece que ele usa recursos de linguagem.

Isso significa que o Scala será escalado de acordo com a abstração necessária, não necessariamente em termos de "atender 1.000.000 de solicitações em um segundo" (mas o Scala também é forte aqui).

michael.kebe
fonte
1
+1 isso realmente se encaixa no "SCAlable LAnguage". É uma linguagem projetada para crescer com as necessidades do desenvolvedor.
Ben James
11

O que limita a escalabilidade do Java na prática não é a JVM, é a dificuldade de escrever o código simultâneo correto. O Scala facilita isso através do suporte à programação funcional e ao modelo de ator.

O Java pode ser muito escalável quando a concorrência é fácil, como em servidores da Web (cada solicitação é quase completamente independente). Mas quando se trata de paralelizar uma única tarefa de longa duração, pode ser uma verdadeira luta acertar.

Michael Borgwardt
fonte
Embora o Java não tenha suporte para programação funcional, isso não significa que você não possa usá-lo em Java. Fazer isso pode fornecer a mesma escalabilidade, embora com mais esforço. Uma biblioteca que pode ajudar a code.google.com/p/lambdaj
Peter Lawrey
2
A escalabilidade à qual o Scala possui seu nome é da linguagem , não dos programas.
Daniel C. Sobral
6

Não é necessário que a linguagem em si seja mais escalável que Java, como você diz que as duas linguagens podem produzir o mesmo bytecode.

Mas o modelo do ator e o estilo de programação funcional podem melhorar a escalabilidade (simplificando a programação de simultaneidade correta e reduzindo as necessidades de sincronização).

Para obter uma visão melhor, dê uma olhada no modelo do ator e compare-o com o aplicativo java multiencadeado tradicional:

Você pode até usar a estrutura Akka para criar aplicativos Java altamente escalonáveis ​​sem codificar no Scala:

Alois Cochard
fonte
A biblioteca de atores é um bom exemplo de como o Scala é escalável, mas este exemplo não tem a ver com simultaneidade: a API de atores parece um recurso nativo com operadores especiais (como o! Message-send), mas na verdade é tudo chamadas de método regulares.
Ben James
O modelo de ator ajuda você a escrever software escalável sem muita dor e sem muita dor de cabeça simultânea, não é? portanto, mesmo que você não o veja ao usar Atores, a simultaneidade é algo relacionado ao modelo de ator. O modelo de ator tem como objetivo simplificar a computação simultânea. Por que esse exemplo não tem nada a ver com simultaneidade ... Não entendi seu ponto aqui?
Alois Cochard
Meu comentário não foi brilhantemente redigido, desculpe. As respostas de llemieng ou michael.kebe explicam melhor.
Ben James
Sem problemas ! Agora eu entendo o seu ponto, eu estava falando apenas sobre a escalabilidade das bibliotecas Scala e não sobre os recursos de escalabilidade / simultaneidade da linguagem . Graças
Alois Cochard