Skip to content

Instantly share code, notes, and snippets.

@ilyaryabchinski
Created October 15, 2019 05:37
Show Gist options
  • Select an option

  • Save ilyaryabchinski/e28e5c0f8d75e385eab3e16fe8a38c6a to your computer and use it in GitHub Desktop.

Select an option

Save ilyaryabchinski/e28e5c0f8d75e385eab3e16fe8a38c6a to your computer and use it in GitHub Desktop.

This is a draft of russian talk about Reatom prerequisites and motivation. Lately, I hope, it will be translating to english.

Что стоит стейт-менеджер построить

Вступление

Спасибо всем контрибьюетрам

Иследовать и учится нужно нормально, а не как я.

Стейт-менеджер (СТМ) - реактивная база данных.

Модель - описание структурного типа данных и его зависимостей, применимо как к модулю, так и к всему приложению.

Хороший стейт-менеджер - это хорошие модель-менеджер.

Задачи стейт-менеджера

Существующие решения: сильные и слабые стороны

Можно ли сделать современный СТМ без Proxy

Отслеживание изменений - это интересный вопрос, ответ на который зависит от предполагаемого API, архитектуры, среды исполнения и ее возможностей (версия ЯП).

В основном есть два подхода: следить за входящими данными и следить за исходящими данными.

Например, Alt.js следит за тем что входит, редакс за тем что исходит

Средства:

Вывод типов - почему это не просто

Emulating a 4-Bit Virtual Machine in (TypeScript\JavaScript) (just Types no Script)

Тайпинги под Map с полным выводом типов

В выводе сильно помогают кортежи (Tuple) и, конечно, extends и infer. Мне углубится в HOT помогло изучение исходников библиотеки typescript-tuple

Рекурсия в типах запрещена, но есть хак. Хотя даже с хаком максимальная глубина рекурсии 8.

type AND<T extends any[]> = {
  step: ((...args: T) => any) extends ((x: infer X, ...xs: infer Xs) => any)
    ? Xs extends []
      ? X
      : X & AND<Xs>
    : never
  end: never
}[T extends [] ? 'end' : 'step']
// https://github.com/Microsoft/TypeScript/issues/29594#issuecomment-507701193

Лично у меня компилятор падал при попытке вывести аккумулирующее дерево

Garbage collection (GC)

  • WeakMap плохо полифилятся
  • Хранение объектов по строковому ID в хешпаме не гарбаджколектится
  • Стейт все равно должен где-то хранится, вопрос будет ли он по дороге собирать ссылки

API библиотеки, DX и доступность

  • Простой и минималистичный апи. Перегрузки VS коллекция методов
  • Отсутствие бойлерплейта
  • Статические связи
  • Jump to defenition
  • Вывод статических типов
  • Тестирование
  • DI

API библиотеки и архитектура

Flux

детерменированность

Перечень антипатернов:

  • динамическое создание или изменение модели
  • циклические зависимости
  • игнорирование exception flow

Exceptions [control] flow

Event VS Intention

Event VS Intention

Glitches

example

https://stackoverflow.com/questions/25139257/terminology-what-is-a-glitch-in-functional-reactive-programming-rx

https://staltz.com/rx-glitches-arent-actually-a-problem.html

Теория графов

Все граф

Документация, инфраструктура, маркетинг

Спасибо всем контрибьюетрам

Материалы

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment