[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