A versão 1.7 da implementação da linguagem de programação Julia agora está disponível. Esta é uma linguagem de alto desempenho de código aberto que é de uso geral. No entanto, ela é especialmente popular para ciência computacional e análise numérica. Assim, a linguagem de programação Julia 1.7 acaba de ser liberada com recursos aprimorados de segmentação.
A linguagem de programação Julia é cada vez mais usada para casos de uso de computação e análise numérica e por todos os relatos permanece em uma trajetória ascendente incrível. Julia 1.7 é o lançamento de recurso mais recente que adiciona novos recursos e funcionalidades.
Após 4 betas e 3 candidatos a lançamento, a versão 1.7 do Julia foi finalmente lançada. Gostaríamos de agradecer a todos os contribuidores deste lançamento (mais de 79 pessoas) e a todos os testadores que ajudaram a encontrar regressões e problemas nos pré-lançamentos. Sem você, este lançamento não teria sido possível.
A lista completa de mudanças pode ser encontrada no arquivo NEWS, mas aqui daremos uma visão geral mais aprofundada de alguns dos destaques do lançamento.
Linguagem de programação Julia 1.7 liberada com recursos aprimorados de segmentação
Com a linguagem Julia 1.7 é um novo gerador de número aleatório (RNG), novos recursos de encadeamento, instalação automática de pacote quando um carregamento de pacote é tentado no REPL, desempenho aprimorado para manipulação de registros em sistemas de arquivos distribuídos (e Windows), melhor manipulação de inferência, inicial suporte para Apple Silicon e muito mais.
Os novos recursos de threading incluem abordar algumas condições de corrida no tempo de execução, problemas de sincronização resolvidos, melhor programação de cargas de trabalho em vários threads e atômica como um recurso de linguagem primitiva.
Desde seu primeiro lançamento, Julia usou o popular algoritmo Mersenne Twister como seu gerador de números aleatórios padrão. Sabíamos que poderíamos querer reavaliar essa escolha em algum ponto, mas não parecia particularmente urgente até que Chet Hega apontou que, alterando algoritmos, poderíamos não apenas obter uma aceleração significativa, mas também tornar os fluxos de números aleatórios reproduzíveis em programas multi-threaded. Mersenne Twister é famoso por ter um período excepcionalmente longo, mas isso requer um estado correspondentemente grande e não é realmente necessário para qualquer aplicação prática. Também usamos estados RNG locais de thread para segurança de thread, que tem um pouco de sobrecarga e tornou os fluxos aleatórios dependentes do agendamento da tarefa.
A proposta de Chet aproveitou o estado muito menor da família de RNGs Xoshiro256 para colocar um estado em cada tarefa e bifurcá-lo em cada criação de tarefa. Isso faz com que os números aleatórios dependam apenas da estrutura de geração de tarefas de um programa, e não da programação de execução paralela. Demorou um pouco para que todos nós nos sentíssemos confortáveis gastando bytes preciosos de objetos Task dessa maneira, mas somos grandes fãs da reprodutibilidade e, portanto, a proposta foi eventualmente adotada.
Saiba mais sobre Julia 1.7 em JuliaLang.org.