146 votes

Qu'est-ce qu'un "thunk"?

Je l'ai vu utilisé en programmation (en particulier dans le domaine C ++) et je ne sais pas ce que c'est. Vraisemblablement, c'est un motif, mais je peux me tromper. Quelqu'un peut-il donner un bon exemple d'un thunk?

150voto

Chris Dodd Points 39013

Un thunk se réfère généralement à un petit morceau de code qui est appelé en tant que fonction, fait un petit quelque chose, puis passe à un autre emplacement (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

  • la traduction de protocole -- 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 cas

  • fonction 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 une correction de l' this pointeur à l'obtenir pour pointer vers le bon endroit. Un thunk pouvez le faire.

  • dynamique des 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.

82voto

Robert Harvey Points 103562

Le mot de thunk a au moins trois significations dans l'informatique. Un "thunk" peut être:

  • un morceau de code pour effectuer un retard calcul (similaire à une fermeture)
  • une caractéristique de certains fonction virtuelle table des implémentations (similaire à un fonction wrapper)
  • un mappage de données de machine à partir d'un 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

17voto

OscarRyz Points 82553

Certains compilateurs pour les langages orientés objet tels que C ++ génèrent des fonctions appelées "thunks" en tant qu'optimisation des appels de fonctions virtuelles en présence d'un héritage multiple ou virtuel.

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

7voto

Jerry Coffin Points 237758

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.

5voto

MusiGenesis Points 49273

Je vais regarder cela, mais je pensais que le processus était utilisé par un processeur 32 bits pour exécuter du code 16 bits hérité.

J'avais l'habitude de l'utiliser comme analogie pour déterminer comment vous devez limiter votre vitesse de parole et les mots que vous utilisez lorsque vous parlez à des idiots.

Oui, c'est dans le lien Wikipedia (la partie sur 32 bits, pas ma nerdalogie ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X