Если Python exec и eval были скомпилированы? - PullRequest
5 голосов
/ 06 января 2011

Может ли эквивалент eval и exec существовать в скомпилированном языке?Если так, как они будут компилироваться (грубо говоря)?

Ответы [ 2 ]

5 голосов
/ 06 января 2011

Для начала, python - это скомпилированный язык, он просто выполняет компиляцию во время выполнения. При этом все, что вам нужно сделать для реализации eval на любом другом скомпилированном языке, это уметь запускать компилятор (и динамически загружать объектный код) - вы можете сделать это на Python (и на многих других языках) легко, потому что компилятор является неотъемлемой частью среды выполнения. Технически ничто не мешает программе, написанной на C, запускать компилятор и загружать результат во время выполнения (используя dlopen), это просто не обычное явление, поскольку среда выполнения C не требует компилятора, поэтому большинство пользователей этого не делают. есть один.

5 голосов
/ 06 января 2011

Конечно, в различных средах Лиспа эта возможность существовала десятилетиями.Компилятор Lisp обычно работает для каждой отдельной функции, а компилятор и система времени выполнения работают рука об руку.

При запросе чего-либо eval среда времени выполнения Lisp пропускает список (структура данных).компилятору для компиляции.Компилятор может генерировать машинный код (или, может быть, байт-код, в зависимости от системы), и тогда функция будет вызываться на машинном уровне, как и любая другая функция в программе.

...