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

Clojure 1.12.0

Compatibilidade

Java 8 - aviso de fim de compatibilidade

  • O Clojure 1.12 gera bytecode para Java 8, mas esta é a última versão a usar Java 8.
  • As próximas versões devem migrar para uma nova versão LTS do Java.

Java 21 - fixação de threads virtuais no código do usuário

  • Para usuários de Clojure que desejam usar threads virtuais no JDK 21, na versão 1.12 lazy-seq e delay usam locks em vez de blocos synchronized.

Segurança

  • Correção da vulnerabilidade de segurança CVE-2024-22871.

Serialização

  • Os tipos de dados do Clojure implementam a interface de serialização do Java.
  • Na versão 1.11.0, os identificadores de serialização de duas classes foram alterados, mas isso foi revertido na 1.11.1.
  • Na 1.12.0, o trabalho restante para as demais classes foi concluído.

Dependências

  • Atualização da dependência spec.alpha para 0.5.238.
  • Atualização da dependência core.specs.alpha para 0.4.74.

Recursos

Adição interativa de bibliotecas

  • Novo conjunto de funções para adicionar bibliotecas sem reiniciar a JVM.
  • Foram adicionadas as funções add-lib, add-libs e sync-deps.

Inicialização e controle de processos externos

  • Adicionado o novo namespace clojure.java.process.
  • É possível controlar processos externos com as funções start e exec.

Valores de método

  • Adicionado suporte para usar métodos Java como funções de ordem superior.
  • O compilador gera automaticamente funções wrapper.

Métodos qualificados

  • É possível usar métodos qualificados como valores com a sintaxe Classname/method, Classname/.method e Classname/new.

Metadados :param-tags

  • É possível fornecer metadados :param-tags para métodos qualificados a fim de resolver métodos sobrecarregados.

Sintaxe de classe de array

  • Adicionada sintaxe para representar classes de array. Ex.: String/2 representa um array bidimensional de strings.

Interfaces funcionais

  • Interfaces funcionais do Java agora podem ser convertidas e usadas como funções Clojure.

Interoperabilidade com Java Supplier

  • Implementações de IDeref agora implementam diretamente a interface Supplier.

Suporte a streams

  • É possível processar streams no estilo Clojure com as funções stream-seq!, stream-reduce!, stream-transduce! e stream-into!.

Implementação Spliterable de PersistentVector

  • PersistentVector agora oferece um spliterator customizado com suporte a processamento paralelo.

drop e partition mais eficientes

  • O desempenho das funções drop, nthrest e nthnext foi melhorado.
  • Adicionadas as novas funções partitionv, partitionv-all e splitv-at.

Política de intern de Var

  • Ao internar um var em um namespace, agora é criada uma referência estável.
  • Isso resolve um problema introduzido na versão 1.11.0.

Resumo do GN⁺

  • O Clojure 1.12.0 é a última versão a usar Java 8, e as próximas devem migrar para uma nova versão LTS do Java.
  • Entre os novos recursos estão adição interativa de bibliotecas, controle de processos externos e uso de valores de método.
  • A interoperabilidade com Java foi significativamente aprimorada, e foram adicionados recursos mais eficientes para drop e partition.
  • É uma atualização útil para usuários de Clojure e pode aumentar a produtividade no desenvolvimento.

1 comentários

 
GN⁺ 2024-09-06
Comentários do Hacker News
  • Passei a me interessar por Clojure ao assistir às palestras do Rich no YouTube. Estou pensando em como adotá-lo na empresa
    • Acho que a lição sobre simplicidade é muito importante
  • Esta versão inclui muitos recursos novos excelentes
    • Pessoalmente, o recurso add-libs é o que mais gostei
    • Ficou mais fácil escrever demos em arquivo único ou exemplos mínimos e compartilhá-los
    • Também é útil ao demonstrar bibliotecas Java
  • Achei que teríamos de esperar até o Clojure/conj 2024
    • Estou esperando o spec2, mas por enquanto uso Malli
    • Com a mudança na interface de funções, não é mais necessário manter macros utilitárias
  • Muitos recursos novos foram adicionados, mas o código continua funcionando como antes
  • Os recursos add-libs e sync-deps são muito úteis
    • Esta versão tem um escopo diferente das versões anteriores
  • Há comentários perguntando sobre o estado do spec
  • Clojure é bom para construir sistemas de backend ao combinar Lisp com o ecossistema Java
    • É uma pena que ele não reflita algumas das inovações surgidas após o Java 8
  • A mudança na interface de funções é muito importante
    • Manter a interoperabilidade com Java é um ponto forte do Clojure
  • Há muitas melhorias excelentes
    • É a família de linguagens Lisp que mais uso
  • Fico feliz em ver que Clojure continua forte