Diskussion:Thunk
Grober Unfug
BearbeitenDem Artikel mangelt es schon im ersten Satz an Vollständigkeit, denn als "Thunk" werden z.B. auch Funktionen ohne Parameter bezeichnet, etwa in der Sprache Scheme. Insofern ist der derzeitige Darstellung eher grober Unfug als eine auch nur halbwegs relevante und vollständige Erläuterung des Lemmas! --AaronEmi 13:31, 3. Jul. 2011 (CEST)
- Der Kritik, dass es dem Artikel an Vollständigkeit fehlen mag, stelle ich mich gerne. Dies jedoch als "Groben Unfug" zu bezeichnen halte ich für sehr übertrieben. Das impliziert, dass die derzeitige Darstellung grundsätzlich falsch wäre, was aber nicht der Fall ist. Sowohl in der im Artikel angegebenen Literaturstelle, als auch in der MSDN und englischsprachigen Wikipedia, nur um einige Quellen zu nennen, finden sich Beschreibungen, denen der Artikel grundsätzlich gerecht wird. Wenn parameterlose Funktionen auch als Thunk bezeichnet werden (wusste ich nicht - schon wieder was dazu gelernt), wäre der Artikel diesbezüglich besser zu ergänzen, als ihn schlicht als "groben Unfug" darzustellen. --Holgi01 18:40, 7. Aug. 2011 (CEST)
- MSDN ist, was Terminologie angeht ja wohl keine seriöse Quelle--gerade weil sie bestehende Terminologie überladen. Das Wort "Thunk" ist da nur ein Beispiel für Microsoft-Sprech. So wundert es auch nicht, dass es in der englischsprachigen Wikipeida neben dem Artikel zum eigentlichen Thunk natürlich auch einen zum Microsoft-Thunk gibt. Ich stimme Aaron zu: dieser Artikel klammert aus, was Thunks in ihrer ersten (nicht-Microsoft-) und urspünglichen Bedeutung sind. Das sollte der Artikel zuerst klären. artistoex 134.2.202.7 14:44, 15. Dez. 2011 (CET)
- Es ist tatsächlich "grober Unfug": Thunks werden eben nicht ausschließlich dazu verwendet, um Code in Fremdplattformen aufzurufen, das ist lediglich einer von mehreren Anwendungsfällen. Eine präzise Definition scheint es nicht zu geben, jeder Autor definiert den Begriff ein klein wenig anders. Joachim Durchholz (Diskussion) 13:31, 1. Jun. 2017 (CEST) (P.S.: Thunks *können* auch parameterlose Funktionen sein, aber weder ist jeder Thunk eine parameterlose Funktion, noch ist jede parameterlose Funktion ein Thunk; AaronEmi meinte das nur als ein deine Definition widerlegendes Beispiel, nicht als Definition.)
Erklärung nicht allgemein genug
BearbeitenDen Begriff "thunks" gibt es auch in ausserhalb .NET, z.B. spricht Scott Meyers in "Effective C++ in an Embedded Environment" im Zusammenhang mit der Implementierung von virtuellen Funktionen und Mehrfachvererbung durch einen Compiler von "thunks". Kennt jemand eine griffige, allgemeine Definition? Der Beitrag über .NET kann dann als Spezialisierung in einen eigenen Abschnitt übernommen werden.
Was bedeutet dieser Begriff eigentlich sprachlich? (nicht signierter Beitrag von Hobbitrose (Diskussion | Beiträge) 10:22, 6. Feb. 2014 (CET))
- Eric Raymond bezeugt, dass es eine humoristische Vergangenheitsform von "think" gewesen sei, siehe https://en.wikipedia.org/wiki/Thunk#cite_note-1 Joachim Durchholz (Diskussion) 13:31, 1. Jun. 2017 (CEST)
Definitionsversuch
BearbeitenVorab: Ich kenne keine formale Definition des Begriffs; vermutlich müsste man in "Thunks: A Way of Compiling Procedure Statements with Some Comments on Procedure Declarations" nachsehen, aber der Artikel steckt hinter der Paywall des ACM. Jedenfalls hier mein Versuch:
- Ein Thunk ist eine Funktion, die anstelle eines Parameterwerts übergeben wird. Die aufgerufene Funktion erhält also nicht einen Parameterwert zur direkten Verwendung, sondern muss den Thunk aufrufen, um einen verwendbaren Wert zu erhalten.
- Das erlaubt es, eine Codeschicht zwischen eine Funktion und die von ihr verwendeten Parameter zu legen. Ursprünglich wurde dies zur Implementation von Call-by-Name verwendet, aber die Technik dient auch Optimierungszwecken und dem Interfacing zwischen eigentlich inkompatiblen Softwaremodulen.
- Die aufgerufene Funktion muss in den meisten Programmiersprachen speziell so geschrieben werden, dass sie einen Thunk anstelle eines Parameters erhält.
Einfache Erklärung
BearbeitenEin thunk ist eine Funktion die eine Ausdruck kapselt um dessen Auswertung zu verzögern. ("Vergangsheitsform" von "to think"). Bsp:
- Ausdruck: 1 + 2
- Thunk: int foo() {return 1 + 2;} // Kann später ausgeführt werden um den Ausdruck 1 + 2 auszuwerten