Executando verificação de segurança...
12

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.

Carregando publicação patrocinada...
2
2
2
1

Boa iniciativa. Se me permite, eu gostaria de fazer uma observação :)

Eu sou da época em que, tirando a linguagem, programávamos em português aqui no Brasil, e eu sempre achei que o padrão de tradução poderia ser diferente.

Usou-se o nome do verbo e não a sua ação, que seria mais adequado, na minha opinião. Por exemplo, implementar ficaria como implementa, escrever ficaria como escreve, obter ficaria como obtém, etc.

De qualquer forma, está legal, e eu diria que este tipo de projeto poderia mesmo ser olhado com mais "carinho". Trabalhar em inglês é bom devido a consistência, mas vira e mexe, enche o saco de quem está buscando o termo ideal para tudo, especialmente para termos de negócio :)

1

Sim, a origem do verbo, e não a ação dele. Também acho mais adequado e é a que prefiro.

Mudar essas keywords é um tanto quanto simples (todas as modificações ficam em um único arquivo, lib.rs), ou seja, modificar isso não dá tanto trabalho.

Eu fiz um fork e modifiquei a maioria para que ficassem em sua forma de origem, apesar de ser não ser apropriado ainda, já é uma grande melhora. Também removi algumas coisas que considero informais. No entanto, e de qualquer maneira, não está de prontidão para o uso em produção.

(Talvez haja erros, não ortográficos, mas na consistência de keywords)

https://github.com/gitdesk-richard/ferrugem

1

Ótima contribuição! Na minha cabeça a ideia do projeto era ser uma brincadeira com as macros, e a informalidade é parte da brincadeira. Se quiser subir um Pull Request pra olhar com mais carinho pras alterações, e pra gente discutir sobre melhorias.

Se tiver gente realmente interessada em usar isso pra alguma finalidade, a gente pode fazer uma versão mais séria.

1

Opa! É uma boa sugestão. Eu não tenho muito costume de escrever código em português, então geralmente utilizo o verbo no infinitivo, mas não é tanto problema alterar.

Só pra deixar claro também, esse projeto não é um compilador novo, não estou reescrevendo a sintaxe do Rust. É só uma macro que pega as keywords de Ferrugem e substitui por keywords do Rust. Então é algo bem simples de modificar no fim das contas. Sugestões e melhorias são sempre bem vindas!

1

eu ficava pensando como seria liguagens traduzidas como python,js,C,C++ e outras achei que era um ideia aletoria minha mas não é não é tenho muitas outras ideias só no papel por que sou iniciante d estou aprendendo mas quando eu aprender mais eu faço.

1

Essas outras linguagens até dá pra traduzir pro português. Teria que ter um bom conhecimento de compiladores pra alterar as keywords, mas em tese é possível sim.

No caso aqui, eu só utilizo um recurso do próprio Rust chamado macro. Tudo o que tá dentro dessa macro é substituído por um código válido Rust durante a compilação, então não precisei editar o compilador.