Це дуже крутий результат! Але дуже цікаво чому, і чи не має тут історії про те, що не треба використовувати CLJS взагалі? 😁
Давайте розберемось. По-перше, одним з головних компонентів є емулятор терміналу, який він заново написав на расті — vt-rs. Це біля 2 тисяч строк коду відносно тисячі строк у vt-clj, але! Це ж взагалі найкращий юзкейс для мов з мутабельностю даних.
А у vt-clj відбувається неподобство, зі здоровезних масивів даних (ну як здоровезних,
width*height терміналу, ггг) генерувалися нові такі самі — думаю, що GC браузерів просто захлинався від такого нахабства. Тут навіть structural sharing занадто багато не допоможе. У цьому місці йому б треба було взяти ArrayBuffer, і перестати мучити худобу. :)) Але! Треба сказати, що я приємно здивований кількістю кода на расті, і пов'язую це з тим, що йому вже не прийшлося експериментувати з імплементацією, як у кложі.Інша велика зміна, яку він зробив — проміняв ReactJS на SolidJS. Каже, що набагато швидше, ніж реакт. Може, я не дуже в темі. Але що він робив до цього - використовував Reagent. Це дуже ергономічний і дуже неефективний врапер навколо реакту. Найбільша його проблема — він не компілює хікап (
[:div "smth"]) у виклики реакту, і робить це у рантаймі.Мені чомусь здається, що виправлення цих двох вже провело б його більшою частиною дороги у 50х. Авжеж, різниця була б меншою, але й часу пішло б менше. :) Але пацан вже забодався воювати, плюс експеримент вийшов вдалий, а feature surface не дуже великий — тому можна перероблювати на швидшу мову з більшим ефортом.
Взагалі, виглядає, як найкращий кейс зі "зробив експеримент — працює, але інструменти не підходять — переробив на щось більш вдале". Нажаль, він у пості нічого не каже за те, чи був сенс взагалі робити спочатку на CLJS, було б цікаво його думки з того приводу почути — особливо через якийсь час, коли вже наловить багів у тому, що є зараз. :)