[devel] I: repocop test for %{get_version ...} is disabled.
Alexey Tourbin
at на altlinux.ru
Чт Авг 23 10:06:23 MSK 2012
On Thu, Aug 23, 2012 at 09:03:44AM +0400, Денис Смирнов wrote:
> On Thu, Aug 23, 2012 at 01:29:44AM +0400, Алексей Турбин wrote:
> AT> Гарантия разрешимости символов, которую дают set-версии, довольно высокая:
> AT> в предельном случае, когда по сравнению с предыдущей версией требуется
> AT> всего один новый символ, она зафиксирована на уровне не хуже 2^{-10}
> AT> т.е. около 0.1%. Когда требуется два новых символа, гарантия уже
> AT> подскакивает до милионной.
>
> Это не такой уж маленький процент при нашей пакетной базе. Однако
> увеличение объема индексов apt до создания более эффективной системы, мне
> кажется, неприемлимо.
Процент довольно маленький - если бы людей лечили с такой эффективностью,
мы бы жили в более счастливом мире. Попробуй удалить один используемый
символ из библиотеки, проверка срабатывает в среднем в 1535 из 1536
случаев. Это уже на уровне человеческого фактора. Попробуй удалить два
используемых символа - проверка срабатывает, грубо говоря, уже всегда.
Насчет индексов апта - set-версии составляют в них не более половины.
Их удалось ужать до практичного размера. Так что полагаю, что разговоры
насчет объема индексов apt и создания "более эффективной системы" политически
мотивированы.
$ l /var/cache/apt/pkgcache.bin
-rw-r--r-- 1 at rpm 58513368 Aug 22 03:31 /var/cache/apt/pkgcache.bin
$ strings /var/cache/apt/pkgcache.bin |grep ^set: |wc -c
25803870
$
У меня еще подключен репозиторий x86_64-i586, что делает размер
правдоподобным:
$ strings /var/lib/apt/lists/_ALT_Sisyphus_x86%5f64_base_pkglist.classic |grep ^set: |wc -c
13820628
$ strings /var/lib/apt/lists/_ALT_Sisyphus_x86%5f64-i586_base_pkglist.classic |grep ^set: |wc -c
11934095
> А вот у заведомо излишних зависимостей есть большая проблема -- они резко
> усложняют частичные обновления, что для меня более критичная проблема.
Зависимости %get_version не заведомо излишни, а просто они безосновательны
и глупы: зависимости должны выражать необходимые и достаточные условия, а
с помощью оператора >= можно выразить лишь достаточные условия, да и то с
очень большой натяжкой, поскольку сохранение обратной совместимости в
новых версиях ничем не гарантируется.
Короче, подписчикам следут меньше думать о том, что set-версии не дают
"абсолютной гарантии". Гарантия очень большая, а абсолютную гарантию,
как известно, дает только страховой полис.
That said, интересно подумать, что можно еще извлечь из set-версий.
Над чем я думал: можно внести поддержку прототипов по схеме, похожей на
C++ mangling - это довольно сложно, но не архисложно. Информацию о
прототипах можно извлекать из .debug файлов, которые автоматически
создаются на стадии brp-debuginfo. Над чем еще не думал: можно ли таким
образом контролировать структуру VMT в C++ (по некоторым данным, к этому
классу можно отнести около 1% изученных случаев бинарной несовместимости).
> --
> С уважением, Денис
>
> http://mithraen.ru/
Подробная информация о списке рассылки Devel