Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph.

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Advertisements

2. Manejo de memoria Manejo de memoria estática
Métodos y parámetros.
Metodología de programación paralela
Complejidad Computacional
LENGUAJES DE DESCRIPCION DE HARDWARE (HDL)
ESTRUCTURA DE DATOS Unidad 01 RECURSIVIDAD.
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
Programando con OpenMP*
generic constraint development environment
Funciones y recursividad
Programación Concurrente en Java
LOGROS DEL PERÍODO Utiliza de forma correcta las funciones para entrada y salida de datos en c++. Utiliza los elementos básicos de un programa en c++.
Programacion de Computadora Prof. Obadiah Oghoerore.
Informática I Código Semestre Para Ingeniería Electrónica e Ingeniería de Telecomunicaciones Profesor: Sebastián Isaza.
EJERCICIOS DE PROGRAMACION
Comparación entre ANSI C y Python
FUNCIONES EN C.
INFORMATICA I Funciones CLASE 13.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Tema 1. Introducción a la programación (Lenguaje java).
Tratamiento de listas en Java
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Subprogramas –Encabezamiento –Declaraciones –Cuerpo –Encabezamiento.
ESTRUCTURA DEL LENGUAJE C
ESTRUCTURAS DE SECUENCIA
SOBRECARGA DE FUNCIONES
Arreglos: Vectores en JAVA
Método en Java.
Recursión Se dice que un método es recursivo si forma parte de sí mismo o se define en función de sí mismo. La recursión es un medio particularmente poderoso.
Lenguajes de Programación Tema 4. Paradigma Orientado a Objetos Java 1.5 Pedro García López
Funciones “En C” Semestre de Otoño 2006 Claudio Gutiérrez-Soto.
1 Chapter 8 Scope Dale/Weems/Headington. 2 Tópicos del Capítulo 8 l Local Scope vs. Global Scope of an Identifier l Detailed Scope Rules to Determine.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Funciones en lenguaje C
FUNCIONES EN C.
El lenguaje de programación C - Funciones -
Programación I Teoría VI: Recursividad

Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
Estructuras de Datos y Algoritmos TDA LISTA. Metáfora del TDA (repaso) Conjunto de operaciones forman una pared forman una interfase entre los programas.
0. Desarrollo de Programas: técnica del refinamiento.
Unidad I Java y C++ : Similitudes y diferencias
Public class MiClase { public static int tmp = 123; // miembro variable public static final double PI = ;// miembro constante public float.
Tema 9 Estructuras.
MIPS Intermedio.
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
Programación III Clase 07 Funciones.
FUNCIONES EN C.
Arreglos.
3.  Recursividad.
El lenguaje de programación C - Identificadores y variables – Isidro González Caballero ( Introducción.
Introducción a la Programación “El lenguaje C” Manuel Crisosto M., Claudio Gutiérrez S., Christian Vidal C.
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Trazado. 1 Intercambio sin error #include void intercambio(int *, int *); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(&a,&b);
TÉCNICAS DE PROGRAMACIÓN Lenguaje C
INTRODUCCIÓN AL LENGUAJE C++. Instrucciones Temas.
LENGUAJE “C” Programación.
Entrada y Salida ES.leerChar (); ES.leerEntero (); ES.leerEnteroLargo (); ES.leerFloat (); ES.leerDouble (); System.out.print System.out.println.
LENGUAJE “C” Programación.
Arreglos Ejemplo paso a paso. Planteamiento Como estudiante de ingeniería, quieres usar tus habilidades de programador para llevar un registro de tus.
Fundamentos de Ingeniería de Software Facultad de Ingenieria Universidad Distrital Francisco José de Caldas PROGRAMACION ORIENTADA A OBJETOS Asignatura:
INS-204 Fundamentos de Programacion notas de clase, objetivo, programar en Python con nivel medio de destreza.
2012-BM5A. Unos tips antes de empezar: C# es Case Sensitive (sensible a mayúsculas) Pepe ≠ pepe ≠ pEpE Las asignaciones se hacen con “=” y las comparaciones.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
BDLV #225 Programación distribuida en Erlang Aureliano Calvo.
Introduction a la Programacion
ESTRUCTURAS DE CONTROL REPETITIVAS
Javascript.
PROGRAMANDO EN C Estructura de un programa. 1 variables globales main(){ variables locales secuencia de sentencias } f1(){ variables locales secuencia.
Transcripción de la presentación:

Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph

Program Slicing [Mark D. Weiser (1981)] Paradigma Imperativo CONSISTE EN: Obtener la parte del programa (slice) que influencia o es influenciado por un punto de interés (slicing criterion) int i; int sum = 0; int product = 1; for (i = 1; i < N; i++) { sum = sum + i; product = product * i; } write(sum); write(product); Ejemplo: int i; int sum = 0; int product = 1; for (i = 1; i < N; i++) { sum = sum + i; product = product * i; } write(sum); write(product);

Program Slicing [Mark D. Weiser (1981)] Paradigma Imperativo DOS FASES: Generar el System Dependence Graph (SDG) [Horwitz et al. (1990)] Recorrer el grafo desde un punto de interés (slicing criterion) entry main sum = 0 i = 1 while i < 11 print sum print i call add a in = sum b in = i sum = ret entry add a = a in b = b in ret = result result = a + b call add a in = i b in = 1 i = ret static void main() { int i = 1; int sum = 0; while (I < 11) { sum = add(sum, i); i = add(i, 1); } printf("sum = %d\n", sum); printf("i = %d\n", i); } static int add(int a, int b) { return a + b; } static void main() { int i = 1; int sum = 0; while (I < 11) { sum = add(sum, i); i = add(i, 1); } printf(“sum = %d\n”, sum); printf("i = %d\n", i); } static int add(int a, int b) { return a + b; }

Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph

Erlang es un lenguaje sencillo y eficiente que fue diseñado para la programación concurrente, en tiempo real y para sistemas distribuidos tolerantes a fallos. El subconjunto secuencial de Erlang es un lenguaje funcional, con evaluación estricta, asignación única y tipado dinámico. main() -> Sum = 0, I = 0, {Res, _} = while(Sum, I, 11), Res. while(Sum, I, Top) -> if I /= Top -> NSum = add(Sum, I), NI = (fun (Z) -> add(Z, 1) end)(I), while(NSum, NI, Top); I == Top -> {Sum, Top} end. add(A, 0) -> A; add(A, B) -> A + B.

Algunas características de Erlang: No contiene bucles. Los bucles se consiguen mediante la recursión. Las variables sólo pueden asignarse una vez. El Pattern Matching se usa para seleccionar una de las clausulas de una función. Funciones de orden superior, list comprehensions, funciones anónimas y otros constructores sintácticos no presentes en la programación imperativa. main() -> Sum = 0, I = 0, {Res, _} = while(Sum, I, 11), Res. while(Sum, I, Top) -> if I /= Top -> NSum = add(Sum, I), NI = (fun (Z) -> add(Z, 1) end)(I), while(NSum, NI, Top); I == Top -> {Sum, Top} end. add(A, 0) -> A; add(A, B) -> A + B.

main() -> Sum = 0, I = 0, _ = while(undef, I, 11). Res. while(_, I, Top) -> if I /= Top -> NSum = add(Sum, I), NI = (fun (Z) -> add(Z, 1) end)(I), while(undef, NI, Top); I == Top -> {Sum, Top} end. add(_, 0) -> undef; add(A, B) -> A + B. main() -> Sum = 0, I = 0, {Res, _} = while(Sum, I, 11), Res. while(Sum, I, Top) -> if I /= Top -> NSum = add(Sum, I), NI = (fun (Z) -> add(Z, 1) end)(I), while(NSum, NI, Top); I == Top -> {Sum, Top} end. add(A, 0) -> A; add(A, B) -> A + B.

Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph

function in main/0 clause in (guards) [] body (op) + (op) + (term) X (term) X (term) 42 (term) 42 (op) {} (op) {} (term) X (term) X (term) 5 (term) 5 main() -> X = 5, X + 42, {X, 5, X + 42}. (op) + (op) + (term) X (term) X (term) 42 (term) 42 pm (term) X (term) X (term) 5 (term) 5

function in main/0 clause in (guards) [] body pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2 pm (term) X (term) X (op) {} (op) {} (term) A (term) A (term) B (term) B main() -> X = {1, 2}, {A, B} = X.

function in main/0 clause in (guards) [] body pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2 call (term) X (term) X (term) f (term) f main() -> X = {1, 2}, f(X). return function in f/1 clause in (guards) [] body (op) {} (op) {} (term) A (term) A (term) B (term) B (term) A (term) A f({A, B}) -> A.

Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph

function in main/0 clause in (guards) [] body pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2 pm (term) X (term) X (op) {} (op) {} (term) A (term) A (term) B (term) B main() -> X = {1, 2}, {A, B} = X. main() -> X = {1, 2}. {A, B} = X. main() -> X = {1, 2}. {A, B} = X.

function in main/0 clause in (guards) [] body pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2 pm (term) X (term) X (op) {} (op) {} (term) A (term) A (term) B (term) B main() -> X = {1, 2}, {A, B} = X. main() -> X = {1, 2}, _ = X. main() -> X = {1, 2}, _ = X.

function in main/0 clause in (guards) [] body pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2 pm (term) X (term) X (op) {} (op) {} (term) A (term) A (term) B (term) B main() -> X = {1, 2}, {A, B} = X. main() -> X = {1, 2}, {A, _} = X. main() -> X = {1, undef}, {A, _} = X.

Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph

function in main/0 clause in (guards) [] body pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2 pm (term) X (term) X (op) {} (op) {} (term) A (term) A (term) B (term) B main() -> X = {1, 2}, {A, B} = X. main() -> X = {1, undef}, {A, _} = X.

function in main/0 clause in (guards) [] body pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2 pm (term) X (term) X (op) {} (op) {} (term) A (term) A (term) B (term) B main() -> X = {1, 2}, {A, B} = X. main() -> X = {1, undef}, {A, _} = X.

function in main/0 clause in (guards) [] body pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2 call (term) X (term) X (term) f (term) f main() -> X = {1, 2}, f(X). return function in f/1 clause in (guards) [] body (op) {} (op) {} (term) A (term) A (term) B (term) B (term) A (term) A f({A, B}) -> A. main() -> X = {1, undef}, f(X). f({A, _}) -> A.

function in main/0 clause in (guards) [] body pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2 call (term) X (term) X (term) f (term) f main() -> X = {1, 2}, f(X). return function in f/1 clause in (guards) [] body (op) {} (op) {} (term) A (term) A (term) B (term) B (term) A (term) A f({A, B}) -> A. main() -> X = {1, undef}, f(X). f({A, _}) -> A.

function in main/0 clause in (guards) [] body pm (op) {} (op) {} (term) A (term) A (term) B (term) B call (term) f (term) f main() -> {A, B} = f(). return function in f/0 clause in (guards) [] body (term) X (term) X f() -> X = {1, 2}, X. main() -> {A, _} = f(). f() -> X = {1, undef}, X. pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2

function in main/0 clause in (guards) [] body pm (op) {} (op) {} (term) A (term) A (term) B (term) B call (term) f (term) f main() -> {A, B} = f(). return function in f/0 clause in (guards) [] body (term) X (term) X f() -> X = {1, 2}, X. main() -> {A, _} = f(). f() -> X = {1, undef}, X. pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2

Introducción Program Slicing Pattern Matching Problema: Pérdida de precisión Solución Conclusiones Peculiaridades de Erlang Erlang Dependence Graph

Program Slicing con Pattern Matching Ampliación del Erlang Dependence Graph Nuevo algoritmo de Fragmentación Mejora de la precisión body pm (term) X (term) X (op) {} (op) {} (term) 1 (term) 1 (term) 2 (term) 2 pm (term) X (term) X (op) {} (op) {} (term) A (term) A (term) B (term) B main() -> X = {1, 2}, {A, B} = X.