Обновить
16K+

$mol *

Мал, да удал

3,98
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Циклические реактивные зависимости

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели8.8K

Иногда мы можем столкнуться с циклическими зависимостями. Иногда мы можем захотеть сделать их намеренно. Например, при реализации конвертера между градусами Цельсия и Фаренгейта, где пользователь может изменить любое из двух значений, а второе должно автоматически пересчитываться.

Однако в подавляющем большинстве случаев циклические зависимости указывают на проблему с логикой, поэтому их обычно избегают. К счастью, логику даже такого конвертера можно всегда переписать так, чтобы не было циклических зависимостей.

Давайте посмотрим, как разные системы реагируют на эту чрезвычайную ситуацию, и как её не допускать, даже если очень хочется.

Вырваться из бесконечного цикла

Новости

Нужен ли здесь useEffect? «хороший» React-вариант и мол-вариант здесь один и тот же код

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели11K

На Хабре вышла хорошая статья «Нужен ли здесь useEffect?»: 12 сценариев из code review, в которых эффект либо не нужен, либо нужен не такой.

Я пишу на $mol и читал её как этнограф. в моле нет API эффектов. Во что превратятся все 12 демо, если их переписать ? Посмотрите ?. Сделал страницу с демками.

Спойлер: чек-лист из 12 строк в конце схлопнулся в …

Узнать про useEffect в $mol

Как мы делаем онлайн-режим для браузерной инди-игры, когда бюджет на сервера — $10 в месяц

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели11K

В прошлых статьях мы рассказывали про архитектуру ГИГАХРУЩА — браузерного survival horror с процедурной генерацией, WebGL-рейкастером и полноценным симулируемым миром (A-Life, Самосбор, физика) без использования готовых движков вроде Unity или Godot. Проект работает полностью локально, загружаясь в браузер за секунды.

Но что, если мы хотим добавить мультиплеер, где игроки смогут вместе ходить по одним и тем же бесконечным бетонным коридорам, встречать друг друга, отстреливаться от монстров и прятаться от гермодверей во время Самосбора?

Обычно для таких задач пишут выделенный headless-сервер на Node.js или C++, который крутится 24/7. Но у нас жесткое правило: мы делаем независимый проект с инфраструктурным бюджетом в $10/month. Мы не можем держать десяток мощных серверов, постоянно просчитывающих сотни процедурных этажей для пустого мира.

Вот как мы решили эту архитектурную задачу. Спойлер: браузер одного из игроков работает как полноценный сервер симуляции, а Cloudflare Durable Objects используются только как легковесный релей.

Читать далее

Гуманоидные роботы: От лабораторных экзоскелетов до домашних ассистентов за 40 тысяч долларов

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели5.4K

Интервью с Сергеем Лоншаковым, архитектором проекта «Робономика»: о том, почему роботы будут в спортивных костюмах, сколько стоят их пальцы и когда они начнут разбирать посудомойку.

Гуманоидные роботы перестали быть фантастикой — они стали реальностью, которая постепенно входит в нашу жизнь. Но так ли близок день, когда робот-помощник будет разбирать посудомойку, выносить мусор и встречать гостей? О том, что происходит в индустрии на самом деле, мы поговорили с Сергеем Лоншаковым — визионером компании AIRA и архитектором проекта «Робономика». За плечами Сергея — более десяти лет экспериментов с робототехникой, три поколения выпускников ИТМО и множество проектов от дронов-доставщиков до роботов-вафлипекарей.

Читать далее

Что брать на новый проект: валидный дефолт (React) или гринфилд ($mol)

Время на прочтение6 мин
Охват и читатели12K

Недавно под постом в канале MoscowJS разгорелся спор — со мной и организатором насчёт смола. Даже не столько насчёт смола, сколько в целом: стоит ли выбирать новые технологии или нет. Думаю, это касается не только смола, а любых новых фреймворков и библиотек.

Претензии вроде бы логичные, чтож, давайте разберем их

Читать далее

Исключения в реактивных системах

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели6.7K

Очень часто программисты не думают о чрезвычайных ситуациях. Особенно печально, когда это не разработчики приложений, а авторы библиотек и фреймворков.

Ошибок, конечно. не должно быть, как и других неприятностей в жизни, однако они иногда случаются. Вина ли это программиста, браузера, его расширений, операционной системы, звездного ветра — неважно. Нужно уметь принимать удар и не прятать голову в песок. Но в разных библиотеках мы сталкиваемся с очень разным поведением…

Исключить эту статью из непрочитанных

Большой каталог «на почитать» про $mol, web и не только

Уровень сложностиПростой
Время на прочтение15 мин
Охват и читатели8.9K

Реактивность лучше MobX, виртуализация рендеринга «из коробки», типизированные стили на TypeScript, локально-первая модель данных через CRDT — эти идеи Дмитрий Карловский (nin-jin) разрабатывает на своём фреймворке $mol и в проекте $hyoo.

За десять лет накопилось около сотни статей на Хабре и большая документация на mol.hyoo.ru, разбросанная по годам и площадкам — карта потерялась даже у тех, кто читал.

Этот каталог — навигатор по корпусу. 80+ материалов разложены по 12 темам:

с чего начать и для кого это вообще

история фреймворка от тизера 2016-го до обзора 2025-го

реактивность от первого «атома» 2014-го до свежего цикла 2026-го

архитектура: MAM, view.tree, виртуализация, CSS-in-TS

руководство по практике

утилиты: $mol_fetch, $mol_time, $mol_regexp, VaryPack, MarkedText

TypeScript-приёмы и принципы кода

$hyoo и Гипер База — распределённые данные на CRDT

сообщество, бенчмарки, аналитика проекта в цифрах

На каждый материал один абзац о сути и прямая ссылка на оригинал.

Полезно даже тем, кто не будет писать на $mol.

Читать далее

Перестройка реактивных потоков данных

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели6.4K

В реактивной системе все состояния связаны друг с другом инвариантами в единый граф. Когда мы изменяем что-то с одной стороны этого графа, рантайм обеспечивает каскадный пересчет зависимых состояний. Такие последовательности пересчетов — это ничто иное, как потоки информации (data-flow). Чем прямолинейнее эти потоки, чем меньше они разветвляются и затрагивают состояния, не относящиеся к изменениям, тем эффективнее работает система. И здесь есть два подхода к оптимизации потоков информации…

Погрузиться в информационный поток

Почему $mol?

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели12K

У $mol реактивность, локальное хранилище, оффлайн и темы приезжают одним пакетом. Минусы есть, но они почти все про коммьюнити и тулинг, не про сам код.

Начинаю с минусов, чтобы было честно. Потом — плюсы и таблица сравнения с React/Angular/Vue. Главная цифра: за 10 лет у $mol один мажорный релиз. У React за то же время 19 версий, у Angular 21.

Внутри: ОРП, view.tree, типизированный CSS, локализация без extractor-плагинов, виртуализация любой вёрстки автоматом, кросс-платформа Web/Tauri/MV3/TMA. Живые демо: треугольник Серпинского React vs $mol, корнер-кейс реактивности на Svelte, js-framework-benchmark с включённым $mol.

А почему не Vue ?

$mol Getting started

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели10K

Простой туториал, о том как начать работу с $mol. Приятная новость для фронтендеров - настраивать придется по минимуму, обещаю

Зайти на путь

Компонент сам себе стор, а внешний стор это антипаттерн

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели11K

Здравствуйте, товарищи! Эта статья про state management во фронтенде, с непривычного угла. За два года я ни разу не написал ни одного редьюсера. Расскажу, как я к этому пришёл, что слышу со стороны про сторы, и почему вам, особенно если вы только заходите во фронтенд, не надо учить Redux в принципе.

Сначала немного о себе, потом про то, что такое стор и почему я считаю его антипаттерном. Затем покажу, как без него живёт моё реальное приложение. И разберем возражения

Везде антипаттерны, да ?

MobX или приправа реактивности для JS

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели11K

Привет, Хабр!

Меня зовут Сергей Волков, я фронтенд-разработчик в компании VK. Мы используем MobX для работы с реактивными значениями в веб-приложениях, поэтому я хочу познакомить вас с этим инструментом и показать, почему на него стоит обратить внимание.

В этой статье я хочу поделиться своими мыслями о MobX - инструменте, который я искренне полюбил после многих лет разработки интерфейсов. Приятного чтения! :)

Читать далее

Детерминированность реактивных вычислений

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели6.6K

Порядок выполнения реактивных реакций имеет свои особенности, которые часто оставляют на волю случая. Однако давайте рассмотрим все возможные варианты…

Упорядочить понимание

Ближайшие события

Тонус в реактивных системах

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели6.1K

Вы можете вычислять зависимые реактивные состояния как можно раньше, так и как можно позже, вплоть до отказа от вычислений, если это возможно. Далее разберём, как делать это правильно.

Не полениться и прочитать

Предотвращение лишних реактивных вычислений

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели9K

Иногда значение меняется на эквивалентное. И здесь существуют разные подходы к отсечению вырожденных вычислений…

Глубоко погрузиться в тему

Вы неправильно пишете асинхронный Rust: .await там, где его не должно быть

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели11K

Самая распространённая ошибка в асинхронном Rust — убеждение, что .await означает «подожди, пока операция завершится». Слово в переводе буквально это и значит, поэтому многие расставляют .await после каждого асинхронного вызова, как точки в конце предложений.

А потом оказывается, что сервер обрабатывает один запрос вместо сотни одновременно, мьютекс намертво виснет с одним-единственным вызовом, отмена в select! теряет половину сообщений, и синхронная версия того же кода работает быстрее. Корень всех этих проблем один: .await не означает «жди». Он означает «дай исполнителю право приостановить меня здесь». И пока вы держите в голове первое значение, асинхронный Rust будет вас наказывать.

В статье рассмотрим что компилятор делает с async fn, зачем нужен Pin, как Tokio решает какую задачу опросить следующей, почему std::sync::Mutex в асинхронном коде иногда срабатывает как мина, и почему даже tokio::sync::Mutex может зависнуть.

Читать далее

Что такое Реактивное Программирование

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели11K

Реактивность может значительно упростить реализацию надёжных программ. Давайте рассмотрим, что нам нужно для её реализации и какие парадигмы реактивного программирования бывают…

Отреагировать на статью

Что всё таки не так с веб компонентами

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели8.7K

Господа, продолжаем разбиратся в тонкостях веб компонент. Сделал тут бенч - сравнениe фреймворков ( $mol/lit/symbiot ) по todomcv. Вроде говорим об одном, а бенч о другом, разве не так ? Ан-нет, что бы разобраться с веб компонентами нужны фреймворки которые ставят их во главу угла, те, кто "сделал на них ставку".

Вот что мне удалось понять:

Первое. Память: 124 байта на веб-компонент, и 16 байт на JS object. Разница на порядок, это много, и без виртуализации интерфейс скорее всего будет лагать

Что не так то опять ?)

Мифы о веб-фреймворке $mol

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели10K

Здравствуйте, меня зовут Дмитрий Карловский и я.. автор самого крутого на текущий момент (и в ближайшем будущем) фреймворка $mol. Вот уже десяток лет я рассказываю о заложенных в него идеях, которые конкуренты, если и пытаются повторить, то получается у них плохо. За это время вокруг него сложилось множество мифов, которые люди с радостью ретранслируют друг другу для самоуспокоения. Что ж, давайте соберём их все вместе, разберёмся, как они возникли, и как обстоят дела на самом деле.

Далее идёт развеивание мифов, касательно разработки "на $mol" в сравнении с разработкой "на React", как типичной ситуации в индустрии. Но вместо React вы смело можете подставлять любой другой его аналог.

Развенчать мифы

Что не так с веб-компонентами?

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.7K

Здравствуйте, меня зовут Дмитрий Карловский, и я пилил веб-компоненты, когда их ещё не придумали, делал полноценные компоненты на AngularJS, когда там ещё были только директивы, и разработал компоненто-ориентированный фреймворк $mol с инверсией контроля и статической типизацией, когда это ещё не было мейнстримом. Короче, я немного в теме. И сейчас я расскажу вам, почему мы сразу отказались от Web Components и почему у них нет никаких перспектив.

✔ Готов получить сарказм