19 Punkte von GN⁺ 2025-07-10 | 1 Kommentare | Auf WhatsApp teilen
  • In der Programmierung stammt die Formulierung, eine Funktion „aufzurufen“, vermutlich aus einem ähnlichen Konzept wie das „Anfordern“ oder „Herbeirufen“ eines Buchs in einer Bibliothek
  • In der frühen Computertechnik war es verbreitet, Subroutinen aus einer Bibliothek herbeizuholen bzw. aufzurufen
  • Mit der Einführung der CALL-Anweisung in Fortran II verbreitete sich die Formulierung „eine Funktion aufrufen“ sehr schnell
  • Später übernahmen auch Sprachen wie Algol und JOVIAL dies und verwendeten „call“ als Substantiv
  • Die Bedeutung von „call“ weitete sich schrittweise auf vor, während und nach der Laufzeitsteuerung aus und etablierte sich so

Warum sagen Programmierer, dass sie eine Funktion „aufrufen“ (call)?

  • Auf StackExchange wurde nach dem Ursprung der Formulierung „eine Funktion aufrufen“ (call) gefragt
  • Es gibt mehrere Metaphern, tatsächlich leitet es sich aber davon ab, dass „call“ bedeutet, etwas herbeizurufen oder kommen zu lassen
    • Ähnlich wie man in einer Bibliothek ein Buch „anfordert“, begann es damit, eine Subroutine „anzufordern“ und zu verwenden
    • Eine „call number“ ist die Kennzeichnung, die in einer Bibliothek den Standort eines Buchs angibt

Die Geschichte von „call“ als Bibliotheksbegriff

  • Laut OED verwendete Melvil Dewey 1876 erstmals „call number“ als Begriff der Bibliothekswissenschaft
    • „call number“ bezeichnet eine Angabe für den Standort eines Buchs oder für dessen Anforderung
  • Auch im Library Journal von 1888 wurden Begriffe wie „call blank“, „call slip“ und „call number“ ganz selbstverständlich verwendet
  • Laut der Erklärung von Joudrey & Taylor stammt die Bezeichnung „call number“ aus dem Vorgang, Materialien aus geschlossenen Magazinen anzufordern
    • Systeme wie die Cutter number wurden zur Klassifizierung eingeführt

Frühe Verwendung von „call“ in der Informatik

  • In einem Aufsatz von John W. Mauchly aus dem Jahr 1947 erscheint ein Beispiel, in dem eine Subroutine aus einer Subroutinenbibliothek „called in“ und verwendet wird
    • Gemeint ist dabei, dass sie anhand einer verzeichneten Nummer schnell referenziert und genutzt wird
  • Auch die MANIAC II-Assembler-Routinen (1956) verwendeten das Konzept, jeder Subroutine eine „call number“ zuzuweisen und sie bei Bedarf darüber abzurufen
    • In der eigentlichen Assemblersprache sprach man jedoch von „transfer control“
  • In dieser Zeit lag der Schwerpunkt weniger auf dem „Aufruf“ zur Laufzeit als auf dem Einbinden von Codefragmenten beim Kompilieren oder Linken

Das Auftreten der CALL-Anweisung in Programmiersprachen

  • Fortran II (1958) führte die Anweisungen CALL und RETURN ein
    • Als Handlung des „call for“ übergibt sie die Ausführungskontrolle an eine Subroutine
    • Die CALL-Anweisung bezeichnet konkret den syntaktischen Akt des „Aufrufens“
  • Nach und nach begannen sich das Übergeben der Kontrolle zur Laufzeit und der „Aufruf“ beim Linken bzw. Assemblieren unscharf zu vermischen

Ausweitung und Etablierung der Bedeutung von „call“ in den 1960er Jahren

  • Im Wörterbuch von Sarbacher (1959) wird „call in“ als Übergang der Kontrolle von der Hauptroutine zu einer Subroutine definiert
    • Außerdem werden mit „call number“ und „call word“ auch Bezeichner und Aufrufcode erklärt
  • In JOVIAL (1960) werden „procedure call“ und „calls“ offiziell als Substantive verwendet
    • Später wird der Begriff zusammen mit mehreren Bedeutungsebenen wie Aufrufstelle (site), Argument und Parameter verwendet
  • Auch Algol (1959–1960) verwendet vielfältige Formulierungen wie „procedure call“, „called procedure“ und „during the call“
    • Auch in Peter Naurs Algol-60-Report taucht die zeitliche Unterscheidung zwischen „call for“ und „during the call“ auf
  • Im Burroughs Algebraic Compiler (1961) erscheint erstmals klar die Verbform „to call“
  • Ab Corbató et al. (1963) verallgemeinert sich die moderne Verwendung „to call a subroutine“

Fazit

  • Die CALL X-Anweisung von Fortran II verhalf der Formulierung „call“ für den Aufruf von Funktionen/Subroutinen zum Durchbruch
    • Zwar aus der älteren Bibliotheksvorstellung des Aufrufens per Nummer angeregt, erhielt sie in Programmiersprachen aber eine neue, erweiterte Bedeutung
  • Danach übernahmen verschiedene Sprachen wie Algol und JOVIAL Begriffe wie „call“ und „call site“
  • Etwa ab 1961 begann sich die Formulierung „X aufrufen“ in offizieller Programmdokumentation und in der Community zu etablieren
  • Heute bezeichnet ein Funktionsaufruf den gesamten Ablauf, bei dem die Kontrolle vorübergehend übergeben, ein Ergebnis erhalten und anschließend zurückgekehrt wird, und „call“ ist dafür der Standardbegriff

1 Kommentare

 
GN⁺ 2025-07-10
Hacker-News-Kommentare
  • Grace Hopper erklärte, dass die ursprüngliche Bedeutung des Wortes "call" (abgeleitet von der call number, die in physischen Bibliotheken zum Ordnen von Materialien verwendet wurde) auch die Entstehung des Begriffs "compiler" beeinflusst habe. Jeder Subroutine wurde ein "call word" zugewiesen, und die Idee war, Programme so zusammenzustellen, wie man in einer Bibliothek Materialien herausnimmt und kombiniert
    • Ich verwende diese Begriffe selbst
    • Erst jetzt fällt für mich endlich das Puzzle an seinen Platz. Die Identifikationsnummern des Dewey-Dezimalklassifikationssystems wurden als "call number" bezeichnet
  • Ich denke, dass die Bibliothekswissenschaft viel mehr zur modernen Informatik beigetragen hat, als wir uns vorstellen. Wenn ich zum Beispiel Datenbankindizes erkläre, greife ich oft auf das Bild eines Zettelkatalogs zurück. Wenn man die Holzschubladen sieht, in denen man nach Autor, Dewey-Dezimalzahl oder Thema suchen kann, verstehen es alle sofort. Zum Konzept des Bibliothekskatalogs
    • Ich gehöre zu der Generation, die in der örtlichen Bibliothek noch Holzschubladen und Papierwörterbücher benutzt hat. Als ich vor 25 Jahren zum ersten Mal mit Hashmaps oder IDictionary in Berührung kam, hatte ich dank dieses Bildes sofort ein Gefühl dafür. Heute hilft diese Metapher aber nicht mehr besonders viel. Ich musste oft erst erklären, wie ein Zettelkatalog oder ein Wörterbuch überhaupt aussah, und junge Leute sagen dann: "Ach so, das ist also eine analoge Hashmap"
    • Noch vor ein paar Monaten habe ich mich gefragt, warum die Standardbreite eines Terminals 80 Zeichen beträgt. Ich dachte, das liege an der Größe alter PC-Bildschirme. Dann stellte sich heraus, dass Lochkarten 80 Zeichen hatten, und dass auch die Lochkarte letztlich von der Karteikarte ausging. Wieder ein Anlass, der Bibliothekswissenschaft Respekt zu zollen. Das ist so eine Computergeschichte wie die, dass die Breite von Autos von zwei Pferdehintern abstamme
    • Vor ein oder zwei Jahren habe ich eine staubige Holzschublade in einer Ecke der Bibliothek als Vergleich für eine Datenbank benutzt. Kontext und Vorwissen sind wirklich wichtig
    • Ich habe immer gedacht, dass das Wort "index" in der Informatik ursprünglich vom Register am Ende eines Buches kommt. Die Verbindung zu "index cards" hatte ich nie hergestellt
    • Die jüngere Generation von heute hat womöglich noch nie einen Zettelkatalog gesehen. Ich erkläre dann, dass eine Festplatte eine Liste aus 0en und 1en ist, und lasse sie daraus ableiten, dass man Struktur braucht, um etwas zu finden
  • Ich bin Finne. Im Finnischen lautet das Wort für "Funktionsaufruf" kutsua, was rückübersetzt eher "einladen" oder "herbeirufen" bedeutet. Es wird also im Sinn von "Mama ruft das Kind aus dem Hof" verwendet, nicht wie bei "Joe ruft seinen Freund an" oder "Wie nennt man diese Farbe?". Ich wollte das nur teilen
    • Im Deutschen sagt man aufrufen, was auf Fragmentebene so etwas wie "herauf-rufen" bedeutet. Wenn man es wie in der Schule mit einem direkten Objekt verwendet, bedeutet es, jemanden beim Namen oder nach Nummer aufzurufen. Das Wort für telefonieren ist anrufen
    • summon hat manchmal auch etwas passend Okkult-Horrorhaftes an Code, finde ich. Und invite kann sich auch so anfühlen, als würde man Dämonen oder Vampire einladen
    • In Norwegen sagt man funksjonskall, wörtlich also function call. Es ist einfach die Bedeutung von call im Sinn von etwas rufen
    • Im Russischen ist es ähnlich; rückübersetzt bedeutet es so etwas wie "telefonisch rufen", "herbeirufen", "einladen" und Ähnliches
    • Das ist nicht direkt das Thema, aber falls du in Helsinki bist, solltest du am lokalen Hacker-News-Meetup teilnehmen
  • In dem Buch Wilkes, Wheeler, Gill (1951) wird der Ausdruck "call in" für die Ausführung von Subroutinen verwendet. Auf Seite 31 steht sinngemäß: "Wenn die Subroutine nicht korrekt aufgerufen wird, stoppt die Maschine" und "Man kann in jedem Programm frei Subroutinen aufrufen". In einem frühen EDSAC-Bericht von 1950 findet sich laut dieser Präsentation auch die Anmerkung "call in auxiliary sub-routine"
  • Gelegentlich verwendet man statt "call" auch "invoke" oder "execute", aber das sind längere und allgemeinere Begriffe. Mich stört allerdings, dass ich von nicht englischsprachigen CS-Studierenden oft falsche Verwendungen des Begriffs "call" höre ("calling a command", "calling a button")
    • invoke kommt vom lateinischen invocō, invocāre (herbeirufen), also ist das nicht falsch, sondern eher eine verkürzte Ausdrucksweise
    • Das häufigste falsch verwendete Beispiel, das ich höre (oder hasse), ist zusammen mit return. Ich habe schon Sätze gehört wie: "Jetzt rufen wir das return-Keyword auf, dann endet die Funktion"
    • In C# wird Invoke häufig bei Delegates oder Reflection verwendet, während der Debugger von einem Call Stack spricht
    • Meiner Erfahrung nach verwenden auch Muttersprachler, die gerade erst Programmieren lernen, ähnliche Formulierungen. Sie nennen auch Dinge, die keine Befehle sind, "command"
    • Anfänger nennen manchmal sogar im genauen Gegenteil ganze Statements oder Funktionsdeklarationen "command"
  • Das ist keine wissenschaftliche Theorie, nur eine Beobachtung. Neue Begriffe verbreiten sich gut, wenn es irgendeinen Punkt gibt, an dem sie andocken. Meist sind sie kurz, und weil sie leicht Bedeutung oder Bilder hervorrufen bzw. im Gedächtnis bleiben, verbreiten sie sich schnell. Manchmal brauchen sie Erklärung, aber oft lernen und verbreiten Menschen sie schon über den Kontext. Bei einem Wort wie "salty" ist das ähnlich, und bei call auch. Es ist kurz und häufig, also geht es gut von den Lippen, und call up/call in/summon/invoke (mit einem leicht magischen Beiklang) passen alle vom Gefühl her. Damals war auch das Telefon eine neue und faszinierende Technologie, also ließ sich das Bild, jemand anderen anzurufen, leicht auf das Aufrufen einer Subroutine übertragen. Begriffe wie "jump" waren bereits anderweitig belegt, daher konnte sich call wohl breit durchsetzen
    • Für mich hat "salty" nicht viel mit tears zu tun. In meinem Sprachgebrauch bedeutet es bei jemandem nicht Traurigkeit, sondern Gereiztheit oder Verärgerung. Die Metapher kommt also eher vom Bild von etwas Scharfem und Intensivem wie Salz. Gerade weil Menschen Metaphern unterschiedlich deuten, sie aber trotzdem funktionieren, zeigt das, wie sich call auf diese Weise verbreiten konnte
  • Bei dem Satz "... die komplizierten Dinge sollten sich in einer library befinden, also einem Satz Magnetbänder (auf denen zuvor geschriebene wertvolle Probleme gespeichert sind)" hatte ich nie darüber nachgedacht, dass das Wort library tatsächlich von einem Regal mit beschrifteten Materialien stammt
  • Ich habe immer gedacht, dass Funktionen nicht unbedingt ein Schlüsselwort wie call brauchten. Funktionen liefern normalerweise einen Wert zurück und können daher in einer Zuweisung verwendet werden. Ein call brauchte man eher für die Subroutine (also im Grunde eine benannte Adresse bzw. ein Label). Tatsächlich konnte man auch einfach mit GOTO zu dieser Adresse springen und wieder zurückkommen. Das Schlüsselwort CALL machte den Ablauf aber klarer sichtbar. Es ist, als würde der Chef Sam mit der Abrechnung beauftragen und danach Bill mit dem Drucken des TPS-Reports. Schließlich wurde alles zu Funktionen, und Subroutinen bekamen den Spitznamen "spaghetti". Ich frage mich allerdings, warum es überhaupt die Begriffe routine (Programm) und subroutine gibt
    • Laut einem Dokument von Goldstine und von Neumann aus dem Jahr 1947 wird die Herkunft des Wortes routine ausdrücklich so beschrieben: "Wir nennen die kodierte Folge von Anweisungen für ein Problem eine routine" (Referenz)
  • In der Musik gibt es auch den Ausdruck "call and response". Ich denke, das lässt sich auch mit dem Konzept eines Rückgabewerts verbinden
  • Auch Algol 60 verwendete den Begriff "call" nicht nur für Funktionen, sondern auch für Parameter. Es gab etwa "call by value" und "call by name"; in 4.7.5.3 findet sich eine Formulierung wie "im Fall von call by value". Heute sagt man eher, Procedures/Funktionen/Subroutinen werden "called" und Arguments/Parameters werden "passed", sodass "pass by value/reference/name" klarer ist. Die alten Begriffe wie "call by value" bleiben jedoch in manchen Kontexten bestehen. Das Konzept, Arguments oder Parameters zu "rufen" bzw. "aufzurufen", ist verschwunden, aber solche Legacy-Begriffe existieren weiter