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

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

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

СОДЕРЖАНИЕ
  • 1 Этимология
  • 2 Определения
  • 3 Приложения
  • 4 ловушки
  • 5 примеров
  • 6 См. Также
  • 7 ссылки
Этимология

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

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

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

Определения

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

Приложения

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

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

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

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

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

gt;gt;gt; import math gt;gt;gt; math.pi 3.141592653589793 gt;gt;gt; math.pi = 3.2 # monkey-patch the value of Pi in the math module gt;gt;gt; math.pi 3.2 ================================ RESTART ================================ gt;gt;gt; import math gt;gt;gt; math.pi 3.141592653589793 gt;gt;gt;
Смотрите также
Рекомендации
Последняя правка сделана 2023-03-21 04:14:11
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте