Iaith rhaglennu Julia 1.9 ar gael

Mae rhyddhau'r iaith raglennu Julia 1.9 wedi'i gyhoeddi, gan gyfuno rhinweddau fel perfformiad uchel, cefnogaeth ar gyfer teipio deinamig ac offer adeiledig ar gyfer rhaglennu cyfochrog. Mae cystrawen Julia yn agos at MATLAB, gyda rhai elfennau wedi'u benthyca gan Ruby a Lisp. Mae'r dull trin llinynnau yn atgoffa rhywun o Perl. Mae cod y prosiect yn cael ei ddosbarthu o dan y drwydded MIT.

Nodweddion allweddol yr iaith:

  • Perfformiad uchel: un o nodau allweddol y prosiect yw cyflawni perfformiad sy'n agos at raglenni C. Mae'r casglwr Julia yn seiliedig ar y prosiect LLVM ac yn cynhyrchu cod peiriant brodorol effeithlon ar gyfer llawer o lwyfannau targed;
  • Cefnogaeth i baradeimau rhaglennu amrywiol, gan gynnwys elfennau o raglennu gwrthrych-gyfeiriad a swyddogaethol. Mae'r llyfrgell safonol yn darparu swyddogaethau ar gyfer I/O asyncronaidd, rheoli prosesau, logio, proffilio, a rheoli pecynnau, ymhlith pethau eraill;
  • Teipio deinamig: Nid oes angen diffiniad penodol o fathau ar gyfer newidynnau yn yr iaith, trwy gyfatebiaeth ag ieithoedd rhaglennu sgriptio. Yn cefnogi modd rhyngweithiol;
  • Gallu dewisol i nodi mathau penodol;
  • Cystrawen sy'n ardderchog ar gyfer cyfrifiadau rhifiadol, cyfrifiadau gwyddonol, systemau dysgu peiriannau a delweddu data. Cefnogaeth i lawer o fathau o ddata rhifol ac offer ar gyfer cyfochri cyfrifiadau.
  • Y gallu i alw swyddogaethau'n uniongyrchol o lyfrgelloedd C heb haenau ychwanegol.

Newidiadau mawr yn Julia 1.9:

  • Nodweddion iaith newydd
    • Caniatáu i aseiniadau gael eu gwneud mewn modiwl arall gan ddefnyddio "setproperty!(::Modiwl, ::Symbol, x)".
    • Caniateir aseiniad lluosog nad yw yn y safle terfynol. Er enghraifft, bydd y llinyn "a, b..., c = 1, 2, 3, 4" yn cael ei brosesu fel "a = 1; b…, = 2, 3; c = 4". Ymdrinnir â hyn trwy Base.split_rest.
    • Mae llythrennol nodau sengl bellach yn cynnal yr un gystrawen â llythrennol llinynnol; y rhai. gall y gystrawen gynrychioli dilyniannau UTF-8 annilys, fel y caniateir gan y math Torgoch.
    • Cefnogaeth ychwanegol i fanyleb Unicode 15.
    • Bellach gellir defnyddio cyfuniadau nythu o hyrddod a thuples a enwir fel paramedrau math.
    • Swyddogaethau adeiledig newydd "getglobal (:: Modiwl, :: Symbol [, trefn])" a "setglobal! (:: Modiwl, :: Symbol, x [, trefn])" ar gyfer darllen ac ysgrifennu i newidynnau byd-eang yn unig. Dylai'r dull getglobal bellach gael ei ffafrio dros y dull getfield ar gyfer cyrchu newidynnau byd-eang.
  • Newidiadau iaith
    • Mae'r macro "@invoke" a gyflwynwyd yn fersiwn 1.7 bellach yn cael ei allforio ac ar gael i'w ddefnyddio. Hefyd, mae bellach yn defnyddio'r dull "Core.Typeof(x)" yn hytrach nag "Unrhyw" pan fydd yr anodiad teip yn cael ei hepgor ar gyfer y ddadl "x". Mae hyn yn angenrheidiol er mwyn i fathau a basiwyd fel dadleuon gael eu prosesu'n gywir.
    • Galluogi allforio swyddogaeth "invokelatest" a'r macro "@invokelatest" a gyflwynwyd yn fersiwn 1.7.
  • Gwelliannau i'r Crynwyr/Adeg Rhedeg
    • Lleihau'n sylweddol yr amser cyn y dienyddiad cyntaf (TTFX - Amser i'r dienyddiad cyntaf). Mae rhag-grynhoad pecyn bellach yn arbed y cod brodorol yn "pkgimage", sy'n golygu na fydd angen ail-grynhoi'r cod a gynhyrchir yn ystod y rhag-grynhoi ar ôl i'r pecyn gael ei lwytho. Gellir analluogi'r defnydd o fodd pkgimages gyda'r opsiwn "--pkgimages=no".
    • Mae'r broblem hysbys o gymhlethdod cwadratig o gasgliad math wedi'i datrys, ac yn gyffredinol mae'r casgliad yn defnyddio llai o gof. Mae rhai achosion ymyl gyda swyddogaethau hir a gynhyrchir yn awtomatig (fel ModelingToolkit.jl gyda hafaliadau gwahaniaethol rhannol a modelau achosol mawr) yn llunio llawer cyflymach.
    • Bellach gellir optimeiddio galwadau â dadleuon nad ydynt yn rhai penodol i fathau o’r Undeb ar gyfer chwistrelliad neu ddatrysiad statig, hyd yn oed os oes sawl math gwahanol o ymgeiswyr anfon. Gall hyn wella perfformiad mewn rhai sefyllfaoedd lle nad yw mathau o wrthrychau wedi'u datrys yn llwyr, trwy ddatrys safleoedd galwadau "@nospecialize-d" yn statig ac osgoi ail-grynhoi.
    • Mae pob defnydd o'r macro @pure yn y modiwl Base wedi'i ddisodli gan Base.@assume_effects.
    • Nid yw galwadau i alw (f, invokesig, args...) gyda mathau llai penodol na'r rhai a ddefnyddir fel arfer ar gyfer f(args...) bellach yn achosi i'r pecyn gael ei ail-grynhoi.
  • Newidiadau paramedr llinell orchymyn
    • Ar Linux a Windows, mae'r opsiwn "--threads=auto" bellach yn ceisio pennu'r nifer o broseswyr sydd ar gael yn seiliedig ar affinedd CPU, sef mwgwd wedi'i osod fel arfer mewn amgylcheddau HPC ac cwmwl.
    • Mae'r opsiwn "--math-mode=fast" wedi'i analluogi, ac yn lle hynny argymhellir defnyddio'r macro "@fastmath", sydd â semanteg wedi'i ddiffinio'n dda.
    • Bellach mae gan y paramedr "--threads" y fformat \"auto| N[,auto|M]", lle mae M yn pennu nifer yr edafedd rhyngweithiol i'w creu (ar hyn o bryd mae awtomatig yn golygu 1).
    • Ychwanegwyd opsiwn "--heap-size-hint= ”, sy'n gosod y trothwy ar ôl i gasglu sbwriel gweithredol ddechrau. Gellir nodi'r maint mewn bytes, kilobeit (1000 KB), megabeit (300 MB), neu gigabeit (1,5 GB).
  • Newidiadau Multithreading
    • Mae gan "Threads.@spawn" arg gyntaf ddewisol gyda'r gwerth ":default" neu ":interactive". Mae tasg ryngweithiol yn gofyn am hwyrni ymateb isel ac mae wedi'i chynllunio i fod yn fyr neu'n cael ei chyflawni'n aml. Bydd tasgau rhyngweithiol yn rhedeg ar edafedd rhyngweithiol os cânt eu nodi wrth gychwyn Julia.
    • Gall edafedd a lansiwyd y tu allan i amser rhedeg Julia (er enghraifft, o C neu Java) nawr alw cod Julia gan ddefnyddio "jl_adopt_thread". Mae hyn yn digwydd yn awtomatig pan fyddwch chi'n mewnbynnu cod Julia trwy "cfunction" neu'r pwynt mynediad "@ccallable". O ganlyniad, gall nifer yr edafedd nawr newid yn ystod amser rhedeg.
  • Swyddogaethau llyfrgell newydd
    • Swyddogaeth "Iterators.flatmap" newydd.
    • Swyddogaeth "pkgversion(m:: Modiwl)" newydd i gael y fersiwn o'r pecyn a lwythodd fodiwl penodol, tebyg i "pkgdir (m:: Modiwl)".
    • Swyddogaeth "stack(x)" newydd sy'n cyffredinoli "lleihau(hcat, x::Vector{<:Vector})" i unrhyw ddimensiwn ac yn caniatáu unrhyw iterator o iterators. Mae'r dull "stack(f, x)" yn cyffredinoli "mapreduce(f, hcat, x)" ac mae'n fwy effeithlon.
    • Macro newydd ar gyfer dosrannu cof a ddyrannwyd "@allocations", tebyg i "@allocated", ac eithrio ei fod yn dychwelyd nifer y dyraniadau cof, nid cyfanswm maint y cof a ddyrannwyd.
  • Nodweddion newydd y llyfrgell
    • Mae "RoundFromZero" bellach yn gweithio ar gyfer mathau heblaw "BigFloat".
    • Bellach gellir graddio "Dict" â llaw gyda "sizehint!".
    • Mae "@time" bellach ar wahân yn nodi canran yr amser a dreuliwyd yn ail-grynhoi dulliau annilys.
  • Newidiadau yn y llyfrgell safonol
    • Wedi trwsio mater arian cyfred mewn dulliau iteriad ar gyfer Dict a gwrthrychau deillio eraill megis allweddi (:: Dict), gwerthoedd (:: Dict) a Set. Bellach gellir galw'r dulliau ailadrodd hyn ar Dict neu Set yn gyfochrog ar nifer anghyfyngedig o edafedd, cyn belled nad oes unrhyw gamau gweithredu sy'n addasu'r geiriadur neu'r set.
    • Mae negyddu'r ffwythiant rhagfynegi "!f" bellach yn dychwelyd ffwythiant cyfansawdd "(!) ∘ f" yn lle ffwythiant dienw.
    • Mae swyddogaethau sleisen dimensiwn bellach yn gweithio ar draws dimensiynau lluosog: mae "eachslice", "eachrow", ac "eachcol" yn dychwelyd gwrthrych "Slices" sy'n caniatáu anfon i ddarparu dulliau mwy effeithlon.
    • Ychwanegwyd macro "@kwdef" i'r API cyhoeddus.
    • Wedi datrys problem gyda threfn gweithrediadau yn "fld1".
    • Mae trefnu yn awr bob amser yn sefydlog (QuickSort wedi'i ailgynllunio).
    • Mae "Base.splat" bellach yn cael ei allforio. Mae'r gwerth dychwelyd o fath "Base.Splat" yn hytrach na swyddogaeth ddienw, sy'n caniatáu iddo gael ei gasglu'n braf.
  • Rheolwr Pecyn
    • "Estyniadau Pecyn": cefnogaeth ar gyfer llwytho pyt cod o becynnau eraill a lwythwyd mewn sesiwn Julia. Mae'r cais yn debyg i'r pecyn "Requires.jl", ond cefnogir cydweddoldeb rhag-gasglu a chyfluniad.
  • Llyfrgell LinearAlgebra
    • Oherwydd y risg o ddryswch gyda rhaniad elementwise, dilëwyd y dulliau "a / b" a "b \ a" gyda sgalar "a" a fector "b", a oedd yn cyfateb i "a * pinv(b)".
    • Mae galwadau BLAS a LAPACK bellach yn defnyddio "libblastrampoline (LBT)". Cyflenwir OpenBLAS yn ddiofyn, ond ni chefnogir adeiladu delwedd system gyda llyfrgelloedd BLAS/LAPACK eraill. Yn lle hynny, argymhellir defnyddio'r mecanwaith LBT i ddisodli BLAS/LAPACK gyda set arall o lyfrgelloedd sydd ar gael.
    • Mae "lu" yn cefnogi strategaeth cylchdroi matrics newydd "RowNonZero()" sy'n dewis yr elfen gylchdroi di-sero gyntaf i'w defnyddio gyda'r mathau rhifyddeg newydd ac at ddibenion addysgol.
    • Mae "normalize(x, p=2)" bellach yn cefnogi unrhyw ofod fector normal "x", gan gynnwys sgalars.
    • Mae nifer rhagosodedig edafedd BLAS bellach yn hafal i nifer yr edafedd CPU ar bensaernïaeth ARM a hanner nifer yr edafedd CPU ar bensaernïaeth eraill.
  • Printf: Negeseuon gwall wedi'u hailweithio ar gyfer llinynnau wedi'u camffurfio er mwyn eu darllen yn well.
  • Proffil: Swyddogaeth "Profile.take_heap_snapshot(file)" newydd sy'n dal ffeil yn y fformat ".heapsnapshot" sy'n seiliedig ar JSON a gefnogir gan Chrome.
  • Ar hap: mae randn a randexp bellach yn gweithio i unrhyw fath AbstractFloat sy'n diffinio rand.
  • REPL
    • Mae gwasgu'r cyfuniad bysell "Alt-e" nawr yn agor y mewnbwn cyfredol yn y golygydd. Bydd y cynnwys (os caiff ei newid) ei weithredu pan fydd y golygydd yn gadael.
    • Gellir newid y cyd-destun modiwl cyfredol sy'n weithredol yn y REPL (yn ddiofyn dyma'r Prif) gan ddefnyddio'r swyddogaeth "REPL.activate(:: Module)" neu trwy fynd i mewn i'r modiwl yn y REPL a phwyso'r allwedd "Alt-m" cyfuniad.
    • Gellir actifadu'r modd "anogwr wedi'i rifo", sy'n argraffu rhifau ar gyfer pob mewnbwn ac allbwn ac yn storio'r canlyniadau a werthuswyd yn Allan, gyda "REPL.numbered_prompt!()".
    • Mae cwblhau tab yn dangos y dadleuon allweddair sydd ar gael.
  • SuiteSparse: Wedi symud y cod ar gyfer datryswr "SuiteSparse" i "SparseArrays.jl". Mae datrysiadau bellach yn cael eu hail-allforio gan "SuiteSparse.jl".
  • Araeau Saen
    • Mae datryswyr SuiteSparse bellach ar gael fel is-fodiwlau o SparseArrays.
    • Mae dulliau amddiffyn llif UMFPACK a CHOLMOD wedi'u gwella trwy ddileu newidynnau byd-eang a defnyddio cloeon. Multithreaded "ldiv!" Bellach gellir gweithredu gwrthrychau UMFPACK yn ddiogel.
    • Mae'r swyddogaeth arbrofol "SparseArrays.allowscalar(::Bool)" yn eich galluogi i analluogi neu alluogi mynegeio sgalar araeau gwasgaredig. Mae'r swyddogaeth hon wedi'i chynllunio i ganfod mynegeio sgalar ar hap o wrthrychau "SparseMatrixCSC", sy'n ffynhonnell gyffredin o broblemau perfformiad.
  • Modd methu drosodd newydd ar gyfer ystafelloedd prawf sy'n terfynu rhediad prawf yn gynnar os bydd methiant neu wall. Gosodwch naill ai trwy "@testset kwarg failfast=true" neu "allforio JULIA_TEST_FAILFAST=true". Efallai y bydd angen hyn mewn lansiadau CI i dderbyn negeseuon gwall cynnar.
  • Dyddiadau: Nid yw llinynnau gwag bellach yn cael eu dosrannu'n anghywir fel gwerthoedd dilys "DateTime", "Dates" neu "Times" ac yn lle hynny taflu gwall "ArgumentError" mewn llunwyr a dosrannu, tra nad yw "tryparse" yn dychwelyd dim.
  • Pecyn wedi'i ddosbarthu
    • Mae ffurfweddiad y pecyn (prosiect gweithredol, "LOAD_PATH", "DEPOT_PATH") bellach yn cael ei ledaenu pan fydd prosesau gweithwyr lleol yn cael eu hychwanegu (e.e. gyda "addprocs(N::Int)" neu gyda baner y llinell orchymyn "-procs=N").
    • Mae "addprocs" ar gyfer prosesau gweithwyr lleol bellach yn cymryd dadl o'r enw "env" i drosglwyddo newidynnau amgylchedd i brosesau gweithwyr.
  • Mae Unicode: "graphemes(s, m:n)" yn dychwelyd yr is-linyn o mth i nth graffemau yn "s".
  • Mae'r pecyn DelimitedFiles wedi'i dynnu o lyfrgelloedd y system ac mae bellach yn cael ei ddosbarthu fel pecyn ar wahân y mae'n rhaid ei osod yn benodol er mwyn cael ei ddefnyddio.
  • Dibyniaethau allanol
    • Mae Linux yn canfod fersiwn llyfrgell y system libstdc ++ yn awtomatig ac yn ei lwytho os yw'n fwy newydd. Gellir adfer yr hen ymddygiad o lwytho'r libstdc++ adeiledig waeth beth fo'r fersiwn system trwy osod y newidyn amgylchedd "JULIA_PROBE_LIBSTDCXX=0".
    • Wedi tynnu "RPATH" o'r deuaidd julia, a all dorri llyfrgelloedd ar Linux sy'n methu â diffinio'r newidyn "RUNPATH".
    • Gwelliannau offer: Mae allbwn "MethodError" a dulliau (er enghraifft, o "methods (my_func)") bellach wedi'u fformatio a'u lliwio yn ôl sut mae dulliau'n cael eu hallbynnu mewn olion pentwr.

    Ffynhonnell: opennet.ru

Ychwanegu sylw