Posted on 2022-07-06

Спочатку було... погано

Колись давно, коли ви ще не були вигорівшими сініорами (десь пять років тому), хтось подумав «А що якщо замість тупорильского JS закачувати байткод у браузери і виконувати його, то може буде швидше працювати?». Зібрав тусу з браузерів і усі такі, «а давай спробуємо».

Спробували.

Але пробували робити не галерні ледарі, а серьйозні пацики, тож вони одразу думали як його так зробити, щоб потім не було бобо по секьюріті. І зробили таку собі jail вбудовану у саму суть контейнерів.

А ще вони подивились на світ навколо і вирішили що треба робити зручно і щоб різні мови можна було у такий байткод компілювати. І вирішили використовувати інтерфейси.

Тобто, якщо ти пишешь на Go чи на Rust, то ти просто реалізуєш інтерфейс для своєї функціі, компіліш її і вуаля, можешь дренькати її з браузра. З шаленою швидкістю у порівнянні з звичайним JS.

І шо?

Завдяки Web Assembly у браузери прийшов великий софт на кшталт лайтрума чи автокада, та будь шо. Навіть на маленьких сайтах деінде юзають wasm.

І все було добре. Але при розробці хлопці та дівчата забули, що майже усі fullstack девелопери то джаваскриптери з нодою, котрі як вуточки побачили вебассемблі і такі — ну треба його усюди тепер заюзати.

І почали тягнути його усюди. Десь добре приживається, десь не дуже.

І десь таки поприживалося

Наприклад, можна на любій мові написати плагін для різних балансерів. Раніше треба було якось за біндінги чеплятися, а ще й треба було розробити підтримку плагінів у программі. а зараз усе це реалізовано під єдиним протоколом.

І теперича, якщо ви хочете у envoy добавити свою логіку, то просто пишете плагін, компілите його у васм і додаєте у envoy, усе просто і швидко.

А от як заміна контейнерів — треба вже думати про доступ до стораджу та нетворку, то розробляють ось таке https://github.com/WebAssembly/component-model

Може й запрацює. Буде в нас Ерланг нової епохи.

десь так 🙂