пост-монады
Dec. 2nd, 2022 02:35 pmГоворят, монадки уже не модны (ибо IRL крайне неудобны в использовании), а вместо них грядут ещё более головоломные effect handler'ы. Я попытался послушать про них, но там уровень, на котором не хватает базового бэкграунда, чтобы понимать punch line у докладчиков.
Если пересказать в режиме "мойша напел", то effect handler'ы - это обобщение теории типов на сайд-эффекты, в которых эксепшены (и прочие сайд-эффекты) описываются в рамках модели (видимо, уже не типов), и позволяют компилятору делать выводы относительно происходящего, а авторам кода - накладывать ограничения на то, что именно происходит. Они покрывают собой эксепшены, но не только, и являются обобщением понятия.
Всё остальное надо слушать не в моём исполнении.
А ещё, мне первый раз объяснили, что такое монады. И я первый раз понял.
Это не rust-код (т.к. Self не может иметь типопараметр), но суть передаёт.
(отсюда: https://users.rust-lang.org/t/please-tell-me-yeet-is-not-a-thing-in-rust/84843/47)
Если пересказать в режиме "мойша напел", то effect handler'ы - это обобщение теории типов на сайд-эффекты, в которых эксепшены (и прочие сайд-эффекты) описываются в рамках модели (видимо, уже не типов), и позволяют компилятору делать выводы относительно происходящего, а авторам кода - накладывать ограничения на то, что именно происходит. Они покрывают собой эксепшены, но не только, и являются обобщением понятия.
Всё остальное надо слушать не в моём исполнении.
А ещё, мне первый раз объяснили, что такое монады. И я первый раз понял.
Это не rust-код (т.к. Self не может иметь типопараметр), но суть передаёт.
trait Monad<A> {
fn flat_map<B>(self, f: fn(A) -> Self<B>) -> Self<B>;
fn new(a: A) -> Self<A>;
}
(отсюда: https://users.rust-lang.org/t/please-tell-me-yeet-is-not-a-thing-in-rust/84843/47)
no subject
Date: 2022-12-02 02:11 pm (UTC)Я не могу говорить авторитетно и могу сослаться только на срачик по ссылке на форуме раста, где это всё упоминается (где-то с середины треда и дальше)
Но, ряд умных работ именно по effect handlers выглядит как что-то новое и exciting. Например, https://effekt-lang.org/, https://koka-lang.github.io/koka/doc/book.html
И вот рандомное из двухколоночного: https://kcsrk.info/papers/system_effects_feb_18.pdf
Вот что они пишут:
Effect handlers provide a modular alternative to monads [25, 35] for structuring effectful computations. They achieve the separation between operations and their handlers through the use of delimited continuations, allowing them to pause, resume and switch between different computations. They provide a structured interface for programming with delimited continuations [10], and can implement common abstractions such as state, generators, async/await, promises, non-determinism, exception handlers and backtracking search.
Я бы рад обсудить суть написанного, но не могу. Приходится ориентироваться на внешние признаки - "есть куча движухи".
Чёрт, я первый раз в жизни вижу "delimited continuations", а это целая большая тема.
no subject
Date: 2022-12-02 04:04 pm (UTC)Delimited continuations - странная штука, я не раз видел, как оно зверски помогает (скажем, секьюрити в твитерском коде, лет 10+ назад) - но сам никогда так и не освоил этот трюк.
Спасибо за линки; почитаю. Для меня, как для категорщика, монады очевидны, там математика и логика. А вот трюки я бы сначала перевел на категорный язык, а потом бы уже разбирал. Тем более, Карри-Хауард-Ламбек говорят нам, что больше ничего и нету, одни категории.