martes, 27 de enero de 2009

Qué cuernos es Scala y por qué esa obsesión

Ya lo dije en otras partes pero me voy a tomar un post acá para resumirlo. Scala es un lenguaje de incipiente adopción, señalado a veces como "el próximo Java" o como uno de sus herederos. Aparentemente Java llegó a un techo en su evolución, por cuestiones intrínsecas (su diseño) y extrínsecas (determinación de Sun). Una forma elegante de evadir completamente este problema es pasándose a otro lenguaje mejor diseñado, sin cambiar de plataforma. Scala es uno de esos. Incorpora bastante más que lo que algunos están reclamando como torpe mejora en Java.
Algunas características:

  • Compila a bytecode (JVM)
  • Es interoperable con Java (o sea, se pueden seguir usando librerías y frameworks existentes en Java)
  • Es de tipo estático
  • Inferencia de tipos
  • Fusiona exitosamente programación funcional con OOP
  • Tiene una forma de herencia múltiple llamada composición mixin
  • "Conversiones implícitas": permiten extender librerías externas y hacer una especie de prototyping
  • Incluye un intérprete ("REPL")
  • Soporta XML como un tipo más
  • Viene con librerías interesantísimas: concurrencia tipo Erlang, parser combinators, etc.
  • ¿Qué más querés?
El sistema de tipos tiene cierta complejidad, que domino a medias, pero con eso en general alcanza. Más allá de todas las ideas incorporadas, tomadas de varios lenguajes e integradas por Martin Odersky en Scala, el reto mayor para quien viene de Java u otro lenguaje imperativo es asimilar el estilo de programación funcional

Scala permite codificar en estilo imperativo, como si fuera un Java con diferente sintaxis. Eso puede estar bueno para ir metiéndose de a poco, pero de nada servirá si uno no busca avanzar a un código más funcional. El estilo funcional lamentablemente estuvo siempre muy divorciado de la industria y muy casado con la academia, pero esto ya está cambiando. Está presente en Python, Ruby, JavaScript; entró de lleno en .NET con C#/LINQ y F#, etc., y es probable que esta tendencia se profundice, aunque haya que terminar desechando Java por completo.

Se dice por ahí que "aprender programación funcional nos convierte en mejores programadores aunque nos dediquemos a la programación imperativa". Hay dos o tres cosas que me gustaría rescatar en ese sentido, para un próximo post, aplicables a cualquier lenguaje. Son cosas bien sencillas que se nos escaparon por mucho tiempo, y pueden ser un buen punto de entrada a los beneficios del paradigma funcional.
¡Salud!

No hay comentarios:

Publicar un comentario