На выходных зарелизил третию версию Act - самой быстрой + маленькой + корректной библиотеки для реактивных стейтов. Напомню, ее можно использовать в React и Svelte без биндингов!
Это становится интересно, кажется, она достаточно стабильна.
Возможно, она будет референсом для минимальной имплементации реактивных стейтов и в других ЯП, всего сотня строк в исходниках позволяют. Я их еще подрефакторил и немного комментариев накинул. А @dzakh_dev начал делать порт на ReScript! Уже стоит создавать организацию с репами под разные ЯП?)
Кому интересно, алгоритм:
Подписчик - источник истины. Подписываемся на компьютед акт, он собирает все свои используемые зависимости и их состояния (зеленые стрелки).
При чтении состояния компьютед акта, он просматривает список предыдущих зависимостей и сравнивает их свежее состояние с сохраненным состоянием. Ничего не изменилось - возвращаем текущий стейт акта; иначе запускаем компьютед и собирает список зависимостей с нуля.
Каждый мутируемый акт при его чтении сохраняет текущего подписчика - от которого чтение и идет (красные стрелки).
Каждый подписчик должен пройти весь граф, чтобы быть добавленным ко всем мутируемым актам.
Когда мутируемый акт меняет стейт, он очищает список подписчиков и вызывает их.
У компьютедов нет ссылок на тех кто от них зависит и это главное отличие от классического дерти чекинга.
Как вы, возможно, заметили, все списки иммутабельные.
Каждая нотификация об апдейте мутируемого акта имеет версию, которая помогает кэшировать посещенные компьютеды.
Основным ограничением является оверхед на чтение компьютеда вне ракции. Поскольку мы можем иметь кэш посещений только во время нотификации, любой апдейт в одном графе делает невалидным кэш другого графа. Но это редкий случай в полностью реактивной системе, и сама инвалидация обходится дешево. Еще может быть редкая(!) проблема с не отпиской от не используемого ActValue (я это исправлю попозже), подробнее в самом конце доков.
Задавайте вопросы, если что-то не понятно, постараюсь поправить описание.
Это становится интересно, кажется, она достаточно стабильна.
Возможно, она будет референсом для минимальной имплементации реактивных стейтов и в других ЯП, всего сотня строк в исходниках позволяют. Я их еще подрефакторил и немного комментариев накинул. А @dzakh_dev начал делать порт на ReScript! Уже стоит создавать организацию с репами под разные ЯП?)
Кому интересно, алгоритм:
Подписчик - источник истины. Подписываемся на компьютед акт, он собирает все свои используемые зависимости и их состояния (зеленые стрелки).
При чтении состояния компьютед акта, он просматривает список предыдущих зависимостей и сравнивает их свежее состояние с сохраненным состоянием. Ничего не изменилось - возвращаем текущий стейт акта; иначе запускаем компьютед и собирает список зависимостей с нуля.
Каждый мутируемый акт при его чтении сохраняет текущего подписчика - от которого чтение и идет (красные стрелки).
Каждый подписчик должен пройти весь граф, чтобы быть добавленным ко всем мутируемым актам.
Когда мутируемый акт меняет стейт, он очищает список подписчиков и вызывает их.
У компьютедов нет ссылок на тех кто от них зависит и это главное отличие от классического дерти чекинга.
Как вы, возможно, заметили, все списки иммутабельные.
Каждая нотификация об апдейте мутируемого акта имеет версию, которая помогает кэшировать посещенные компьютеды.
Основным ограничением является оверхед на чтение компьютеда вне ракции. Поскольку мы можем иметь кэш посещений только во время нотификации, любой апдейт в одном графе делает невалидным кэш другого графа. Но это редкий случай в полностью реактивной системе, и сама инвалидация обходится дешево. Еще может быть редкая(!) проблема с не отпиской от не используемого ActValue (я это исправлю попозже), подробнее в самом конце доков.
Задавайте вопросы, если что-то не понятно, постараюсь поправить описание.
❤8🔥8🤩1
artalog
Уверен что на эту фичу будет тренд в скором (тут не уверен) времени. Вопрос только кто сделает ее массово пригодной первым: реатом или другой фреймворк / либа?
Вот вам ещё поинт: описывая catch вы должны учитывать все возможные нижележащие ошибки. Ролбек же описывает только логику отката того кода где он описан.
🤔3🤡2
А вы знали что
Да, их придется импортитровать каждый раз из какого-то глобального файла констант. И это очень хорошо, так за ними проще следить.
process.exit() возвращает never и этим может гарантировать наличие ваших энвов? 😉Да, их придется импортитровать каждый раз из какого-то глобального файла констант. И это очень хорошо, так за ними проще следить.
👍20🔥5
https://learnxinyminutes.com/
Огромная подборка очень быстрых туториалов по разным технологиям и языкам программирования на разных языках (человеческих).
Огромная подборка очень быстрых туториалов по разным технологиям и языкам программирования на разных языках (человеческих).
❤🔥18👍3🔥2
https://www.loom.com/share/878294970d8e48919c819f35d0cd0da4
https://www.val.town/
Новая платформа для простого и быстрого прототипирования - закинули код в инпут и получили бесплатную лямбду в облаке. Есть возможность ссылаться на другие лямбды, секреты (приватные энвы), запуск по расписанию!
R.I.P. runkit.com
https://www.val.town/
Новая платформа для простого и быстрого прототипирования - закинули код в инпут и получили бесплатную лямбду в облаке. Есть возможность ссылаться на другие лямбды, секреты (приватные энвы), запуск по расписанию!
R.I.P. runkit.com
Loom
Val Town Demo (Sept 9, 2022)
🔥6❤2👍2
Forwarded from melikhov.dev
https://t.me/artalog/624
Фан-факт про JS, который вы, возможно не знали. В спеке JS не Integer, но есть абстрактная операция ToIntegerOrInfinity которая используется для приведения Number к целому числу. И работает она так, что просто отрезает всё, что находится за запятой — It converts argument to an integer representing its Number value with fractional part truncated, or to +∞ or -∞ when that Number value is infinite
Убедитесь сами, вот вам спецификация.
Фан-факт про JS, который вы, возможно не знали. В спеке JS не Integer, но есть абстрактная операция ToIntegerOrInfinity которая используется для приведения Number к целому числу. И работает она так, что просто отрезает всё, что находится за запятой — It converts argument to an integer representing its Number value with fractional part truncated, or to +∞ or -∞ when that Number value is infinite
Убедитесь сами, вот вам спецификация.
Telegram
artalog
А вот что бы вам совсем весело было.
👍4😁4👎1