1 Programación declarativa avanzada Lenguaje de programación Manuel David Romero Guerrero Uxio Prego Montón Francisco Tomás López de las Huertas Arance
2 ÍNDICE ¿QUÉ ES SCALA? HISTORIA DEMOSTRACIÓN CARACTERÍSTICAS SINTAXIS CONCURRENCIA PRESENTE FUTURO BIBLIOGRAFÍA SOBRE SCALA Programación declarativa avanzada
3 ¿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
4 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
5 DEMOSTRACIÓN (I) Máquina Virtual Java Plataforma.Net
6 Programación declarativa avanzada DEMOSTRACIÓN (II) Directa Plugins Frameworks Eclipse Intellij Netbeans
7 Programación declarativa avanzada DEMOSTRACIÓN (III)
8 CARACTERÍSTICAS DEL LENGUAJE (I) Declarativo Perezoso No puro Aplicación parcial Plegado Filtrado Mapeado Patrones A varios niveles Programación declarativa avanzada
9 CARACTERÍSTICAS DEL LENGUAJE (II) Orientado a Objetos puro Objeto null Objeto Unit Tipificación Estático Fuerte Programación declarativa avanzada
10 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
11 CARACTERÍSTICAS DEL LENGUAJE (IV) Eficiente Integrable con XML Interoperabilidad Java .NET Programación declarativa avanzada
12 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
13 ALGO DE SINTAXIS (II) Tuplas Hasta de 22 elementos Programación declarativa avanzada
14 ALGO DE SINTAXIS (III) Perezoso Pero no puro! Programación declarativa avanzada
15 ALGO DE SINTAXIS (IV) Aplicación parcial modN se aplica parcialmente Programación declarativa avanzada
16 ALGO DE SINTAXIS (V) Mapeado Se presupone fib declarado previamente Programación declarativa avanzada
17 ALGO DE SINTAXIS (VI) Patrones Tradicionales Tipos existenciales Programación declarativa avanzada
18 ALGO DE SINTAXIS (VII) Orientación a objetos pura null Programación declarativa avanzada
19 ALGO DE SINTAXIS (VIII) Orientación a objetos pura null Programación declarativa avanzada
20 ALGO DE SINTAXIS (IX) Orientación a objetos pura Unit Programación declarativa avanzada
21 Lenguaje de alto nivel Expresividad Patrones Sentencia for comprensiva Para empezar… Compliquemoslo un poco más con un filtrado… ALGO DE SINTAXIS (X) Programación declarativa avanzada
22 Sentencia for comprensiva Permanencia: yield Ámbito expandido for generativo ALGO DE SINTAXIS (XI) Programación declarativa avanzada
23 Lenguaje de alto nivel Ligereza Concisión ALGO DE SINTAXIS (XII) Programación declarativa avanzada
24 Lenguaje de alto nivel Concisión Parámetros con valores por defecto ALGO DE SINTAXIS (XIII) Programación declarativa avanzada
25 Lenguaje de alto nivel Concisión Lambda ALGO DE SINTAXIS (XIV) Programación declarativa avanzada
26 Lenguaje de alto nivel Inteligencia Integración con XML ALGO DE SINTAXIS (XV) Programación declarativa avanzada
27 Interoperabilidad Java .NET ALGO DE SINTAXIS (XVI) Programación declarativa avanzada
28 Más cosas importantes Sentencia Selectiva Genericidad Tipos parametrizados ALGO DE SINTAXIS (XVII) Programación declarativa avanzada
29 Más cosas importantes Genericidad Mejora en las restricciones A, que hereda de B… B, del que heredada A… ALGO DE SINTAXIS (XVIII) Programación declarativa avanzada
30 Más cosas importantes Genericidad Proyección de tipos ALGO DE SINTAXIS (XIX) Programación declarativa avanzada
31 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 ALGO DE SINTAXIS (XX) Programación declarativa avanzada
32 Más cosas importantes Traits ALGO DE SINTAXIS (XXI) Programación declarativa avanzada
33 Más cosas importantes Paquetes “à la C#” ALGO DE SINTAXIS (XXII) Programación declarativa avanzada
34 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
35 CONCURRENCIA (II) Las dos operaciones principales que se pueden hacer con un actor es enviar y recibir un mensaje: Programación declarativa avanzada
36 CONCURRENCIA (III) Programación declarativa avanzada
37 CONCURRENCIA (IV) Programación declarativa avanzada
38 CONCURRENCIA (V) Programación declarativa avanzada
39 SCALA EN LAS EMPRESAS Électricité de France Twitter Xebia Sony Siemens Reaktor Programación declarativa avanzada
40 PRESENTE (I) Posición Abril 2010Lenguaje ProgramaciónÍndice Abril 2010 1C18.058% 2Java18.051% 3C++9.707% 4PHP9.662% 5(Visual) Basic6.392% 6C#4.435% 7Python4.205% 8Perl3.553% 9Delphi2.715% 10JavaScript2.469% 27Scala0.433% 40Caml/F#0.280% 43Prolog0.258% Programación declarativa avanzada
41 PRESENTE (II) Programación declarativa avanzada
42 FUTURO(I) Programación declarativa avanzada "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
43 FUTURO (II) The New Big Thing Programación declarativa avanzada Alto Nivel Multiparadigmático Ligero Elegante Seguro Orientado a Objetos Funcional Concurrente JVM y.Net Integrable con Java y XML Xquery y XPath Tipos estáticosInferencia de tipos
44 FUTURO (II) The New Big Thing Programación declarativa avanzada Escasa Documentación No está preparado para la producción Librerías estándar Sintaxis Compleja No tiene Patrocinador Corporativo
45 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
46 FUTURO (IV) Enseñanza y Aprendizaje Puristas FuncionalHaskell / F# ImperativoC / C++ Orientado a ObjetosJava / C# Constructivistas Programación como un todo Se recomienda por ser Interesante la combinación de paradigmas Programación declarativa avanzada
47 LIBROS SOBRE SCALA (I) Programming in Scala (Martin Odersky, Lex Spoon y Bill Venners – Noviembre 2008) Beginning Scala (David Pollak – Mayo 2009) Programación declarativa avanzada
48 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
49 LIBROS SOBRE SCALA (III) Steps in Scala (Christos KK Loverdos y Apostolos Syropoulos – Septiembre 2010) Programación declarativa avanzada