Architecture
1. Overall Architecture
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
STD:::std
Core:::core
Tools:::tool
Functions:::function
View:::view
Crates:::crate
View --> Functions --> Tools & STD & Crates --> Core
Functions allows STD and Crate to be used by Tools through interfaces within Core.
2. Core
2.1 Profile
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
Profile{Profile}:::interface
subgraph Language Profiles
CProfile:::core
CPPProfile:::core
RustProfile:::core
GDScriptProfile:::core
end
CProfile & CPPProfile & RustProfile & GDScriptProfile --o Profile
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
Profile{Profile}:::interface
subgraph Target Profiles
TargetProfile:::core
GDExtensionExportProfile:::core
end
TargetProfile & GDExtensionExportProfile --o Profile
2.2 Module
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
subgraph Modules
ModuleModel:::core
Module{Module}:::interface
ModuleFiles{ModuleFiles}:::interface
ModuleChilds{ModuleChilds}:::interface
end
ModuleFiles --> AsyncRead & AsyncWrite
ModuleModel --o Module
Module --o ModuleChilds & ModuleFiles
3. Tools
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
Core:::core
subgraph Tools
Build:::tool
Clean:::tool
Run:::tool
Init:::tool
end
Tools --> Core
3.1 Build
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
Core:::core
subgraph Build
BuildPipelines[Build Pipelines]:::tool
Compilers:::tool
Linkers:::tool
BuildBackends[Build Backends]:::tool
end
Build --> Core
3.1.1 Build Pipelines
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
Profile:::core
subgraph Core
ModuleFiles{ModuleFiles}:::interface
end
CompilerFactory:::tool
LinkerFactory:::tool
subgraph Build Pipelines
BuildPipeline{BuildPipeline}:::interface
DefaultBuildPipeline:::tool
BuildPipelineFactory:::tool
end
BuildPipelineFactory --> DefaultBuildPipeline ---> CompilerFactory & LinkerFactory
BuildPipeline -----> Profile & ModuleFiles
DefaultBuildPipeline --o BuildPipeline
3.1.2 Build Backends
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
subgraph Backend
CargoBackend:::tool
MakefileBackend:::tool
NinjaBackend:::tool
CMakeBackend:::tool
end
3.1.3 Compilers
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
subgraph Compilers
Compiler{Compiler}:::interface
GCC:::tool
Clang:::tool
MSVC:::tool
Rustc:::tool
CompilerFactory:::tool
end
CompilerFactory --> GCC & Clang & MSVC & Rustc --o Compiler
3.1.4 Linkers
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
subgraph Linkers
Linker{Linker}:::interface
LLVMLinker:::tool
LinkerFactory:::tool
end
LinkerFactory --> LLVMLinker --o Linker
3.2 Clean
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
subgraph Core
ModuleFiles{ModuleFiles}:::interface
end
subgraph Clean
ModuleCleaner{ModuleCleaner}:::interface
DefaultCleaner:::tool
ModuleCleanerFactory:::tool
end
ModuleCleanerFactory --> DefaultCleaner --o ModuleCleaner ---> ModuleFiles
3.3 Run
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
subgraph Core
ModuleFiles{ModuleFiles}:::interface
end
subgraph Run
ModuleRunner{ModuleRunner}:::interface
DefaultRunner:::tool
ModuleRunnerFactory:::tool
end
ModuleRunnerFactory --> DefaultRunner --o ModuleRunner ---> ModuleFiles
3.4 Init
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
subgraph Core
Module{Module}:::interface
end
subgraph Init
ModuleInit{ModuleInit}:::interface
DefaultInit:::tool
GDExtensionInit:::tool
ModuleInitFactory:::tool
end
ModuleInitFactory --> DefaultInit & GDExtensionInit --o ModuleInit --> Module
4. Functions
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
ModuleInitFactory:::tool
ModuleRunnerFactory:::tool
ModuleCleanerFactory:::tool
BuildPipelineFactory:::tool
subgraph Functions
ModuleManager:::function
end
ModuleManager ---> ModuleInitFactory & BuildPipelineFactory & ModuleCleanerFactory & ModuleRunnerFactory
5. Views
%%{
init: {
'theme': 'redux dark',
}
}%%
graph BT
classDef core fill:#828, stroke: #f8f, stroke-width:2px, color: #fff;
classDef std fill:#228, stroke: #88f,stroke-width:2px, color: #fff;
classDef interface fill:#822, stroke: #f88,stroke-width:2px,stroke-dasharray: 5 5, color: #fff;
classDef crate fill:#882, stroke: #ff8,stroke-width:2px, color: #fff;
classDef tool fill:#282, stroke: #8f8,stroke-width:2px, color: #fff;
classDef function fill:#288, stroke: #8ff,stroke-width:2px, color: #fff;
classDef view fill:#852, stroke: #fb8,stroke-width:2px, color: #fff;
linkStyle default stroke:#fff, stroke-width:1px;
ModuleManager:::function
subgraph Views
Presenter:::view
CLI:::view
ConsoleView:::view
VSCodeExtension:::view
end
CLI & Presenter --> ModuleManager
ConsoleView & VSCodeExtension --> Presenter