On Wed, 20 Mar 2019 18:39:37 +0300 Dmitry V. Levin wrote: > On Wed, Mar 20, 2019 at 04:09:44PM +0300, Andrey Savchenko wrote: > > On Wed, 20 Mar 2019 16:04:22 +0300 Dmitry V. Levin wrote: > > > On Wed, Mar 20, 2019 at 03:56:23PM +0300, Andrey Savchenko wrote: > > > > On Wed, 20 Mar 2019 15:51:00 +0300 Dmitry V. Levin wrote: > > > > > On Wed, Mar 20, 2019 at 03:47:13PM +0300, Andrey Savchenko wrote: > > > > > [...] > > > > > > Наша система зависимостей на порядок проще, поэтому при надлежащей > > > > > > реализации проблем с временем быть не должно. > > > > > > > > > > У меня есть основания полагать, что это, к сожалению, не так. > > > > > > > > Прошу озвучить эти основания. У нас есть только BuildRequires > > > > и Requires. С точки зрения обсуждаемой задачи BuildPreReq можно > > > > приравнять к BuildRequires. > > > > > > У нас есть Provides, Requires, Conflicts, BuildRequires. > > > > > > (ещё существует BuildConflicts, но для вычисления сборочной среды > > > BuildConflicts не участвует и про него можно забыть). > > > > > > Все эти 4 вида зависимостей бывают версионированными с диапазоном версий. > > > У виртуальных пакетов (тех сущностей, которые фигурируют в Provides) > > > бывают альтернативные провайдеры, и выбор провайдера из множества > > > не является произвольным. > > > > Все эти виды зависимостей есть и в portage, все они могут быть > > версионированными, вирутальными, с диапазонами значений, вида A или > > B или C. Но кроме этого есть зависимости по флагам, со своими > > пересечениями, объединениями и условными зависимостями. И всё это > > работает за разумное время. > > Ну я же сильно упростил. Я тоже сильно упростил, умолчав про слоты, профили, попакетную настройку USE-флагов, сильные и слабые зависимости, сборочные хост зависимости для кросс-компилирования, логические ограничения на комбинации флагов и многое другое. И со всей этой неимоверной сложностью обсуждаемая задача решена и работает за разумное время (да, бывают баги, да, не всегда идеально, но работает), поэтому у меня волосы встают дыбом, когда мне говорят, что в Альте, на существенно более простой системе зависимостей, это якобы невозможно. > BuildRequires являются некоей функцией исходного > кода и сборочной среды, они вычисляются путём выполнения произвольного > кода внутри hasher chroot. Замечательно. Но ведь наша сборочница гарантирует воспроизводимость; значит, это не произвольный код, а вполне детерминированное состояние по входным параметрам; значит, это всё выстраивается в виде графа зависимостей между атомарными элементами и задача вполне разрешима. > Т.е. у нас зависимости гораздо более гибкие, но за эту гибкость приходится > платить. > > > Поэтому вполне возможна реализация решения подобной задачи за > > разумное время и в Альте. > > Для того, чтобы эта задача имела решение за разумное время, нам нужно > отказаться от избыточной гибкости и перейти на декларативные сборочные > зависимости. Не вижу такой необходимости. Любой гибкой зависимости в конечном счёте отвечает конкретный пакет, поэтому можно выстроить отображение гибких зависимостей на конкретные пакеты, их предоставляющие, поэтому задача сводится к задаче поиска на попакетных зависимостях с операторами AND, OR, NOT. Разумеется, решение этой задачи не пишется на коленке за полчаса и для её выполнения за разумное время наверняка понадобится более производительный язык, чем шелл. Best regards, Andrew Savchenko