sobre o projeto

Uma linguagem para aprender pensando em sistemas.

Arandu é uma linguagem brasileira experimental para software nativo: busca segurança de memória, erros explícitos, sintaxe limpa e ferramentas que ajudam a entender o que o compilador está fazendo.

o nome

Arandu

No projeto, o nome expressa a ideia de aprender e inteligência: compreender o sistema para construir melhor.

a direção

Princípios que orientam Arandu

Não são slogans separados da implementação. Cada princípio aparece na linguagem, no compilador ou nas ferramentas que já estão sendo construídas.

01

Controle sem obscuridade

Arandu mira software nativo e previsível, mas mantém a sintaxe legível e próxima do raciocínio de quem programa.

02

Memória explícita

own, ref, mut e shared tornam as decisões sobre valores visíveis. O modelo de posse está evoluindo junto com o compilador.

03

Falhas que fazem parte do tipo

Option, Result e ? deixam ausência e erro no fluxo normal do programa, sem depender de exceções escondidas.

04

Ferramentas como parte da linguagem

new, check, run, build e doctor formam o caminho básico; diagnósticos com spans e o LSP ajudam a corrigir no lugar certo.

05

Uma base que pode ser verificada

CST, resolução de nomes, tipos, AMIR, DataLayout e queries incrementais dão estrutura ao compilador e ao seu crescimento.

06

Prometer só o que existe

O projeto separa o que já funciona, o que é experimental e o que está no roadmap. Honestidade técnica também é uma feature.

sem maquiagem

Onde o projeto está

Arandu é experimental. O melhor jeito de acompanhar a linguagem é distinguir a fundação que já existe das partes que ainda estão sendo lapidadas.

Hoje

lexer, parser, type checking, Option/Result, diagnósticos, JIT com Cranelift, build nativo, CLI, Salsa e LSP.

Em evolução

sintaxe completa de posse, polimento do backend C, customização de Display e backend LLVM de release.

um idioma que se lê

A clareza também aparece no código

module app

public func main(): void {
  let mensagem: str = "olá, Arandu"
  io.println(mensagem)
}

Nomes de valores e funções usam camelCase; tipos usam PascalCase; módulos permanecem em minúsculas. Convenções simples deixam a leitura do programa previsível.