У меня есть веб-приложение. Как часть этого, мне нужно, чтобы пользователи приложения могли писать (или копировать и вставлять) очень простые скрипты, чтобы работать с их данными.
Скрипты действительно могут быть очень простыми, а производительность - только самая незначительная проблема. И пример сложности script я имею в виду:
ratio = 1.2345678
minimum = 10
def convert(money)
return money * ratio
end
if price < minimum
cost = convert(minimum)
else
cost = convert(price)
end
где цена и стоимость являются глобальными переменными (что-то, что я могу прокормить в среду и получить доступ после вычисления).
Однако мне нужно что-то гарантировать.
-
Любой запуск скриптов не может получить доступ к среде Python. Они не могут импортировать вещи, методы вызова, которые я явно не раскрываю для них, читать или записывать файлы, порождать темы и т.д. Мне нужно полное блокирование.
-
Мне нужно уметь установить ограничение на количество циклов, для которых выполняется script. Циклы - общий термин здесь. могут быть инструкциями VM, если язык скомпилирован. Apply-calls для цикла Eval/Apply. Или просто итерации через некоторый центральный цикл обработки, который запускает script. Детали не так важны, как моя способность прекратить что-то работать через короткое время и отправить электронное письмо владельцу и сказать, что "ваши скрипты, кажется, делают больше, чем добавление нескольких чисел вместе - разобрайте их".
-
Он должен запускаться на непатентованном CPython от Vanilla.
До сих пор я писал свой DSL для этой задачи. Я могу это сделать. Но я подумал, могу ли я построить на плечах гигантов. Есть ли мини-язык для Python, который будет делать это?
Есть много хакерских Lisp -вариантов (даже один, который я написал в Github), но я бы предпочел что-то с более неспецифическим синтаксисом (более C или Pascal, скажем), и поскольку я рассматриваю это как альтернатива кодированию, я хотел бы что-то более зрелым.
Любые идеи?