Download Scala

Document related concepts

Mercury (lenguaje) wikipedia , lookup

Philip Wadler wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Dylan (lenguaje de programación) wikipedia , lookup

Ocaml wikipedia , lookup

Transcript
Lenguaje de programación
Manuel David Romero Guerrero
Uxio Prego Montón
Francisco Tomás López de las Huertas Arance
Programación declarativa avanzada
ÍNDICE









¿QUÉ ES SCALA?
HISTORIA
DEMOSTRACIÓN
CARACTERÍSTICAS
SINTAXIS
CONCURRENCIA
PRESENTE
FUTURO
BIBLIOGRAFÍA SOBRE SCALA
Programación declarativa avanzada
¿QUÉ ES SCALA?




Es un lenguaje de programación de propósito general diseñado para
expresar patrones comunes de programación de forma concisa y
elegante.
Se integran las características de los lenguajes orientados
a objetos y funcional.
Scala no es una extensión de Java, pero es totalmente interoperable
con él.
Scala se traduce a bytecodes Java y la eficiencia de los programas
compilados por lo general es igual que Java.
Programación declarativa avanzada
HISTORIA



Scala fue diseñado por Martin Odersky y su grupo de la Escuela
Politécnica Federal de Lausana (Suiza).
Odersky tenía como objetivo combinar
la programación funcional y la
programación orientada a objetos.
Se inició en 2001 y la primera
versión que se hizo pública fue en
2003. En 2006, se lanzó una segunda
versión conocida como Scala v2.0.
Programación declarativa avanzada
DEMOSTRACIÓN (I)
Java
Máquina Virtual
Plataforma .Net
Programación declarativa avanzada
DEMOSTRACIÓN (II)



Directa
Plugins
•
Eclipse
•
Intellij
•
Netbeans
Frameworks
Programación declarativa avanzada
DEMOSTRACIÓN (III)
Programación declarativa avanzada
CARACTERÍSTICAS DEL LENGUAJE (I)

Declarativo
 Perezoso
 No
puro
 Aplicación
parcial
 Plegado
 Filtrado
 Mapeado
 Patrones
A
varios niveles
Programación declarativa avanzada
CARACTERÍSTICAS DEL LENGUAJE (II)

Orientado a Objetos puro
 Objeto
null
 Objeto Unit

Tipificación
 Estático
 Fuerte
Programación declarativa avanzada
CARACTERÍSTICAS DEL LENGUAJE (III)

Lenguaje de alto nivel
 Expresividad
 Patrones
 Sentencia

for comprensiva
Yield
 Soporte
nativo de expresiones regulares
 Ligereza
 Concisión
 Inteligencia
Programación declarativa avanzada
CARACTERÍSTICAS DEL LENGUAJE (IV)



Eficiente
Integrable con XML
Interoperabilidad
 Java
 .NET
Programación declarativa avanzada
ALGO DE SINTAXIS (I)

Tipos por defecto
 Byte,
de -2^7 a 2^7-1
 Char, de 0 a 2^16-1
 Short, de -2^15 a 2^15-1
 Int, de -2^31 a 2^31-1
 Long, de -2^63 a 2^63-1
 Float y Double, según el estándar IEEE754
Programación declarativa avanzada
ALGO DE SINTAXIS (II)

Tuplas
 Hasta
de 22 elementos
Programación declarativa avanzada
ALGO DE SINTAXIS (III)

Perezoso
 Pero
no puro!
Programación declarativa avanzada
ALGO DE SINTAXIS (IV)

Aplicación parcial
 modN
se aplica parcialmente
Programación declarativa avanzada
ALGO DE SINTAXIS (V)

Mapeado

Se presupone fib declarado previamente
Programación declarativa avanzada
ALGO DE SINTAXIS (VI)

Patrones
 Tradicionales
 Tipos
existenciales
Programación declarativa avanzada
ALGO DE SINTAXIS (VII)

Orientación a objetos pura
 null
Programación declarativa avanzada
ALGO DE SINTAXIS (VIII)

Orientación a objetos pura
 null
Programación declarativa avanzada
ALGO DE SINTAXIS (IX)

Orientación a objetos pura
 Unit
Programación declarativa avanzada
ALGO DE SINTAXIS (X)

Lenguaje de alto nivel
 Expresividad
 Patrones
 Sentencia
for comprensiva

Para empezar…

Compliquemoslo un poco más con un filtrado…
Programación declarativa avanzada
ALGO DE SINTAXIS (XI)
 Sentencia
for comprensiva

Permanencia: yield

Ámbito expandido

for generativo
Programación declarativa avanzada
ALGO DE SINTAXIS (XII)

Lenguaje de alto nivel
 Ligereza
 Concisión
Programación declarativa avanzada
ALGO DE SINTAXIS (XIII)

Lenguaje de alto nivel
 Concisión
 Parámetros
con valores por defecto
Programación declarativa avanzada
ALGO DE SINTAXIS (XIV)

Lenguaje de alto nivel
 Concisión
 Lambda
Programación declarativa avanzada
ALGO DE SINTAXIS (XV)

Lenguaje de alto nivel
 Inteligencia

Integración con XML
Programación declarativa avanzada
ALGO DE SINTAXIS (XVI)

Interoperabilidad
 Java
 .NET
Programación declarativa avanzada
ALGO DE SINTAXIS (XVII)

Más cosas importantes
 Sentencia
Selectiva
 Genericidad
 Tipos
parametrizados
Programación declarativa avanzada
ALGO DE SINTAXIS (XVIII)

Más cosas importantes
 Genericidad
 Mejora


en las restricciones
A, que hereda de B…
B, del que heredada A…
Programación declarativa avanzada
ALGO DE SINTAXIS (XIX)

Más cosas importantes
 Genericidad
 Proyección
de tipos
Programación declarativa avanzada
ALGO DE SINTAXIS (XX)

Más cosas importantes
 Traits
 Conjunto
de métodos parametrizados
 ¿Cómo las interfaces de Java?

Parecido, pero no
 ¿Cómo

las clases abstractas de Java?
Sumamente parecido, pero tampoco
 ¿Y?

Herencia múltiple
Programación declarativa avanzada
ALGO DE SINTAXIS (XXI)

Más cosas importantes
 Traits
Programación declarativa avanzada
ALGO DE SINTAXIS (XXII)

Más cosas importantes
 Paquetes
“à la C#”
Programación declarativa avanzada
CONCURRENCIA (I)



El instrumento principal que proporciona Scala para la
concurrencia son los Actores (o actors).
Son procesos concurrentes que se comunican a través del
intercambio de mensajes.
La librería de Actors de Scala proporciona envío de
mensajes tanto asíncronos como síncronos.
Programación declarativa avanzada
CONCURRENCIA (II)
Las dos operaciones principales que se pueden
hacer con un actor es enviar y recibir un mensaje:
Programación declarativa avanzada
CONCURRENCIA (III)
Programación declarativa avanzada
CONCURRENCIA (IV)
Programación declarativa avanzada
CONCURRENCIA (V)
Programación declarativa avanzada
SCALA EN LAS EMPRESAS
Électricité de France
Twitter
Sony
Xebia
Reaktor
Siemens
Programación declarativa avanzada
PRESENTE (I)
Posición Abril 2010
1
2
3
4
5
6
7
8
9
10
Lenguaje Programación
C
Java
C++
PHP
(Visual) Basic
C#
Python
Perl
Delphi
JavaScript
Índice Abril 2010
18.058%
18.051%
9.707%
9.662%
6.392%
4.435%
4.205%
3.553%
2.715%
2.469%
27
Scala
0.433%
40
Caml/F#
0.280%
43
Prolog
0.258%
Programación declarativa avanzada
PRESENTE (II)
Programación declarativa avanzada
FUTURO(I)

"Creo que hay un mercado mundial de quizas unos cinco ordenadores."
THOMAS WATSON, chairman de IBM, 1943.

"Pero... para que nos van a servir?"
Ingeniero de la Advanced Computing Systems Division de IBM, 1968, hablando de los
microchips.

"¿Quien demonios va a querer oir hablar a los actores?"
H.M. WARNER, Warner Brothers, 1927.

Muchas veces la gente no sabe lo que quiere hasta que se lo enseñas.
Steve Jobs
Programación declarativa avanzada
FUTURO (II)

Alto Nivel
The New Big Thing
Funcional
Seguro
Multiparadigmático
Elegante
Concurrente
JVM y .Net
Orientado a Objetos
Integrable con Java y XML
Tipos estáticos
Inferencia de tipos
Xquery y XPath
Ligero
Programación declarativa avanzada
FUTURO (II)



Escasa Documentación
No está preparado para la producción
 Librerías


The New Big Thing
estándar
Sintaxis Compleja
No tiene Patrocinador Corporativo
Programación declarativa avanzada
FUTURO (III)

¿Imperativo o Funcional?
 El
Creador
 Los Usuarios

El continuador de Java
 Productividad
 Incorpora

vacíos de Java
Proyectos con varios lenguajes
 Concurrencia
Programación declarativa avanzada
FUTURO (IV)

Enseñanza y Aprendizaje
 Puristas



Funcional
Imperativo
Orientado a Objetos
Haskell / F#
C / C++
Java / C#
 Constructivistas
 Programación

como un todo
Se recomienda por ser Interesante la combinación
de paradigmas
Programación declarativa avanzada
LIBROS SOBRE SCALA (I)
Programming in Scala
Beginning Scala
(Martin Odersky, Lex Spoon y Bill
Venners – Noviembre 2008)
(David Pollak – Mayo
2009)
Programación declarativa avanzada
LIBROS SOBRE SCALA (II)
Programming Scala: Tackle Multi-Core
Complexity on the Java Virtual Machine
(Venkat Subramaniam – Julio 2009)
Programming Scala
(Alex Payne y Dean Wampler
– Septiembre 2009)
Programación declarativa avanzada
LIBROS SOBRE SCALA (III)
Steps in Scala
(Christos KK Loverdos y
Apostolos Syropoulos –
Septiembre 2010)
Programación declarativa avanzada