Roc – Uma linguagem funcional rápida e amigável

Roc é uma nova linguagem de programação rápida e puramente funcional, fortemente inspirada por Elm e pelas linguagens da família ML, que busca combinar tipagem estática forte e efeitos gerenciados com velocidade e desempenho de compilação no estilo Go. Os comentaristas elogiam seu site inusitadamente polido, o REPL embutido e os objetivos de design claros (velocidade, simpatia, simplicidade), enquanto destacam ideias técnicas como contagem de referências em tempo de compilação (Perceus), um sistema de efeitos chamado “abilities” e um modelo de FFI baseado em plataformas. Alguns permanecem cautelosos devido a problemas passados de governança e comunidade em torno de Elm e à incerteza de adotar uma linguagem jovem com um ecossistema pequeno, mas outros veem Roc como uma candidata promissora para tornar a programação funcional pura mais prática e mainstream.

Recepção geral e site

  • Muitos respondentes acham Roc interessante e moderna, com forte entusiasmo de fãs de linguagens funcionais.
  • O novo site é amplamente elogiado: claro, elegante, com um REPL embutido, um tutorial curto e guiado, e páginas explicativas detalhadas para “fast”, “friendly” e “functional”.
  • Vários gostariam que mais linguagens alcançassem essa qualidade de onboarding.

Objetivos e design da linguagem

  • Pontos de venda principais destacados:
    • Puramente funcional com avaliação estrita.
    • Foco em código compilado muito rápido por meio de otimização agressiva e mutação in-place “oportunista”.
    • Contagem de referências estática (estilo Perceus) para evitar GC sem perder a simplicidade da semântica.
    • Efeitos gerenciados (“Tasks” / abilities), isolando efeitos colaterais e melhorando a testabilidade.
  • Abstração de plataforma e imports declarativos são vistos como interessantes, mas ainda não totalmente compreendidos.
  • Roc às vezes pode executar código com certos erros de tipo se esses caminhos não forem executados, o que é visto como útil para refatoração.

Sistema de tipos, macros e ergonomia

  • Os tipos são totalmente inferidos; anotações são opcionais, mas suportadas. Alguns argumentam que isso pode prejudicar a localidade dos erros e preferem anotar ao menos os limites das funções.
  • Roc busca simplicidade em vez de recursos altamente expressivos como tipos de ordem superior.
  • O plano é não suportar macros, em grande parte para manter o tooling do editor mais simples; alguns veem isso como uma limitação importante para metaprogramação.
  • As reações à sintaxe são mistas: barra invertida para lambdas e interpolação, significância de espaços em branco e camelCase são desaprovados por alguns.

Ferramentas, FFI e implementação

  • O compilador é escrito em Rust; a biblioteca padrão em Zig.
  • Existe um language server baseado em LSP; um IDE próprio foi preterido em favor de suporte a múltiplos editores.
  • Há FFI para C, mas ele é roteado por meio de “platforms” em vez de bindings arbitrários por pacote.

Comparações com outras linguagens

  • Frequentemente comparada a Elm, Haskell, OCaml/ML, Koka, Rust, Go, F#, Gleam e várias Lisps.
  • Alguns veem Roc como uma linguagem funcional prática, estrita e mais simples, no estilo Haskell, influenciada por Elm e Koka.
  • Céticos questionam se ela oferece o suficiente além dos ecossistemas existentes, especialmente dada a juventude do cenário de bibliotecas.

Preocupações com comunidade e história

  • Vários comentários revisitam problemas passados de governança e comunidade em torno de Elm, expressando desconfiança e relutância em investir em outra linguagem jovem de círculos relacionados.
  • Outros enfatizam pedidos de desculpas, segundas chances e observam que a comunidade atual de Roc parece acolhedora.
  • Alguns acham o drama recorrente em si indesejável e preferem focar nos aspectos técnicos.