NewLang Project
Yet another programm language
|
#include <context.h>
Public Attributes | |
TermID | id |
std::string | ns |
std::map< std::string, VariablePair > | vars |
Module - место хранения статических переменных, определенных в данном модуле RunTime - слабые ссылки на статические переменные из всех модулей (RunTime имеет как минимум один Module) Context - место хранения локальных (автоматических) переменных одного потока (Context имеет ссылку на RunTime)
Идеальный алгоритм "Туда-Сюда":
AST главной программы и всех модулей хранятся в RunTime (они только для чтения, чтобы их можно было проще читать из разных потоков). Context во время выполнения кода не изменяет AST в RunTime (захватывает блокировку RunTime только для чтения при поике объектов), но загрузка модулей происходит через захват RunTime на запись для изменения состава модулей и статических переменных.
В Context передается shared_ptr головного модуля, функция которого начинает выполняться (в основонм или отдельном потоке). VarScope - структура для хранения локальных и автоматических переменых в Context для одного уровня стека (области видимости)
std::map<std::string, VariablePair> newlang::VariableScope::vars |