Ssylka

Nix: паттерн override для настройки пакетов

В Nix, для настройки пакетов часто используется паттерн override, позволяющий переопределять параметры дериваций. Этот подход основан на композиции функций, где каждая функция обрабатывает результат предыдущей, изменяя свойства исходной деривации. Функция makeOverridable добавляет к возвращаемому набору атрибут override, который принимает новые аргументы и возвращает результат вызова исходной функции с объединенными аргументами. Это позволяет повторно использовать существующие пакеты, изменяя их параметры без повторения кода.
Nix: паттерн override для настройки пакетов
Изображение носит иллюстративный характер

override не является методом в смысле ООП, а лишь атрибут набора, который добавляется через makeOverridable. Он позволяет настраивать пакеты на основе имеющихся, упрощая поддержку и обеспечивая гибкость. makeOverridable принимает функцию и набор начальных параметров, возвращая исходный набор с атрибутом override. Этот атрибут, в свою очередь, является функцией, принимающей новые параметры. Ключевое слово rec в реализации makeOverridable позволяет вызывать ее рекурсивно, обеспечивая возможность многократного переопределения.

Ключевая идея паттерна — возможность изменять пакеты в локальной среде без изменения исходных определений, сохраняя при этом возможность обновления до новых версий. Такой подход позволяет создавать изолированные окружения для тестирования и экспериментов с пакетами. Это особенно важно при использовании центрального репозитория, такого как nixpkgs, где есть возможность переопределять нужные пакеты на локальной машине.

Функция callPackage должна возвращать переопределяемые деривации, что позволит сделать процесс настройки пакетов еще более простым и гибким.


Новое на сайте

15341Крупнейший музей естественной истории Брайтона закрывается на масштабную модернизацию 15340Станут ли соколы-перепелятники новыми символами Вустерского собора? 15339Последний театр Глостера: борьба за возрождение Kings Theatre 15338Лишайники — кандидаты на выживание в суровых условиях Марса 15336Ханна Ритчи | Климатические технологии и как ИИ может помочь решить большие проблемы 15335Триумф хореографии: дебют эбони Кларк с «золушкой» отмечен престижной наградой 15334Тайны брачных ритуалов крупнейшей рыбы мира: загадка китовых акул у берегов острова... 15333Первое островное выставление: искусство Макса Корбетта на Джерси 15332Почему в честь Бенджамина Зефаниаха посадили лес и прочитали 65 стихов? 15331Вкус, который может подвести: отзыв печенья из-за "прогорклого вкуса" 15330Почему смертельные волны на восточном побережье Австралии стали причиной трагедии? 15329Почему месть не решает проблем: трагическая история актера из "Aano Qabiil" 15328Ушедшая звезда: жизнь и наследие Клода роджерс 15327Как театр помогает бороться с одиночеством в самом одиноком районе Лондона?