Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!01.11.2023
Порівняння API вводу/виводу JavaScript та Go
Так вже вийшло, що останнім часом я спочатку працював з потоками в JavaScript (модуль stream), а потім — з модулем io в Golang. Обидва модулі реалізують ввід/вивід в загальному сенсі цього слова, але підхід зовсім різний та його цікаво порівняти.
Модуль stream
побудований навколо асинхронних примітивів JavaScript - від подій до генераторів та async/await
. Важливо, що ввід/вивід завжди вимагають блокування, тобто пасивного очікування. А в JavaScript немає можливості блокувати синхронний код. Тому при використанні модуля stream
нам доведеться ускладнювати код — хоч сучасний підхід з async/await
мені подобається та майже не напружує розуміння.
(Примітка: в JavaScript є декілька функцій, які здійснюють синхронний ввід/вивід, наприклад, fs.readFileSync. Вони реалізовані через вихід в C, тобто фактично “ламають” модель виконання. Ось детальне пояснення.)
Важлива функція абстракції вводу-виводу — це додавання логіки зі збереженням інтерфейсу. В JavaScript для цього є функція pipeline. Наприклад, нею можна додати до потоку запису в файл стискання. Або до читання з сокета — буферизацію.
Результат виконання pipeline
- теж потік, тобто споживачам коду не потрібно знати, що в нього всередині. Також приємно, що pipeline
приховує асинхронність всередині та залишає тільки зовнішню.
Про Go - завтра.