19 puntos por GN⁺ 2025-07-10 | 1 comentarios | Compartir por WhatsApp
  • En programación, la expresión "llamar" a una función tiene un origen similar a la idea de "solicitar" o "pedir" un libro en una biblioteca
  • En la computación temprana predominaba la tendencia de invocar o traer subrutinas desde una biblioteca
  • Fortran II introdujo la instrucción CALL, popularizando rápidamente la expresión "llamar una función"
  • Después, lenguajes como Algol y JOVIAL también adoptaron esto y empezaron a usar el sustantivo "call"
  • El significado de "call" se fue ampliando y consolidando gradualmente para abarcar antes, durante y después del control en tiempo de ejecución

¿Por qué los programadores dicen que una función se "llama" (call)?

  • En StackExchange hubo una pregunta sobre el origen de la expresión "llamar (call) a una función"
  • Hay varias metáforas, pero en realidad proviene del sentido de "call" como invocar o hacer venir algo
    • Igual que cuando en una biblioteca se "solicita" un libro, comenzó con la idea de "pedir" una subrutina para usarla
    • Un "call number" es la marca que indica la ubicación de un libro en la biblioteca

La historia de "call" en la terminología bibliotecaria

  • Según el OED, Melvil Dewey usó por primera vez "call number" en 1876 como término de bibliotecología
    • "Call number" es una notación usada para la ubicación de un libro o para solicitarlo
  • En el Library Journal de 1888 también se usaban cotidianamente términos como "call blank", "call slip" y "call number"
  • Según la explicación de Joudrey & Taylor, el nombre "call number" proviene del acto de pedir materiales en estanterías cerradas
    • Sistemas como el Cutter number se introdujeron con fines de clasificación

Los primeros usos de "call" en ciencias de la computación

  • En un artículo de John W. Mauchly de 1947 aparece un caso de uso de subrutinas "called in" desde una biblioteca de subrutinas
    • En el contexto de referenciarlas y usarlas rápidamente mediante un número registrado
  • Las rutinas ensambladoras de MANIAC II (1956) también aplicaban la idea de asignar un "call number" a cada subrutina para traerla cuando hiciera falta
    • En el lenguaje ensamblador real se hablaba de "transfer control"
  • En esa época se enfatizaba más la idea de traer fragmentos de código durante la compilación o el enlace que la de una "llamada" en tiempo de ejecución

La aparición de la instrucción CALL en los lenguajes de programación

  • Fortran II (1958) introdujo las instrucciones CALL y RETURN
    • La acción de "llamar" (call for) entregaba el control de ejecución a una subrutina
    • La instrucción CALL señalaba literalmente el acto sintáctico de "llamar"
  • Poco a poco empezó a mezclarse de forma ambigua la idea de transferir el control en tiempo de ejecución con la acción de "llamar" en la etapa de enlace o ensamblado

La ampliación y consolidación del significado de "call" en los años 60

  • En el diccionario de Sarbacher (1959), "call in" se define como el movimiento de control desde la rutina principal hacia una subrutina
    • También explica "call number" y "call word" como identificadores y hasta como código de llamada
  • En JOVIAL (1960) se usan oficialmente como sustantivos expresiones como "procedure call" y "calls"
    • Después se emplearon junto con significados en varias capas, como sitio de llamada, argumento y parámetro
  • Algol (1959~1960) también expresa el momento de la llamada de varias maneras: "procedure call", "called procedure" y "during the call"
    • En el reporte de Algol 60 de Peter Naur también aparece la distinción temporal entre "call for" y "during the call"
  • En Burroughs Algebraic Compiler (1961) aparece por primera vez con claridad la forma verbal "to call"
  • A partir de Corbató y otros (1963) se generaliza el uso moderno de "to call a subroutine"

Conclusión

  • La instrucción CALL X de Fortran II hizo que la expresión "call" se asentara para referirse a la llamada de funciones/subrutinas
    • Se inspiró en una idea previa del ámbito bibliotecario (llamar por número), pero en los lenguajes de programación amplió su significado
  • Después, distintos lenguajes como Algol y JOVIAL adoptaron términos como "call" y "call site"
  • Desde alrededor de 1961, la expresión "to call X" empezó a consolidarse en la documentación oficial y en la comunidad
  • Hoy, una llamada de función se refiere al conjunto de operaciones en que se transfiere temporalmente el control, se obtiene un resultado y luego se regresa, y 'call' se convirtió en el término estándar

1 comentarios

 
GN⁺ 2025-07-10
Opiniones de Hacker News
  • Grace Hopper explicó que el significado original de la palabra "call" (derivado de los call number usados para organizar materiales en bibliotecas físicas) también influyó en el nacimiento del término "compiler". A cada subrutina se le asignaba una call word, y la idea venía de construir un programa como si uno sacara materiales de una biblioteca y los combinara.
    • Yo uso estos términos directamente.
    • Hasta ahora por fin siento que las piezas del rompecabezas encajan. A los números de identificación del sistema decimal Dewey se les llamaba call number.
  • Creo que la bibliotecología ha contribuido al campo de la computación moderna mucho más de lo que imaginamos. Por ejemplo, al explicar índices de bases de datos, a menudo saco la imagen del catálogo de fichas. Cuando ven cajones de madera donde se puede buscar por autor, sistema decimal Dewey o tema, todos lo entienden de inmediato. Referencia sobre el concepto de catálogo bibliotecario
    • Soy de la generación que alcanzó a usar cajones de madera y diccionarios en papel en la biblioteca local. Hace 25 años, cuando conocí por primera vez los hash maps o IDictionary, esta imagen me ayudó a entenderlos de inmediato. Pero hoy esta metáfora ya no ayuda tanto. A menudo he tenido que explicar cómo eran realmente un catálogo de fichas o un diccionario, y la gente joven dice: "ah, entonces eso era un hash map analógico".
    • Hasta hace unos meses me preguntaba por qué el ancho estándar de una terminal es de 80 caracteres. Pensaba que era por el tamaño de las pantallas de las PC antiguas. Pero resulta que era porque las tarjetas perforadas tenían 80 caracteres, y el origen de las tarjetas perforadas al final también eran las fichas de índice. Fue otra ocasión para rendir homenaje a la bibliotecología. Es una historia de la computación parecida a eso de que el ancho de los autos viene del ancho de dos traseros de caballo.
    • Hace 1 o 2 años expliqué una base de datos comparándola con un cajón de madera polvoriento en una esquina de la biblioteca. El contexto y los conocimientos previos de verdad importan.
    • Siempre pensé que el término "index" en computación venía originalmente del índice al final de los libros. Nunca lo había relacionado con las index cards.
    • Puede que la gente joven de hoy nunca haya visto un catálogo de fichas. Yo explico que un disco duro es una lista de 0 y 1, y hago que deduzcan que hace falta estructura para encontrar algo.
  • Soy finlandés. En finés, la palabra correspondiente a "llamar una función" es "kutsua", que al retraducirla al inglés sería "invite" o "summon". O sea, se usa en el sentido de "llamar", como cuando una mamá llama a su hijo desde el patio, no en el sentido de call de "Joe llama por teléfono a su amigo" o "¿cómo se llama este color?". Solo quería compartirlo.
    • En alemán se usa "aufrufen", que traducido por partes sería algo así como "hacer venir llamando". Si se usa con objeto directo, como cuando en la escuela llaman el nombre de un alumno, significa llamar a alguien por su nombre o número. La palabra para llamar por teléfono es "anrufen".
    • "Summon" a veces también parece adecuado cuando invocas un horror ocultista en tu código. Y a veces siento que "invite" podría ser como invitar a un demonio o a un vampiro.
    • En Noruega se usa "funksjonskall", que traducido literalmente es function call. Simplemente tiene el sentido de llamar algo.
    • En ruso es parecido: al retraducirlo puede ser "llamar por teléfono", "invocar" o "invitar".
    • No viene exactamente al tema, pero si estás en Helsinki, estaría bueno que te sumes al meetup local de Hacker News.
  • En el libro de Wilkes, Wheeler, Gill (1951) se usa la expresión "call in" para ejecutar subrutinas. En la página 31 dice: "si una subrutina no es llamada correctamente, la máquina se detiene" y "una subrutina puede llamarse libremente desde cualquier programa". En esta presentación también puede verse que en un informe inicial del EDSAC de 1950 aparece la anotación "call in auxiliary sub-routine".
  • A veces también se usan "invoke" o "execute" en lugar de "call", pero son términos más largos y generales. Sin embargo, noto mucho entre estudiantes de CS no angloparlantes que usan mal "call" en contextos como "calling a command" o "calling a button", y eso me molesta un poco.
    • "Invoke" viene del latín invocō, invocāre (hacer surgir llamando), así que no está mal, solo es una forma abreviada.
    • El ejemplo incorrecto que más escucho (o más me molesta) es usarlo con "return". He oído cosas como: "ahora llamas la palabra clave return y la función termina".
    • En C# se usa mucho "Invoke" en cosas como delegados o reflection, mientras que en el depurador se usa "Call Stack".
    • En mi experiencia, incluso quienes tienen el idioma como lengua materna y recién empiezan a programar usan expresiones parecidas. Describen como "command" cosas que no son comandos.
    • A veces los principiantes van todavía más lejos y llaman "command" a un statement o incluso a toda una declaración de función.
  • No es una teoría científica, solo una observación. Los términos nuevos se difunden bien cuando tienen algún punto de conexión. Por lo general son cortos y permiten asociar o recordar fácilmente un significado o una imagen, así que se propagan rápido. A veces requieren explicación, pero incluso solo por el contexto la gente los aprende y los transmite. Algo así pasa con palabras como "salty", y con call también. Es corto, se usa mucho y call up, call in, summon, invoke (con una vibra como de conjuro) encajan bien en sensación. En esa época el teléfono también era una tecnología nueva y fascinante, así que seguramente fue fácil conectar la imagen de llamar a otra persona por teléfono con la de llamar una subrutina. Términos como "jump" ya se usaban para otras cosas, así que creo que eso ayudó a que call se popularizara.
    • Para mí, "salty" casi no tiene que ver con lágrimas. En mi forma de hablar, si alguien está "salty" no significa que esté triste, sino irritado o molesto. O sea, la metáfora viene de algo fuerte y picante como la sal. En otras palabras, aunque la gente lo interprete distinto, la metáfora sigue funcionando, y eso muestra cómo call pudo difundirse de esa manera.
  • Nunca había pensado que en la frase "...las cosas complejas deben estar en la library, es decir, en un conjunto de cintas magnéticas (donde se almacenan problemas valiosos escritos previamente)" la palabra library realmente viniera de una estantería de materiales etiquetados.
  • Siempre pensé que una función no necesitaba realmente una palabra clave call. Una función normalmente devuelve un valor, así que basta con usarla dentro de una asignación. Quien sí necesitaba call era la subroutine (en esencia, una dirección o etiqueta con nombre). De hecho, uno también puede saltar directamente a esa dirección con GOTO y luego volver. La palabra clave CALL hace que el flujo de ejecución se vea más claro. Es como si el jefe le encargara las cuentas a Sam y luego le pidiera a Bill imprimir el reporte TPS. Al final todo se convirtió en funciones y a las subrutinas les pusieron el apodo de "spaghetti". Pero me pregunto por qué existen los términos routine (programa) y subroutine.
    • Según un documento de 1947 de Goldstine y von Neumann, el origen de la palabra routine se explica explícitamente así: "Llamamos routine a una secuencia codificada de instrucciones para un problema" (referencia).
  • En música también existe la expresión "call and response". Creo que conecta bien con la idea de valor de retorno.
  • Algol 60 usaba el término "call" no solo para funciones sino también para parámetros. Por ejemplo, "call by value" y "call by name"; en 4.7.5.3 aparece una estructura como "en el caso de call by value". Hoy solemos decir que a los procedure/function/subroutine se los "call" y a los argument/parameter se los "pass", así que "pass by value/reference/name" es más claro. Pero términos antiguos como "call by value" todavía siguen vivos en algunos contextos. La idea de "llamar" un argumento o parámetro ya desapareció, pero ese tipo de terminología legacy todavía permanece.