Feb. 6th, 2008

akuklev: (Default)
Энергосберегающие лампы рулят. Купил себе отличную Осрамовскую в комнату. Кушает она всего 21 Вт, а светит как стоваттная. Причём, как абсолютно честные сто и хорошим тёплым светом.
Теперь по-ночам работать проще. Яркое освещение бодрит.
akuklev: (Default)
Программа должна делать то, что ей сказали. И это должно прописываться достаточно прямо. Все автомагические "угадывания", что хотел сказать программист следует немедленно отправлять на помойку. В том числе, автоматическую разрешалку конфликтов в гениальных Drools.

Даже если детально знаешь, как авторазрешалка конфликтов работает, всё равно можно проколоться в какой-нибудь редкой ситуации, о которой не задумался вначале. От этого совершенно никто не застрахован. Вот я казалось бы человек с весьма богатым опытом построения interlinked-систем и намётаным на дедлоки/конфликты глазом, а всё-равно написал стратегию поведения, в которой была дыра. И нашел только благодаря тому, что мне не лень было верифицировать эту хрень математически.

Дыра была связана с тем, что для авторазрешения конфликов применялся приоритет правил. Казалось бы, правило А важнее правила Б, поставим ему выше приоритет и всё. Но не всё так просто. Снижение приоритета правилу Б потянуло за собой третье правило В и возник перекос, который приводил к тому, что в определённой редкой ситуации самое важное правило А не срабатывало вообще. Что делать?
А делать вот что:
- В менее важном правиле Б следует писать ... «and not А». В случае применения автоордеринга это автоматически повлечёт выполнение правила два вначале, а если это невозможно, позволит найти deadlock в компайл-тайме.
- Ситуацию, когда верны оба, при необходимости разрулить руками. (Т.е. отдельным правилом)

Как избегать таких проблем принципиально:
- Принципиально запретить использование приоритетов и других непрозрачных механизмов, влияющих на принятие решений.
- Анализировать правила статическими методами в компайл-тайме, может ли возникнуть конфликт и сообщать об этом программисту.

Да, да, это в общем случае неразрешимая задача, но нас нифига не интересует общий случай, нас интересуют частные, в 95% которых это детектируется моментально. (потому что в 95% случаев система правил имеет структуру близкую к древовидной) В оставшихся пяти процентах случаев выдавать вместо ошибки предупреждение, что «система правил слишком сложна и мы ничего не гарантируем. Попытайтесь переписать попрозрачнее, и всем от этого будет польза».

December 2016

S M T W T F S
    123
456789 10
11121314151617
18192021222324
25262728293031

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 1st, 2025 09:52 am
Powered by Dreamwidth Studios