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
Comentários do Hacker News
add-libsé o que mais gosteiadd-libsesync-depssão muito úteis