Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
cmake_minimum_required(VERSION 3.20 FATAL_ERROR)
message( "Configuring: ${CMAKE_CURRENT_SOURCE_DIR}")

set(CMAKE_PROJECT_VERSION 0.0.4 )
set(CMAKE_PROJECT_VERSION 0.0.5 )

# Project name
project( avm
Expand Down
40 changes: 30 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,22 +44,25 @@ The Associative Relations Model (ARM) is a mathematical model for storing and pr
- JSON serialization/deserialization (null, boolean, array, number, string, object)
- Logical operations (NOT, AND, OR) defined as truth tables in entity maps
- Conditional construct `If` with lazy evaluation of then/else branches
- Recursive functions via `Def`/`Call` with named parameters and recursion depth protection
- Relative addressing operator `[]` for evaluating functions via `eval()`
- Multi-dimensional relative addressing for passing arguments
- Expression interpreter `interpret()` for evaluating logical and conditional expressions from JSON
- Expression interpreter `interpret()` for evaluating logical, conditional and recursive expressions from JSON
- Sequential expression execution via JSON arrays for function definition and invocation

### Current Status

**Version: 0.0.4** (Alpha)
**Version: 0.0.5** (Alpha)

Implemented:
- JSON null, boolean, array, number (unsigned, integer, float), string, object serialization/deserialization
- Base vocabulary initialization (R, E, True, False, Unsigned, Integer, Float, String, Object, Not, And, Or, If)
- Base vocabulary initialization (R, E, True, False, Unsigned, Integer, Float, String, Object, Not, And, Or, If, Def, Call)
- Logical operations NOT, AND, OR with truth tables via entity map
- Conditional construct If with lazy evaluation (e.g. `{"If": [true, "yes", "no"]}` → `"yes"`)
- Recursive functions via Def/Call (e.g. `[{"Def": ["f", ["x"], body]}, {"Call": ["f", arg]}]`)
- Relative addressing operator `[]` via `eval()` function for computing logical functions
- Expression interpreter for evaluating logical and conditional expressions from JSON
- 147 unit tests + 16 JSON roundtrip tests
- Expression interpreter for evaluating logical, conditional and recursive expressions from JSON
- 179 unit tests + 16 JSON roundtrip tests
- CI/CD pipeline (GitHub Actions) for Linux, macOS, Windows

In Progress:
Expand Down Expand Up @@ -117,6 +120,13 @@ echo '{"If": [true, true, false]}' > cond.json
cat res.json # true
```

Recursive functions with Def/Call:
```bash
echo '[{"Def": ["myNot", ["x"], {"Not": ["x"]}]}, {"Call": ["myNot", true]}]' > rec.json
./avm rec.json
cat res.json # false
```

### Dependencies

- C++20 compatible compiler
Expand Down Expand Up @@ -164,22 +174,25 @@ AVM (Associative Virtual Machine) — проект, реализующий ви
- Сериализация/десериализация JSON (null, boolean, array, number, string, object)
- Логические операции (NOT, AND, OR), определённые как таблицы истинности в entity map
- Условная конструкция `If` с ленивым вычислением веток then/else
- Рекурсивные функции через `Def`/`Call` с именованными параметрами и защитой от бесконечной рекурсии
- Оператор относительной адресации `[]` для вычисления функций через `eval()`
- Многомерная относительная адресация для передачи аргументов
- Интерпретатор выражений `interpret()` для вычисления логических и условных выражений из JSON
- Интерпретатор выражений `interpret()` для вычисления логических, условных и рекурсивных выражений из JSON
- Последовательное выполнение выражений через JSON-массивы для определения и вызова функций

### Текущее состояние

**Версия: 0.0.4** (Альфа)
**Версия: 0.0.5** (Альфа)

Реализовано:
- Сериализация/десериализация JSON null, boolean, array, number (unsigned, integer, float), string, object
- Инициализация базового словаря (R, E, True, False, Unsigned, Integer, Float, String, Object, Not, And, Or, If)
- Инициализация базового словаря (R, E, True, False, Unsigned, Integer, Float, String, Object, Not, And, Or, If, Def, Call)
- Логические операции NOT, AND, OR с таблицами истинности через entity map
- Условная конструкция If с ленивым вычислением (например `{"If": [true, "да", "нет"]}` → `"да"`)
- Рекурсивные функции через Def/Call (например `[{"Def": ["f", ["x"], тело]}, {"Call": ["f", арг]}]`)
- Оператор относительной адресации `[]` через функцию `eval()` для вычисления логических функций
- Интерпретатор выражений для вычисления логических и условных выражений из JSON
- 147 модульных тестов + 16 JSON roundtrip тестов
- Интерпретатор выражений для вычисления логических, условных и рекурсивных выражений из JSON
- 179 модульных тестов + 16 JSON roundtrip тестов
- CI/CD пайплайн (GitHub Actions) для Linux, macOS, Windows

В разработке:
Expand Down Expand Up @@ -237,6 +250,13 @@ echo '{"If": [true, true, false]}' > cond.json
cat res.json # true
```

Рекурсивные функции через Def/Call:
```bash
echo '[{"Def": ["myNot", ["x"], {"Not": ["x"]}]}, {"Call": ["myNot", true]}]' > rec.json
./avm rec.json
cat res.json # false
```

### Зависимости

- Компилятор с поддержкой C++20
Expand Down
13 changes: 7 additions & 6 deletions analysis.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,8 @@ AVM (Associative Virtual Machine) — это проект, реализующи
| Заголовочный файл | ~473 строки (avm.h) |
| Внешние зависимости | nlohmann/json, LinksPlatform, str_switch |
| Лицензия | MIT |
| Unit-тесты | 147 модульных тестов |
| Тестовые файлы | 24 JSON файла |
| Unit-тесты | 179 модульных тестов |
| Тестовые файлы | 27 JSON файлов |

---

Expand All @@ -142,9 +142,9 @@ AVM (Associative Virtual Machine) — это проект, реализующи
Проект находится на стадии альфа-версии:

- **Концепция**: Хорошо проработана теоретически
- **Реализация**: JSON roundtrip полностью работает, логические операции реализованы, интерпретатор выражений работает, условная конструкция If с ленивым вычислением
- **Реализация**: JSON roundtrip полностью работает, логические операции реализованы, интерпретатор выражений работает, условная конструкция If с ленивым вычислением, рекурсивные функции через Def/Call
- **Документация**: Двуязычная документация, описание алгоритма сериализации
- **Тестирование**: 147 модульных тестов + 16 интеграционных, CI/CD на 3 платформах
- **Тестирование**: 179 модульных тестов + 16 интеграционных, CI/CD на 3 платформах
- **Готовность к использованию**: Прототип с работающей базовой функциональностью

---
Expand All @@ -158,10 +158,11 @@ AVM представляет собой интересный исследова
2. Создание публичного API для CRUD операций
3. Примеры использования и руководства
4. Пакеты для менеджеров зависимостей (vcpkg, Conan)
5. ~~Условные конструкции~~ ✅ If с ленивым вычислением (PR #28) и рекурсия в интерпретаторе
5. ~~Условные конструкции~~ ✅ If с ленивым вычислением (PR #28)
6. ~~Рекурсивные функции~~ ✅ Def/Call с параметрами и защитой от бесконечной рекурсии (PR #29)

---

*Дата анализа: январь 2026*
*Последнее обновление: февраль 2026*
*Версия проекта: 0.0.4*
*Версия проекта: 0.0.5*
16 changes: 11 additions & 5 deletions include/avm.h
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,8 @@ struct rel_t : obj_aspect<rel_t>,
static inline rel_t *And;
static inline rel_t *Or;
static inline rel_t *If;
static inline rel_t *Def;
static inline rel_t *Call;

protected:
rel_t()
Expand Down Expand Up @@ -365,11 +367,15 @@ struct rel_t : obj_aspect<rel_t>,
add_rel(And);
add_rel(Or);
add_rel(If);

Not->update(Not, E); // (NOT, Ent) — NOT есть сущность
And->update(And, E); // (AND, Ent) — AND есть сущность
Or->update(Or, E); // (OR, Ent) — OR есть сущность
If->update(If, E); // (IF, Ent) — IF есть сущность
add_rel(Def);
add_rel(Call);

Not->update(Not, E); // (NOT, Ent) — NOT есть сущность
And->update(And, E); // (AND, Ent) — AND есть сущность
Or->update(Or, E); // (OR, Ent) — OR есть сущность
If->update(If, E); // (IF, Ent) — IF есть сущность
Def->update(Def, E); // (DEF, Ent) — DEF есть сущность
Call->update(Call, E); // (CALL, Ent) — CALL есть сущность

// NOT: таблица истинности через entity map
// NOT[True] = False, NOT[False] = True
Expand Down
5 changes: 3 additions & 2 deletions plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@

#### Средний приоритет
4. ~~**Реализовать условные конструкции**~~ ✅ — If с ленивым вычислением через entity map и `interpret()` (PR #28)
5. **Добавить поддержку рекурсии** — рекурсивные определения функций
5. ~~**Добавить поддержку рекурсии**~~ ✅ — рекурсивные определения функций через `Def`/`Call` с параметрами и защитой от бесконечной рекурсии (PR #29)
6. **Создать стандартную библиотеку** — базовые функции и операции

#### Низкий приоритет
Expand Down Expand Up @@ -135,7 +135,7 @@
### Задачи по приоритетам

#### Критический приоритет (сделать в первую очередь)
1. ~~**Добавить unit-тесты**~~ ✅ — 147 модульных тестов (PR #9, #19, #20, #28)
1. ~~**Добавить unit-тесты**~~ ✅ — 179 модульных тестов (PR #9, #19, #20, #28, #29)
2. ~~**Настроить CI/CD**~~ ✅ — GitHub Actions для Ubuntu, Windows, macOS (PR #6)
3. ~~**Обеспечить кроссплатформенность**~~ ✅ — сборка для Linux, macOS, Windows (PR #6, #14)
4. ~~**Улучшить README**~~ ✅ — двуязычная документация (PR #2)
Expand Down Expand Up @@ -181,6 +181,7 @@
- ~~Логические операции и вычисления~~ ✅ NOT, AND, OR + оператор `eval()` (PR #19)
- ~~Интерпретатор выражений~~ ✅ вычисление логических выражений из JSON через `interpret()` (PR #20)
- ~~Условные конструкции~~ ✅ If с ленивым вычислением через entity map (PR #28)
- ~~Рекурсивные функции~~ ✅ Def/Call с параметрами и защитой от бесконечной рекурсии (PR #29)
- Персистентное хранение
- API для программного использования
- Примеры и руководства
Expand Down
Loading
Loading