nodejs / nodejs/node-addon-api

Enforce callback signatures with C++ Concepts

Offen
#1,746 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

blocked SemVer-major
Vorherrschende Sprache
C++
Sterne
2.4k
Forks
499
Ø Merge
2 T. 11 Std.
Gemergte PRs (30 T.)
2

Beschreibung

#1738 documented the required signature of the templated finalizer callback parameters as inline comment hints.

These are human-only annotations. The compiler does not enforce them, so a mismatched callable fails deep inside the template instantiation with an unhelpful error.

Once C++20 is the minimum supported standard, we should replace these hints with C++ Concepts that constrain the Finalizer/FinalizerType template parameters. This gives compiler-enforced contracts and clear diagnostics at the call site.

Finalizer candidates:

  • BasicEnv::PostFinalizer
  • Object::AddFinalizer
  • External::New
  • Buffer::New / Buffer::NewOrCopy
  • ThreadSafeFunction::New
  • TypedThreadSafeFunction::New

Callback candidates:

  • Function::New — the JS callback (Callable)
  • PropertyDescriptor::AccessorGetter / Setter
  • PropertyDescriptor::FunctionCallable
  • ThreadSafeFunction::BlockingCall / NonBlockingCallCallback
  • TypedThreadSafeFunction::BlockingCall / NonBlockingCallCallback
  • TypedThreadSafeFunction — the CallJs callback

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Überprüfe die Inline-Signaturannotationen aus #1738 und die aufgeführten Template-Einstiegspunkte, einschließlich BasicEnv::PostFinalizer, Object::AddFinalizer, External::New, Buffer::New und der ThreadSafeFunction-APIs. Bestimme die erforderlichen Einschränkungen für jeden Finalizer-, Callable-, Getter-, Setter- und Callback-Kandidaten. Als abgeschlossen gilt die Aufgabe, wenn C++20 Concepts die dokumentierten Signaturen erzwingen und Diagnosen an der Aufrufstelle erzeugen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
cpp
Bereich
api
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
52/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.