8 pontos por GN⁺ 2024-03-07 | 1 comentários | Compartilhar no WhatsApp
  • Dada é um experimento conceitual (thought experiment) que busca criar uma linguagem como Rust, mas com a sensação de Java ou JavaScript e menos complexa que C++
  • Como seria uma linguagem que exige um runtime mínimo, sem ter como objetivo ser usada em kernels ou pequenos dispositivos embarcados?
  • Dada é uma linguagem baseada em ownership e tem algumas semelhanças com Rust:
    • Assim como Rust, Dada não precisa de coletor de lixo.
    • Assim como Rust, Dada garante segurança de memória e ausência de data races.
    • Assim como Rust, as estruturas de dados de Dada são alocadas na stack e usam um layout de memória plano.
  • Mas Dada também tem muitas diferenças:
    • Assim como TypeScript, Dada é uma linguagem gradualmente tipada:
      • É possível usar Dada no interpretador sem anotações de tipo para entender como a linguagem funciona.
      • Quando você se acostuma, pode adicionar anotações de tipo e usar um compilador com desempenho semelhante ao de Rust.
    • Dada tem WebAssembly como alvo principal:
      • É possível compilar Dada para alvos nativos, mas o sistema de FFI é baseado nos tipos de interface do WebAssembly.
    • Dada é orientada a objetos, mas não de forma pura:
      • Dada combina OO com bons recursos como pattern matching, inspirando-se em linguagens como Scala.
  • Em comparação com Rust, Dada tem algumas limitações:
    • Dada tem um runtime obrigatório e não tem como alvo "sistemas bare metal" ou kernels.
    • Dada não oferece suporte a assembly inline nem a código inseguro arbitrário.

Qual é o estado atual de Dada?

  • No momento, Dada não existe de fato, mas há alguns protótipos experimentais:
    • Uma semântica operacional experimental implementada em PLT Redex pode ser encontrada em dada-lang/dada-model.
    • Um interpretador escrito em Rust pode ser encontrado no repositório dada-lang/dada, e é possível testar uma build baseada em WebAssembly no playground do Dada.

Opinião do GN⁺

  • Dada reflete as tendências das linguagens de programação modernas ao manter recursos centrais do Rust, como segurança de memória e prevenção de data races, enquanto busca ser mais amigável para desenvolvedores por meio de tipagem gradual e de uma abordagem orientada a objetos.
  • Ter o WebAssembly como alvo principal mostra o potencial do Dada no desenvolvimento de aplicações web, alinhando-se às tendências modernas de desenvolvimento web que valorizam compatibilidade com navegadores e independência de plataforma.
  • Se Dada realmente for desenvolvido e amplamente adotado, poderá oferecer um nível mais alto de abstração e conveniência para desenvolvedores Rust já existentes, além de facilitar a transição de desenvolvedores Java ou JavaScript para linguagens de programação de sistemas.
  • No entanto, como Dada ainda está em estágio inicial e seu desempenho e estabilidade em ambientes reais de produção ainda não foram validados, empresas e desenvolvedores precisam adotar uma postura cautelosa antes de escolhê-lo.
  • Outras linguagens com objetivos semelhantes ao Dada incluem Kotlin e Swift, que já são amplamente usadas e podem ser boas alternativas para desenvolvedores.

1 comentários

 
GN⁺ 2024-03-07
Comentários no Hacker News
  • Apreço pela ideia de uma "linguagem de experimento mental"

    • Criar uma linguagem real é um grande fardo, e é divertido pensar em como seria uma linguagem ideal.
    • Há várias imaginações sobre uma "Rust de nível mais alto"; pessoalmente, prefere-se um runtime dinâmico e tipos simples, mas outras pessoas têm outras necessidades.
    • Recursos adicionais como um sistema de tipos gradual se encaixam em algumas linguagens, mas há preferência por garantias de uma base de código totalmente estaticamente tipada desde o início.
  • Dúvidas sobre o exemplo "Hello, Dada!"

    • Como usuário de Python, surge a dúvida de por que seria preciso se preocupar com await quando o objetivo é imprimir algo no console.
    • Já parece que a complexidade e a carga cognitiva começam aí.
  • Desejo por uma linguagem oposta

    • Quer-se uma linguagem com o sistema de tipos expressivo e a sintaxe de Rust, mas introduzindo garbage collector e runtime.
    • Não se quer pagar custo de desempenho, e a preferência é por algo como Go com o sistema de tipos de Rust.
  • Opinião contrária sobre async/await

    • Em uma linguagem de alto nível, acha-se que as green threads do Go seriam mais adequadas.
    • Tipagem gradual é interessante, mas não é essencial. Tipagem estática não é um incômodo e pode dificultar a análise de desempenho.
    • Acredita-se que inferência de tipos seria melhor do que tipagem gradual.
  • Opinião sobre a sensação de Java e JavaScript

    • Aponta-se que Java e JavaScript passam sensações muito diferentes.
  • A ausência de GC torna Rust uma experiência agradável em sistemas embarcados

    • É fácil de conectar com outros programas, e a inicialização rápida do programa é uma das principais vantagens de Rust.
    • Um Rust com garbage collection poderia significar abrir mão dessa vantagem.
  • Sentimentos mistos sobre a experiência de usar Rust

    • Gosta-se dos padrões de segurança de memória, mas a sintaxe parece mais difícil do que a de C++.
    • Há dificuldade para ler o código mentalmente.
    • Com menos magia de decorators e menos sintaxe baseada em símbolos, seria mais fácil para iniciantes entenderem.
  • Interesse na afirmação de que adicionar anotações de tipo pode produzir desempenho semelhante ao de Rust

    • Uma linguagem que pudesse ser escrita com a facilidade de JavaScript e, quando o trabalho extra se justificasse, fosse tão rápida quanto Rust.
  • Confusão sobre o método print_point no tutorial

    • É necessária uma explicação mais detalhada do significado de async e await.
    • Pergunta-se se async/await exerce um papel semelhante ao de valores avaliados de forma preguiçosa, e se várias combinações diferentes causam erros de tipo.
  • Insatisfação com a busca por exemplos de sintaxe de novas linguagens de programação

    • Ao criar uma nova linguagem de programação, pede-se que a landing page já traga logo um exemplo de sintaxe de "Hello World".