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. |