Введение

Техника компьютерного программирования
В компьютерном программировании, динамическая замена кода (monkey patching) — это техника, используемая для динамического изменения поведения участка кода во время выполнения. Она применяется для расширения или модификации кода динамических языков, таких как Smalltalk, JavaScript, Objective-C, Ruby, Perl, Python, Groovy и Lisp, без изменения исходного кода.

Этимология

Термин "monkey patch" (патч-обезьяна), по-видимому, произошел от более раннего термина "guerrilla patch", который обозначал изменение кода скрытно и, возможно, несовместимо с другими подобными патчами во время выполнения. Слово "guerrilla" (партизан), звучащее почти так же, как "gorilla" (горилла), превратилось в "monkey" (обезьяна), возможно, чтобы патч звучал менее устрашающе. Альтернативная этимология предполагает, что это отсылает к выражению "monkeying about" (баловаться, возиться) с кодом. Несмотря на название, "патч-обезьяна" иногда является официальным способом расширения функциональности программы. Например, веб-браузеры, такие как Firefox и Internet Explorer, ранее поощряли использование этого метода, хотя современные браузеры (включая Firefox) теперь имеют официальную систему расширений.

Определения

Определение термина варьируется в зависимости от сообщества, которое его использует. В Ruby, Python и многих других динамических языках программирования термин "monkey patch" относится исключительно к динамическим изменениям класса или модуля во время выполнения, вызванным желанием исправить существующий сторонний код как обходное решение для ошибки или функции, работающей не так, как ожидается. Другие способы изменения классов во время выполнения имеют другие названия, соответствующие их различным целям. Например, в Zope и Plone патчи безопасности часто поставляются с использованием динамического изменения класса, но они называются "горячими исправлениями".