Jump to content

Патч обезьяна

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

Этимология

[ редактировать ]

Термин «обезьяний патч», по-видимому, произошел от более раннего термина «партизанский патч» , который относился к скрытому изменению кода – и, возможно, несовместимому с другими подобными патчами – во время выполнения. Слово «партизан» , почти гомофонное слову «горилла» , превратилось в «обезьяна» , возможно, чтобы патч звучал менее устрашающе. [1]

Альтернативная этимология заключается в том, что это относится к «игранию» с кодом (возиться с ним). [ нужна ссылка ]

Несмотря на название, «monkey patch» иногда является официальным методом расширения программы. Например, такие веб-браузеры, как Firefox и Internet Explorer, поощряли это, хотя современные браузеры (включая Firefox) теперь имеют официальную систему расширений. [ нужна ссылка ]

Определения

[ редактировать ]

Определение этого термина варьируется в зависимости от сообщества, использующего его. В Руби , [2] Питон , [3] и многих других динамических языках программирования , термин «заплатка обезьяны» относится только к динамическим модификациям класса или модуля во время выполнения, мотивированным намерением исправить существующий сторонний код в качестве обходного пути к ошибке или функции, которая не работает должным образом. Другие формы изменения классов во время выполнения имеют разные имена в зависимости от их разных целей. Например, в Zope и Plone исправления безопасности часто доставляются с использованием динамической модификации классов, но они называются горячими исправлениями . [ нужна ссылка ]

Приложения

[ редактировать ]

Патчи Monkey используются для:

  • Заменять методы / классы / атрибуты / функции во время выполнения, например, чтобы заглушить функцию во время тестирования;
  • Изменять/расширять поведение стороннего продукта без сохранения частной копии исходного кода;
  • Применить результат патча во время выполнения к состоянию в памяти , а не к исходному коду на диске ;
  • Распространять исправления безопасности или поведения, которые находятся рядом с исходным исходным кодом (примером этого может быть распространение исправления в виде плагина для платформы Ruby on Rails );

Подводные камни

[ редактировать ]

Вредоносные, некомпетентно написанные и/или плохо документированные обезьяньи патчи могут привести к проблемам:

  • Они могут привести к проблемам обновления, когда патч делает предположения об исправленном объекте , которые больше не соответствуют действительности; новый выпуск вполне может сломать патч. По этой причине обезьяньи патчи часто делаются условными и применяются только в случае необходимости. [4]
  • Если два модуля пытаются выполнить обезьяний патч одного и того же метода , один из них (в зависимости от того, какой из них запускается последним) «побеждает», а другой патч не имеет никакого эффекта, если только обезьяньи патчи не написаны по шаблону, например alias_method_chain. [5]
  • Они создают несоответствие между исходным исходным кодом и наблюдаемым поведением, что может сбить с толку любого, кто не знает о существовании патча. Например, ядро ​​Linux обнаруживает проприетарные и другие сторонние модули, такие как драйвер Nvidia , которые вмешиваются в структуры ядра, поэтому разработчики не будут тратить свое время на попытки отладить проблему, которую они не могут исправить. [6]
  • Они могут быть написаны с использованием вредоносного кода для атаки на основную программу или друг на друга. Например, в 2009 году Джорджио Маоне, разработчик NoScript , атаковал расширение Adblock Plus для Firefox, добавив исключения, чтобы реклама на его собственных сайтах работала. Нарушающий код также гарантировал, что если пользователь попытается удалить исключения, они будут добавлены снова. Ссора вызвала всеобщий гнев, что привело к войне между новыми правилами блокировки рекламы, которые предлагались пользователям, после чего Маоне саботировал новые, что в конечном итоге привело к тому, что Mozilla вмешалась и изменила политику в отношении надстроек. [7]

В следующем примере Python корректируется значение числа Пи из стандартной математической библиотеки Python, чтобы оно соответствовало Закону штата Индиана о Пи .

>>> import math
>>> math.pi
3.141592653589793
>>> math.pi = 3.2   # monkey-patch the value of Pi in the math module
>>> math.pi
3.2
================================ RESTART ================================
>>> import math
>>> math.pi
3.141592653589793
>>>

См. также

[ редактировать ]
  1. ^ «Глоссарий — Определение «пятна обезьяны» » . Система управления контентом Plone . Архивировано из оригинала 22 января 2021 г. Проверено 2 июля 2021 г. когда кто-то очень тщательно создавал партизанский патч и старался избегать каких-либо сражений, они пытались придать ему менее убедительный вид, называя его обезьяньим патчем
  2. ^ Наттер, Чарльз Оливер. «Очистка Рубина» . Чарльз Оливер Наттер .
  3. ^ Бисвал, Бимал. «Обезьянье исправление в Python» . Советы по технологиям программного обеспечения . Решения Mindfire. Архивировано из оригинала 22 августа 2012 года . Проверено 9 декабря 2013 г.
  4. ^ Закас, Николас К. (2 марта 2010 г.). «Поддерживаемый JavaScript: не изменяйте объекты, которыми вы не владеете — Human Who Codes» . Человек, который кодирует .
  5. ^ «Новое в Rails: Module#alias_method_chain» . Рубин на рельсах .
  6. ^ «Испорченные ядра — Документация по ядру Linux» . www.kernel.org . Проверено 12 июля 2020 г.
  7. ^ Пол, Райан (4 мая 2009 г.). «Mozilla обдумывает изменение политики после битвы за расширения Firefox» . Арс Техника . Проверено 12 июля 2020 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6107b3f68af08e8490646993bcefe2cd__1711796520
URL1:https://arc.ask3.ru/arc/aa/61/cd/6107b3f68af08e8490646993bcefe2cd.html
Заголовок, (Title) документа по адресу, URL1:
Monkey patch - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)