9 ответов:
A
thunkобычно относится к небольшому фрагменту кода, который называется функцией, делает какую-то мелочь, а затемJUMPs в другое место (обычно функция) вместо возврата к вызывающему объекту. Предполагая, что цель перехода является нормальной функцией, когда она возвращается, она вернется к вызывающему объекту thunk.Thunks может быть использован для реализации много полезных вещей эффективно
перевод протокола -- при звонке из кода, который использует один соглашение о вызове кода, который использует другое соглашение о вызове, a
thunkможет использоваться для перевода аргументов соответствующим образом. Это работает только в том случае, если соглашения о возврате совместимы, но это часто бываетвиртуальная обработка функций -- при вызове виртуальной функции многократно унаследованного базового класса В C++ необходимо исправить
thisуказатель, чтобы получить его, чтобы указать на нужное место. Аthunkмогу сделать этот.динамические замыкания -- при построении динамического замыкания функция замыкания должна иметь возможность получить контекст, в котором она была создана. Маленький
thunkможет быть построен(обычно в стеке), который устанавливает контекстную информацию в некоторых регистрах, а затем переходит к статическому фрагменту кода, который реализует функцию закрытия. Thunk здесь эффективно предоставляет один или несколько скрытых дополнительных аргументов функции, которые не предоставляются вызовом сайт.
слово преобразователь имеет, по меньшей мере, три взаимосвязанных значения в компьютерных науках. "Стук" может быть:
- кусок кода для выполнения задержки вычисление (аналогично замыканию)
- особенность некоторой виртуальной функции реализации таблицы (аналогично функция обертки)
- отображение машинных данных из одного системно-специфическая форма для другого, обычно по соображениям совместимости
Я обычно видел, как он используется в третьем контекст.
термин thunk первоначально относится к механизму, используемому Королевское Радиолокационное Учреждение реализация pass-by-name в их Algol60 компилятора. В общем случае это относится к любому способу индуцировать динамическое поведение при ссылке на явно статический объект. Термин был изобретен Брайаном Вихманом, который, когда его попросили объяснить проход по имени, сказал: "Ну, вы выходите, чтобы загрузить значение из памяти, а затем внезапно-thunk-там вы оцениваете выражение."
Thunks были помещены в аппаратные средства (ср. Kdf9, Burroughs mainframes). Существует несколько способов их реализации в программном обеспечении, все очень машина, язык и компилятор.
этот термин стал обобщаться за пределами pass-by-name, чтобы включить любую ситуацию, в которой внешне или номинально статическая ссылка на данные вызывает динамическое поведение. Термины включают "батут" и "будущее".
существует значительная вариация в использовании. Почти повсеместно thunk-это функция, которая (по крайней мере, концептуально) необычно мала и проста. Обычно это какой-то адаптер, который дает вам правильный интерфейс к чему-то или другому (некоторые данные, другая функция и т. д.) но, по крайней мере, рассматривается как мало что еще.
Это почти как форма синтаксического сахара, за исключением того, что (по крайней мере, как обычно используется) синтаксический сахар должен заставить вещи выглядеть так, как человек читатель хочет видеть их, и удар должен заставить что-то выглядеть так, как компилятор хочет это видеть.
Я собираюсь посмотреть это, но я думал преобразование был процесс, используемый 32-разрядным процессором для запуска устаревшего 16-разрядного кода.
Я использовал его в качестве аналогии для того, как вы должны ограничить, как быстро вы говорите и какие слова вы используете, когда говорите с тупыми людьми.
Да, это в ссылке Википедии (часть о 32-битной, а не моей nerdalogy).
https://en.wikipedia.org/wiki/Thunk
большая часть литературы по интероперабельности thunks относится к различным платформам Wintel, включая MS-DOS, OS / 2,[8]Windows[9][10] и .NET, и к переходу от 16-битной к 32-битной адресации памяти. Поскольку клиенты перешли с одной платформы на другую, thunks были необходимы для поддержки устаревшего программного обеспечения, написанного для более старых платформ.
(выделено мной)
этот вопрос уже был задан на SO, см.:
что такое "thunk", как используется в схеме или вообще?
из того, что я могу сказать, это похоже на лямбда-оператор, где вы можете не возвращать значение, пока вам не нужно его оценивать; или его также можно сравнить с геттером свойств, который по дизайну выполняет некоторый код, чтобы вернуть значение, но все же имеет форму интерфейса, которая больше похожа на переменную, но также имеет полиморфное поведение, которое может быть заменено путем наследования или путем замены указателя функции, который будет оценивать и возвращать значение во время выполнения на основе характеристик времени компиляции или среды.
Я был огорчен, не найдя общего "компьютерного" определения этого термина, соответствующего его фактическому использованию, известному мне исторически. Первая реальная встреча, которую я могу вспомнить, где она на самом деле называлась, была в OS/2 days и 16-32-битном переходе. Похоже, что "грохот" похож на иронию в его применении сегодня.
мое грубое общее понимание заключается в том, что thunk-это рутина заглушки, которая просто ничего не делает или маршрутизирует через некоторую фундаментальную границу в натуре между системами как в упомянутых исторических случаях.
на Кайл Симпсон определение, a thunk это способ абстрагировать компонент времени из асинхронного кода.
Comments