Lenguajes Basados en Scripts (LBS) - Introducción Introducción a los Lenguajes Basados en Scripts Caleta Olivia, Santa Cruz Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Organización del contenido de la Asignatura Principales Temas Perspectiva general de Lenguajes Basados en Scripts (LBS) Conceptos de Compiladores e Intérpretes (relación con los LBS) Desarrollo histórico y actual Ejemplo de un LBS (Python): profundizaremos en varios aspectos de este lenguaje Análisis comparativo de Python con otros LBS Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Organización del contenido de la Asignatura Teorı́as - Prácticos - Evaluación Primer encuentro: Semana del 13 al 17 de mayo. Clases teórico-prácticas. Desarrollo de ejercicios en laboratorio (bajo linux principalmente) Segundo encuentro: Fecha a definir. Similar al primer encuentro, pero haciendo énfasis en la parte de laboratorio. Evaluación: un mini-proyecto de una aplicación sencilla que se pueda desarrollar antes de las vacaciones de julio y cerrar la materia para esa fecha. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Lenguajes Basados en Scripts: perspectiva general Lenguajes de programación tradicionales vs LBS Los lenguajes de programación tradicionales están destinados principalmente para la construcción de aplicaciones auto-contenidas: Programas que aceptan una suerte entrada, la procesan de una manera bien entendida y finalmente generan una salida apropiada. Sin embargo, ... muchos de los usos actuales en diferentes entornos, requieren la coordinación de múltiples programas. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Lenguajes Basados en Scripts: perspectiva general Lenguajes de programación tradicionales vs LBS Ejemplo de múltiples programas: un gran sistema de liquidación de haberes. Existen diferentes fuentes de obtención de datos. Ejecución de miles de consultas a BDs, considerar una gran cantidad de reglas legales e institucionales y crear varios reportes en papel para mantener registro, auditorı́a y otros vinculados a pagos de impuestos. Comunicación con servidores (tal vez remotos) para depósitos on-line, retención de impuestos, seguro médico, aportes jubilatorios, etc. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Múltiples programas, necesidad de coordinación Consideraciones generales Las tareas mencionadas anteriormente (dadas a modo de ejemplo) podrı́an involucrar una gran cantidad de programas ejecutados en forma separada. La coordinación entre estos programas requerirá por lo tanto verificaciones de datos, condicionales, iteraciones, variables y tipos, subrutinas y abstracciones. Todo lo anterior, tiene la misma filosofı́a de la lógica seguida provista por un lenguaje convencional para desarrollar aplicaciones auto-contenidas. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Múltiples programas, necesidad de coordinación Visión global / Coordinación Ap. C++ Procesa Datos Ap. en C Generador Datos Ap. Java Generador de Reportes Interacción de comandos del SO (shell) Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Múltiples programas, necesidad de coordinación Visión global / tipificación 1000 LBS Sentencias/Intrucciones Visual Basic Perl/Python Perl Java C++ C Assembly Leng. Programación Tradicionales 1 Fuerte Ninguno Grado de Tipificación Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Lenguajes Basados en Scripts: principales caracterı́sticas Interpretados (en contra-posición a los lenguajes compilados) En general, débilmente tipados (tipificados) Por lo tanto, ... muy flexibles, aunque suelen ser menos eficientes en la ejecución Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Lenguajes Basados en Scripts: perspectiva histórica Algunos aspectos de sus usos iniciales UNIX ... administración de sistemas, ejecución de tareas en por tanda (batch) Procesamiento de texto, comandos, etc. Web, etc. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción LBS: Caracterı́sticas comunes Algunos aspectos de sus usos iniciales Procesamiento por tandas (batch) e interactivo Economı́a en la expresividad Sin declaraciones/reglas de alcance simple Tipificación dinámica flexible Facilidad de acceso a otros programas Manipulación sofisticada de cadenas y de apareamiento de patrones Tipos de datos de alto nivel (conjuntos, diccionarios, listas, etc.) Analizaremos en detalle a algunos de estos puntos a continuación. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Aspectos principales de los LBS (Economı́a expresibilidad) Java class Hello { public static void main(String[ ] args) { System.out.println(”Hello, world!”); } } Ada with ada.text IO; use ada.text IO; procedure hello is begin put line(”Hello, world!”); end hello; Perl, Python, o Ruby print ”Hello, world!\n” Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Aspectos principales de los LBS (Procesamiento por tandas (batch) e interactivo) Sólo unos pocos LBS (e.g., Perl) usan compiladores ”just-in-time”que leen todo el código antes de producir una salida, pero ... Para la mayorı́a de los LBS, se realiza el análisis de la entrada (código) linea-por-linea, lo cual permite realizar pruebas en forma interactiva, o bien generando un archivo de texto con las lineas de comando que conformarán el programa. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Aspectos principales de los LBS (Sin Declaraciones/Reglas de alcance simple) Algunos aspectos relevantes En los LBS las declaraciones son escasas o nulas y proveen reglas simples que gobiernan el alcance de los identificadores (recordemos el concepto de alcance!) Por ejemplo, en Perl, cada identificador es global por omisión (aunque hay opciones para limitar el alcance) En otros lenguajes (e.g., PHP y Tcl), cada cosa es local por omisión (un objeto global debe ser explı́citmante importado) Python adopta la regla: .a una variable que se le asigna un valor es local al bloque donde aparece dicha asignación”. Aunque se puede cambiar esta regla con una sintaxis especial (veremos los detalles más adelante). Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Aspectos principales de los LBS (Tipificación dinámica flexible) Dado la falta de declaraciones, muchos LBS incorporan tipificación dinámica En algunos lenguajes el tipo de la variable es chequeada inmediatamente antes de su uso: e.g., PHP, Python, Ruby, y Scheme. En otros, el tipo de una variable (por ende su valor) será interpretado de manera diferente según el contexto: e.g., Rexx, Perl, y Tcl. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Aspectos principales de los LBS (Tipificación dinámica flexible) Ejemplo en Perl $a = ”4”; print $a . 3 . ”\n”; # ’.’ es la concatenación print $a + 3 . ”\n”; # ’+’ es la suma ... Dará la siguiente salida: 43 7 La interpretación de contextual es similar a la de coerción, excepto que no existe naturalmente el tipo al cual el objeto debe ser convertido. De hecho podrı́a haber varias interpretaciones igualmente naturales Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Aspectos principales de los LBS (Fácil acceso a otros programas) El acceso a otros programas puede ser realizado desde un programa escrito en un lenguajes tradicional, pero a través de un LBS: Los requerimientos para realizar el acceso es fundamental e incluye soporte directo para realizarlo Por ejemplo, Perl provee más de 100 comandos especı́ficos (built-in) para acceder a funciones del SO: e.g., E/S, manipulación de archivos y directorios, manejo de procesos, y muchas mas. Los comandos descriptos anteriormente, son por cierto, mucho más fáciles de usar desde Perl que en lenguajes tipo C a través de bibliotecas ad-hoc. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Aspectos principales de los LBS (Manipulación sofisticada de cadenas y de apareamiento de patrones) Facilidades avanzadas para: Procesamiento de texto y generación de reportes Manipulación de Entrada/Salida de programas externos Y además, facilidades para pattern matching, búsqueda y manipulación La mayorı́a de los comandos están basados en Expresiones Regulares Extendidas (repasemos el concepto de expresión regular). Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Aspectos principales de los LBS (Tipos de datos de alto nivel) Los LBS son ricos en: Conjuntos Diccionarios Listas Tuplas, etc. Por ejemplo: En muchos LBS es común poder indizar arreglos a través de cadenas de caracteres, lo que implica una implementación de tablas de hash y manejo de almacenamiento usando ”garbage collection”. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Dominios de Aplicación (general) Principales Ejemplos: Lenguaje de comandos (shell) Procesamiento de texto y Generación de Reportes Matemática y Estadı́stica Lenguajes de ”pegado”(GLUE) y de propósito general Extensión de Lenguajes Comentamos por ahora cada unos de los puntos anteriores y más adelante desarrollaremos en mayor o menor grado cada uno de ellos. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción LBS en la WWW WWW como ejemplo especial CGI (Common Gateway Interface) Scripts Embebidos en Servidores Scripts Embebidos en Clientes Applets de Java Otros: e.g., XML. Int. a los Leng. basados en de Scripts Lenguajes Basados en Scripts (LBS) - Introducción Fin de la Parte Introductoria General —Continuamos con el desarrollo de las áreas de aplicación Int. a los Leng. basados en de Scripts