Evaluacion minima teorica2 cpclp Flashcards
flashcards de repaso para la emt2 de Conceptos de Lenguajes de Programacion (2024) no le se a lo de usar unidades genéricas de parametro
¿Qué es una unidad?
una Unidad es una abstracción de una acción del programa, dependiendo del tipo de unidad puede estar representando una sentencia(aka procedimiento) o una operación(como una función)
En general se las llama rutinas de las cuales son procedimientos y funciones (estas ultimas devuelven un valor)
¿Para que se utiliza el nombre de una rutina?¿En que momentos se utiliza?
El nombre de una rutina es un string de caracteres que se usa para invocar a la rutina
Se utiliza:
-Cuando introducimos su declaración
-Cuando la invocamos
Nombre los atributos de una rutina
Nombre(declaración/invocación)
-Alcance(donde se conoce el identificador, ambiente de referencia de la rutina, que si global, local,etc)
-Tipo(dado por los parámetros y el valor de retorno. Signatura)
-Lvalor(relacionado a donde se almacena las sentencias en la memoria)
-Rvalor(relacionado al momento en que se hace referencia a la rutina)
¿Qué es el alcance, hasta donde se extiende?¿Que es la activación de una rutina?
El alcance es el rango de instrucciones donde se conoce el nombre.
El alcance se extiende desde el punto de su declaración hasta algún constructor de cierre
La activación es desde donde se puede invocar la rutina, esto es dentro del alcance de la rutina
¿Cómo esta compuesta una rutina?
Esta compuesta por un encabezado( es lo mismo que decir declaración) y un cuerpo
encabezado + cuerpo = definición
¿Cuándo un lenguaje permite manejar rutinas recursivas?
El lenguaje maneja rutinas recursivas si el lenguaje distingue la declaración y la definición de una rutina
¿Qué define el tipo de los parámetros y el tipo del valor de retorno?
el encabezado 😉
¿Cuándo un llamado a rutina es correcto?
Un llamado a una rutina es correcto si esta de acuerdo al tipo de la rutina.
¿Qué cosa permite especificar el tipo de una rutina?
La signatura
V o F
Un llamado a una rutina es correcta si esta de acuerdo al tipo de la rutina.
V
¿Qué es el l-valor en un rutina?
es el lugar en memoria en el que se almacena el cuerpo de la rutina
¿Qué es el r-valor de una rutina?
La llamada a la rutina causa la ejecución de su código, eso constituye su r-valor.
Puede ser estático( se llama de manera tradicional| función()) o dinámico( se llama a la función mediante una variable | varfun())
¿Qué son los parámetros formales?
Son los parámetros que aparecen en la declaración de la rutina
¿Qué son los parámetros reales?
Son los parametros que aparecen en la invocacion de la rutina
¿Cómo puede ser la comunicación entre rutinas?
-Mediante parámetros(es mejor esto)
-Ambiente no local(busca fuera de su scope la variable que le falte)
Que métodos de ligadura entre parámetros formales y reales hay?
-Método posicional:
Es cuando se ligan los parámetros de uno en uno( hay una variante que hace una combinación con valores por defecto )
-Método por nombre: se relacionan los parámetros por mismo nombre
V o F
Cada unidad va a generar su propio registro de activación
V
¿Qué es la instancia de una unidad?¿Como esta compuesta?
Es la representación de la rutina en ejecución
Esta compuesta por:
-Un segmento de código(C): donde se guardan las instrucciones, contenido fijo.
Se ubican en memoria de Código
-Un registro de activación(D):
donde se guardan los datos locales de la rutina, contenido cambiante.
Se ubican en memoria de Datos
¿Qué es la ip?
Es un puntero que señala a la instrucción que se esta ejecutando(direcciones de C)
¿Para que sirve el procesador abstracto?
sirve para comprender que efecto causan las instrucciones del lenguaje al ser ejecutadas
¿Cuales son las instrucciones del procesador abstracto?
-Set:setea valores en la memoria de datos(copia el valor de source en la direccion target), se puede combinar con E/S y admite expresiones
-Jump : la próxima instrucción a ejecutar será la indicada por el valor que se escriba al lado del jump(jumpt es igual pero salta solo si la expresión se evalúa como verdadera), admite direccionamiento indirecto
¿Qué es el punto de retorno?
es una pieza cambiante de información que debe ser salvada en el registro de activación de la unidad llamada.
unga unga unga unga( info que permite volver a la unidad que lo invoco a la unidad)
¿Qué ambientes de referencia existen?
-Ambiente local: variables locales, ligadas a los objetos almacenados en su registro de activación
-Ambiente no local: variables no locales, ligadas a objetos almacenados en los registros de activación de otras unidades
¿Qué estructuras/esquemas de ejecución de los lenguajes de programación hay?
-Estático
Todos los registros de activación cargados en la memoria, no permite recursión, usa C2
-Basado en pila
Registros de activación activos, permite recursión, permanente cambio en zona de datos, usa C5
-Dinámico
Todo el manejo se da en la HEAP, usa C6
Se diferencian en como manejan la zona de datos
Características de los lenguajes estáticos(lenguaje con estructura de ejecución estática)
-El espacio necesario para la ejecución se deduce del código
-Cargan todo en la memoria ni bien se carga y perdura hasta al final de la ejecución (registros de activación, variables)
-Toda variable que se utilice es estática
-La alocacion puede hacerse estáticamente
-No puede haber recursión
-Solo admite variables estáticas
-Utiliza C2
Características de los lenguajes basados en pila (lenguaje con estructura de ejecución basado en pila)
-El espacio se deduce del código
-Sigue una disciplina LIFO
-Las variables se alocan automáticamente y se desalocan cuando el alcance termina
-Se alocan y se desalocan los registros de activación durante la ejecución del programa
-Se utiliza una estructura de pila como modelo, esta no es parte de la semántica
-Utiliza C5
Características de los lenguajes dinámicos (lenguaje con estructura de ejecución dinámico)
-Lenguajes con impredecible uso de memoria
-Los datos son alocados dinámicamente solo cuando se los necesita durante la ejecución
-El programador puede crear objetos de dato en cualquier punto arbitrario durante la ejecución del programa
-Los datos se alocan en la zona de memoria heap
-No se pueden modelar con una pila
-Utiliza C6
Características de C1(lenguaje simple)
-Sentencias simples
-Tipos simples
-Sin funciones
-Datos estáticos de tamaño
-Un programa(una rutina main)
-E/S: get/print
*tipos simples-> enteros, reales, arreglos y estructuras
En sintesis:
-Programa sencillo sin bloques internos, solo código programa principal
-En zona de datos: SOLO datos locales
Características de C2
Características de C1+ rutinas internas(sin anidamiento y sin recursividad)+ ambiente de las rutinas internas
Programa=
-Datos globales
-Declaraciones de rutinas
-Rutina principal:
+Datos locales
+Se invoca automáticamente en ejecución
Características de C2’
El compilador no puede ligar variables locales o globales a direcciones absolutas
El linkeditor es el encargado de combinar los módulos y ligar la información faltante
Características C3
C3=C2 + RECURSIÓN Y VALOR DE RETORNO
Esquema basado en pila
* Rutinas con capacidad de llamarse a si mismas (recursión directa) o de llamar a otra rutina en forma recursiva (recursión indirecta).
* Rutinas con la capacidad de devolver valores, es decir, funciones.
¿Cuáles son los elementos de una registro de activación?
-HEADER:
Conformado por 2 partes, Current y Free
+Current:
Dirección base del registro de activación de la unidad que se esta ejecutando
+Free:
Próxima dirección libre
en la pila
-Punto de retorno:
La siguiente dirección a ejecutar después de que termine la subrutina
-Link estático:
Apunta al registro de activación de la unidad que estáticamente la contiene
-Link dinámico:
Contiene un puntero a la dirección base del registro de activación de la rutina llamadora
-Variables:
Las variables definidas dentro de la unidad
-Procedimientos o funciones:
Los procedimientos o funciones definidos dentro de la unidad
-Valor de retorno:
Al terminar una rutina se desaloca su registro de activación, por lo tanto la rutina llamante debe guardar en su registro de activación el valor de retorno de la rutina llamada
¿Qué es una variable estática?
Una variable estática es una variable que existe y se inicializa en tiempo de compilación y su valor persiste en memoria durante toda la ejecución del programa (puede durar mas que el propio programa)
¿Qué es una variable automática o semiestatica?
Una variable automática o semiestatica se declara dentro de un bloque y su ámbito de visibilidad se limita a ese bloque
¿Qué es una variable dinámica?
Una variable dinámica es una variable que se crea y se destruyen explícitamente en tiempo de ejecución. El valor de una variable dinámica puede cambiar a lo largo de la ejecución del programa. Utiliza la HEAP para alocarse
(-Los usan aquellos lenguajes que adoptan mas reglas dinámicas que estáticas
-Usan tipado dinámico y reglas de alcance dinámico
-Reglas de tipado dinámico y de alcance estático
-Las ligaduras se llevan a cabo en tiempo de ejecución
Que es una variable semidinamica?
Es un tipo de variable que una parte se guarda previamente en tiempo de compilación y en ejecución se determina su tamaño
¿Cuál es el funcionamiento de C3?
El registro de activación de cada unidad será de tamaño fijo y conocido, pero no se sabrá cuantas instancias de cada unidad se necesitarán durante la ejecución.
-Igual que en C2 el compilador puede ligar cada variable con su desplazamiento dentro del correspondiente registro de activación. El desplazamiento es estático(un ejemplo para aclarar, si tenemos un registro de activación X y tiene una variable Y en la posición 8, entonces, cuando se guarde las posiciones en memoria, si el reg de act X se guarda en la posición 2000, la var Y se guarda en la 2008, se guardan las relaciones de desplazamiento)
-La dirección donde se cargará el registro de activación es dinámica, por lo tanto la ligadura con las direcciones absolutas en la zona de Datos de la memoria solo puede hacerse en ejecución
-Cada nueva invocación aloca un nuevo registro de activación y se establecen las nuevas ligaduras entre el segmento de código y el nuevo registro de activación
-Las unidades pueden devolver valores y esos valores no deberían perderse (necesidad de valor de retorno)
-Cuando se termine la instancia actual, se debe liberar el espacio ocupado por él(necesidad de link dinámico, current y free)
¿Cuáles son los elementos de un registro de activación en C3?
-Valor de retorno
-Link dinámico
-Current
-Free
¿Qué es la cadena dinámica?
-Cadena de links dinámicos originada en la secuencia de registros de activación activos.
-Representa la secuencia dinámica de unidades activadas.
Características de C4
C3 + estructura de bloque posee las siguientes características
-Controla el alcance de las variables
-Define el tiempo de vida de las variables
-Divide el programa en unidades mas pequeñas
Los bloques pueden ser disjuntos (no tiene porción común) o unidades (un bloque esta completamente contenido en otro)
-Tiene c4’ y c4 ‘’
¿Qué permite C4’?
Permite que dentro de las sentencias compuestas aparezcan declaraciones locales