Comments 12
Да это же Lisp
Из книги «Python for Fun» Copyright © 2021 Chris Meyers and Fred Obermann
FORTH — A simple stack oriented language
P.S. На Github ещё и есть другие проекты по интеграции Форт и Питон.
Да, тоже одна из первых мыслей – "каждый программист должен написать свой интерпретатор Lisp" (не помню автора).
Если уж делаете перевод, надо бы автора упомянуть не так вот: No time to play. Собственно, переводы нынче гугл прекрасно делает, автора желательно узнать, тема интересная.
Разве питон не скриптовый язык, что мешает просто делать eval() произвольного кода? Тогда можно и в одну строку обойтись
Вздрогнул.
Eval – очень стрёмный инструмент, почти всегда лучше сделать вместо него что-то урезанное (зато заточить под задачи пользователя). Ну или хотя бы обрабатывать его в какой-то песочнице.
В решении, описанном в статье, я не вижу никакой разницы. Что мешает мне подать на вход
["eval", "...", ["some code"]]
почти всегда лучше сделать вместо него что-то урезанное
Имено поэтому и встраивают Lua и подобные вещи, где можно легко и просто задать ограничения в духе "без доступа к сети и диску"
Этот код не выполнится, если явно не добавить функцию eval
в область видимости
script = ["print", "2 + 3 =", ["+", 2, 3]]
То есть что-то типа
script = ... нечто, прочитанное из внешнего файла ...
и вот тут оно и может как-то выполниться, если в файле не совсем список данных, а синтаксическим разбором автор намеренно не хочет заморачиваться.
Э... Не вижу, чтобы в scope клался eval. Так что ваш пример просто не сработает.
Готовые решения использовать проще, чем свой велосипед, это да.
Скриптинг без скриптинга