IT

A linguagem de programação Goose: tudo sobre a nova linguagem que promete superar C++ e Rust

Goose é uma nova linguagem de sistemas sem heap, sem coletor de lixo e sem anotações de tempo de vida. Seu autor afirma que ela executa mais de 3 vezes mais rápido que o C++ idiomático. Veja como funciona e se vale a pena testar.

·3 min de leitura
A linguagem de programação Goose: tudo sobre a nova linguagem que promete superar C++ e Rust

Um dos assuntos mais comentados entre desenvolvedores nas últimas semanas é a linguagem de programação Goose. Ela foi criada por Wouter van Oortmerssen, um programador veterano e autor da linguagem Lobster. O Goose é de código aberto sob a licença Apache 2.0 e, o mais interessante, seu autor afirma que o compilador foi produzido quase inteiramente com IA, a partir de uma especificação de linguagem desenhada por humanos.

Na maioria das linguagens, dados dinâmicos como arrays e strings ficam no heap e precisam de um coletor de lixo (Java, Go), contagem de referências (Swift) ou regras de tempo de vida (Rust) para gerenciá-los. O Goose não usa nenhuma dessas opções. De acordo com sua documentação, cada valor dinâmico reside em pilhas de dados gerenciadas pelo compilador.

  • Cada pilha é uma grande reserva de espaço de endereço (2 GB por padrão) com um ponteiro de incremento simples (bump pointer)
  • Apenas um valor redimensionável fica ativo por pilha por vez, e ele está sempre no topo
  • Crescer um array apenas avança o ponteiro — nada é movido
  • Liberar memória na saída do escopo é uma única operação de salvamento

O compilador prova essas regras em tempo de compilação; em tempo de execução, apenas os ponteiros de incremento são rastreados.

Como funciona a segurança

Cada referência possui uma “raiz” estática — a variável que limita seu tempo de vida. O compilador infere as raízes sozinho e rejeita referências que ultrapassariam a vida útil de seu proprietário. Ao contrário do Rust, os programadores não escrevem anotações de tempo de vida e não existe a palavra-chave unsafe.

Um gostinho da sintaxe

O Goose tem uma sintaxe compacta semelhante à do C. Uma struct com dados de tamanho variável é declarada assim: struct Item { sku: u8[varint], qty: varint, cents: varint }. Existem três tipos de arrays: tamanho fixo, apenas crescimento e crescimento/encolhimento.

Velocidade: os números do autor

O autor publicou resultados em 16 benchmarks (média geométrica). De acordo com eles, o Goose é:

  • cerca de 3,3 a 3,5 vezes mais rápido que o C++ idiomático
  • 1,16 a 1,26 vez mais rápido que o C++ otimizado manualmente
  • 1,12 a 1,19 vez mais rápido que o melhor Rust seguro
  • usa de 1,2 a 1,9 vez menos memória

Por exemplo, um registro de pedido ocupa 29 bytes e nenhuma alocação no Goose, contra 160 bytes e uma alocação no C++, e 153 bytes e quatro alocações no Rust. Lembre-se de que estes são os benchmarks do próprio autor; a verificação independente ainda é limitada.

Limitações

  • Funções recursivas não podem manter dados redimensionáveis ao longo de uma chamada recursiva
  • Sem closures ou ponteiros de função que escapem
  • Compilação de programa inteiro (whole-program) apenas
  • O ecossistema de bibliotecas ainda é muito pequeno

Como testar

Compiladores pré-compilados estão disponíveis para Windows x64, Linux x64 e macOS (Apple Silicon e Intel). O Goose compila para um único arquivo C, portanto roda em qualquer lugar onde haja um compilador C. Baixe uma versão na página aardappel/goose no GitHub, adicione a pasta ao seu PATH e execute um exemplo com goose samples/01_tour.goose. Uma extensão para o VS Code está incluída no arquivo.

O veredito

O Goose é um experimento fascinante com uma abordagem genuinamente nova para o gerenciamento de memória. Programadores de sistemas que se importam com desempenho devem acompanhá-lo e dar uma chance. Mas a linguagem é nova: para uso em produção, é prudente aguardar benchmarks independentes e um ecossistema maior.

Fonte: Goose (aardappel)

Artigos relacionados