Pull to refresh

Comments 12

Да, тоже одна из первых мыслей – "каждый программист должен написать свой интерпретатор Lisp" (не помню автора).

Если уж делаете перевод, надо бы автора упомянуть не так вот: No time to play. Собственно, переводы нынче гугл прекрасно делает, автора желательно узнать, тема интересная.

На оригинальную статью есть ссылка в самом верху статьи. Имени конкретного автора по ней не нашел — насколько я знаю, это коллективный блог.

Разве питон не скриптовый язык, что мешает просто делать eval() произвольного кода? Тогда можно и в одну строку обойтись

Вздрогнул.

Eval – очень стрёмный инструмент, почти всегда лучше сделать вместо него что-то урезанное (зато заточить под задачи пользователя). Ну или хотя бы обрабатывать его в какой-то песочнице.

В решении, описанном в статье, я не вижу никакой разницы. Что мешает мне подать на вход

["eval", "...", ["some code"]]

почти всегда лучше сделать вместо него что-то урезанное

Имено поэтому и встраивают Lua и подобные вещи, где можно легко и просто задать ограничения в духе "без доступа к сети и диску"

Этот код не выполнится, если явно не добавить функцию eval в область видимости

В статье есть большой пробел. Скриптовой движок подразумевает, что скрипт берётся из какого-то внешнего источника. А тут просто
script = ["print", "2 + 3 =", ["+", 2, 3]]

То есть что-то типа
script = ... нечто, прочитанное из внешнего файла ...

и вот тут оно и может как-то выполниться, если в файле не совсем список данных, а синтаксическим разбором автор намеренно не хочет заморачиваться.

Так данные из внешнего файла надо читать как строку и десериализовать через JSON, а не подключать как исходник через import

Э... Не вижу, чтобы в scope клался eval. Так что ваш пример просто не сработает.

Готовые решения использовать проще, чем свой велосипед, это да.

Sign up to leave a comment.

Articles