Ferrugem - Rust, só que em Português
Recentemente eu vi um projeto no GitHub chamado Rouille, que é a linguagem Rust, mas com as keywords e algumas coisas totalmente traduzidas pro francês. Logo, se seguiram várias derivadas, como Rost (alemão), Rdza (Polonês), Ruggine (Italiano), e vários outros projetos no mesmo estilo.
Eu não tinha visto ninguém fazer em português, então eu resolvi fazer minha própria versão, usando como base o código do Rost.
É aí que surgiu o Ferrugem, a versão em PT-BR do Rust, e como qualquer versão PT-BR de qualquer coisa, eu dei um toque bem mais HUE BR pro README, ainda seguindo um pouco o padrão de todos os outros idiomas.
É um projeto interessante que mostra o poder das macros do Rust, e como você pode escrever uma linguagem inteira só usando macros:
ferrugem::ferrugem! {
usar pdr::coleções::Dicionário como Dicio;
atributo Eae {
função escrever(&eu, chave: Texto, valor: Texto);
função obter(&eu, chave: Texto) -> Resultado<Opção<&Texto>, Texto>;
}
estático mutável DICIONARIO: Opção<Dicio<Texto, Texto>> = Nenhum;
estrutura Concreto;
implementar Eae para Concreto {
função escrever(&eu, chave: Texto, valor: Texto) {
eis dicio = inseguro {
DICIONARIO.obter_ou_inserir_com(Padrão::padrão)
};
dicio.inserir(chave, valor);
}
função obter(&eu, chave: Texto) -> Resultado<Opção<&Texto>, Texto> {
se eis Algum(dicio) = inseguro { DICIONARIO.como_ref() } {
TaMec(dicio.obter(&chave))
} senão {
Erro("Deu ruim, rapaziada ".para_texto())
}
}
}
}
Vendo como as macros funcionam pra substituir as keywords por palavras e gírias em outras línguas dá uma boa noção de como as procedural macros do Rust funcionam, mesmo com um projeto de brincadeira assim.
O único problema é que dentro das macros você acaba perdendo algumas das funcionalidades do rust-analyzer, então é difícil saber se seu código tá certo enquanto você escreve.
Pra quem quiser testar e escrever algum programa totalmente em português usando Ferrugem/Rust, sintam-se à vontade pra testar e sugerir novas keywords. Eu não publiquei o projeto no Crates.io, mas talvez o faça em breve.