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.1 )
set(CMAKE_PROJECT_VERSION 0.0.2 )

# Project name
project( avm
Expand Down
34 changes: 22 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,21 +41,26 @@ The Associative Relations Model (ARM) is a mathematical model for storing and pr

- Implementation of a virtual machine for executing ARM-based code
- Support for structured data (arrays and associative arrays)
- JSON serialization/deserialization (null, boolean, array, number, string)
- Representation of logical operations and functions with arguments
- JSON serialization/deserialization (null, boolean, array, number, string, object)
- Logical operations (NOT, AND, OR) defined as truth tables in entity maps
- Relative addressing operator `[]` for evaluating functions via `eval()`
- Multi-dimensional relative addressing for passing arguments

### Current Status

**Version: 0.0.1** (Alpha/Proof-of-Concept)
**Version: 0.0.2** (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)
- Base vocabulary initialization (R, E, True, False, Unsigned, Integer, Float, String, Object, Not, And, Or)
- Logical operations NOT, AND, OR with truth tables via entity map
- Relative addressing operator `[]` via `eval()` function for computing logical functions
- 99 unit tests + 16 JSON roundtrip tests
- CI/CD pipeline (GitHub Actions) for Linux, macOS, Windows

In Progress:
- Logical operations (AND, OR, NOT)
- Relative addressing operator `[]`
- Expression interpreter for evaluating logical expressions in ARM
- Persistent storage integration with LinksPlatform

### Documentation

Expand Down Expand Up @@ -138,21 +143,26 @@ AVM (Associative Virtual Machine) — проект, реализующий ви

- Реализация виртуальной машины для исполнения кода на основе МАО
- Поддержка структурированных данных (массивы и ассоциативные массивы)
- Сериализация/десериализация JSON (null, boolean, array, number, string)
- Представление логических операций и функций с аргументами
- Сериализация/десериализация JSON (null, boolean, array, number, string, object)
- Логические операции (NOT, AND, OR), определённые как таблицы истинности в entity map
- Оператор относительной адресации `[]` для вычисления функций через `eval()`
- Многомерная относительная адресация для передачи аргументов

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

**Версия: 0.0.1** (Альфа/Прототип)
**Версия: 0.0.2** (Альфа)

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

В разработке:
- Логические операции (AND, OR, NOT)
- Оператор относительной адресации `[]`
- Интерпретатор выражений для выполнения логических выражений в МАО
- Персистентное хранение — интеграция с LinksPlatform

### Документация

Expand Down
71 changes: 35 additions & 36 deletions analysis.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ AVM (Associative Virtual Machine) — это проект, реализующи
- `array` — реализовано ✓
- `number` (unsigned, integer, float) — реализовано ✓
- `string` — реализовано ✓
- `object` — частично (в процессе разработки)
- `object` — реализовано ✓

#### 1.3. Эффективное представление примитивных типов
- Числа и строки представлены как битовые последовательности
Expand Down Expand Up @@ -70,11 +70,10 @@ AVM (Associative Virtual Machine) — это проект, реализующи

### 1. Функциональные недостатки

#### 1.1. Неполная реализация
- **JSON object** — сериализация/десериализация не завершена (возвращает `rel_t::E`)
- Отсутствует реализация логических операций (AND, OR, NOT), описанных в документации
- Нет реализации относительной адресации через оператор `[]`
- Функция `export_string` закомментирована и не завершена
#### 1.1. Незавершённые направления
- **Интерпретатор выражений** — выполнение логических выражений из JSON в МАО ещё не реализовано
- **Персистентное хранение** — интеграция с LinksPlatform не завершена
- Нет CRUD API для программного использования

#### 1.2. Отсутствие API для пользователей
- Нет публичного API для программного использования библиотеки
Expand All @@ -99,29 +98,27 @@ AVM (Associative Virtual Machine) — это проект, реализующи
- Отсутствует обработка крайних случаев (edge cases)
- Жёстко закодированные пути файлов (`"res.json"`)

#### 2.3. Отсутствие тестирования
- Нет автоматических unit-тестов
- Нет интеграционных тестов
- CMake настроен с `enable_testing()`, но тесты не определены
- Нет CI/CD конфигурации (GitHub Actions)
#### 2.3. Тестирование
- ~~Нет автоматических unit-тестов~~ ✅ 99 модульных тестов
- ~~Нет интеграционных тестов~~ ✅ 16 JSON roundtrip тестов через CTest
- ~~CMake настроен с `enable_testing()`, но тесты не определены~~ ✅ 17 тестов в CTest
- ~~Нет CI/CD конфигурации (GitHub Actions)~~ ✅ GitHub Actions для 3 платформ

#### 2.4. Проблемы переносимости
- Зависимость от Windows DLL (`doublets_ffi.dll.lib`) в CMakeLists.txt
- Скрипты сборки только для Windows (`build.bat`, `test.bat`)
- Отсутствует поддержка Linux/macOS
#### 2.4. Переносимость
- ~~Зависимость от Windows DLL~~ ✅ условная линковка только на Windows
- ~~Отсутствует поддержка Linux/macOS~~ ✅ кроссплатформенная сборка (Linux, macOS, Windows)

### 3. Документация

#### 3.1. Недостатки README
- README содержит устаревшую информацию
- Смешение русского и английского языков без структуры
- Ссылки на несуществующие файлы документации (`docs/mao_theory.md`, `docs/avm_guide.md`)
- Некорректное форматирование (неправильные метки языков в блоках кода)
#### 3.1. README
- ~~README содержит устаревшую информацию~~ ✅ актуальная двуязычная документация
- ~~Смешение русского и английского языков без структуры~~ ✅ раздельные секции English/Русский
- ~~Некорректное форматирование~~ ✅ исправлено

#### 3.2. Отсутствие технической документации
- Нет описания архитектуры
- Нет документации API
- Нет инструкций по сборке для разных платформ
#### 3.2. Техническая документация
- ~~Нет описания архитектуры~~ ✅ `analysis.md`
- ~~Нет документации API~~ частично: описание алгоритма в `serialization.md`
- ~~Нет инструкций по сборке~~ ✅ в README.md

---

Expand All @@ -135,34 +132,36 @@ AVM (Associative Virtual Machine) — это проект, реализующи
| Заголовочный файл | ~406 строк (avm.h) |
| Внешние зависимости | nlohmann/json, LinksPlatform, str_switch |
| Лицензия | MIT |
| Unit-тесты | 99 модульных тестов |
| Тестовые файлы | 17 JSON файлов |

---

## Оценка зрелости проекта

Проект находится на ранней стадии разработки (alpha/proof-of-concept):
Проект находится на стадии альфа-версии:

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

---

## Выводы

AVM представляет собой интересный исследовательский проект, демонстрирующий применение Модели Ассоциативных Отношений для представления и обработки данных. Проект имеет солидную теоретическую базу и работающий прототип, однако требует значительной доработки для достижения production-ready состояния.

Основные направления для улучшения:
1. Завершение реализации JSON object сериализации
2. Добавление автоматических тестов
3. Улучшение документации и README
4. Обеспечение кроссплатформенности
5. Создание публичного API
Основные направления для дальнейшего улучшения:
1. Создание интерпретатора выражений для МАО
2. Интеграция персистентного хранения (LinksPlatform)
3. Создание публичного API для CRUD операций
4. Примеры использования и руководства
5. Пакеты для менеджеров зависимостей (vcpkg, Conan)

---

*Дата анализа: январь 2026*
*Версия проекта: 0.0.1*
*Последнее обновление: февраль 2026*
*Версия проекта: 0.0.2*
58 changes: 51 additions & 7 deletions include/avm.h
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,9 @@ struct rel_t : obj_aspect<rel_t>,
static inline rel_t *Float;
static inline rel_t *String;
static inline rel_t *Object;
static inline rel_t *Not;
static inline rel_t *And;
static inline rel_t *Or;

protected:
rel_t()
Expand Down Expand Up @@ -353,14 +356,55 @@ struct rel_t : obj_aspect<rel_t>,
String->update(String, R); // String is subtype of R
Object->update(Object, R); // Object is subtype of R

// все связи не к E или R это подтипы от E и R, либо просто null
// json object {} определяет соответствие (ФБО) между множеством ключей и множеством значений
// если среди значений есть null значит
// null != []
// Логические операции / Logical operations
// Определяются как отображения через entity map (ent_aspect)
// NOT, AND, OR как описано в amr.txt

// нужен формат сериализации относительного адреса в строку
// строка значение и строка ключ могут различаться в АМО
// не стоит путать [] в json и в выражении индекса
add_rel(Not);
add_rel(And);
add_rel(Or);

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

// NOT: таблица истинности через entity map
// NOT[True] = False, NOT[False] = True
(*Not)[True] = False;
(*Not)[False] = True;

// AND: двумерная таблица истинности через вложенные entity map
// AND[arg1][arg2] = result
// Промежуточные сущности для частичного применения первого аргумента
auto and_true = rel_t::rel(); // AND[True]
auto and_false = rel_t::rel(); // AND[False]

(*And)[True] = and_true;
(*And)[False] = and_false;

// AND[True][True] = True, AND[True][False] = False
(*and_true)[True] = True;
(*and_true)[False] = False;

// AND[False][True] = False, AND[False][False] = False
(*and_false)[True] = False;
(*and_false)[False] = False;

// OR: двумерная таблица истинности через вложенные entity map
// OR[arg1][arg2] = result
auto or_true = rel_t::rel(); // OR[True]
auto or_false = rel_t::rel(); // OR[False]

(*Or)[True] = or_true;
(*Or)[False] = or_false;

// OR[True][True] = True, OR[True][False] = True
(*or_true)[True] = True;
(*or_true)[False] = True;

// OR[False][True] = True, OR[False][False] = False
(*or_false)[True] = True;
(*or_false)[False] = False;
}
~base_voc()
{
Expand Down
Loading
Loading