19 points par GN⁺ 2025-07-10 | 1 commentaires | Partager sur WhatsApp
  • En programmation, l’expression « appeler une fonction » vient d’une origine comparable à l’idée de « demander » ou « faire venir » un livre dans une bibliothèque
  • Aux débuts de l’informatique, on avait tendance à faire venir, appeler des sous-routines depuis une bibliothèque
  • Avec l’introduction de l’instruction CALL dans Fortran II, l’expression « appeler une fonction » s’est rapidement popularisée
  • Par la suite, des langages comme Algol et JOVIAL l’ont adoptée à leur tour en utilisant le nom « call »
  • Le sens de « call » s’est ensuite progressivement élargi pour désigner ce qui se passe avant, pendant et après le transfert de contrôle à l’exécution

Pourquoi les programmeurs disent-ils qu’ils « appellent » une fonction ?

  • Une question a été posée sur StackExchange à propos de l’origine de l’expression « appeler une fonction »
  • Il existe plusieurs analogies, mais en réalité le terme « call » vient de l’idée d’invoquer ou de faire venir
    • Comme lorsqu’on « demande » un livre dans une bibliothèque, l’idée vient du fait de « demander » une sous-routine pour l’utiliser
    • Le « call number » est l’indication qui signale l’emplacement d’un livre dans une bibliothèque

L’histoire de « call » dans le vocabulaire des bibliothèques

  • Selon l’OED, Melvil Dewey a employé pour la première fois en 1876 le terme « call number » dans le vocabulaire des sciences de l’information et des bibliothèques
    • Un « call number » est une notation utilisée pour indiquer l’emplacement d’un livre ou pour en faire la demande
  • Dans le Library Journal de 1888, des termes comme « call blank », « call slip » et « call number » sont déjà d’usage courant
  • Selon l’explication de Joudrey & Taylor, le nom « call number » vient du fait de faire venir des documents depuis des rayonnages fermés
    • Des systèmes comme le Cutter number ont été introduits à des fins de classification

Les premiers usages de « call » en informatique

  • Dans un article de 1947 de John W. Mauchly, on trouve déjà des exemples où des sous-routines sont « called in » depuis une bibliothèque de sous-routines pour être utilisées
    • Le contexte est celui d’une référence rapide au moyen de numéros enregistrés
  • Les routines assembleur de MANIAC II (1956) appliquent elles aussi l’idée consistant à attribuer à chaque sous-routine un « call number » afin de la faire venir au besoin
    • Dans le langage assembleur lui-même, on parlait en réalité de « transfer control »
  • À cette époque, l’accent portait davantage sur l’idée de faire venir des fragments de code au moment de la compilation ou de l’édition de liens que sur l’« appel » à l’exécution

L’apparition de l’instruction « CALL » dans les langages de programmation

  • Fortran II (1958) a introduit les instructions CALL et RETURN
    • L’action d’« appeler » (call for) une sous-routine consiste à lui transférer le contrôle de l’exécution
    • L’instruction CALL désigne concrètement l’acte syntaxique d’« appeler »
  • Peu à peu, le fait de « transférer le contrôle » à l’exécution et l’acte d’« appeler » au moment de l’assemblage ou de l’édition de liens ont commencé à se mêler de façon ambiguë

L’élargissement et la fixation du sens de « call » dans les années 1960

  • Dans le dictionnaire de Sarbacher (1959), « call in » est défini comme un transfert de contrôle depuis la routine principale vers une sous-routine
    • Le dictionnaire décrit aussi « call number » et « call word » pour parler des identifiants et du code d’appel
  • En JOVIAL (1960), « procedure call » et « calls » sont officiellement employés comme noms
    • Le terme s’emploie ensuite avec plusieurs niveaux de sens, comme le site d’appel, les arguments et les paramètres
  • Algol (1959~1960) emploie lui aussi des expressions comme « procedure call », « called procedure » et « during the call » pour désigner différentes phases de l’appel
    • Dans le rapport sur Algol 60 de Peter Naur apparaît également la distinction temporelle entre « call for » et « during the call »
  • Dans le Burroughs Algebraic Compiler (1961), la forme verbale « to call » apparaît clairement pour la première fois
  • Après Corbató et al. (1963), l’usage moderne « to call a subroutine » se généralise

Conclusion

  • L’instruction « CALL X » de Fortran II a contribué à imposer l’expression « call » pour l’appel de fonctions et de sous-routines
    • Elle s’inspire de l’ancien concept bibliothécaire consistant à appeler par numéro, mais en l’étendant à un nouveau sens dans les langages de programmation
  • Par la suite, Algol, JOVIAL et d’autres ont adopté des termes comme « call » et « call site »
  • À partir d’environ 1961, l’expression « to call X » commence à s’imposer dans la documentation officielle et dans la communauté
  • Aujourd’hui, l’appel de fonction désigne l’ensemble des opérations consistant à transférer temporairement le contrôle, exécuter, récupérer le résultat puis revenir, et « call » en est devenu le terme standard

1 commentaires

 
GN⁺ 2025-07-10
Avis Hacker News
  • Grace Hopper expliquait que le sens originel du mot « call » (issu du call number utilisé pour classer les documents dans les bibliothèques physiques) a aussi influencé la naissance du terme « compiler ». Chaque sous-routine recevait un « call word », et l’idée venait du fait de construire un programme comme on sort et assemble des documents d’une bibliothèque
    • J’utilise moi-même ces termes
    • C’est seulement maintenant que toutes les pièces du puzzle s’assemblent. Les numéros d’identification de la classification décimale de Dewey étaient appelés des « call numbers »
  • Je pense que les sciences de l’information et des bibliothèques ont apporté bien plus à l’informatique moderne qu’on ne l’imagine. Par exemple, j’utilise souvent l’image du catalogue sur fiches pour expliquer un index de base de données. Quand on voit un meuble à tiroirs en bois dans lequel on peut chercher par nom d’auteur, Dewey ou sujet, tout le monde comprend tout de suite. Référence sur la notion de catalogue de bibliothèque
    • Je fais partie de la génération qui a utilisé les meubles à tiroirs en bois et les dictionnaires papier à la bibliothèque municipale. Quand j’ai découvert les hash maps ou IDictionary il y a 25 ans, cette image m’a parlé immédiatement. Mais aujourd’hui, cette métaphore aide beaucoup moins. Il m’est souvent arrivé de devoir expliquer à quoi ressemblaient concrètement un catalogue sur fiches ou un dictionnaire, et les jeunes me répondent : « ah, donc c’est une hash map analogique »
    • Il y a encore quelques mois, je me demandais pourquoi la largeur standard d’un terminal était de 80 caractères. Je pensais que cela venait de la taille des anciens écrans de PC. Mais j’ai appris que c’était parce que les cartes perforées faisaient 80 colonnes, et qu’au fond les cartes perforées dérivaient elles-mêmes des fiches cartonnées. Encore une occasion de rendre hommage aux sciences de l’information et des bibliothèques. C’est un peu l’équivalent, dans l’histoire de l’informatique, de la légende selon laquelle la largeur des voitures viendrait de deux croupes de cheval
    • Il y a un ou deux ans, j’ai expliqué une base de données en la comparant à ces tiroirs en bois poussiéreux dans un coin de bibliothèque. Le contexte et les connaissances préalables comptent énormément
    • J’ai toujours pensé que le mot « index » en informatique venait à l’origine de l’index à la fin des livres. Je n’avais jamais fait le lien avec les fiches index
    • Les jeunes générations n’ont peut-être jamais vu de catalogue sur fiches. Moi, j’explique qu’un disque dur est une liste de 0 et de 1, et qu’il faut une structure pour retrouver quelque chose à l’intérieur
  • Je suis finlandais. En finnois, le mot correspondant à « appel de fonction » est « kutsua », qui se retraduit en anglais par « invite » ou « summon ». Autrement dit, il s’emploie au sens de « appeler » comme quand une mère appelle son enfant depuis la cour, et non au sens de call dans « Joe appelle son ami au téléphone » ou « comment appelle-t-on cette couleur ? ». Je voulais juste le partager
    • En allemand, on utilise « aufrufen », qui, traduit morceau par morceau, veut dire quelque chose comme « faire venir en appelant ». Utilisé avec un complément d’objet direct, comme quand on appelle le nom d’un élève à l’école, cela signifie appeler quelqu’un par son nom ou par son numéro. Le mot pour téléphoner à quelqu’un est « anrufen »
    • « summon » donne parfois l’impression d’invoquer une horreur occulte dans le code, ce qui est d’ailleurs parfois très approprié. Et « invite » peut aussi faire penser à inviter un démon ou un vampire
    • En norvégien, on dit « funksjonskall », littéralement « function call ». C’est simplement l’idée d’appeler quelque chose
    • En russe, c’est similaire aussi : en retraduction, on obtient des sens comme « appeler au téléphone », « invoquer », « inviter », etc.
    • Ce n’est pas directement le sujet, mais si tu es à Helsinki, tu devrais venir au meetup Hacker News local
  • Dans le livre Wilkes, Wheeler, Gill (1951), l’expression « call in » est utilisée pour l’exécution de sous-routines. À la page 31, on trouve des formulations comme « si la sous-routine n’est pas appelée correctement, la machine s’arrête » et « on peut appeler librement une sous-routine depuis n’importe quel programme ». On peut aussi voir dans cette présentation qu’une note de 1950 sur les débuts de l’EDSAC contenait déjà le commentaire « call in auxiliary sub-routine »
  • On emploie parfois « invoke » ou « execute » au lieu de « call », mais ce sont des termes plus longs et plus généraux. En revanche, j’entends souvent chez des étudiants non anglophones en informatique des usages fautifs de « call » (« calling a command », « calling a button »), et cela m’agace un peu
    • « invoke » vient du latin invocō, invocāre (« appeler, invoquer »), donc ce n’est pas faux, c’est plutôt une forme abrégée
    • L’exemple incorrect le plus fréquent que j’entends — ou qui m’agace le plus — est avec « return ». J’ai déjà entendu : « maintenant, si on appelle le mot-clé return, la fonction se termine »
    • En C#, on utilise souvent « Invoke » pour des choses comme les delegates ou la reflection, tandis que le débogueur parle de « Call Stack »
    • D’après mon expérience, même les locuteurs natifs qui débutent en programmation ont des usages comparables. Ils parlent de « command » même pour des choses qui n’en sont pas
    • Il arrive aussi souvent que des débutants appellent à tort une instruction, voire une déclaration de fonction entière, une « command »
  • Ce n’est pas une théorie scientifique, juste une observation. Les nouveaux termes se diffusent bien lorsqu’il y a un point d’accroche. En général, ils sont courts, et leur sens ou leur image se retiennent facilement, ce qui favorise leur propagation. Parfois il faut les expliquer, mais souvent les gens les apprennent rien qu’avec le contexte et les réemploient. Le mot « salty » en est un bon exemple, et « call » aussi. C’est court, très fréquent, et call up / call in / summon / invoke (avec une tonalité de formule magique) donnent tous une impression qui colle. À l’époque, le téléphone était aussi une technologie nouvelle et fascinante, donc il était facile de faire le rapprochement entre appeler quelqu’un au téléphone et appeler une sous-routine. Des termes comme « jump » étaient déjà pris par d’autres sens, ce qui a probablement aidé « call » à s’imposer
    • Pour moi, « salty » n’a pas grand-chose à voir avec les larmes. Dans mon usage, dire que quelqu’un est « salty », ce n’est pas dire qu’il est triste, mais qu’il est agacé ou contrarié. L’image vient plutôt de quelque chose de fort, piquant, intense comme le sel. Autrement dit, même avec des interprétations différentes, les métaphores fonctionnent bien, ce qui montre comment « call » a pu se diffuser de cette façon
  • Dans la phrase « ... les choses complexes devraient se trouver dans une bibliothèque, c’est-à-dire un ensemble de bandes magnétiques (où sont stockés des problèmes utiles déjà écrits) », je n’avais jamais pensé que le mot « bibliothèque » venait littéralement de rayonnages de documents étiquetés
  • J’ai toujours pensé qu’une fonction n’avait pas vraiment besoin d’un mot-clé call. Une fonction renvoie généralement une valeur, donc on peut simplement l’utiliser dans une affectation. C’est la sous-routine qui avait besoin de call (en pratique, une adresse ou un label nommé). En fait, on peut aussi sauter directement à cette adresse avec GOTO et revenir ensuite. Le mot-clé CALL rend simplement le flux d’exécution plus clair. C’est comme un patron qui demande à Sam de s’occuper de la caisse, puis à Bill d’imprimer le rapport TPS. Finalement, tout est devenu fonction, et les sous-routines ont hérité du surnom de « spaghetti ». Mais je me demande pourquoi on avait les termes routine (programme) et subroutine
    • Selon un document de 1947 de Goldstine et von Neumann, l’origine du mot routine est explicitée ainsi : « nous appellerons routine la suite codée d’instructions d’un problème » (référence)
  • En musique aussi, il existe l’expression « call and response ». Je pense que cela se relie à l’idée de valeur de retour
  • Algol 60 employait aussi le terme « call » non seulement pour les fonctions, mais également pour les paramètres. Par exemple, « call by value », « call by name », etc. En 4.7.5.3, on trouve des formulations du type « in the case of call by value ». Aujourd’hui, on dit plutôt qu’on call une procedure / function / subroutine, et qu’on pass un argument / parameter, donc « pass by value/reference/name » est plus clair. Mais les anciens termes comme « call by value » subsistent encore dans certains contextes. L’idée d’« appeler » un argument ou un paramètre a disparu, mais ce vocabulaire hérité est resté