KVS deps
maxim — 28.03.2016
Грепнул по коду какие функции mnesia используются в KVS. Эти
функции плотнячном покрывают триста строк кода.
-module('Mnesia').
start() -> ok.
stop() -> ok.
delete_table(T) -> ok.
delete_schema(T) -> ok.
system_info(T) -> ok.
change_table_copy_type(_,_,_) -> ok.
change_config(_,_) -> ok.
add_table_copy(_,_,_) -> ok.
add_table_index(_,_) -> ok.
table_info(_,_) -> ok.
system_info(_) -> ok.
create_schema(_) -> ok.
create_table(_) -> ok.
wait_for_tables(_,_) -> ok.
write(_,_) -> ok.
read(_) -> ok.
read(_,_) -> ok.
index_read(_,_,_) -> ok.
all_keys(_) -> ok.
activity(_,_) -> ok.
dirty_update_counter(_,_) -> ok.
И фиг что выбросишь, надо сделать сначала аннотации в AST, а потом кеширование на этих аннотациях, а потом ввести remote выражения которые подключаются сразу закешированными и не чекаются, а потом написать индуктивные биндинги для параметров и возвратов этого интерфейса, а потом написать минимальное приложение на ОМ (еще нет EXE, это паралельный процесс), которое проверит, что мнезия вызывается и возвращает то что нужно.
Это самая грязная и нечистая часть. Индуктивные биндинги в виде термов которые не чекаются. Каждый такой тип — суть эффект. Я вообще хотел отказаться от этой идеи но такая технология нужна как минимум для Nat и List, чтобы мапить это в integer и list эрланговые. Шовная линковка я это называю.
Вариант бесшовной линковки я описывал несколько постами ранее в посте про свободную монаду IO. Можно моделировать эффекты мнезии, добавив это в IO и передавая все функции mnesia в IO. В случае mnesia такое тоже можно рассматривать как вариант. Но в случае Nat и List согласитесь было бы глупо эти типы и еще 2 десятка эрланговых функций заворачивать как мегаблоб фукнций которые нужно передать как параметр в монаду IO.
IO должна сохранится простая, чтобы десятикласники ее поняли. Моей дочери придется выслушать про своодную монаду IO и косвободную комонаду IOI (моделирующую чистейший gen_server).
Вообщем если с Nat, List и еще несколькими ключевыми модулями, которые нет смысла на IO переписывать, — все понятно, то какой выбор сделать для индуктивной обертки вокруг Mnesia пока неясен. Понятно что в IO запихивать мнезию мы не будем, но Эффекты в стиле Idris — с глобальной и единственной свободной монадой вполне бы подошли для Mnesia.
Сигнатура программы работающей с mnesia выглядела бы как
Effect [IO,Mnesia]
Где экшин хендлеры эффектов выстраиваются в список монады Eff. Кто видел Idris тот в курсе, что другого пока лучше не придумали. Вообщем-то это все у нас тоже будет только в EXE, в OM у нас будет только IO и IOI для десятикласников.
С другой стороны если мы сделаем Mnesia сразу в виде шовных биндинг хаков, то мы сможем показывать примеры OM с работающей mnesia, зато типы
Теперь-то мне стало ясно как заблуждались архитекторы многих языков и базовых библиотек. Сегодня без хейтспичей, так что извините.
|
|
</> |
Первый ремонт без стресса: как разобраться в натяжных потолках
Женские стереотипы в понимании проблемы инцелов
Пенсия Байдена
Кипр открыл визовые центры в восьми городах России
Торможение двигателем на машине с автоматом или вариатором: что нужно делать и
Белый котик
Рождественский дождь на грибной улице
Что съесть, чтобы не проголодаться уже через полчаса
О "пользе" колодезной воды.

