openlang

Можно ли ограничить требования расширения...?

Мне интересно, можно ли управлять зависимостями расширения…

Вот ситуация, с которой я столкнулся.

Есть пакет Q с некоторыми зависимостями. Он относится к пакетам, которые определяют интерфейс и одновременно предоставляют несколько разных реализаций этого интерфейса. Для работы этим реализациям нужны зависимости вроде HTTP 1.

Теперь я разрабатываю пакет R. Он почти готов, и я хочу написать расширение для Q, реализующее интерфейс R, назовём его QRExt. Самому Q HTTP не нужен, поэтому добавлять эти зависимости в список зависимостей Q я не хочу. Однако само расширение QRExt для работы зависит от HTTP. Сейчас это работает, поскольку Q уже зависит от HTTP, так что загрузка Q делает HTTP доступным и QRExt успешно его импортирует.

Проблема в том, что эта схема случайна и может измениться. Со временем Q может перейти на HTTP 2. Тогда QRExt импортирует HTTP, ожидая (1), вместо этого получит HTTP 2 и сломается. Основная проблема предположения “загрузка Q делает HTTP доступным” в том, что ничто явно не требует, чтобы оно оставалось верным.

Буду рад идеям, как с этим справиться.

Переведено с английскогоПоказать оригинал

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    Думаю, механизм weakdep может обеспечить большую часть нужного вам поведения, хотя при переходе Q на HTTP 2 останется несколько тонкостей. Тогда придётся обновить записи compat в R, чтобы QRExt мог разрешить новую версию Q, использующую HTTP 2. По-моему, это разумно и, вероятно, именно так и задумано?

    Переведено с английскогоПоказать оригинал
  2. Ссылка на ответ

    Если Q не зависит от HTTP, вместо вашего

    RQExt (я предпочитаю сначала указывать расширяемый пакет)

    Можно написать RQHTTPExt

    Тогда R сможет ограничить compat для HTTP в основном файле проекта

    Переведено с английскогоПоказать оригинал

Другие стороны того же вопроса

  1. Уменьшение шума в консоли docker-compose

    Когда docker-compose up запускает все сервисы в моей среде разработки, несколько контейнеров выдают сотни и сотни строк. Можн…

    Ответы 3Последняя активность bash
  2. Можно ли создавать модули расширения Python на языке D вместо C?

    Похоже, D умеет компоноваться с C. Я хочу написать модуль расширения Python на D. Не упускаю ли я какую-то причину, по которо…

    Ответы 2Последняя активность d
  3. Объявлять плагины Micro через Nix?🤔

    В python можно написать так: Python.withPackages (q: with q; [ fastapi ]) Есть ли аналогичный механизм для редактора Micro? М…

    Ответы 3Последняя активность nix