Download ¿Por qué hoy me debo interesar en el lenguaje Scala?

Document related concepts
no text concepts found
Transcript
¿Por qué hoy me debo interesar en el lenguaje Scala?
Título: ¿Por qué hoy me debo interesar en el lenguaje Scala?
Autor: Dr. Gabriel Guerrero
Ref: gg20150308_PorQueHoyMeInteresaScala.doc
En el mundo de las TI día a día surgen modas y herramientas que todas dicen sus promotores que resuelven los
problemas que las anteriores modas y herramientas hasta la fecha no lo hacían.
¿Por qué Scala hoy no es una moda reciente?, sino un lenguaje que desde su inicio hace más de 15 años, en la
Escuela Politécnica de Lausana Suiza por Martin Odersky, ha promovido una metodología “GRIS combinación de
NEGROS Y BLANCOS”, entre una metodología “BLANCA” basada en objetos (Object-Oriented programming) y,
entre una metodología “NEGRA” basa en programación FUNCIONAL (Functional programming). Hoy se tiene una
etapa de transición entre estos paradigmas de la programación: programación imperativa/OOP y la programación
funcional.
Como nota histórica escrita por el creador, es interesante leer Una breve historia de Scala (A Brief History of Scala
http://www.artima.com/weblogs/viewpost.jsp?thread=163733). Recordemos que Martin Odersky fue alumno de
Niklaus Wirth y que en ese tiempo concibió entre otros los lenguajes de programación Algol W, Pascal, Modula,
Modula-2 y Oberon.
En un párrafo podemos resumir, Scala es un lenguaje multi-paradigma diseñado para expresar patrones comunes
de programación en forma concisa, elegante y con tipos seguros.
Sin embargo, estas características se tienen por todos lados y no son atractivas para que un programador Java,
C++, o programador en cualquier otro lenguaje piense en aprender Scala.
Hay otras características que tal vez podrían ser atractivas para programadores, ya que hoy Scala se ejecuta en el
sistema operativo Android para teléfonos inteligentes y es compatible desde su concepción con todos los ambientes
Java y se ejecuta en una Máquina Virtual Java (JVM).
Página
Recordemos el lanzamiento oficial de Java 8 SE hace un año, el 20140318. Leemos de la documentación Java
Oracle (http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html)
1
Otra característica de Scala es su metodología para ofrecer mecanismos de programación funcional, que hasta la
versión 8 de Java con la introducción de EXPRESIONES LAMBDA ya se tienen también para Java SE 8.
¿Por qué hoy me debo interesar en el lenguaje Scala?
“Lambda expressions are a new and important feature included in Java SE 8. They provide a clear and concise way
to represent one method interface using an expression. Lambda expressions also improve the Collection libraries
making it easier to iterate through, filter, and extract data from a Collection. In addition, new concurrency features
improve performance in multicore environments.”
Las expresiones lambda son una nueva e importante característica incluidas en Java SE 8. Proporcionan una
manera clara y concisa para representar una interfaz con un solo método utilizando una expresión. Las expresiones
lambda también mejoran las bibliotecas del manejo de una Colección (Collection libraries) haciendo más fácil el
recorrer, filtrar y extraer datos de una colección. Además, las nuevas características de concurrencia a mejorar el
rendimiento en entornos multi-núcleo (multicore environments).
Hoy, Java 8 SE está enfocándose a dos aspectos ESTRATEGICOS de las características de importancia de Scala
y que son características relevantes desde hace varios lustros como:
1) COLECCIONES. Manejo eficiente y sencillo de GRUPOS DE DATOS en donde se realiza una misma acción
en cada uno de los elementos del grupo. Esto es lo que se denomina genéricamente COLECCIÓN.
2) COMPUTO DISTRIBUIDO EN MULTI NUCLEOS. Mecanismos eficientes y sencillos para ambientes
modernos de equipos físicos con un gran número de núcleos (cores) y la programación concurrente con
mecanismos más eficientes como actores en vez solo de un concepto NO adecuado, como los son hoy los
hilos (THREADs), que constituyen “dolores de cabeza” de los programadores de Java para aplicaciones de
ALTA DISPONIBILIDAD con gran demanda de recursos de cómputo.
3) EVALUACION PEREZOSA. La evaluación perezosa (del inglés lazy evaluation) o llamada por necesidad
es una estrategia de evaluación que retrasa el cálculo de una expresión hasta que su valor sea necesario, y
que también evita repetir la evaluación en caso de ser necesaria en posteriores ocasiones. Esta
compartición del cálculo puede reducir el tiempo de ejecución de ciertas funciones de forma exponencial,
comparado con otros tipos de evaluación. En Java 8 SE, se tiene para ciertas estructuras y aún no es
eficiente.
Página
“Parallel computing involves dividing a problem into subproblems, solving those problems simultaneously (in parallel,
with each subproblem running in a separate thread), and then combining the results of the solutions to the
subproblems. Java SE provides the fork/join framework which enables you to more easily implement parallel
computing in your applications”
2
En la documentación oficial Oracle Java 8 SE
(http://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html) podemos leer:
¿Por qué hoy me debo interesar en el lenguaje Scala?
La computación en paralelo consiste en dividir un problema en subproblemas, enseguida llevar a cabo la solución
de esos problemas simultáneamente (en paralelo, con cada subproblema se ejecuta en un hilo separado “separate
thread”), y luego para ofrecer una solución al problema inicial se combinan los resultados de las soluciones a los
subproblemas. Java SE ofrece el marco de referencia “fork/join framework “, que permite implementar con mayor
facilidad la computación paralela en sus aplicaciones
Sin embargo, esto aún no es una técnica madura como se comenta en el mismo sitio:
“One difficulty in implementing parallelism in applications that use collections is that collections are not thread-safe,
which means that multiple threads cannot manipulate a collection without introducing thread interference or memory
consistency errors”
Una de las dificultades en la aplicación de paralelismo en aplicaciones que utilizan las colecciones es que las
colecciones no son seguros para subprocesos con hilos (not thread-safe), lo que significa que varios subprocesos no
pueden manipular una colección sin introducir interferencias de hilos (thread interference) o errores de coherencia
de memoria (memory consistency errors)
El modelo de Actor para el soporte de procesos concurrentes en Scala.
Dentro de las características que promueven hoy el uso de Scala es el soporte en los procesos
distribuidos
tolerantes a fallas con grandes volúmenes de datos (BigData).
En Scala la concurrencia se ofrece por medio del Modelo de Actores (Actor Model). Este modelo
ofrece un enfoque de la concurrencia basada completamente en intercambio de mensajes entre los
procesos. (It provides an approach to concurrency that is entirely based on passing messages between
processes).
Página
3
El Modelo basado en Actores es una idea exitosa ya instrumentada en otros lenguajes por ejemplo en el
lenguaje Erlang. Recordemos que este es un lenguaje antiguo que sus inicios datan de 1982 y que según
se dice es homenaje a Agner Krarup Erlang (1878–1929), un matemático e ingeniero danés que trabajo
en problemas de telecomunicaciones y que fue creado por el Laboratorio de Cómputo de Ericsson para
desarrollar sistemas de alta disponibilidad y en tiempo real de los instrumentos físicos de la empresa
Ericsson. También se menciona que es un acrónimo de ERicsson LANGuage en retributo a la empresa
que lo creó.
¿Por qué hoy me debo interesar en el lenguaje Scala?
La instrumentación del Modelo de Actores en Scala fue escrita por Philipp Haller, y se incorporó en julio
de 2006 en la versión Scala 2.1.7, cambiándose en la versión 2.11.0 por la biblioteca Akka. Hoy en marzo
2015 se tiene la versión 2.11.6 del lenguaje Scala.
La biblioteca Akka es un conjunto de herramientas para la construcción de aplicaciones altamente
concurrentes, distribuidas controladas por mensajes en una Máquina Virtual Java (JVM) que son
tolerantes a fallas (resilientes).
El Modelo basado en Actores
Los actores son entidades concurrentes muy ligeras. Procesan mensajes de forma asíncrona utilizando
un ciclo de recepción basado en eventos (event-driven receive loop).
La coincidencia de patrones (Pattern matching) en los mensajes es una forma conveniente de expresar el
comportamiento de un actor. Elevan el nivel de abstracción y hacen que sea mucho más fácil de escribir,
probar, comprender y mantener sistemas concurrentes y / o distribuidos.
El programador se centra en el flujo de trabajo de ¿cómo? los mensajes fluyen en el sistema, en lugar de
dedicarse a generar primitivas de bajo nivel de Entrada/Salida (I/O) como hilos (threads) , bloqueos o
cerraduras (locks) y los enchufes de conexión (socket) con puertos. Es decir, el programador se concentra
en el QUE, dejando al modelo de Actores con Scala el COMO.
El mundo Apache Spark BigData y los lenguajes de programación para
procesos distribuidos tolerante a fallas con grandes volúmenes de
datos (BigData)
Página
En estos ambientes se tenían interfaces de programación en Java y se desarrollaron una gran diversidad de sistema
alrededor de Apache HDFS/MapReduce conocido como el ecosistema Hadoop.
4
Hoy en los ámbitos del desarrollo de aplicaciones distribuidas tolerantes a fallas para manejo de grandes volúmenes
de datos, conocido como mundo BigData, se tienen desde hace más de 10 años una gran variedad de metodologías
como Apache Hadoop HDFS (Hadoop Distributed File System) con el marco de referencia Mapeo/Reducción
(Map/Reduce framework).
¿Por qué hoy me debo interesar en el lenguaje Scala?
En los años 2008 y con la diversidad de aplicaciones que se empezaron a utilizar con Apache HDFS/MapReduce, se
inician un nuevos retos que no se facilitaba su programación o que tal vez que su instrumentación era demasiado
laboriosa y en ocasiones sin ofrecer los niveles de servicio esperados.
En este contexto surge en 2008 una alternativa en la Universidad de Berkeley en California E.U.A., en donde se
desarrolla un nuevo paradigma denominado SPARK que utiliza como lenguaje nativo, el lenguaje de programación
Scala.
Cabe mencionar que en el ambiente Spark también ofrece Interfaces de Programación (API) en Java y Python. Sin
embargo, todos los adelantos y nuevas versiones del ambiente Spark siempre se ofrecen en Scala en donde se
tiene un óptimo desempeño.
Este nuevo enfoque da origen a una nueva rama de las TI que se enfoca en Procesos Analíticos de Sistemas que
generan Grandes Volúmenes de Datos que sean distribuidos y tolerante a fallas.
En este contexto el lenguaje Scala, que existe desde hace varios lustros tiene un nuevo impulso y hoy en día es un
lenguaje necesario para la instrumentación de mecanismos para el manejo de grandes volúmenes de datos.
En el lenguaje Scala una gran característica es su manejo eficiente de Colecciones y así mismo sus directivas para
PARALELIZAR tareas, además de sus mecanismos para crear sistemas concurrentes con el Modelo de Actores de
Akka.
Por todas estas razones son de relevancia en el por qué hoy me debo interesar en el lenguaje Scala!!!
Página
5
A sus teclados mis valientes para Scalar Montañas de Datos con Spark!!!