[devel] pythonegg requires; was: Re: Вопросы по развитию python.

Alexey Tourbin alexey.tourbin на gmail.com
Пн Май 30 09:11:23 MSK 2016


2016-05-29 23:59 GMT+03:00 Alexey Tourbin <alexey.tourbin на gmail.com>:
> 2016-05-29 22:15 GMT+03:00 Alexey Tourbin <alexey.tourbin на gmail.com>:
>> Здесь есть еще одно соображение: если код не сможет нормально
>> отработать, то он не отработает нормально в любом случае, так или
>> иначе, рано или поздно. Поэтому в рантайме нам не нужен циничный
>> прорицатель. Если балерина выбежала на сцену, то уже нет смысла
>> проверять, в форме она или нет. Пусть уж спляшет хоть как нибудь.
>
> Другими словами, циничный прорицатель всегда прорицает верхнюю грань,
> или худший случай. Но реальные code paths могут пройти ниже верхней
> грани, и тогда код отработает нормально. Если же код упрется в верхнюю
> грань, то тогда падение вследствие касания грани логически не
> отличается от запрета через прорицание.

Вот другой похожий пример, который поясняет "принцип балерины".
Кирилл К. как-то писал в G+:

        Did you know if you have a Makefile containing something like this:

        CFLAGS += $(shell pkg-config libxml-2.0 --cflags)
        LIBS += $(shell pkg-config libxml-2.0  --libs)

        then it will silently not work if pkg-config is not installed,
as GNU Make
        silently ignores error code of a command run by $(shell CMD)?

https://plus.google.com/+KirillKolyshkin/posts/2f78ZevaaqC

Потом он написал еще один пост, в котором попытался "решить" эту
проблему за счет переквизита компиляции в Makefile, примерно так:

have.pkgconfig+libxml2:
        pkg-config --exists libxml-2.0 && echo 1 >$@
%.o: have.pkgconfig+libxml2

К сожалению, я не нашел сейчас этого второго поста (возможно, Кирилл
его стер). Я ответил ему примерно так: какая разница, где у тебя
упадет сборка, на стадии pkg-config или на стадии #include
<libxml/...>? В имеющейся модели сборка проходит как бы в жестяной
банке, в которой собирающийся пакет никак не может повлиять на наличие
своих пререквизитов. На пререквизиты можно повлиять только на уровне
сборочных зависимостей. Так что я бы оставил конструкцию с CFLAGS и
т.д. как есть. Пусть балерина танцует, пусть сборка идет своим
чередом; если балерина станцует - то хорошо, а если не станцует - то
опережающее предсказание здесь всё равно не нужно.


Подробная информация о списке рассылки Devel