PON-BEAM: um paradigma orientado a notificações dentro da máquina virtual do Erlang
1. A pergunta que move este projeto
Todo programador Elixir ou Erlang já ouviu o mantra: "a BEAM é uma máquina virtual altamente concorrente, com milhões de processos leves, trocas de contexto em microsegundos e escalabilidade quase linear". E isso é verdade — para o modelo de programação.
Mas quando você abre o código em C da ERTS (Erlang Run-Time System) e olha como a máquina funciona por dentro, encontra uma surpresa: a BEAM é um motor híbrido. Ela tem notificações para algumas coisas, mas ainda puxa (polling) e faz scans lineares em vários dos subsistemas mais críticos:
| Subsistema | Mecanismo no BEAM stock (OTP 30) | Custo |
|---|---|---|
receive seletivo | Scan linear da mailbox (cada cláusula contra cada mensagem) | $O(N \times M)$ |
| Timers | Timer wheel com ticks periódicos de polling | O(1) por tick, mas a CPU nunca dorme |
| Scheduler SMP | Run-queue pollada / busy-spin quando ocioso | 5–30% de um core desperdiçado |
| Coletor de lixo | Varredura de heap por raízes | $O(\text{heap total})$ |
| ETS | Lookups com lock + busca | contention na chave quente |
Esse é exatamente o tipo de problema que o Paradigma Orientado a Notificações (PON / NOP), criado pelo professor Dr. Jean Marcelo Simão (UTFPR, 2005–2009), se propõe a eliminar: redundância temporal (reavaliações desnecessárias) e redundância estrutural (código de busca repetido).
O PON-BEAM (repositório:
Tese:
docs/EX-37-pon-beam-arquitetura-orientada-a-notificacoes.md — PON-BEAM, a Notification-Oriented Virtual Machine ArchitecturePlano de engenharia:
docs/EX-38-pon-beam-plano-de-engenharia.mdRelatórios de fase:
docs/RPT-01..RPT-10Storytelling / saga técnica:
docs/STORYTELLING.mdParadigma PON: Simão & Stadzisz (2008–2009); Negrini (2019); Linhares (2015)
Código ERTS:
otp/erts/emulator/beam/pon_{premise,condition,timer,ets,gc}.c e otp/erts/include/internal/pon_*.hEste artigo acompanha o projeto de tese de **Matheus de Camargo Marques, licenciado sob Apache 2.0 (mesma licença do Erlang/OTP). Código de exemplo simplificado para legibilidade — o código real está no repositório com todas as guardas de segurança e validações.
SOCIAL SHARE CARD GENERATOR