All Projects → boltlabs-inc → dialectic

boltlabs-inc / dialectic

Licence: MIT license
Transport-polymorphic, asynchronous session types for Rust

Programming Languages

rust
11053 projects
shell
77523 projects

Projects that are alternatives of or similar to dialectic

Archit Ios
Intelygenz iOS Architecture
Stars: ✭ 203 (+238.33%)
Mutual labels:  asynchronous, protocols
venusscript
A dynamic, interpreted, scripting language written in Java.
Stars: ✭ 17 (-71.67%)
Mutual labels:  asynchronous
future.scala
Stack-safe asynchronous programming
Stars: ✭ 38 (-36.67%)
Mutual labels:  asynchronous
guides
Dealerdirect guides for getting things done, be a programming role-model, coding in style and being the better colleague.
Stars: ✭ 21 (-65%)
Mutual labels:  protocols
Rump
REST client for Java that allows for easy configuration and default values. Allows for quick request construction and a huge range of modifications by using response/request interceptors, adjusting default values related to HTTP requests and creating custom instances for when you need multiple API connection setups.
Stars: ✭ 55 (-8.33%)
Mutual labels:  asynchronous
AsyncSuffix
Asynchronous methods naming checker for ReSharper
Stars: ✭ 19 (-68.33%)
Mutual labels:  asynchronous
futures-extra
Java library for working with Guava futures
Stars: ✭ 131 (+118.33%)
Mutual labels:  asynchronous
fetch-action-creator
Fetches using standardized, four-part asynchronous actions for redux-thunk.
Stars: ✭ 28 (-53.33%)
Mutual labels:  asynchronous
cashews
Cache with async power
Stars: ✭ 204 (+240%)
Mutual labels:  asynchronous
VIPER
Generic protocols for the VIPER architecture.
Stars: ✭ 20 (-66.67%)
Mutual labels:  protocols
RunAll
This is a library for running the concurrent processing using only native Google Apps Script (GAS).
Stars: ✭ 55 (-8.33%)
Mutual labels:  asynchronous
promise4j
Fluent promise framework for Java
Stars: ✭ 20 (-66.67%)
Mutual labels:  asynchronous
hutplate
A Go library over standard net/http library with auth, session, err handling and more.
Stars: ✭ 28 (-53.33%)
Mutual labels:  session
PandaDemo
Demo project for asynchronous render and Layout framework Panda
Stars: ✭ 15 (-75%)
Mutual labels:  asynchronous
asynckivy
async library for Kivy
Stars: ✭ 56 (-6.67%)
Mutual labels:  asynchronous
zab
C++20 liburing backed coroutine executor and event loop framework.
Stars: ✭ 54 (-10%)
Mutual labels:  asynchronous
CSRF-tutorial
Use Django To Introduce CSRF and Cookies , Session 📝
Stars: ✭ 49 (-18.33%)
Mutual labels:  session
debugging-async-operations-in-nodejs
Example code to accompany my blog post on debugging async operations in Node.js.
Stars: ✭ 22 (-63.33%)
Mutual labels:  asynchronous
ssdp-client
The most lightweight asynchronous Java SSDP (Simple Service Discovery Protocol) Client
Stars: ✭ 46 (-23.33%)
Mutual labels:  asynchronous
AsyncIterator
An asynchronous iterator library for advanced object pipelines in JavaScript
Stars: ✭ 43 (-28.33%)
Mutual labels:  asynchronous

Dialectic

Rust license: MIT crates.io docs.rs documentation

dialectic (noun): The process of arriving at the truth by stating a thesis, developing a contradictory antithesis, and combining them into a coherent synthesis.

dialectic (crate): Transport-polymorphic session types for asynchronous Rust.

When two concurrent processes communicate, it's good to give their messages types, which ensure every message is of an expected form.

  • Conventional types merely describe what is valid to communicate.
  • Session types describe when it is valid to communicate, and in what manner.

This crate provides a generic wrapper around almost any type of asynchronous channel that adds compile-time guarantees that a specified session protocol will not be violated by any code using the channel. Such a wrapped channel:

  • has almost no runtime cost in time or memory;
  • is built on async/.await to allow integration with Rust's powerful async ecosystem;
  • gracefully handles runtime protocol violations, introducing no panics;
  • allows for full duplex concurrent communication, if specified in its type, while preserving all the same session-type safety guarantees; and
  • can even implement context free sessions, a more general form of session type than supported by most other session typing libraries.

Together, these make Dialectic ideal for writing networked services that need to ensure high levels of availability and complex protocol correctness properties in the real world, where protocols might be violated and connections might be dropped.

Dialectic supports a number of async runtimes and backends out-of-the-box, if you don't want to or don't need to write your own:

These crates also serve as good references for writing your own backends.

What now?

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].