Подтвердить что ты не робот

Что такое "удар"?

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Слово "тон" имеет по крайней мере три связанных значения в информатике. "Thunk" может быть:

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

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

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

Ответ 3

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

Взято из: http://en.wikipedia.org/wiki/Thunk#Thunks_in_object-oriented_programming

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

Что такое "thunk" , как используется в Схеме или вообще?

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

Ответ 7

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

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

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

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

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

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

Ответ 8

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

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

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