Glosario

Los términos principales del curso, ordenados por parte.

Repaso y entornos

Término English Definición
Modelo de entornos environment model Forma de predecir un programa dibujando sus marcos y lo que cada uno guarda.
Marco de llamada stack frame Espacio que crea cada llamada para sus parámetros y variables locales.
Pila stack Zona de memoria donde se apilan los marcos de las llamadas activas.
Alcance scope Parte del programa donde se puede usar un nombre.
Tiempo de vida lifetime Periodo en que un dato existe en la memoria.
Paso por valor pass by value La función recibe una copia del argumento.
Variable static static variable Variable local que conserva su valor entre llamadas; existe durante todo el programa.
Píxel pixel Cada punto de una imagen, con su valor de brillo.
PGM PGM Formato de archivo de texto para imágenes en escala de grises.
Filtro filter Función que produce una imagen nueva a partir de otra.

Memoria y abstracción

Término English Definición
Puntero pointer Variable que guarda una dirección de memoria.
Puntero nulo null pointer Puntero que no apunta a nada; se escribe NULL.
Aritmética de punteros pointer arithmetic Avanzar un puntero de elemento en elemento.
Paso por puntero pass by pointer La función recibe la dirección de un dato y puede cambiar el original.
Parámetro de salida output parameter Puntero por el que una función devuelve un resultado.
Puntero colgante dangling pointer Puntero a memoria que ya no existe o ya se liberó.
Heap heap Zona de memoria que el programa pide y libera de forma explícita.
Memoria dinámica dynamic memory Memoria reservada al ejecutar, con malloc, que dura hasta llamar a free.
Owner owner Parte del programa responsable de liberar un bloque de memoria.
Ownership ownership Relación entre un bloque de memoria y su owner.
Fuga de memoria memory leak Bloque reservado que ya nadie puede liberar.
Copia superficial shallow copy Copia que duplica los punteros, pero no lo apuntado.
Copia profunda deep copy Copia que también duplica lo apuntado.
Usar después de liberar use after free Acceder a un bloque después de free.
Liberar dos veces double free Llamar a free dos veces con el mismo bloque.
Valgrind valgrind Herramienta que ejecuta un programa y reporta errores de memoria y fugas.
Sanitizer sanitizer Herramienta del compilador que detecta errores al ejecutar, como ASan.
Abstracción abstraction Usar algo sabiendo qué hace, sin conocer cómo lo hace por dentro.
Interfaz interface Lo que un módulo promete a quien lo usa.
Implementación implementation Cómo un módulo cumple lo que promete.
Encabezado header Archivo .h con las declaraciones de la interfaz de un módulo.
Guarda de inclusión include guard Directivas que evitan que un encabezado se incluya dos veces.
Archivo objeto object file Resultado de compilar un .c, todavía sin enlazar.
Enlazador linker Programa que une archivos objeto en un ejecutable.
Preprocesador preprocessor Etapa que resuelve #include y #define antes de compilar.
Función de acceso accessor Función que da acceso a un campo de un tipo opaco.
Prueba por la interfaz interface test Prueba que usa solo lo que promete el encabezado.
Tipo opaco opaque type Tipo declarado en el encabezado cuyos campos solo conoce su .c.
Unión etiquetada tagged union struct con una etiqueta y una union; la etiqueta dice qué variante está activa.
Comportamiento indefinido undefined behavior Operación para la que el estándar de C no exige ningún resultado.
Variante variant Cada una de las formas que puede tomar una unión etiquetada.
Constructor constructor Función que crea un valor de un tipo y deja su estado válido.
Número mágico magic number Número en el código cuyo significado no se explica.
Promoción de enteros integer promotion Conversión automática a int de los enteros pequeños en una operación.
Relleno padding Bytes sin usar que el compilador deja dentro de un struct.
UBSan UBSan Sanitizer que detecta algunos casos de comportamiento indefinido.

Recursión

Término English Definición
Recursión recursion Resolver un problema usando la solución de problemas más pequeños del mismo tipo.
Caso base base case Caso que se resuelve sin otra llamada recursiva.
Salto de fe leap of faith Suponer que la llamada recursiva es correcta para razonar sobre el caso actual.
Inducción induction Demostrar un caso base y que cada caso se sigue del anterior.
Acumulador accumulator Parámetro que va guardando el resultado parcial de una recursión.
Ordenamiento por mezcla merge sort Ordenar dos mitades de forma recursiva y luego mezclarlas.
Recursión en árbol tree recursion Recursión en la que una llamada hace varias llamadas.
Stack overflow stack overflow Error por apilar más marcos de los que caben.
Flood fill flood fill Algoritmo que pinta una región conectada a partir de un punto.
Región region Conjunto de celdas conectadas que comparten un valor.
Memoización memoization Guardar los resultados ya calculados para no repetirlos.
Backtracking backtracking Búsqueda que prueba una elección, explora y la deshace si no funciona.
Árbol de decisiones decision tree Dibujo de las elecciones de una búsqueda: cada nodo es un estado y cada rama, una elección.
Permutación permutation Cada forma de ordenar un conjunto de elementos.
Subconjunto subset Parte de un conjunto, que puede ser vacía o el conjunto completo.
Poda pruning Dejar de explorar una rama que no puede llevar a una solución.
Puntero a función function pointer Puntero que guarda la dirección de una función.
Comparador comparator Función que dice en qué orden van dos elementos.
Clausura closure Función que lleva consigo datos de donde se creó. C no las tiene.
Contexto context Puntero void * con los datos que un callback necesita.
Tabla de funciones function table Arreglo de punteros a función, para elegir una operación por índice.
Callback callback Función que se pasa a otra para que esta la llame.

Un intérprete

Término English Definición
Intérprete interpreter Programa que ejecuta directamente programas de otro lenguaje.
Nodo, raíz, hoja node, root, leaf Cada elemento de un árbol; el nodo de arriba, y un nodo sin hijos.
Subárbol subtree Un nodo junto con todos sus descendientes.
Entorno environment Conjunto de marcos que dice qué valor tiene cada nombre.
Árbol de expresión expression tree Árbol cuyos nodos son operaciones y cuyas hojas son números o variables.
Instrucción statement Parte de un programa que hace algo, en vez de producir un valor.
Alcance dinámico dynamic scope Regla en que una función ve las variables de quien la llamó. Mini y C no la usan.
Token token Unidad mínima de un texto para un lenguaje, como un número o un símbolo.
Análisis léxico lexing Partir un texto en tokens.
Gramática grammar Reglas que dicen qué textos pertenecen a un lenguaje.
Precedencia precedence Regla que dice qué operador se aplica primero, como * antes que +.
Asociatividad associativity Regla que dice cómo se agrupan operadores iguales seguidos: 1 - 2 - 3 es (1 - 2) - 3.
Recursión por la izquierda left recursion Regla de gramática que empieza consigo misma; escrita tal cual, el parser nunca termina.
Gramática ambigua ambiguous grammar Gramática que permite más de un árbol para un mismo texto.
Palabra reservada keyword Nombre con un significado fijo en el lenguaje, que no se puede usar como variable.
Análisis sintáctico parsing Construir un árbol a partir de los tokens.
Parser descendente recursivo recursive descent parser Parser con una función por cada regla de la gramática.