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

Dmitry Simonov dsimonov на gmail.com
Пн Дек 10 11:11:17 PST 2012


Вов! Для этой задачи есть тру-вей: разложение на дизъюнкции конъюнкций (или
как альтернатива конъюнкции дизъюнкий), - они же "многочлены жигалкина".
Задача в принципе несложная для решения вручную на коленке.

---
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
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20121210/f3c935c7/attachment-0001.html>


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