[Moscow.pm] Предикаты для не-программистов

Vladimir Timofeev vovkasm на gmail.com
Пн Дек 10 11:44:41 PST 2012


2012/12/10 Dmitry Simonov <dsimonov на gmail.com>:
> Вов! Для этой задачи есть тру-вей: разложение на дизъюнкции конъюнкций (или
> как альтернатива конъюнкции дизъюнкий), - они же "многочлены жигалкина".
> Задача в принципе несложная для решения вручную на коленке.
Да, только после трансформации входных данных в такой полигон, памяти
для представления вектора потребуется при самом-самом оптимистичном
раскладе 10Мбит
и на коэффициенты соотвественно. Что-то меня это напрягает.
Но за наводку спасибо, это мне немножко в другом месте может
пригодиться (на самом деле там сделано нечто очень похожее, но можно
окончательно формализовать).

Кстати, забыл добавить.
4. Конечно рассматриваю, но в низком приоритете, возможность поднять
книгу дракона, вооружиться yacc'ом и на коленке соорудить парсер
инфикса...

>
> ---
> Dmitriy V. Simonov,
> Perl & Python programmer
>
>
>
> 2012/12/10 Vladimir Timofeev <vovkasm на gmail.com>
>>
>> А вот есть задача.
>> Надо в админке позволить людям задавать предикаты в общей форме, к
>> примеру:
>> (objects({"type":["type1","type2"]}) < 10 AND
>> objects({"type":["type3"]}) < 5) OR special_condition("cond1")
>>
>> Синтаксис в примере выбран произвольно, набор допустимых ф-ций ограничен.
>> В процессе работы эти предикаты будут проверяться в достаточно
>> критичном к производительности коде.
>> Кто нибудь решал похожие задачи? Как?
>>
>> У меня сейчас несколько вариантов решения:
>> 1. Использовать perl + Safe
>> - Кривой синтаксис (если JSON пользователи админки уже знают с грехом
>> пополам, то учить еще perl явно выше их сил)
>> - Безопасность... насколько я понимаю с Safe не все так просто...
>> - Скорость... Safe её снижает
>>
>> 2. Использовать perl-решения...
>> Math::Symbolic?
>> Language::Expr?
>> Я ничего не знаю о них и не хочется напороться на утечки памяти и/или
>> неизлечимые проблемы производительности.
>>
>> 3. XS + внешняя библиотека, смотрел на
>> http://www.partow.net/programming/exprtk/index.html - современный C++
>> шаблон на шаблоне... пока страшно, но буду туда еще смотреть, возможно
>>
>> http://www.lua.org - вот к этому варианту склоняюсь пока больше всего.
>> Потому, что:
>> - легко встраивается
>> - знакомый синтаксис
>> - очень быстрый вызов C функций
>> - ему легко встроить вызов ф-ций типа objects или special_condition
>> (из примера, т.к. они у меня и так на C реализованы), но если
>> потребуется что-то из perl-овой части, то тоже пока проблем не вижу.
>>
>> --
>> Vladimir Timofeev <vovkasm на gmail.com>
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



--
Vladimir Timofeev <vovkasm на gmail.com>


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