Набросал гист с «сессионными типами нищеброда™» для TypeScript.
Сессионные типы — это способ описания протоколов клиент-серверного взаимодействия, не позволяющий использовать протокол ненадлежащим образом. Основная информация о них обитает здесь, там же лежат реализации сессионных типов для разных языков — от AST и Haskell до Scala и Rust.
В идеальном случае, сессионные типы должен поддерживать компилятор. На практике же клепаются костыли в виде сторонних чекеров (как в упомянутом ранее Effpi или в Gong), ну или проверяют в рантайме.
У нас в тайпскрипте из выразительных возможностей, позволяющих хоть сколь-нибудь удобно выражать сессионные типы, нет ничего — даже рекурсивных типов, лол. Тем не менее, заставить компилятор генерировать тип дуального канала мне удалось, равно как и проверять совместимость клиента и сервера.
Post #445
3.38K