tg-me.com/hacknote_js/61
Last Update:
Системы эффектов
Недавно послушал выпуск Подлодки про "Системы эффектов в языках программирования" и решил поделиться некоторыми рандомными рассуждениями на эту тему.
"Окраска" функций
"Окраской" функций называется некоторая декларация эффектов, содержащихся в функции.
В JavaScript есть 2 варианта "окраски" функций:
- async
— обозначает, что функция асинхронная и позволяет использовать внутри неё оператор await
- *
— обозначает, что функция является генератором и позволяет использовать внутри неё оператор yield
Fun fact: эти 2 варианта можно скомбинировать, чтобы получить AsyncIterator, который можно перебирать оператором for await...of.
В языке Nim система эффектов позволяет окрашивать функции любыми эффектами, что выглядит весьма любопытно (на самом деле существует ещё множество языков с такой возможностью, но почему-то мне сразу вспомнился именно Nim).
Обработка исключений
В Java есть оператор throws, позволяющий "окрасить" функцию эффектом выброса определённого типа исключения и на этапе сборки удостовериться, что эти исключения обработаны.
JavaScript/TypeScript не позволяет типизировать исключения (разве что задокументировать их с помощью JSDoc или TSDoc), но теоретически эту проблему можно решить знаменитой монадой Either.
Чистота функций
Бандлеры используют аннотацию /*#__PURE__*/
, которая обозначает отсутствие побочных эффектов в функции, для более эффективного тришейкинга (упомянал об этом в своём докладе).
В самом JavaScript нет языкового средства для выражения чистоты функции — то есть отсутствия в ней эффектов, хотя было бы классно использовать это знание, например, для исполнения кода во время сборки (как, например, c babel-plugin-macros).
BY Hacknote.js

Share with your friend now:
tg-me.com/hacknote_js/61