Могу ли я разобрать/скомпилировать скрипт ChaiScript один раз и вызывать его много раз?

Я пытаюсь определить, могу ли я использовать ChaiScript, но пока я очень обеспокоен тем, что, похоже, нет способа скомпилировать сценарий для последующего использования. Это может быть проблемой, если скрипт должен вызываться, например, сотни раз в секунду.

Все примеры, которые я нашел, относятся к функции C++, называемой eval, которая принимает весь скрипт в качестве аргумента и запускает его.

Так можно ли разделить этапы компиляции и запуска?


person David    schedule 06.06.2016    source источник
comment
Судя по экспериментам, я просто использую eval, чтобы запросить ссылку на функцию, а затем я могу просто вызвать эту функцию несколько раз напрямую. Вызывает ли это скомпилированный код напрямую?   -  person David    schedule 07.06.2016


Ответы (1)


Твой комментарий:

Судя по экспериментам, я просто использую eval, чтобы запросить ссылку на функцию, а затем я могу просто вызвать эту функцию несколько раз напрямую. Вызывает ли это скомпилированный код напрямую?

Это лучший способ справиться с этим. eval будет анализировать код ровно один раз. Когда вы возьмете std::function к результату и вызовете его, вы будете вызывать свой сценарий наиболее эффективным способом.

person lefticus    schedule 08.06.2016
comment
Ага, работает --- к сожалению, если есть проблема со скриптом, то механизм обработки исключений при перехвате исключения не дает полезной информации о проблеме. - person David; 09.06.2016
comment
Я исправлен --- хотя такие поля, как «детали» и «имя файла», не заполняются, довольно_print () возвращает полезную информацию. К сожалению, мне придется разделить результирующую строку, чтобы получить нужные мне части --- я не хочу просто отображать эту ошибку pretty_print для конечного пользователя. - person David; 09.06.2016
comment
@David У вас действительно есть доступ ко всему стеку вызовов во время ошибки: github.com/ChaiScript/ChaiScript/blob/develop/include/, но сейчас это далеко не тема для этого вопроса о переполнении стека. Я предлагаю вам перенести обсуждение на discourse.chaiscript.com - person lefticus; 09.06.2016
comment
Спасибо, я создал там учетную запись и разместил свои другие вопросы. - person David; 10.06.2016