traduccion meaning c++ thunk

c++ - meaning - ¿Qué es un ''thunk''?



thunk meaning (9)

Algunos compiladores para lenguajes orientados a objetos como C ++ generan funciones llamadas "thunks" como una optimización de llamadas a funciones virtuales en presencia de herencia múltiple o virtual.

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

Lo he visto utilizado en la programación (específicamente en el dominio de C ++) y no tengo idea de qué se trata. Presumiblemente es un patrón de diseño, pero podría estar equivocado. ¿Alguien puede dar un buen ejemplo de un thunk?


El término thunk originalmente se refería al mecanismo utilizado por la implementación del Royal Radar Establishment de pass-by-name en su compilador Algol60 . En general, se refiere a cualquier forma de inducir un comportamiento dinámico al hacer referencia a un objeto aparentemente estático. El término fue inventado por Brian Wichmann, quien cuando se le pidió que explicara el nombre de la pasajera dijo: "Bueno, sales a cargar el valor de la memoria y luego de repente, al golpe, allí estás evaluando una expresión".

Los thunks se han puesto en hardware (compárese con KDF9, mainframes de Burroughs). Hay varias formas de implementarlos en el software, todos ellos muy específicos de la máquina, el lenguaje y el compilador.

El término se ha generalizado más allá de pasar el nombre, para incluir cualquier situación en la que una referencia de datos estática, aparente o nominalmente, induzca un comportamiento dinámico. Los términos relacionados incluyen "trampolín" y "futuro".


Esta pregunta ya ha sido formulada en SO, ver:

¿Qué es un ''thunk'', como se usa en Scheme o en general?

Por lo que puedo decir, es similar a una declaración lambda, donde es posible que no desee devolver el valor hasta que necesite evaluarlo; o también se puede comparar con un getter de propiedad que por diseño ejecuta algún código para devolver un valor mientras tiene el formulario de interfaz que se parece más a una variable, pero también tiene un comportamiento polimórfico que se puede intercambiar ya sea por herencia o por herencia. intercambiando el puntero de función que evaluaría y devolvería un valor en el tiempo de ejecución en función de las características ambientales o de tiempo de compilación.


Hay una variación considerable en el uso. Casi universalmente, un thunk es una función que es (al menos conceptualmente) inusualmente pequeña y simple. Por lo general, se trata de algún tipo de adaptador que le proporciona la interfaz correcta para una cosa u otra (algunos datos, otra función, etc.), pero al menos se considera que hace poco más.

Es casi como una forma de azúcar sintáctica, excepto que (al menos como se usa habitualmente) se supone que el azúcar sintáctico hace que las cosas se vean de la manera que el lector humano quiere verlas, y un truco es hacer que algo se vea como el compilador quiere Míralo.


La palabra thunk tiene al menos tres significados relacionados en la informática. Un "thunk" puede ser:

  • una pieza de código para realizar un cálculo retrasado (similar a un cierre)
  • una característica de algunas implementaciones de tablas de funciones virtuales (similar a una función de contenedor)
  • un mapeo de datos de la máquina de un formulario específico del sistema a otro, generalmente por razones de compatibilidad

Usualmente lo he visto usado en el tercer contexto.

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


Me angustié no encontrar una definición general de "ciencia de la computación" para este término que coincida con su uso de facto, como me era conocido históricamente. El primer encuentro de la vida real puedo recordar dónde se llamaba realmente que estaba en OS / 2 días y la transición de 16-32 bits. Parece que "thunking" es como la ironía en su aplicación de hoy.

Mi comprensión general aproximada es que el thunk es una rutina stub que simplemente no hace nada o enruta a través de algún límite fundamental en especie entre sistemas como en los casos históricos mencionados.

Entonces, el sentido es como una sinestesia de ser arrojado de un entorno a otro haciendo (metafóricamente / como un símil) un sonido "thunk".


Según la definición de Kyle Simpson , un thunk es una forma de abstraer el componente de tiempo del código asíncrono.


Voy a buscar esto, pero pensé que thunk era el proceso empleado por un procesador de 32 bits para ejecutar código heredado de 16 bits.

Solía ​​usarlo como una analogía de cómo tienes que restringir qué tan rápido hablas y qué palabras usas cuando hablas con personas tontas.

Sí, está en el enlace de Wikipedia (la parte de 32 bits, no mi nerdalogía ).

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

Gran parte de la literatura sobre interoperabilidad se relaciona con varias plataformas de Wintel, incluidas MS-DOS, OS / 2, [8] Windows [9] [10] y .NET, y con la transición de direcciones de memoria de 16 bits a 32 bits. . Como los clientes han migrado de una plataforma a otra, los thunk han sido esenciales para admitir el software heredado escrito para las plataformas más antiguas.

(énfasis agregado por mí)


Un thunk generalmente se refiere a un pequeño fragmento de código que se llama como una función, hace algo pequeño, y luego JUMP a otra ubicación (generalmente una función) en lugar de regresar a su llamador. Suponiendo que el objetivo JUMP es una función normal, cuando vuelva, volverá a la llamada del procesador.

Thunks se puede utilizar para implementar muchas cosas útiles de manera eficiente

  • Traducción de protocolo: cuando se llama desde un código que usa una convención de llamadas a un código que usa una convención de llamadas diferente, se puede usar un thunk para traducir los argumentos de manera apropiada. Esto solo funciona si las convenciones de retorno son compatibles, pero a menudo es el caso

  • gestión de funciones virtuales: cuando se llama a una función virtual de una clase base de herencia múltiple en C ++, debe haber una reparación de this puntero para que apunte al lugar correcto. Un thunk puede hacer esto.

  • cierres dinámicos: cuando se crea un cierre dinámico, la función de cierre debe poder acceder al contexto donde se creó. Se puede construir un pequeño thunk (generalmente en la pila) que configura la información de contexto en algunos registros y luego salta a un fragmento estático de código que implementa la función de cierre. El truco aquí está efectivamente proporcionando uno o más argumentos extra ocultos a la función que no son provistos por el sitio de llamadas.