R
S__|__O
O _|_ S Fractal
R__|__/_|_\__|__R Triune
| \_|_/ | Entity
S | O
__|__
/ | \
/___|___\
jsonRVM β ΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ "ΠΠΎΠ΄Π΅Π»Ρ ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ" (Relations Model, RM). ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ ΠΊΠ°ΠΊ Π±Π°ΠΉΡΠΊΠΎΠ΄.
ΠΠΎΠ΄Π΅Π»Ρ ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ β ΡΡΠΎ ΡΠ·ΡΠΊ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π³Π΄Π΅ Π²ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ:
-
Π‘ΡΡΠ½ΠΎΡΡΠΈ (Entities) β Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π² Π²ΠΈΠ΄Π΅ JSON-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²:
- ΠΡΠΈΠΌΠΈΡΠΈΠ²Ρ: ΡΠΈΡΠ»Π°, ΡΡΡΠΎΠΊΠΈ, Π±ΡΠ»Π΅Π²Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
- Π‘ΠΎΡΡΠ°Π²Π½ΡΠ΅ ΡΠΈΠΏΡ: ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΎΠ±ΡΠ΅ΠΊΡΡ
- Π‘ΡΡΠ»ΠΊΠΈ:
$refΠ½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ - ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ:
$rel,$obj,$sub
-
ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΡ (Relations) β ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ:
$relβ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ (ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ)$objβ ΠΎΠ±ΡΠ΅ΠΊΡ (Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅)$subβ ΡΡΠ±ΡΠ΅ΠΊΡ (ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ)
-
ΠΠΎΠ½ΡΠ΅ΠΊΡΡΡ (Contexts) β ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ:
$entβ ΡΠ΅ΠΊΡΡΠ°Ρ ΡΡΡΠ½ΠΎΡΡΡ$relβ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅$objβ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ$subβ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠ±ΡΠ΅ΠΊΡ
- ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ β ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π° Π½Π΅ ΠΊΠ°ΠΊ
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ β ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ, ΠΌΠ°ΡΡΠΈΠ²Ρ β ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ
- ΠΠΎΠΌΠΎΠΈΠΊΠΎΠ½ΠΈΡΠ½ΠΎΡΡΡ β ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ JSON-ΡΡΡΡΠΊΡΡΡΡ
- Π Π°ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ β ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΡΠ΅ΡΠ΅Π· DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
- Π Π΅ΡΠ»Π΅ΠΊΡΠΈΡ β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠ³ΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π±Ρ
{
"$rel/result": {
"$obj": 1,
"$rel": "+",
"$sub": 1
}
}Π Π΅Π·ΡΠ»ΡΡΠ°Ρ: result = 2
{
"$rel": [
{
"$rel": "rmvm/load/dll",
"$obj": {
"PathFolder": "modules/",
"FileName": "network.dll"
}
},
{
"$rel": "add_entity",
"$obj": {
"name": "ΠΡΠΈΠΌΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΡ",
"components": [
{ "$ref": "/entities/logger" },
{ "$ref": "/entities/database" }
]
},
"$sub": "$ent/system_id"
}
]
}jsonRVM is a virtual machine for executing programs written in the declarative "Relations Model" (RM) language. Programs are represented in JSON format and interpreted by the virtual machine as bytecode.
Relations Model is a metaprogramming language where everything is represented as entities and their relations:
-
Entities β basic system elements as JSON objects:
- Primitives: numbers, strings, booleans
- Compound types: arrays, objects
- References:
$refto other entities - Executable constructs:
$rel,$obj,$sub
-
Relations β define interactions between entities:
$relβ relation (controller)$objβ object (input data)$subβ subject (result)
-
Contexts β execution hierarchy with access to:
$entβ current entity$relβ current relation$objβ current object$subβ current subject
- Declarative approach β describe what to do, not how
- Automatic parallelism β objects execute in parallel, arrays β sequentially
- Homoiconicity β code and data share the same JSON structure
- Extensibility β plugin support via DLL libraries
- Reflection β programs can analyze and modify themselves
{
"$rel/result": {
"$obj": 1,
"$rel": "+",
"$sub": 1
}
}Result: result = 2
{
"$rel": [
{
"$rel": "rmvm/load/dll",
"$obj": {
"PathFolder": "modules/",
"FileName": "network.dll"
}
},
{
"$rel": "add_entity",
"$obj": {
"name": "Example system",
"components": [
{ "$ref": "/entities/logger" },
{ "$ref": "/entities/database" }
]
},
"$sub": "$ent/system_id"
}
]
}- analysis.md β ΠΠ½Π°Π»ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° (ΡΠΈΠ»ΡΠ½ΡΠ΅ ΠΈ ΡΠ»Π°Π±ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ) / Project analysis (strengths and weaknesses)
- plan.md β ΠΠ»Π°Π½ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° / Development roadmap
- Doxygen Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ β ΠΠ²ΡΠΎΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ API
- doc/Introduction.md β ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΠΎΠ΄Π΅Π»Ρ ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ
- doc/RVM.md β ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ
- doc/RM.md β Π€ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΠΎΠ΄Π΅Π»ΠΈ ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ
- doc/Dictionary.md β Π‘Π»ΠΎΠ²Π°ΡΡ Π±Π°Π·ΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
- doc/relations-model-ru.md β ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΠΎΠ΄Π΅Π»ΠΈ ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ ΡΠ΅ΠΎΡΠΈΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² (Russian)
- doc/relations-model-en.md β Mathematical description of Relations Model in set theory terms (English)
- proofs/rocq/ β Π€ΠΎΡΠΌΠ°Π»ΡΠ½Π°Ρ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Rocq/Coq / Formal verification in Rocq/Coq
- examples/ β ΠΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° ΠΠΎΠ΄Π΅Π»ΠΈ ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ
- CMake 3.20+
- C++17 compatible compiler
- Windows (Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ DLL / for DLL support)
mkdir build && cd build
cmake ..
cmake --build .cmake -DENABLE_TESTS=ON ..
cmake --build .
ctest# ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΏΡΠ°Π²ΠΊΡ / Show help
rmvm.exe
# ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ JSON-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ / Execute JSON program
rmvm.exe program.json
# ΠΠ°Π³ΡΡΠ·ΠΈΡΡ DLL-ΡΠ»ΠΎΠ²Π°ΡΡ / Load DLL vocabulary
rmvm.exe vocabulary.dll
# ΠΠΎΠΊΠ°Π·Π°ΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ / Show base vocabulary
rmvm.exe rmvm.exeΠΡΠΎΠ΅ΠΊΡ Π»ΠΈΡΠ΅Π½Π·ΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ MIT License:
Copyright Β© 2016-2021 Vertushkin Roman Pavlovich
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- Vladimir Muravyev β ΠΏΠΎΠΌΠΎΡΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ° ΠΠΎΠ΄Π΅Π»ΠΈ ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ
- JSON for Modern C++ β ΡΠ°Π±ΠΎΡΠ° Ρ JSON
- doctest β unit-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- cpp-httplib β HTTP/HTTPS ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ
- xml2json β ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ XML Π² JSON
- str_switch β switch Π΄Π»Ρ ΡΡΡΠΎΠΊ

