Gleam OTP
Fault tolerant multi-core programs with OTP, the BEAM actor framework.
gleam add gleam_otp@1
import gleam/erlang/process . { type Subject } import gleam/otp/actor pub fn main ( ) { // Start an actor let assert Ok ( actor ) = actor . new ( 0 ) |> actor . on_message ( handle_message ) |> actor . start // Send some messages to the actor actor . send ( actor . data , Add ( 5 ) ) actor . send ( actor . data , Add ( 3 ) ) // Send a message and get a reply assert actor . call ( actor . data , waiting : 10 , sending : Get ) == 8 } pub fn handle_message ( state : Int , message : Message ) -> actor . Next ( Int , Message ) { case message { Add ( i ) -> { let state = state + i actor . continue ( state ) } Get ( reply ) -> { actor . send ( reply , state ) actor . continue ( state ) } } } pub type Message { Add ( Int ) Get ( Subject ( Int ) ) }
Gleam’s actor system is built with a few primary goals:
Full type safety of actors and messages.
Be compatible with Erlang’s OTP actor framework.
Provide fault tolerance and self-healing through supervisors.
Have equivalent performance to Erlang’s OTP.
This library documents its abstractions and functionality, but you may also wish to read the documentation or other material on Erlang’s OTP framework to get a fuller understanding of OTP, the problems it solves, and the motivations for its design.
... continue reading