NewLang Project
Yet another programm language
Loading...
Searching...
No Matches
newlang::VariableScope Struct Reference

#include <context.h>

Public Attributes

TermID id
 
std::string ns
 
std::map< std::string, VariablePairvars
 

Detailed Description

Module - место хранения статических переменных, определенных в данном модуле RunTime - слабые ссылки на статические переменные из всех модулей (RunTime имеет как минимум один Module) Context - место хранения локальных (автоматических) переменных одного потока (Context имеет ссылку на RunTime)

Идеальный алгоритм "Туда-Сюда":

  • Исходный код программы является главным (исполняемым) модулем программы и парсится объектом Parser.
  • Во время парсинга могут быть загружены дополнительныей файлы или библиотеки, причем обработка главного модуля приостанавливается до обработки (загрузки) зависимых модулей или библиотек.
  • После заверешения парсинга, объект Parser содержит AST главного модуля и AST всех зависимостей.
  • AST главного модуля программы анализируется объектом AstAnalysis, во время которого выполняются все проверки кода и у каждого объекта формируется внутренний идентификатор.
  • Вариант 1: На основе AST генерируется исходный файл на C++ для последующей сборки clang в виде модуля или исполняемой программы в машинных кодах.
  • Вариант 2: Выполнение REPL
  • На основе информации из AST создается RunTime со встроенными функциями и учетом ограниченй по типам (для оптимиации могут быть исключены из использования отдельные типы данных/библиотеки, которые не потребуются при выполнении приложения (Tensor, Rational, Thread, Coroutines и т.д.).
  • RunTime создает объект Context и передает ему на выполнение AST главного модуля
  • Context начинает выполнять AST который может загружать зависимые модули и библиотеки (проверка по HASH ???) Выполнение заключается в создании объекта Module и пошаговой интерпретации последовательгности команд из AST

AST главной программы и всех модулей хранятся в RunTime (они только для чтения, чтобы их можно было проще читать из разных потоков). Context во время выполнения кода не изменяет AST в RunTime (захватывает блокировку RunTime только для чтения при поике объектов), но загрузка модулей происходит через захват RunTime на запись для изменения состава модулей и статических переменных.

В Context передается shared_ptr головного модуля, функция которого начинает выполняться (в основонм или отдельном потоке). VarScope - структура для хранения локальных и автоматических переменых в Context для одного уровня стека (области видимости)

Definition at line 46 of file context.h.

Member Data Documentation

◆ id

TermID newlang::VariableScope::id

Definition at line 47 of file context.h.

◆ ns

std::string newlang::VariableScope::ns

Definition at line 48 of file context.h.

◆ vars

std::map<std::string, VariablePair> newlang::VariableScope::vars

Definition at line 49 of file context.h.


The documentation for this struct was generated from the following file: