1 pontos por GN⁺ 2024-06-13 | 1 comentários | Compartilhar no WhatsApp

Lançamento do Elixir v1.17: tipos set-teóricos, duração de calendário, suporte ao Erlang/OTP 27

Avisos graduais de tipos set-teóricos

  • O Elixir v1.17 introduz tipos set-teóricos que inferem tipos a partir de padrões e os usam para fazer verificação de tipos do programa.
  • Esse sistema de tipos permite encontrar erros e bugs na base de código sem exigir mudanças no software existente.
  • No momento, os desenvolvedores só podem interagir com esse sistema de tipos por meio de avisos.
  • Principais avisos:
    • pattern matching com chaves inexistentes
    • acesso a chaves inexistentes
    • chamada de função em algo que não é um módulo
    • ao chamar uma função anônima, chamar algo que não é uma função
    • comparação entre structs
    • comparação entre tipos que não se sobrepõem
    • pattern matching binário incorreto
    • tentativa de resgatar uma struct de exceção não definida
    • acesso a campos não definidos em uma exceção resgatada

Suporte ao Erlang/OTP

  • O Elixir v1.17 oferece suporte ao Erlang/OTP 27 e encerra o suporte ao Erlang/OTP 24.
  • Os desenvolvedores de Elixir são recomendados a migrar para Erlang/OTP 26 ou superior.
  • Principais recursos do Erlang/OTP 27:
    • adição do módulo json
    • adição de rótulos de processo (proc_lib:set_label/1)

Novo tipo de dado Duration e função de deslocamento de datas

  • O Elixir v1.17 introduz o tipo de dado Duration e uma API para deslocar datas, horários e datetimes pelo período especificado.
  • Exemplo:
    iex> Date.shift(~D[2016-01-31], month: 2)
    ~D[2016-03-31]
    
  • Duration é essencial para modelar intervalos, eventos recorrentes e agendas.
  • No caso de DateTimes, o Elixir lida corretamente com mudanças de fuso horário.

Outras mudanças importantes

  • Adição das novas funções Keyword.intersect/2,3.
  • Adição do novo profiler do Mix mix profile.tprof.
  • Adição da guarda Kernel.is_non_struct_map/1.
  • O Logger do Elixir passa a formatar relatórios do gen_statem e incluir rótulos de processo do Erlang/OTP 27.

Opinião do GN⁺

  • Tipos set-teóricos: esse sistema de tipos pode ajudar bastante a aumentar a estabilidade e a confiabilidade do código. É especialmente útil em projetos de grande porte.
  • Suporte ao Erlang/OTP 27: ao oferecer suporte à versão mais recente do Erlang/OTP, traz muitas vantagens em desempenho e funcionalidades.
  • Tipo de dado Duration: a funcionalidade de deslocamento de datas considerando fusos horários e calendário é muito útil em aplicações como gerenciamento de agenda.
  • Limites do sistema de tipos: no momento, a análise de tipos além das fronteiras de funções não é possível, então esse ponto precisará ser melhorado em atualizações futuras.
  • Produtos concorrentes: em comparação com outras linguagens que oferecem sistemas de tipos estáticos, como TypeScript, a abordagem do Elixir fornece segurança de tipos sem abrir mão da flexibilidade de uma linguagem dinâmica.

1 comentários

 
GN⁺ 2024-06-13
Comentários no Hacker News
  • As equipes de Elixir e Erlang têm feito um trabalho excelente nos últimos anos. As contribuições dos autores de bibliotecas e livros também são grandes. É interessante acompanhar os commits de Elixir e OTP. Agradecimentos a todos os envolvidos.

  • Tive uma experiência produtiva e agradável em um projeto paralelo usando Elixir no backend. Valorizo muito a produtividade do LiveView, mas ele não é adequado quando a conexão de rede é instável. Ainda dá para usar Elixir de forma muito divertida mesmo separado do LiveView.

  • Estou desenvolvendo uma startup full stack com Elixir, e é a melhor tecnologia que já usei até agora. Estou divulgando as vantagens do Elixir para meus amigos. Seria ótimo se RabbitMQ e o cliente funcionassem no OTP 27.

  • Obrigado pelo ótimo trabalho dos desenvolvedores de Elixir e Erlang. Espero que a desculpa de que Elixir "não tem tipos" desapareça para permitir uma adoção em larga escala do Elixir. Espero que continuem apresentando bons resultados.

  • Leio sobre Elixir há 10 anos e adoro a linguagem. Mas desisti de buscar empregos relacionados a Elixir por causa dos salários mais baixos em comparação com linguagens mais populares. Salário e produtos legais são mais importantes do que a stack tecnológica. Ainda assim, é divertido continuar acompanhando Elixir de longe.

  • O recurso mais legal desta versão é a adição de get_in/1. Por exemplo, em get_in(struct.foo.bar), se foo retornar nil, não ocorre erro mesmo ao acessar bar.

  • Esta versão foi a última peça que eu queria. Estou animado com os próximos passos. Acho que a linguagem agora está 100% completa em termos de funcionalidades.

  • Estou muito empolgado com o sistema de tipos. Lembro que José o descreveu como um "sistema de tipos gradual". Isso deve ser adicionado em etapas. Fico curioso para saber se na próxima etapa haverá novos recursos relacionados ao novo sistema de tipos. Estou especialmente ansioso por novas otimizações do compilador.

  • Estou muito animado com esta versão. Espero que sejam investidos recursos no plugin de Elixir para IntelliJ. Não gosto de usar VSCode.

  • Será que alguém sabe o que significa "tipos teóricos de conjuntos"? Tenho muito interesse em linguagens de programação, mas é a primeira vez que vejo esse termo.