Frage

Ich habe es verwendet, gesehen in der Programmierung (speziell in der C ++ Domäne) und hat keine Ahnung, was es ist. Vermutlich ist es ein Design-Muster, aber ich könnte falsch sein. Kann jemand ein gutes Beispiel für einen Thunk geben?

War es hilfreich?

Lösung

Ein thunk Regel bezieht sich auf ein kleines Stück Code, der als eine Funktion aufgerufen wird, hat einige kleine Sache, und dann JUMPs an einem anderen Ort (in der Regel eine Funktion) stattdessen an seinen Aufrufer zurückzukehren. Unter der Annahme, das Sprungziel ist eine normale Funktion, wenn er zurückkehrt, wird es wieder in die Anrufer thunk.

Thunks verwendet werden können, viele nützliche Dinge zu implementieren effizient

  • Protokollübersetzung - wenn aus dem Code aufrufen, dass Anwendungen eine Konvention Code aufrufen, die eine andere Aufrufkonvention verwendet, kann ein thunk verwendet werden, um die Argumente entsprechend zu übersetzen. Dies funktioniert nur, wenn die Rückkehr Konventionen kompatibel sind, aber das ist oft der Fall,

  • virtuelle Funktion Handling - wenn eine virtuelle Funktion einer mehrfach vererbten Basisklasse in C ++ Aufruf, muss es eine Fix-up des this Zeigers sein, um es an den richtigen Ort zu Punkt zu gelangen. Ein thunk kann dies tun.

  • dynamische Verschlüsse - wenn Sie einen dynamischen Verschluss bauen, die Verschlussfunktion Bedürfnisse der Lage sein, den Kontext zu bekommen, wo es erstellt wurde. Eine kleine thunk kann (in der Regel auf dem Stack) gebaut werden, die setzt den Kontext info in einem gewissen Register (n) nach oben und springt dann zu einem statischen Stück Code, dass Geräte die Funktion des Verschlusses. Die Thunk hier effektiv liefert ein oder mehr zusätzliche Argumente für die Funktion versteckt, die nicht von der Aufrufstelle zur Verfügung gestellt.

Andere Tipps

Das Wort THUNK mindestens drei miteinander verbundene Bedeutungen in der Informatik hat. A "Thunk" können sein:

  • ein Stück Code ein verzögertes auszuführen Berechnung (ähnlich einer Schließung)
  • eine Funktion von einigen virtuellen Funktion Tabelle Implementierungen (ähnlich einem Wrapper-Funktion)
  • eine Abbildung von Maschinendaten von einer systemspezifischen Form in einer anderen, in der Regel aus Gründen der Kompatibilität

Ich habe es in der Regel gesehen im dritten Kontext verwendet wird.

http://en.wikipedia.org/wiki/Thunk

  

Einige Compiler für objektorientierte Sprachen wie C ++ Funktionen „Thunk“, wie eine Optimierung der virtuellen Funktionsaufrufe in Gegenwart von mehreren oder virtuelle Vererbung genannt generieren.

Entnommen: http://en.wikipedia.org/wiki/Thunk#Thunks_in_object -oriented_programming

Der Begriff THUNK ursprünglich auf den Mechanismus, durch den Royal Radar Establishment Implementierung von Pass- verwendet bezeichnet by-Namen in ihrem Algol60 Compiler. Im Allgemeinen bezieht er sich auf jede Art und Weise dynamische Verhalten zu induzieren, wenn ein scheinbar statisches Objekt verweist. Der Begriff wurde von Brian Wichmann erfunden, der auf die Frage, Pass-by-Namen zu erklären, sagte: „Nun, Sie gehen den Wert aus dem Speicher zu laden und dann plötzlich - Thunk -. Da Sie einen Ausdruck auswerten“

Thunks wurden in Hardware (vgl KDF9, Burroughs Großrechner) setzen. Es gibt mehrere Möglichkeiten, um sie in der Software, die alle sehr Maschine, Sprache und Compiler spezifisch zu implementieren.

Der Begriff hat sich über Pass-by-namen verallgemeinert werden, eine Situation umfassen, in denen ein scheinbar oder nominell statischen Daten Referenz induziert dynamisches Verhalten. Verwandte Begriffe wie „Trampolin“ und „Zukunft“.

Es gibt erhebliche Unterschiede in Gebrauch. Fast universell, eine Thunk ist eine Funktion, die (zumindest vom Konzept her) ungewöhnlich klein und einfach. Es ist in der Regel eine Art Adapter, dass Sie die richtige Schnittstelle zu etwas oder andere (einige Daten, eine andere Funktion, etc.) gibt, ist aber zumindest gesehen, wie tut kaum etwas anderes.

Es ist fast wie eine Form der syntaktischen Zucker, mit der Ausnahme, dass (zumindest in der Regel verwendet) syntaktischer Zucker soll, um die Dinge so aussehen, wie der menschliche Leser will, sie sehen, und ein Thunk ist etwas so aussehen, wie die machen Compiler es sehen will.

Ich werde diese bis schauen, aber ich dachte, Thunk war das verwendete Verfahren von einem 32-Bit-Prozessor zu laufen Legacy-16-Bit-Code.

Ich habe es als eine Analogie zu verwenden, wie Sie beschränken müssen, wie schnell Sie sprechen und was Worte, die Sie verwenden, wenn sie dumme Menschen zu sprechen.

Ja, es ist in der Wikipedia Link (der Teil über 32-Bit, nicht mein nerdalogy ).

https://en.wikipedia.org/wiki/Thunk

  

Ein Großteil der Literatur über die Interoperabilität Thunks betrifft verschiedene Wintel Plattformen, einschließlich MS-DOS, OS / 2, [8], um Windows [9] [10] und .NET, und dem Übergang vom 16-Bit- In der 32-Bit-Speicheradressierung . Da die Kunden von einer Plattform zur anderen gewandert sind, haben Thunks zu Unterstützung Legacy-Software wesentlich gewesen für die älteren Plattformen geschrieben.

(Betonung von mir hinzugefügt)

hat diese Frage bereits auf SO gefragt worden, finden Sie unter:

Was ist ein 'Thunk', wie in Schema oder allgemein verwendet?

Von dem, was ich sagen kann, es ist verwandt mit einem Lambda-Statement, in dem Sie den Wert nicht zurückkehren können, bis Sie sie bewerten müssen; oder es kann auch eine Eigenschaft Getter verglichen werden, die durch Design einen Code ausführt, um einen Wert zurückgeben, während noch die Schnittstelle Form, die sie über mehr wie eine Variable kommt, hat aber auch polymorphes Verhalten, ob ausgelagert durch Vererbung werden kann, oder durch den Funktionszeiger Auslagern, die einen Wert zur Laufzeit basierend auf Kompilierzeit-oder Umwelteigenschaften würden bewerten und zurückzukehren.

Ich war beunruhigt keine allgemeine ‚Informatik‘ Definition dieses Begriffs finden die de-facto-Nutzung passender als historisch mir bekannt. Die erste reale Begegnung kann ich mich erinnern, wo es eigentlich hieß, die in den OS / 2 Tage und der 16-32-Bit-Übergang war. Es erscheint „Thunk“ ist wie Ironie in seiner Anwendung heute.

Mein grobes allgemeines Verständnis ist, dass der Thunk eine Stub-Routine ist, dass gerade tut nichts oder Routen über einige fundamentale Grenze in Art zwischen Systemen wie in den genannten historischen Fällen.

So ist der Sinn ist wie ein Synästhesie von der einer Umgebung in die andere Herstellung fallen gelassen werden (metaphorisch / als Simile) eine „Thunk“ Klang.

Kyle Simpson Definition, a thunk ist eine Art und Weise zu abstrahieren der Komponente von Zeit aus asynchronem Code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top