Funktionsargumente sind keine Funktionsfarben

Function Arguments Are Not Function Colors

In seinem Essay widerlegt der Autor die These, dass Funktionsargumente wie Go's context.Context eine Art Funktionsfarbe darstellen. Er definiert Farben anhand der Form des Abhängigkeitsgraphen: Eine Farbe zwingt alle Aufrufer im Call-Stack zur Änderung, während normale Parameteränderungen gekapselt werden können. Anhand von Go, JavaScript und Haskell zeigt er, dass Async nicht immer eine Farbe ist und dass Sprachen wie Haskell partielle Farben erlauben. Der Beitrag bietet ein klares Kriterium zur Unterscheidung und argumentiert, dass die meisten Parameteränderungen lokal bleiben.

Eine Farbänderung entkommt dieser Kapselung: Alle Funktionen darüber im Stack müssen ihre Anforderungen erfüllen.
  1. skavi

    In diesem Rahmen wären Rusts async-fns nicht gefärbt, da jede Funktion im Aufrufstapel auf einem Executor blockieren könnte. Wenn man den "Spawn-Punkt" als Teil des Aufrufstapels betrachtet, funktionieren viele andere Sprachen ähnlich.

    Das fühlt sich nicht wie eine nützliche Unterscheidung an, aber ich glaube nicht, dass "Funktionsfärbung" im Allgemeinen ein nützliches Konzept ist.

  2. legobmw99

    Ich denke, das ist eine feine Unterscheidung, auch wenn es erwähnenswert ist, dass Funktionsargumente _Farben_ sein können, wie der Autor beschreibt, wenn die Argumente von einem bestimmten Ort kommen müssen, z.B. in Sprachen, in denen nur `main` bestimmte Argumente in Bezug auf Systemfunktionalität erhält, oder in einem Capability-Framework, in dem nur die oberste Funktion das Capability-Token erhält.

  3. smilekzs

    Meine persönlichen Maßstäbe:

    Wie oft entspricht eine konzeptionell inkrementelle Änderung einem proportional inkrementellen Code-Diff, im Gegensatz zu einer überraschenden, die ganze Welt auf den Kopf stellenden Neuarchitektur?

    Lassen die Codemuster natürlich genug Raum, um schrittweise zu verschieben/umzustrukturieren, wie Dinge organisiert sind?

    Wenn die Antworten auf diese Fragen ungünstig sind, stelle ich oft fest, was für "Färbungen" im Framework, in der Bibliothek oder in der Sprache vorhanden sind, manchmal sogar alle gleichzeitig.

Mehr von diesem Tag

2026-09-08