Eparch: Máquinas de Estado Estaticamente Tipadas em Gleam

  • Marcos Benevides Rolim de Moura, Brasil
  • Fernando Areias UTFPR
  • Adolfo Neto UTFPR

Resumo


O ecossistema Erlang/OTP e sua máquina virtual BEAM são referência para sistemas distribuídos e tolerantes a falhas. Nos últimos anos, surgiram linguagens com tipagem estática sobre a BEAM, como Gleam, que buscam detectar erros em tempo de compilação. Contudo, os comportamentos genéricos do OTP, como gen_statem e gen_event, são inerentemente dinâmicos, permitindo erros de lógica que só se manifestam em tempo de execução. Este trabalho apresenta a Eparch, uma biblioteca em Gleam que fornece um wrapper estaticamente tipado sobre esses módulos, permitindo que transições de estado e tratamento de mensagens sejam verificados pelo compilador. A biblioteca utiliza Tipos de Dados Algébricos e pattern matching exaustivo para modelar estados, eventos e transições, adotando o padrão Builder funcional para oferecer uma API declarativa e composicional. A Eparch cobre praticamente todas as funcionalidades modernas do gen_statem, eliminando em tempo de compilação uma classe inteira de erros de runtime comuns em implementações puramente dinâmicas, sem sacrificar o acesso ao modelo de concorrência e supervisão do OTP. Como trabalhos futuros, os autores apontam a implementação de composição intercalada com possível uso de Session Types, além da exploração de meta-programação para automatizar a camada de FFI.
Palavras-chave: Gleam, Erlang, BEAM, Tipagem Estática, Máquinas de Estado

Referências

Joe Armstrong. 2003. Making reliable distributed systems in the presence of software errors. Ph. D. Dissertation.

Joe Armstrong. 2007. A history of Erlang. In Proceedings of the Third ACM SIGPLAN Conference on History of Programming Languages (San Diego, California) (HOPL III). Association for Computing Machinery, New York, NY, USA, 6–1–6–26. DOI: 10.1145/1238844.1238850

Laura Bocchi, Dominic Orchard, and A Laura Voinea. 2022. A theory of composing protocols. Art, Science, and Engineering of Programming 7, 2 (2022).

Giuseppe Castagna, Guillaume Duboc, and José Valim. 2023. The design principles of the elixir type system. arXiv preprint arXiv:2306.06391 (2023).

Eelco Dolstra, Merijn De Jonge, Eelco Visser, et al. 2004. Nix: A Safe and Policy-Free System for Software Deployment.. In LISA, Vol. 4. 79–92.

Kohei Honda, Vasco T Vasconcelos, and Makoto Kubo. 1998. Language primitives and type discipline for structured communication-based programming. In European Symposium on Programming. Springer, 122–138.

Thomas Bracht Laumann Jespersen, Philip Munksgaard, and Ken Friis Larsen. 2015. Session types for Rust. In Proceedings of the 11th acm sigplan workshop on generic programming. 13–22.

Andreas Rossberg, Claudio Russo, and Derek Dreyer. 2014. F-ing modules. Journal of functional programming 24, 5 (2014), 529–607.

Kaku Takeuchi, Kohei Honda, and Makoto Kubo. 1994. An interaction-based language and its typing system. In International Conference on Parallel Architectures and Languages Europe. Springer, 398–413.
Publicado
08/09/2026
BENEVIDES, Marcos; AREIAS, Fernando; NETO, Adolfo. Eparch: Máquinas de Estado Estaticamente Tipadas em Gleam. In: WORKSHOP EM ENGENHARIA DE SOFTWARE PARA PROGRAMAÇÃO FUNCIONAL (SE4FP), 2. , 2026, São Paulo/SP. Anais [...]. Porto Alegre: Sociedade Brasileira de Computação, 2026 . p. 9-12. DOI: https://doi.org/10.5753/se4fp.2026.32804.