Download Scala
Document related concepts
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