Кто это делает
Вы найдете много интересного в сообществах React и ELM, а также в сообществах функционального программирования внешнего интерфейса.
Некоторые недавние платформы с полным стеком, которые каким-то образом пытаются обеспечить среду разработки такого типа:
Запуск Andreessen Horowitz / Y-Combinator, профинансированный на 2,3 миллиона долларов, от Криса Грейнджера, влиятельного программиста на Clojure, который уже создавал LightTables.
Технологии : Rust (бэкэнд), TypeScript (веб-интерфейс) с самодельной реализацией концепций React (что они называют «микрореакт»)
Не компания (пока?), Но поддерживаемая кампанией Patreon, от Пола Кьюзано (автора знаменитой книги "FP in Scala").
Технологии : Haskell (бэкэнд), ELM (интерфейс).
Примечание : вы можете видеть, что ребята, стоящие за этими инструментами, - опытные функциональные программисты. Проверьте, как это работает.
Как это работает -> функциональное программирование
Программы имеют состояние.
Почему Брет Виктор смог сделать это видео?
Потому что:
- его архитектура явно связана с мутациями состояния
- он использует функциональную чистоту
- он записывает исторические факты как состояние, а не текущее состояние пользовательского интерфейса
Одним из инструментов, вдохновленных этим докладом, является язык ELM.
ELM утверждает, что :
Так что в основе отладчика лежит дизайн самого Elm. Если вы делаете
не начинать с правильного выбора дизайна на уровне языка,
Создание путешествующего во времени отладчика быстро становится чрезвычайно сложным.
Даже языки, которые частично выполняют необходимый дизайн
требования будут иметь серьезные проблемы.
Итак, что вы действительно должны понять, это то, что интересует не технология, а базовая архитектура программного обеспечения . Если у вас есть архитектура, добавить такие функции отладки не так сложно.
Многие в сообществах ReactJS / Flux показали, что с такой архитектурой мы можем добиться действительно больших успехов. Дэвид Нолен из Om , вызванный ажиотажем ClojureScript, вероятно, является триггером, и Дан Абрамов недавно показал, что мы можем достичь очень похожих вещей, которые можно сравнить с отладкой Брета Виктора .
Я сам экспериментировал с записью видео сеансов пользователей в формате JSON , который также используется в архитектуре такого типа.
Итак, вы должны понимать, что то, чего он добивается, делается не умными трюками кода или супер языком, а действительно хорошими архитектурными паттернами.
Эти шаблоны даже не новы, они очень долго используются создателями баз данных и некоторыми разработчиками бэкэндов под разными именами, включая поиск команд / событий, ведение журнала ... Если вы хотите введение, то Confluent .IO блог - очень педагогический источник .
Проблема даже не в перезагрузке кода, а в том, что делать с состоянием после перезагрузки кода.
Что вам действительно нужно понять, так это то, что на этот вопрос нет однозначного ответа: все зависит от того, чего вы хотите достичь.
Например, в примере Брета Виктора с Марио, когда он изменяет некоторый параметр, такой как гравитация, вы можете видеть, что он может влиять как на прошлое (то, что он записал), так и на будущее (действия, которые он будет выполнять после кода менять). Это означает, что намерение пользователя переосмысливается в другом контексте, создавая новую историю фактов (часто называемую поиском команд).
Хотя это действительно интересно для видеоигр, как он показал, это абсолютно бесполезно для многих других приложений.Давайте рассмотрим пример приложения подотчетности, где налоговый процент может увеличиваться или уменьшаться с каждым годом.Вы действительно думаете, что изменение% налога за текущий год должно как-то повлиять на баланс 10 лет назад?Очевидно, что нет, но это все равно может повлиять на текущий год.
Кроме того, Mario позиционирует лоток при настройке параметра перехода, инструмент сам не может знать, что он должен отображать его для элемента Mario.Вы должны быть откровенными об этом, иначе это может сделать то же самое для облаков или черепахи.И имеет ли смысл делать то же самое для приложения по подотчетности?
Я имею в виду, что это классная демонстрация, которая была хорошо подготовлена.Вы не можете получить подобную среду разработки, которая так хорошо работает из коробки.Но вы можете изучить архитектурные шаблоны, которые позволяют делать это легко, и использовать такие инструменты, как ELM / Om / Redux / Flux / ReactJS (и некоторые Haskell / Scala / Erlang тоже могут быть полезны!), Которые помогут вам в их реализацииправильно и предоставить вам как можно больше для горячей перезагрузки.