Lanzamento da linguaxe de programación Julia 1.10

Publicouse o lanzamento da linguaxe de programación Julia 1.10, que combina calidades como alto rendemento, soporte para dixitación dinámica e ferramentas integradas para programación paralela. A sintaxe de Julia é próxima a MATLAB, con algúns elementos tomados de Ruby e Lisp. O método de manipulación de cadeas lembra a Perl. O código do proxecto distribúese baixo a licenza MIT.

Características principais da lingua:

  • Alto rendemento: un dos obxectivos fundamentais do proxecto é conseguir un rendemento próximo aos programas C. O compilador Julia baséase no proxecto LLVM e xera un código de máquina nativo eficiente para moitas plataformas de destino;
  • Soporte para varios paradigmas de programación, incluíndo elementos de programación orientada a obxectos e funcional. A biblioteca estándar ofrece funcións para E/S asíncronas, xestión de procesos, rexistro, creación de perfiles e xestión de paquetes, entre outras cousas;
  • Escritura dinámica: a linguaxe non require unha definición explícita de tipos para as variables, por analoxía coas linguaxes de programación de scripts. Admite o modo interactivo;
  • Capacidade opcional para especificar de forma explícita tipos;
  • Sintaxe que é excelente para cálculos numéricos, cálculos científicos, sistemas de aprendizaxe automática e visualización de datos. Soporte para moitos tipos de datos numéricos e ferramentas para paralelizar cálculos.
  • Capacidade de chamar directamente funcións desde bibliotecas C sen capas adicionais.

Principais cambios en Julia 1.10:

  • Novas características lingüísticas
    • Por defecto, o novo analizador JuliaSyntax.jl mellorado está activado. Se precisas volver ao antigo, debes establecer a variable de ambiente JULIA_USE_FLISP_PARSER en 1.
    • Os símbolos ⥺ (U+297A, \leftarrowsubset) e ⥷ (U+2977, \leftarrowless) agora pódense usar como operadores binarios con precedencia de frechas.
  • Cambios lingüísticos
    • Ao xerar tarefas fillas, o RNG local (xerador de números aleatorios) da tarefa principal xa non se ve afectado. O novo esquema de inicialización do xerador de números aleatorios é semellante ás implementacións SplitMix e DotMix.
    • Propúxose unha nova regra de selección de métodos que desambigua o tipo "Unión{}" a favor dun método definido explícitamente para xestionar un argumento de tipo "Unión{}".
    • O carácter "h bar" ℏ (\hslash U+210F) agora trátase como equivalente a ħ (\hbar U+0127).
    • A macro "@simd" agora ten unha semántica específica: só permite a reordenación e a poda de punto flotante en lugar de activar todas as optimizacións "@fastmath". Se os programas en execución experimentan unha degradación do rendemento debido a este cambio, entón o comportamento anterior pódese restaurar usando "@fastmath @simd".
    • Cando se amosa no rastrexo da pila dun método con palabras clave, a representación textual das palabras clave agora simplifícase mediante a nova sintaxe de macros "@Kwargs{key1::Type1, ...}".
  • Melloras do compilador/de execución
    • O colector de lixo agora realiza unha selección multiproceso de obxectos para eliminalos.
    • JITLink está habilitado de forma predeterminada nos sistemas Linux baseados en aarch64 cando se crea Julia con LLVM 15 ou posterior.
    • O proceso de precompilación implica bloquear ficheiros pid. Só un proceso de Julia realiza a precompilación á vez. Anteriormente, todos os procesos corrían en paralelo e existía o perigo de corromper os ficheiros da caché de compilación debido ás condicións de carreira.
  • Cambios no parámetro da liña de comandos
    • Engadiuse a opción "--gcthreads", que che permite especificar cantos fíos paralelos usará o colector de lixo. O valor predeterminado é "N/2", onde N é o número de fíos de traballo ("-threads") utilizados por Julia.
  • Construír cambios no sistema
    • Os nós "SparseArrays" e "SuiteSparse" están excluídos da imaxe do sistema por defecto. O paquete base de Julia xa non contén bibliotecas con licenza GPL. Non obstante, estas bibliotecas aínda están incluídas coa linguaxe na distribución binaria estándar.
  • Novas funcións da biblioteca
    • "tanpi" calcula "tan(π*x)" con máis precisión que "tan(pi*x)".
    • "fourroot(x)" defínese en Base.Math e pódese usar para calcular a cuarta raíz de "x". O nome curto deste método é o carácter Unicode ∜, que se pode introducir mediante o comando \fourthroot.
    • Engadíronse funcións "Libc.memmove", "Libc.memset" e "Libc.memcpy", cuxa funcionalidade corresponde á funcionalidade das correspondentes chamadas C.
    • Engadiuse o método "Base.isprecompiled(pkg::PkgId)" que devolve "true" se o paquete xa foi precompilado.
  • Opcións da función da biblioteca
    • "binomial(x, k)" agora admite "x" non enteiro.
    • "CartesianIndex" agora trátase como un "escalar" para a emisión.
    • O método "printstyled" agora admite a saída en cursiva.
    • Os métodos "parent" e "parentindices" agora admiten o tipo "SubStrings".
    • O método "substituír(cadea,patrón...)" agora admite un argumento "IO" opcional para emitir a un fluxo en lugar de devolver unha cadea.
    • O método "startswith" agora admite fíos de E/S.
  • Cambios na biblioteca base
    • Dos métodos "sortperm!" e "partialsortperm!" eliminou a palabra clave "initialized=true", o que podería provocar un comportamento inseguro.
    • Cando se imprimen números enteiros de tipo "Rational", agora omítase o seu denominador no contexto dos fluxos escritos "Rational" (como matrices).
  • Xestor de paquetes
    • O método "Pkg.precompile" agora toma "timing" como argumento clave, mostrando información de tempo de precompilación para cada paquete - "Pkg.precompile(timing=true)".
  • Álxebra lineal
    • O tipo "AbstractQ" xa non é un subtipo de "AbstractMatrix". Ademais, o método "adjoint(Q::AbstractQ)" xa non envolve "Q" no tipo "Adjoint", substituíndoo por "AdjointQ", que é un subtipo de "AbstractQ". Este cambio débese ao feito de que normalmente as instancias "AbstractQ" se comportan como operadores lineais baseados en funcións e matrices e non son accesibles por índice. Ademais, moitos tipos "AbstractQ" poden operar en vectores/matrices de diferentes tamaños, actuando como unha matriz cun tamaño dependente do contexto. Con este cambio, o tipo "AbstractQ" agora ten unha interface ben definida, que se describe en detalle na documentación de Julia.
    • Os resultados da factorización xa non se engloban nos tipos de envoltura "Adxunto" e "Transposición". En cambio, engadíronse os tipos "AdjointFactorization" e "TranposeFactorization", que son subtipos de "Factorización".
    • Novas funcións "hermitianpart" e "hermitianpart!" para atopar a parte hermitiana (verdadeiramente simétrica) da matriz.
    • O método "norm" dunha matriz filla transposta do tipo "AbstractMatrix" agora devolve a norma da matriz pai por defecto, que coincide co comportamento actual de "AbstractVectors".
    • Engadíronse métodos para calcular os vectores propios "autovectores (A, B)" e "eigvals(A, B)" no caso de que un de A ou B sexa simétrico ou hermitiano.
    • Os métodos "eigvals/eigen(A, cholesky(B))" agora calculan os autovalores xeneralizados (eigvals: e eigenvectors) de A e B mediante a expansión de Cholesky para B definido positivo.
  • Printf
    • Os especificadores de formato agora admiten ancho e precisión dinámicos, como "%*s" e "%*.*g".
  • REPL
    • Ao imprimir un rastro de pila, a profundidade dos tipos impresos nas sinaturas de funcións está limitada para evitar unha saída excesivamente detallada.
  • Proba
    • A macro "@test_broken" (ou "@test" con "broken=true") agora xera un erro se a expresión de proba non devolve false/true.
    • Se hai un erro ao chamar "@test" ou un erro nunha función, agora ofrécese un seguimento detallado da pila para axudar a comprender a posición da proba no "@testset".
  • InteractiveUtils
    • "code_native" e "@code_native" agora usan a sintaxe Intel en lugar de AT&T.
    • "@time_imports" agora mostra o tempo de execución de "__init__()" para os módulos importados.
  • Desactualizado e suxeito a estruturas de eliminación
    • A macro "@pure" quedou en desuso. "Base.@assume_effects :foldable" debería usarse no seu lugar.

Fonte: opennet.ru

Engadir un comentario