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