Julia, a linguagem de programação multiplataforma chega à sua versão 1.9

julia lang

ulia é uma linguagem dinâmica, de alto nível e alto desempenho para computação técnica.

Alguns dias atrás foi anunciado o lançamento da nova versão da linguagem de programação Julia 1.9, que combina qualidades como alto desempenho, suporte para digitação dinâmica e ferramentas integradas para programação paralela. A sintaxe de Julia é próxima ao MATLAB, com alguns elementos emprestados de Ruby e Lisp.

Julia destaca-se por ser uma linguagem de programação multiplataforma e multiparadigma com tipagem dinâmica Estrutura de alto nível e alto desempenho para computação genérica, técnica e científica, com uma sintaxe semelhante à de outros ambientes de computação semelhantes.

Principais novidades de Julia 1.9

Nesta nova versão do Julia 1.9 que se apresenta, vários melhorias no runtime/compilador, pois houve uma Redução significativa no tempo para a primeira execução. A pré-compilação do pacote agora salva o código nativo em "pkgimage", o que significa que o código gerado durante a pré-compilação não precisará ser recompilado após o carregamento do pacote. O uso do modo pkgimages pode ser desabilitado com a opção “–pkgimages=no”.

Outra das mudanças que se destacam são os chamadas com argumentos não específicos do tipo agora podem ser otimizadas via junção dividida para injeção ou resolução estática, mesmo que existam vários tipos diferentes de candidatos a envio. Isso pode melhorar o desempenho em determinadas situações em que os tipos de objeto não são totalmente resolvidos estaticamente, resolvendo estaticamente os sites de chamadas "@nospecialize-d" e evitar a recompilação.

Os literais de um único caractere agora suportam a mesma sintaxe dos literais de cadeia de caracteres; essas sintaxes podem representar sequências UTF-8 inválidas, conforme permitido pelo tipo Char.

Além disso, no Linux e no Windows, a opção «--threads=automático» agora tenta determinar o número disponível de processadores com base na afinidade da CPU, que é uma máscara normalmente definida em ambientes de HPC e nuvem.

A opção foi desativada--math-mode=rápido", em vez do qual é recomendável usar a macro "@fastmath", que possui semântica bem definida, além do parâmetro "-Tópicos» agora tem o formato «carro | N[,auto|M]», em que M especifica o número de encadeamentos interativos a serem criados.

Adicionada opção «--heap-size-hint=» para definir o limite após o qual a coleta de lixo ativa começa. O tamanho pode ser especificado em bytes, kilobytes (1000 KB), megabytes (300 MB) ou gigabytes (1,5 GB).

A macro "@invoke" introduzido na versão 1.7 agora é exportado e está disponível para uso. Além do mais, agora use o método "Core.Typeof(x)" ao invés de "Qualquer" quando a anotação de tipo para o argumento "x" é omitida. Isso é necessário para que os tipos passados ​​como argumentos sejam processados ​​corretamente.

Além disso, "Threads.@spawn" agora tem um primeiro argumento opcional de ":default" ou ":interactive". Uma tarefa interativa requer uma resposta de baixa latência e é projetada para ser curta ou frequente. Tarefas interativas serão executadas em encadeamentos interativos se forem especificadas ao iniciar Julia.

Do outras mudanças que se destacam:

  • Negar a função de predicado "!f" agora retorna uma função composta "(!) ∘ f" em vez de uma função anônima.
  • As funções de divisão de dimensão agora funcionam em várias dimensões: «cada fatia”, “cada linha” e “cada coluna” retornar um objeto "Fatias» que permite que o transporte forneça métodos mais eficientes.
  • A macro «@kwdef» foi adicionado à API pública.
  • Corrigido um problema com a ordem das operações em "fld1".
  • A classificação agora é sempre estável ao longo do tempo (QuickSort redesenhado).
  • O número padrão de encadeamentos BLAS agora é igual ao número de encadeamentos de CPU na arquitetura ARM e metade do número de encadeamentos de CPU em outras arquiteturas.
  • Printf: Mensagens de erro reformuladas para strings malformadas para melhor legibilidade.
  • Perfil: Nova função "Profile.take_heap_snapshot(arquivo)" que grava um arquivo no formato ".heapsnapshot" baseado em JSON suportado pelo Chrome.
  • Adicionado suporte para a especificação Unicode 15.
  • Combinações aninhadas de tuplas e tuplas de caracteres nomeados agora podem ser usadas como parâmetros de tipo.

Por fim, se você tiver interesse em saber mais sobre o assunto, pode consultar os detalhes no link a seguir.