Что такое «удар»?

Я видел, как он использовался в программировании (в частности, в домене C ++) и понятия не имею, что это такое. Предположительно, это шаблон дизайна, но я могу ошибаться. Может ли кто-нибудь дать хороший пример трюка?

    thunk обычно относится к небольшому fragmentу кода, который называется функцией, выполняет какую-то небольшую вещь, а затем JUMP s в другое место (обычно функцию) вместо того, чтобы возвращаться к вызывающему. Предполагая, что цель JUMP является нормальной функцией, когда она вернется, она вернется к вызывающему абоненту thunk.

    Thunks может использоваться для эффективного использования множества полезных вещей

    • перевод протокола – при вызове из кода, который использует одно соглашение о вызове для кода, использующего другое соглашение о вызове, для перевода аргументов можно использовать thunk . Это работает только в том случае, если соглашения о возврате совместимы, но это часто бывает

    • обработка виртуальных функций – при вызове виртуальной функции многоуровневого базового classа в C ++ должна быть фиксация this указателя, чтобы он указывал на нужное место. thunk может это сделать.

    • динамические закрытия – при построении динамического закрытия функция закрытия должна иметь возможность получить контекст, в котором она была создана. Небольшой thunk может быть построен (обычно в стеке), который настраивает контекстную информацию в некоторых регистрах, а затем переходит к статическому fragmentу кода, который реализует функцию закрытия. Thunk здесь эффективно предоставляет один или несколько скрытых дополнительных аргументов функции, которые не предоставляются сайтом вызова.

    Слово «ум» имеет по меньшей мере три связанных значения в информатике. «Гром» может быть:

    • fragment кода для выполнения отложенных вычислений (аналогично закрытию)
    • функция некоторых реализаций таблиц виртуальных функций (аналогична функции обертки)
    • отображение машинных данных из одной системной формы в другую, как правило, по соображениям совместимости

    Обычно я видел, как он использовался в третьем контексте.

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

    Некоторые компиляторы для объектно-ориентированных языков, таких как C ++, генерируют функции, называемые «thunks», в качестве оптимизации вызовов виртуальных функций при наличии множественного или виртуального наследования.

    Снято с: http://en.wikipedia.org/wiki/Thunk#Thunks_in_object-oriented_programming

    Термин thunk первоначально ссылался на механизм, используемый реализацией Royal Radar Establishment пропусков по имени в их компиляторе Algol60 . В общем, это относится к любому способу индуцирования динамического поведения при ссылке на кажущийся статический объект. Термин был изобретен Брайаном Вихманном, который, попросив объяснить пропущенное имя, сказал: «Ну, вы выходите, чтобы загрузить значение из памяти, а затем внезапно – thunk – там вы оцениваете выражение».

    Thunks были помещены в оборудование (см. KDF9, мэйнфреймы Берроуза). Существует несколько способов реализовать их в программном обеспечении, причем все это зависит от конкретной машины, языка и компилятора.

    Этот термин получил обобщение за пределами пропусков, чтобы включить любую ситуацию, в которой по-видимому или номинально статическая ссылка на данные вызывает динамическое поведение. Связанные термины include «батут» и «будущее».

    Существуют значительные различия в использовании. Почти универсально, тон является функцией, которая (по крайней мере концептуально) необычно мала и проста. Обычно это какой-то адаптер, который дает вам правильный интерфейс к чему-либо (некоторые данные, другая функция и т. Д.), Но, по крайней мере, рассматривается как малое.

    Это почти как форма синтаксического сахара, за исключением того, что (по крайней мере, как обычно используется) синтаксический сахар должен заставить вещи выглядеть так, как хочет, чтобы их читал человеческий читатель, а трюк должен сделать что-то похожее на то, как компилятор хочет видеть это.

    Я собираюсь рассмотреть это, но я думал, что thunking был процессом, используемым 32-разрядным процессором для запуска старого 16-битного кода.

    Я использовал его как аналог того, как вам нужно ограничивать, как быстро вы говорите, и какие слова вы используете, когда разговариваете с немыми людьми.

    Да, это в ссылке Википедии (часть о 32-битной, а не моей нердалогии ).

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

    Большая часть литературы, посвященной совместимости, относится к различным платформам Wintel, включая MS-DOS, OS / 2, [8] Windows [9] [10] и .NET, а также к переходу от адресации с 16-разрядной до 32-разрядной памяти , Поскольку клиенты перешли с одной платформы на другую, thunks были необходимы для поддержки устаревшего программного обеспечения, написанного для более старых платформ.

    (выделено мной мной)

    Этот вопрос уже задан на SO, см.

    Что такое «удар», как используется в Схеме или вообще?

    Из того, что я могу сказать, это похоже на заявление lambda, где вы можете не захотеть вернуть значение, пока вам не понадобится его оценить; или его также можно сравнить с получателем свойств, который по дизайну выполняет некоторый код, чтобы вернуть значение, но при этом имеет форму интерфейса, которая встречается скорее как переменная, но также имеет полиморфное поведение, которое можно поменять, будь то наследование или путем замены указателя функции, который будет оценивать и возвращать значение во время выполнения на основе времени компиляции или характеристик окружающей среды.

    Я был огорчен тем, что не нашел общего определения «компьютерной науки» этого термина, соответствующего его фактическому использованию, как это было исторически известно мне. Первая реальная встреча, которую я могу вспомнить, где она была фактически названа, была в OS / 2 днях и 16-32-битном переходе. Похоже, что «thunking» походит на иронию в ее применении сегодня.

    Мое грубое общее понимание заключается в том, что thunk – это заглушка, которая просто ничего не делает или не пересекает какую-то фундаментальную границу в натуральном выражении между системами, как в упомянутых исторических случаях.

    Таким образом, смысл подобен синестезии от того, чтобы быть выброшенным из одной среды в другую, создавая (метафорически / в качестве сравнения) звук «thunk».

    По определению Кайла Симпсона , thunk – это способ абстрагировать компонент времени из асинхронного кода.

    Давайте будем гением компьютера.