19 pontos por GN⁺ 2025-07-10 | 1 comentários | Compartilhar no WhatsApp
  • Na programação, a origem da expressão "chamar uma função" é semelhante ao conceito de "solicitar" ou "chamar" um livro em uma biblioteca
  • Na computação inicial, predominava a prática de invocar, chamar sub-rotinas de uma biblioteca
  • Quando o Fortran II introduziu a instrução CALL, a expressão "chamar uma função" se popularizou rapidamente
  • Depois, linguagens como Algol e JOVIAL também adotaram isso e passaram a usar o substantivo "call"
  • O sentido de "call" foi se ampliando gradualmente para abranger antes, durante e depois da transferência de controle em tempo de execução

Por que os programadores dizem que "chamam" (call) uma função?

  • Houve uma pergunta no StackExchange sobre a origem da expressão "chamar (call) uma função"
  • Existem várias analogias, mas na prática a origem vem do sentido de "call" como invocar ou trazer algo
    • Assim como se "solicita" um livro em uma biblioteca, começou com a ideia de "solicitar" uma sub-rotina para usá-la
    • "call number" é a marcação que indica a localização de um livro em uma biblioteca

A história de "call" na terminologia de bibliotecas

  • Segundo o OED, Melvil Dewey usou pela primeira vez "call number" como termo de biblioteconomia em 1876
    • "call number" é a notação usada para a localização de um livro ou para um pedido de consulta
  • No Library Journal de 1888, termos como "call blank", "call slip" e "call number" já eram usados normalmente
  • Segundo a explicação de Joudrey & Taylor, "call number" recebeu esse nome a partir do ato de chamar materiais em estantes fechadas
    • Sistemas como o Cutter number foram introduzidos para classificação

O uso inicial de "call" na ciência da computação

  • No artigo de 1947 de John W. Mauchly, aparece um caso de uso em que sub-rotinas eram "called in" a partir de uma biblioteca de sub-rotinas
    • No contexto de referenciar e usar rapidamente algo por meio de um número registrado
  • As rotinas em assembly do MANIAC II (1956) também aplicavam a ideia de atribuir um "call number" a cada sub-rotina para trazê-la quando necessário
    • Na linguagem assembly real, isso era chamado de "transfer control"
  • Nessa época, o destaque estava menos na "chamada" em tempo de execução e mais na ideia de trazer trechos de código durante a compilação ou a ligação

O surgimento da instrução "CALL" nas linguagens de programação

  • Fortran II (1958) introduziu as instruções CALL e RETURN
    • A ação de "call for" transferia o controle de execução para uma sub-rotina
    • A instrução CALL apontava diretamente para o ato sintático de "chamar"
  • Aos poucos, começou a haver mistura entre a ideia de "transferir o controle" em tempo de execução e o ato de "chamar" no momento de linkedição ou montagem

A ampliação e consolidação do sentido de "call" nos anos 1960

  • No dicionário de Sarbacher (1959), "call in" é definido como a transferência de controle da rotina principal para uma sub-rotina
    • Também são explicados "call number" e "call word" como identificador e até código de chamada
  • Em JOVIAL (1960), "procedure call" e "calls" já aparecem oficialmente como substantivos
    • Depois, o termo passou a ser usado junto com significados em várias camadas, como local de chamada (site), argumento (argument), parâmetro etc.
  • Algol (1959~1960) também usa expressões como "procedure call", "called procedure" e "during the call" para descrever diferentes momentos da chamada
    • No relatório do Algol 60 de Peter Naur, também aparece a distinção temporal entre "call for" e "during the call"
  • No Burroughs Algebraic Compiler (1961), o verbo "to call" aparece claramente pela primeira vez
  • A partir de Corbató et al. (1963), o uso moderno de "to call a subroutine" se generalizou

Conclusão

  • A instrução "CALL X" do Fortran II fez a expressão "call" se firmar para chamadas de função/sub-rotina
    • A ideia veio do conceito bibliotecário anterior de chamar algo por número, mas ganhou uma nova ampliação de sentido nas linguagens de programação
  • Depois, Algol, JOVIAL e outras linguagens adotaram termos como "call" e "call site"
  • Por volta de 1961, a expressão "to call X" começou a se fixar em documentos formais de programação e na comunidade
  • Hoje, chamar uma função se refere ao conjunto completo de operações de transferir temporariamente o controle, executar e depois retornar com um resultado, e 'call' se tornou o termo padrão

1 comentários

 
GN⁺ 2025-07-10
Comentários do Hacker News
  • Grace Hopper explicou que o sentido original da palavra "call" (derivado de call number, usado para organizar materiais em bibliotecas físicas) também influenciou o surgimento do termo "compiler". Cada sub-rotina recebia uma "call word", e a ideia vinha do conceito de montar um programa como quem retira e combina materiais de uma biblioteca
    • Eu uso esses termos diretamente
    • Só agora a ficha caiu. Os números de identificação do sistema decimal de Dewey eram chamados de "call number"
  • Acho que a Biblioteconomia contribuiu muito mais para a computação moderna do que imaginamos. Por exemplo, ao explicar índices de banco de dados, costumo recorrer à imagem dos catálogos em fichas. Quando mostro aqueles gaveteiros de madeira onde se podia procurar por autor, classificação decimal de Dewey ou assunto, todo mundo entende na hora. Referência sobre o conceito de catálogo de biblioteca
    • Sou da geração que ainda usou gaveteiros de madeira na biblioteca local e coisas como dicionários de papel. Quando conheci hash maps ou IDictionary pela primeira vez, uns 25 anos atrás, essa imagem me ajudou a entender imediatamente. Mas hoje essa metáfora já não ajuda tanto. Muitas vezes precisei explicar como eram catálogos em fichas ou dicionários, e os mais jovens dizem: "ah, então era tipo um hashmap analógico"
    • Há só alguns meses eu ainda me perguntava por que a largura padrão do terminal era 80 caracteres. Achei que fosse por causa do tamanho das telas dos PCs antigos. Mas descobri que era porque os cartões perfurados tinham 80 colunas, e que os cartões perfurados, no fim das contas, também vieram dos cartões de índice. Mais uma vez, um momento de reverência à biblioteconomia. Parece aquela história da largura dos carros vir da largura de dois traseiros de cavalo
    • Há 1 ou 2 anos expliquei um banco de dados comparando com aquelas gavetas de madeira empoeiradas no canto da biblioteca. Contexto e conhecimento prévio realmente importam
    • Eu sempre achei que o termo "index" na computação viesse originalmente do índice no fim de um livro. Nunca tinha ligado isso a "index cards"
    • A geração mais nova talvez nunca nem tenha visto um catálogo em fichas. Eu explico que um disco rígido é uma lista de 0s e 1s, e que é preciso alguma estrutura para encontrar qualquer coisa ali
  • Sou finlandês. Em finlandês, a palavra equivalente a "chamar uma função" é "kutsua", que, se retraduzida para o inglês, seria mais como "invite" ou "summon". Ou seja, é usada no sentido de "chamar", como quando uma mãe chama a criança do quintal, e não no sentido de ligar para alguém ou de "como você chama esta cor?". Só queria compartilhar isso
    • Em alemão se usa "aufrufen", que traduzido em partes seria algo como "trazer à chamada". Se usado com objeto direto, como ao chamar o nome de um aluno na escola, significa chamar alguém pelo nome ou número. O verbo para telefonar é "anrufen"
    • "Summon" às vezes também parece muito apropriado para o horror ocultista que certos códigos evocam. E "invite" pode muito bem ser o ato de convidar um demônio ou vampiro
    • Na Noruega usamos "funksjonskall", que traduzido literalmente é function call. É simplesmente o sentido de chamar alguma coisa
    • Em russo é parecido também: numa retradução, seria algo como "chamar por telefone", "invocar" ou "convidar"
    • Não é exatamente sobre o tema, mas se você estiver em Helsinque, seria legal participar do meetup local do Hacker News
  • No livro Wilkes, Wheeler, Gill (1951), a expressão "call in" é usada para executar sub-rotinas. Na página 31 aparecem trechos como "se a sub-rotina não for chamada corretamente, a máquina para" e "é possível chamar livremente uma sub-rotina a partir de qualquer programa". Também dá para ver nesta apresentação que um relatório inicial do EDSAC de 1950 já traz a anotação "call in auxiliary sub-routine"
  • Às vezes também se usa "invoke" ou "execute" em vez de "call", mas são termos mais longos e genéricos. No entanto, vejo muito uso estranho de "call" (como em "calling a command" ou "calling a button") por estudantes de ciência da computação que não são falantes nativos de inglês, e isso me incomoda um pouco
    • "Invoke" vem do latim invocō, invocāre (chamar, invocar), então não está errado; é só uma forma mais abreviada
    • O exemplo incorreto que mais ouço (ou detesto) é com "return". Já ouvi algo como: "agora chamamos a palavra-chave return e a função termina"
    • Em C#, "Invoke" aparece bastante com delegates ou reflection, enquanto o depurador usa "Call Stack"
    • Pela minha experiência, até falantes nativos que estão começando a programar usam esse tipo de linguagem. Eles chamam de "command" coisas que não são comandos
    • Às vezes iniciantes vão ainda mais longe e chamam uma instrução inteira ou até uma declaração de função de "command"
  • Não é uma teoria científica, só uma observação. Novos termos se espalham melhor quando têm algum ponto de contato com a intuição. Em geral, são curtos e evocam facilmente um significado ou uma imagem, então pegam rápido. Às vezes exigem explicação, mas as pessoas aprendem e passam adiante só pelo contexto. Um exemplo é "salty", e acho que com "call" acontece o mesmo. É curto, usado com frequência, e tanto call up, call in, summon quanto invoke (com um ar meio de feitiço) parecem se encaixar. Na época, o telefone também era uma tecnologia nova e fascinante, então era fácil associar a imagem de telefonar para alguém com a ideia de chamar uma sub-rotina. Termos como "jump" já tinham outros usos, então acho que isso ajudou "call" a se consolidar
    • Para mim, "salty" não tem quase nada a ver com lágrimas. No meu uso da língua, dizer que alguém está "salty" não significa triste, e sim irritado ou ressentido. A metáfora vem da ideia de algo forte e picante como o sal. Isso mostra que, mesmo com interpretações diferentes, a metáfora ainda funciona, o que ajuda a entender como "call" pode ter se espalhado desse jeito
  • Nunca tinha pensado que, na frase "... as coisas complexas devem estar em uma library, isto é, um conjunto de fitas magnéticas (onde problemas valiosos escritos anteriormente são armazenados)", a palavra "library" realmente vinha da ideia de uma estante com materiais rotulados
  • Eu sempre achei que funções não precisavam necessariamente de uma palavra-chave como call. Funções normalmente retornam valores, então podem ser usadas dentro de uma atribuição. Quem realmente precisava de call eram as sub-rotinas (na prática, endereços ou rótulos nomeados). Na verdade, também daria para fazer isso com GOTO, pulando diretamente para esse endereço e voltando depois. A palavra-chave CALL só deixa o fluxo de execução mais claro. É como um chefe pedindo para o Sam cuidar do caixa e depois para o Bill imprimir o relatório TPS. No fim, tudo virou função, e sub-rotina ganhou o apelido de "spaghetti". Mas fico curioso sobre por que existem os termos routine (programa) e subroutine
    • A origem da palavra "routine", segundo um documento de 1947 de Goldstine e von Neumann, é explicitada assim: "Chamaremos de routine a série codificada de instruções de um problema" (referência)
  • Na música também existe a expressão "call and response". Acho que isso se conecta ao conceito de valor de retorno
  • O Algol 60 também usava o termo "call" não só para funções, mas para parâmetros. Por exemplo, "call by value" e "call by name"; na seção 4.7.5.3 aparece a construção "in the case of call by value". Hoje em dia dizemos que procedure/function/subroutine são "called" e que argument/parameter são "passed", então "pass by value/reference/name" fica mais claro. Mas os termos antigos como "call by value" ainda sobrevivem em alguns contextos. A ideia de "chamar" argumentos ou parâmetros desapareceu, mas essa terminologia legada continua existindo