¿Por qué Scala es más escalable que otros idiomas?

12

Scala se factura como un lenguaje escalable, una característica que incluso se incluye en su nombre :

El nombre Scala es un acrónimo de "escalable" y "lenguaje", lo que significa que está diseñado para crecer con las demandas de sus usuarios.

¿Qué significa "escalable" en el contexto de Scala? ¿Qué hace que Scala sea más escalable que, por ejemplo, Java?

prasonscala
fuente
55
Scala no es escalable en su forma de pensar: realmente debería leer la entrevista de los desarrolladores de Twitter sobre Scala / Java ... Básicamente, cada vez que tenían problemas de escalabilidad (reales), terminaban eliminando el código de Scala y colocando correctamente varios subprocesos Código Java (que, como se ha señalado aquí, es mucho más fácil de hacer en Java que en Scala). Scala es genial para las pruebas unitarias de prototipo y escritura y cualquier cosa que no implique la cantidad de datos "Real World" [TM] que dice.
Tristan St.
55
¿Es más fácil escribir correctamente código multiproceso en Java que en Scala? ¿Cómo es eso?
Aaron Novstrup
@Webinator ¿Tienes un enlace a la entrevista?
Aaron Novstrup
De acuerdo con Tristan St en escalabilidad. Erlang es el líder del paquete en caso de programación concurrente debido a su capacidad para crear procesos en un tiempo mínimo. Simplemente no puede crear más de 10000 hilos e interactuar entre ellos en SCALA de la manera que usted piensa.
Ubermensch
3
@TristanSt. Buena difusión de FUD, esa no es la extracción básica que obtuve de esa entrevista. - "Pero para otras partes acabamos de volver a un modelo de subprocesamiento Java tradicional. El ingeniero que trabajaba en eso, John Kalucki, descubrió que era un poco más fácil de probar, un poco más predecible. Lo bueno fue que tomó minutos cambiar el código basado en actores a algo basado en hilos. Fue un par de búsquedas y reemplazos. Por lo tanto, no es tan malo si los actores te fallan por cualquier razón ". Concepto increíble: ¡algunas cosas encajan con el modelo de actor y otras no!
Derek Litz

Respuestas:

14

Cuando Martin Odersky habla de scala como una opción de idioma escalable, lo que quiere decir es que el lenguaje en sí es apropiado para:

  • cosas de secuencias de comandos
  • escribir aplicaciones
  • escribir aplicaciones monstruosas de "empresa" (por falta de una palabra mejor)

¡Ciertamente no se refiere a la escalabilidad desde la perspectiva del rendimiento!

El hecho de que él pueda afirmar que Scala es tan apropiado para scripts rápidos y sucios como para el despliegue empresarial a gran escala es más o menos lo siguiente:

Scripting

Scala es ideal para las secuencias de comandos porque su inferencia de tipos y estilo funcional lo hacen conciso y excelente para cortar y cortar colecciones, etc.

Aplicaciones

Scala es ideal para escribir aplicaciones porque es un lenguaje marcado de tipo estático con algunas características excelentes para trabajar en estilos funcionales e imperativos. Scala es compatible con Java y, por lo tanto, puede aprovechar un enorme ecosistema de bibliotecas.

Despliegue empresarial

Scala se compila a bytecode y se ejecuta en la máquina virtual Java, un sistema estable con un gran rendimiento, en comparación con los lenguajes (llamados) dinámicamente escritos (es decir, sin tipo). Una vez más, el hecho de que está estáticamente escrito significa que la refactorización se hace mucho más fácil en bases de código grandes.

oxbow_lakes
fuente
¿Alguna evidencia que respalde "mecanografiado estáticamente significa que la refactorización se hace mucho más fácil en bases de código grandes"? Suena más como un "depende", situación, entonces un hecho. Lo único que he visto que los lenguajes mecanografiados ofrecen definitivamente es que son más fáciles de manejar para los escritores de compiladores.
Derek Litz
21

Lo que dice Odersky es (Diapositiva 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

"Scala es profundo donde otros idiomas son amplios".

Esto significa que escalable se entiende en términos de flexibilidad y expresividad. Puede crear sus propias estructuras de control. Por ejemplo, el framework de actores es una biblioteca, pero parece que usa características de lenguaje.

Esto significa que Scala escalará de acuerdo con la abstracción necesaria, no necesariamente en términos de "responder 1.000.000 de solicitudes en un segundo" (pero Scala también es fuerte aquí).

michael.kebe
fuente
1
+1 esto realmente encaja con "SCAlable LAnguage". Es un lenguaje diseñado para crecer con las necesidades del desarrollador.
Ben James
11

Lo que limita la escalabilidad de Java en la práctica no es la JVM, es la dificultad de escribir el código concurrente correcto. Scala facilita esto a través de su soporte para programación funcional y el modelo de actor.

Java puede ser muy escalable cuando la concurrencia es fácil, como en los servidores web (cada solicitud es casi completamente independiente). Pero cuando se trata de paralelizar una sola tarea de larga duración, puede ser una verdadera lucha acertar.

Michael Borgwardt
fuente
Si bien Java no tiene soporte para programación funcional, esto no significa que no pueda usarlo en Java. Si lo hace, puede darle la misma escalabilidad, aunque para un mayor esfuerzo. Una biblioteca que puede ayudar code.google.com/p/lambdaj
Peter Lawrey
2
La escalabilidad a la que Scala posee su nombre es del lenguaje , no de los programas.
Daniel C. Sobral
6

Ese no es necesario el lenguaje en sí que es más escalable que Java, ya que dice que ambos idiomas pueden producir el mismo código de bytes.

Pero el modelo de actor y el estilo de programación funcional pueden mejorar la escalabilidad (en pocas palabras, simplificando la programación de concurrencia correcta y reduciendo las necesidades de sincronización).

Para obtener una mejor perspectiva, eche un vistazo al modelo de actor y compárelo con la aplicación tradicional de Java multihilo:

Incluso puede usar el marco de Akka para crear aplicaciones Java altamente escalables sin codificar en Scala:

Alois Cochard
fuente
La biblioteca de actores es un buen ejemplo de cómo Scala es escalable, pero este ejemplo no tiene que ver con la concurrencia: la API de actores parece una característica nativa con operadores especiales (como el envío de mensajes!), Pero en realidad todo es solo llamadas a métodos regulares
Ben James
El modelo de actor lo ayuda a escribir software escalable sin demasiado dolor y sin demasiado dolor de cabeza de concurrencia, ¿no es así? así que incluso si no lo ves cuando usas Actores, la concurrencia tiene algo que ver con el modelo de actor. El objetivo del modelo de actor es simplificar el cómputo concurrente, entonces, ¿por qué este ejemplo no tiene nada que ver con la concurrencia ... No entiendo su punto aquí?
Alois Cochard
Mi comentario no fue redactado brillantemente, lo siento. Las respuestas de llemieng o michael.kebe lo explican mejor.
Ben James
No hay problema ! Ahora entiendo su punto, solo estaba hablando sobre la escalabilidad de las bibliotecas de Scala y no sobre las características de escalabilidad / concurrencia del lenguaje en sí. Gracias
Alois Cochard