Ahead-of-Time
Пример сборки с поддержкой Ahead-of-Time скриптов.
Сборка tutorial02_dasAot
Программа компилирует скрипты на daScript, но полученное дерево симуляции не выполняет, а отдаёт в visitor, который генерирует c++-код, строящий аналогичное дерево симуляции (без парсинга, и компиляции). tutorial02_dasAot
— пример кастомной утилиты генерации, в которой можно, например, дописать необходимые игре префиксы/постфиксы вроде путей к заголовочным файлам, инициализации или обёртки в неймспейсы. Собранный по умолчанию daScript
с ключом -aot
также может сгенерировать из das-файла соотвествующий ему c++-файл.
Генерация из скриптов cpp-файлов
Проект tutorial02_dasAotStub
— шаг генерации. Вручную может быть вызван как
tutorial02_dasAot.exe -aot tutorial02.das tutorial02_dasAotStub_tutorial02.das.cpp |
В настроенном через cmake проекте сгенерированный файл попадает в папку \daScript\examples\tutorial\_aot_generated\tutorial02_dasAotStub_tutorial02.das.cpp
Сборка игры с подключенной AoT-версией кода
Следующий шаг — сборки хост-приложения с подключенной к нему AoT-версией кода (tutorial02aot
).
int main( int, char * [] ) { |
При этом к программе прилинкован код файла tutorial02_dasAotStub_tutorial02.das.cpp
. По коду в нём можно понять, что будет происходить внутри виртуальной машины daScript:
//aotLib - таблица заполняется ссылками на "скомпилированное" дерево симуляции функций. |
Проверка
В скрипт tutorial2.das
можно добавить опцию options log_aot=true
, чтобы в output проверить, что скрипт использует AoT версию функцииtest AOT=0x217a567e6e416cd0 <----- AoT!
this tutorial utilizes basic builin module with constant and function
sq2 = 1.414213538 // expecting sqrt(2), 1.41421
a = 2 // expecting var a initialized with 2
xma = 3.000000000 // expecting 3
(можно отключить aot — policies.aot = false;
)