4 pontos por GN⁺ 2024-05-01 | 1 comentários | Compartilhar no WhatsApp

Introdução à linguagem de programação Borgo

  • Quer uma linguagem para escrever aplicações que seja mais expressiva que Go, mas menos complexa que Rust
    • Go é simples e intuitiva, mas às vezes dá vontade de ter mais segurança de tipos
    • Rust é boa de usar (pelo menos no caso de código single-thread), mas é ampla e complexa demais e, às vezes, dolorosa
  • Borgo é uma nova linguagem que é transpilada para Go e é totalmente compatível com pacotes Go existentes
  • A sintaxe do Borgo é semelhante à de Rust, com ponto e vírgula opcional

Principais recursos

  • Tipos de dados algébricos e pattern matching
  • Uso de Option no lugar de nil
  • Uso de Result no lugar de múltiplos valores de retorno
  • Tratamento de erros com o operador ?

Executando localmente

  • Como o Borgo foi escrito em Rust, é necessário ter cargo
  • Para compilar todos os arquivos .brg da pasta atual:
    • $ cargo run -- build
  • O compilador gera arquivos .go, que podem ser executados normalmente

Opinião do GN⁺

  • Rust é uma linguagem poderosa, mas tem uma curva de aprendizado íngreme e uma barreira de adoção relativamente alta; o Borgo parece uma tentativa interessante de aproveitar as vantagens do Rust dentro do ecossistema Go. No entanto, como ainda está em estágio inicial, é de se esperar que o ecossistema seja limitado
  • O uso de Option e Result para melhorar o tratamento de nil e erros, assim como a simplificação do tratamento de erros com o operador ?, parece resolver pontos que desenvolvedores Go frequentemente consideram incômodos
  • Poder usar bibliotecas Go existentes sem mudanças é uma grande vantagem. Mas, como adota sintaxe inspirada em Rust, pode levar algum tempo para desenvolvedores Go se adaptarem
  • Como usa a abordagem de transpile, pode haver desvantagens em depuração e performance em tempo de execução em comparação com código Go nativo. Ainda parece cedo para aplicar isso em código de produção de grande escala
  • Assim como Kotlin vem ganhando espaço no ecossistema JVM, para que Borgo se torne uma solução relevante para Go, parece necessário melhorar continuamente em vários aspectos, como qualidade do código, produtividade no desenvolvimento e curva de aprendizado. Se continuar evoluindo, pode se tornar uma alternativa atraente no universo Go

1 comentários

 
GN⁺ 2024-05-01
Opiniões no Hacker News

Resumo:

  • Reações positivas à linguagem Borgo, que compensa pontos fracos da linguagem Go
    • Foram adicionados recursos que faziam falta no Go, como enum e tipos Optional
    • A maior parte dos recursos desejados por desenvolvedores Go parece estar incluída
  • Algumas decisões de design do Borgo passam uma impressão mais próxima de Rust do que das características do Go
    • Definição de métodos com impl, sintaxe de canais e goroutines, função embutida zeroValue() etc.
    • Mesmo assim, parece que muitos prefeririam desenvolver em Borgo em vez de Go
  • Apresentação de outros projetos que fizeram tentativas parecidas
    • Houve iniciativas como braid, have e oden tentando criar linguagens que transpilem para Go
  • Parece ter incorporado vantagens do Rust, como sistema de tipos e tratamento de erros, exceto pelo Borrow Checker
  • Opinião de que seria bom existir uma linguagem com vantagens tanto da tipagem dinâmica quanto da tipagem estática
    • No início do desenvolvimento, seria ideal aproveitar os benefícios da tipagem dinâmica, como em Python, e depois migrar gradualmente para tipagem estática
  • Dá a sensação de combinar as vantagens do runtime e do ecossistema de ferramentas do Go com a segurança de tipos de enum do Rust
  • Também foi visto de forma positiva o fato de adotar as palavras-chave pub/private em vez do método do Go de distinguir visibilidade de campos de struct por letras maiúsculas e minúsculas
  • Parece ter encontrado um meio-termo, parecido com a linguagem Gleam, entre segurança de tipos e complexidade, mas com a vantagem de desempenho de compilar para Go em vez de Erlang ou JS
    • Ainda assim, fica a dúvida se as mensagens de erro de compilação serão tão amigáveis quanto as de Rust ou Gleam