Qu'est ce qu'un 'thunk'?
Je l'ai vu utilisé dans la programmation (en particulier dans le C++ de domaine) et n'ont aucune idée de ce que c'est. C'est sans doute un modèle de conception, mais je peux me tromper. Quelqu'un peut-il donner un bon exemple d'un thunk?
- Juste comme pour info, un thunk est aussi parfois appelé un "trampoline" (dans le cas général, peut-être pas dans le C++ de domaine).
- le seul contexte, j'ai vu le terme de "trampoline" utilisé est de Détours et dans ce contexte, un trampoline n'est pas un thunk.
- Le terme est le genre de chose qui n'ont pas de définition spécifique de sorte qu'il varie dans la définition.
Vous devez vous connecter pour publier un commentaire.
Un
thunk
se réfère généralement à un petit morceau de code qui est appelée comme une fonction, un petit truc, et puisJUMP
s à un autre endroit (généralement une fonction) au lieu de retourner à son appelant. En supposant que le SAUT de cible est une fonction normale, quand il revient, il sera de retour à la thunk de l'appelant.Thunks peut être utilisé pour mettre en œuvre beaucoup de choses utiles efficacement
protocole de traduction -- lors de l'appel de code qui utilise une convention d'appel à du code qui utilise une autre convention d'appel, un
thunk
peut être utilisé pour traduire les arguments de manière appropriée. Cela ne fonctionne que si le retour conventions sont compatibles, mais c'est souvent le casfonction virtuelle de manutention -- lors de l'appel d'une fonction virtuelle d'une multiplication, héritée de la classe de base en C++, il doit y avoir un fix-up de la
this
pointeur à l'obtenir pour pointer vers le bon endroit. Unthunk
peuvent le faire.dynamique fermetures -- lorsque vous créez une dynamique de fermeture, la fermeture de la fonction doit être en mesure d'obtenir dans le contexte où il a été créé. Un petit
thunk
peut être construit (généralement sur la pile), qui fixe le contexte de l'info dans certaines registre(s) et accède ensuite à une statique morceau de code qui implémente la fermeture de la fonction. Le thunk ici est effectivement la fourniture d'un ou de plus caché des arguments à la fonction, qui ne sont pas fournis par le site d'appel.this
), par défaut/constructeur de copie de fermeture (pour le meilleur CRT intégration de l'utilisateur fourni avec les paramètres par défaut, principalement pour l'exportation DLL ou la construction de tableaux),vcall
thunks (à assurez-vous que le pointeur-à-états-fonctions fonctionnent correctement avec des fonctions virtuelles),vtordisp
thunks (pour les classes qui en héritent & remplacer des fonctions virtuelles du virtuel bases, et ont également fourni par l'utilisateur ctors et/ou dtors), natif wrappers (pour appeler le C++/CLIUDT returning
" (qui semble être un thunk pour le réglage de types définis par l'utilisateur retournés par les opérateurs, mais je ne suis pas sûr de la façon de l'accomplir, je pense que c'est déconseillé). Il y a probablement d'autres, trop. Je suppose que vous ne pouvez jamais dire Microsoftthunk
pas; Descartes serait fier.Le mot de thunk a au moins trois significations dans l'informatique. Un "thunk" peut être:
calcul (similaire à une fermeture)
table des implémentations (similaire à un
fonction wrapper)
spécifiques à un système à un autre,
généralement pour des raisons de compatibilité
J'ai d'habitude vu qu'il est utilisé dans le troisième contexte.
http://en.wikipedia.org/wiki/Thunk
Prises à partir de: http://en.wikipedia.org/wiki/Thunk#Thunks_in_object-oriented_programming
Le terme de thunk à l'origine, désignait le mécanisme utilisé par le Royal Radar Établissement mise en œuvre de passer par nom dans leur Algol60 compilateur. En général, il désigne l'un quelconque de manière à induire le comportement dynamique lorsque le référencement d'un apparemment statique de l'objet. Le terme a été inventé par Brian Wichmann, qui, quand on lui demande d'expliquer par nom dit "eh Bien, vous allez charger la valeur de la mémoire et puis tout à coup - de thunk - là, vous êtes de l'évaluation d'une expression."
Thunks ont été mis en matériel (cf. KDF9, Burroughs mainframes). Il existe plusieurs façons de mettre en œuvre de logiciels, tous très de la machine, le langage et le compilateur spécifique.
Le terme en est venu à être généralisés au-delà de passe-par-nom pour inclure toute situation dans laquelle un apparemment statique des données de référence induit un comportement dynamique. Termes connexes comprennent "trampoline" et "avenir".
Il y a une variation considérable dans l'utilisation. Presque universellement, un thunk est une fonction (au moins conceptuellement) anormalement petit et simple. Il est généralement une sorte de carte qui vous donne la bonne interface pour une chose ou une autre (certaines données, une autre fonction, etc.) mais au moins, vu que le fait de faire, à peu de chose.
C'est presque comme une forme de sucre syntaxique, sauf que (à moins que d'habitude utilisé) sucre syntaxique est censé faire voir les choses de la façon dont le lecteur humain veut les voir, et un thunk est de faire quelque chose de regarder la manière dont le compilateur veut le voir.
Je vais regarder cela, mais je pensais que médiateur est le procédé employé par un processeur 32 bits pour exécuter l'héritage de code 16 bits.
J'ai utilisé de l'utiliser comme une analogie de la façon dont vous avez à limiter la vitesse à laquelle vous parlez et ce que les mots que vous utilisez lorsque vous parlez à des gens bornés qui.
Ouais, c'est dans le lien Wikipédia (la partie sur 32 bits, pas mon nerdalogy).
https://en.wikipedia.org/wiki/Thunk
(italiques ajoutés par moi)
Cette question a déjà été posée sur, voir:
Qu'est ce qu'un 'thunk", comme utilisé dans le Schéma ou en général?
De ce que je peux dire, il s'apparente à un lambda de déclaration, où vous ne voulez pas retourner la valeur jusqu'à ce que vous avez besoin de l'évaluer; ou il peut aussi être comparé à une propriété de lecture qui, de par leur conception permet d'exécuter un code afin de retourner une valeur, tout en ayant le formulaire d'interface qui vient à travers plus comme une variable, mais aussi a le comportement polymorphique qui peuvent être échangées que ce soit par héritage ou par changer le pointeur de fonction qui permettrait d'évaluer et de retourner une valeur au moment de l'exécution basé sur le moment de la compilation ou de caractéristiques environnementales.
J'ai été frustrée de ne trouver aucun général "computer science" de la définition de ce terme qui correspond à ses facto l'utilisation connue historiquement pour moi. Le premier combat de la vraie vie, je me souviens où il a été effectivement appelé qui a été dans l'OS/2 jours et le 16-32 bits de transition. Il semble "médiateur", c'est comme de l'ironie dans son application aujourd'hui.
Mon rough est entendu que le thunk est un stub de routine qui ne vient de rien ou de routes à travers certains frontière fondamentale de nature entre les systèmes que dans ce cas historiques.
De sorte que le sens est comme une synesthésie d'être éliminé de l'environnement à l'autre (métaphoriquement/comme une métaphore) un "thunk" sonore.
Par Kyle Simpson définition, un thunk est une sorte de résumé de la composante de la temps de code asynchrone.