Mae rhyddhau'r iaith raglennu Julia 1.12 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.12:
- Nodweddion iaith newydd
- Mae'r opsiwn arbrofol "--trim" yn creu ffeiliau deuaidd mwy cryno trwy gael gwared ar god nad yw'n gyraeddadwy o'r pwyntiau mynediad penodedig. Gellir marcio pwyntiau mynediad gan ddefnyddio "Base.Experimental.entrypoint." Efallai na fydd pob cod yn gweithio gyda'r opsiwn hwn.
- Mae gor-reoliadau cyson bellach wedi'u diffinio'n glir ac yn dilyn semanteg oes y byd. Caniateir gor-reoliadau ychwanegol (er enghraifft, o fathau).
- Mae paramedr newydd "usings::Bool" wedi'i ychwanegu at y ffwythiant "names", gan achosi i'r ffwythiant ddychwelyd yr holl enwau sy'n weladwy trwy "using".
- Mae'r teulu macro @atomic bellach yn cefnogi cystrawen aseiniad cyfeirio, fel @atomic :monotonic v[3] += 4, sy'n addasu v[3] yn atomig gyda semanteg trefnu monotonig. Mae'r cystrawen a gefnogir yn cynnwys:
- darlleniad atomig ("x = @atomig v[3]"),
- aseiniad atomig ("@atomig v[3] = 4"),
- newid atomig ("@atomig v[3] += 2"),
- aseiniad sengl atomig ("@atomiconce v[3] = 2"),
- cyfnewid atomig ("x = @atomicswap v[3] = 2"),
- amnewidiad atomig ("x = @atomicreplace v[3] 2=>5").
- Mae'r paramedr newydd "--task-metrics=yes" yn galluogi casglu gwybodaeth am amser gweithredu ar gyfer pob tasg. Gellir troi'r paramedr hwn ymlaen/i ffwrdd yn ystod amser rhedeg gan ddefnyddio "Base.Experimental.task_metrics(::Bool)". Metrigau sydd ar gael:
- amser gweithredu gwirioneddol y dasg, gan gynnwys llunio a chasglu sbwriel ("Base.Experimental.task_running_time_ns"),
- amser o'r eiliad y dechreuodd y dasg gael ei chwblhau (“Base.Experimental.task_wall_time_ns”).
- Cefnogaeth Unicode 16.
- Mae "Threads.@spawn" bellach yn derbyn y ddadl ":samepool" i nodi'r un pwll edau â'r cod galw. Mae "Threads.@spawn :samepool foo()" yn fyr am "Threads.@spawn Threads.threadpool() foo()".
- Gall y macro "@ccall" nawr dderbyn dadl "gc_safe". Os yw'r ddadl hon yn wir, gall yr amser rhedeg gasglu sbwriel ar yr un pryd tra bod "ccall" yn cael ei alw.
- Newidiadau iaith
- Wrth ddisodli dull gyda llofnod cyfatebol, ni chaiff y dull presennol ei ddileu. Yn lle hynny, mae'r dull newydd yn cael blaenoriaeth. Os caiff y dull newydd ei ddileu, bydd yr hen ddull yn ailddechrau gweithio. Mae hyn yn ddefnyddiol, er enghraifft, wrth ffugio fframweithiau profi (SparseArrays, Pluto, Mocking, ac ati), gan nad oes angen adfer yr hen ddull yn benodol. Ar hyn o bryd, mae'r sefyllfa hon yn gofyn am ail-grynhoi, ond efallai y bydd modd ailddefnyddio hen ganlyniadau yn y dyfodol.
- Ni fydd ehangu macro bellach yn mynd i mewn i fynegiadau "Expr(:toplevel)" o macros yn syth ac yn ailadroddus. Yn lle hynny, bydd ehangu ":toplevel" yn cael ei ohirio tan amser rhedeg. Mae hyn yn caniatáu i fynegiadau diweddarach yn yr un ":toplevel" ddefnyddio macros a ddiffiniwyd yn flaenorol.
- Nid yw dolenni anfeidrol dibwys (fel "while true; end") bellach yn cael eu hystyried yn ymddygiad heb ei ddiffinio. Nid oedd dolenni anfeidrol sy'n gwneud rhywbeth mewn gwirionedd (fel gydag sgîl-effeithiau neu gwsg) erioed wedi cael eu hystyried yn ymddygiad heb ei ddiffinio ac nid ydynt yn cael eu hystyried.
- Mae marcio dynodwr fel "cyhoeddus" ac "allforio" ar yr un pryd bellach yn wall.
- Mae gwallau amser rhedeg yn "getfield" bellach yn taflu math eithriad newydd "FieldError" yn lle'r "ErrorException" generig.
- Nid oes angen cromfachau mwyach ar macros mewn datganiadau ffwythiannau. Er enghraifft, mae "function @main(args) … end" bellach yn dderbyniol, tra yn flaenorol roedd angen "function (@main)(args) … end".
- Mae galw "defnyddio" ar enw pecyn o fewn y pecyn ei hun (yn arbennig o berthnasol ar gyfer modiwlau wedi'u nythu) bellach yn defnyddio'r pecyn hwnnw'n benodol heb edrych ar y Maniffesto a'r amgylchedd, yn union fel "..Name." Mae hyn yn cyd-fynd yn well â'r ymddygiad disgwyliedig.
- Gwelliannau crynhoydd/amser rhedeg
- Mae cod canolradd (IR) a gynhyrchir gan LLVM bellach yn defnyddio mathau o bwyntyddion yn lle pasio pwyntyddion fel cyfanrifau. Mae hyn yn effeithio ar "llvmcall": dylid diweddaru'r IR LLVM adeiledig i ddisodli "i32"/"i64" gydag "i8*" neu "ptr" a chael gwared ar drawsnewidiadau diangen "ptrtoint"/"inttoptr". Er mwyn cydnawsedd, mae IR gyda phwyntyddion cyfanrifau yn dal i gael ei gefnogi, ond mae'n cynhyrchu rhybudd.
- Newidiadau paramedr llinell orchymyn
- Gellir pasio'r faner "-m/--module" i redeg y ffwythiant "main" o fewn y pecyn gyda set o ddadleuon. Rhaid datgan y ffwythiant hwn gyda "@main," sy'n nodi mai dyma'r pwynt mynediad.
- Gellir galluogi neu analluogi allbwn lliw Julia nawr gan ddefnyddio'r newidynnau amgylcheddol "NO_COLOR" a "FORCE_COLOR". Mae'r newidynnau hyn hefyd yn cael eu hanrhydeddu gan system adeiladu Julia.
- Mae "--project=@temp" yn cychwyn Julia gydag amgylchedd dros dro.
- Mae'r opsiwn newydd "--trace-compile-timing" yn argraffu amser llunio pob dull a allbwnir gan "--trace-compile" mewn milieiliadau.
- Mae "--trace-compile" bellach yn argraffu dulliau wedi'u hail-grynhoi mewn melyn neu'n ychwanegu sylw os nad yw'r lliw ar gael.
- Mae'r opsiwn newydd "--trace-dispatch" yn argraffu dulliau sy'n cael eu dyrannu'n ddeinamig.
- Newidiadau amledafedd
- Mae Julia bellach yn defnyddio 1 edau "rhyngweithiol" yn ddiofyn, yn ogystal ag 1 prif edau "gweithiwr", h.y. "-t1,1". Mae hyn yn golygu bod y brif dasg a REPL (yn y modd rhyngweithiol), sydd ill dau yn rhedeg yn edau 1, bellach yn rhedeg yn y pwll rhyngweithiol. Mae dolen I/O libuv hefyd yn rhedeg yn edau 1, gan sicrhau defnydd effeithlon o'r pwll gweithwyr a ddefnyddir gan "Threads.@spawn". Mae gofyn am 1 edau yn union ("-t1"/"JULIA_NUM_THREADS=1") neu 0 edau rhyngweithiol yn analluogi'r edau rhyngweithiol: "-t1,0", "JULIA_NUM_THREADS=1,0", neu "-tauto,0". Mae gofyn am fwy nag 1 edau yn galluogi'r edau rhyngweithiol; er enghraifft, mae "-t2" yn cyfateb i "-t2,1". Fel atgoffa, ni ddylid rhwymo byfferau i "threadid()".
- Diffinnir mathau newydd ar gyfer templedi cod y dylid eu gweithredu unwaith fesul proses—mae'r math "OncePerProcess{T}" yn caniatáu ichi ddiffinio swyddogaeth a fydd yn gweithredu unwaith yn union, y tro cyntaf y caiff ei galw, ac yna bob amser yn dychwelyd yr un gwerth o'r math "T" ar alwadau dilynol. Mae yna hefyd fathau "OncePerThread{T}" ac "OncePerTask{T}" ar gyfer defnydd tebyg gydag edafedd neu dasgau.
- Adeiladu newidiadau system
- Ychwanegwyd Makefileiau newydd ar gyfer adeiladu Julia ac LLVM gan ddefnyddio BOLT (Offeryn Optimeiddio a Chynllun Deuaidd). Gweler "contrib/bolt" a "contrib/pgo-lto-bolt".
- Swyddogaethau llyfrgell newydd
- Mae "logrange(dechrau, stopio; hyd)" yn creu ystod gyda chymhareb gyson yn hytrach na cham cyson.
- Mae'r ffwythiant newydd "isfull(c::Channel)" yn gwirio a fydd "put!(c, some_value)" yn blocio.
- Mae "waitany(tasks; throw=false)" a "waitall(tasks; failfast=false, throw=false)" yn aros i sawl tasg gwblhau ar yr un pryd.
- Mae "uuid7()" yn creu UUID fersiwn 7 sy'n cydymffurfio ag RFC 9562.
- Mae "insertdims(array; dims)" yn mewnosod dimensiynau un elfen i mewn i arae—gweithrediad gwrthdro "dropdims".
- Mae'r math "Trwsio" newydd yn cyffredinoli "Trwsio1/Trwsio2" i drwsio un ddadl.
- Mae "Sys.detectwsl()" yn gwirio a yw Julia yn rhedeg y tu mewn i WSL ar amser rhedeg.
- Cyfleoedd newydd i lyfrgelloedd
- Mae "escape_string" yn cymryd y paramedrau ychwanegol "ascii=true" (i ddianc rhag pob nod nad yw'n ASCII) a "fullhex=true" (i ddefnyddio fformat hecs 4/8 digid llawn mewn dianc rhag u/U, e.e. ar gyfer cydnawsedd C).
- Gall "tempname" nawr dderbyn llinyn ôl-ddodiad fel bod enw'r ffeil yn cynnwys yr ôl-ddodiad hwnnw a'i fod yn cael ei ystyried o ran unigrywiaeth.
- Gellir defnyddio gwrthrychau RegexMatch nawr i greu NamedTuple a Dict.
- Mae "Cloadwy" bellach yn allforioadwy.
- Mae "Base.require_one_based_indexing" a "Base.has_offset_axes" bellach yn gyhoeddus.
- Ychwanegwyd ffwythiannau newydd "ltruncate", "rtruncate" a "ctruncate" i fyrhau llinynnau i led y testun, gan ystyried lled y cymeriad.
- Mae'r ffwythiant "isless" (ac felly "cmp", didoli, ac ati) bellach yn cael ei gefnogi ar gyfer "AbstractArray" dimensiwn sero.
- Mae "invoke" bellach yn caniatáu pasio "Dull" yn lle llofnod math.
- Mae "invoke" bellach yn derbyn "CodeInstance" yn lle math, a all gyflymu rhai llif gwaith ategion crynhoi.
- Mae "Timer(f, …)" bellach yn etifeddu gludiogrwydd y dasg rhiant wrth greu tasgau amserydd, y gellir eu diystyru gyda'r ddadl "sbawn" newydd. Mae hyn yn datrys problem lle byddai tasgau a sbardunwyd yn gludiog ("@async") yn gwneud y rhiant yn gludiog.
- Mae gan "Amserydd" bellach briodweddau "amser terfyn" ac "cyfwng" darllenadwy, a dull "dangos" mwy disgrifiadol.
- Mae 'sort' bellach yn cefnogi tiwpleau 'NTuple'.
- Mae "map!(f, A)" bellach yn storio canlyniadau yn "A", fel "map!(f, A, A)" neu "A .= f.(A)".
- Mae "setprecision" gyda dadl ffwythiant (fel arfer trwy floc "do") bellach yn ddiogel i edau. Dylid osgoi ffurfiau eraill, a dylai mathau fudo i weithrediad gan ddefnyddio "ScopedValue".
- Newidiadau Llyfrgell Safonol
- Mae "gcdx(0, 0)" bellach yn dychwelyd "(0, 0, 0)" yn lle "(0, 1, 0)".
- Mae "fd" yn dychwelyd "RawFD" yn lle "Int".
- Pecyn JuliaSyntaxHighlighting
- Pecyn safonol newydd ar gyfer rhoi amlygu cystrawen ar god Julia, gan ddefnyddio JuliaSyntax a StyledStrings i weithredu swyddogaeth amlygu sy'n cynhyrchu AnnotatedString gyda'r amlygu wedi'i gymhwyso.
- Pecyn Algebra Llinol.
- Gall "rank" nawr dderbyn matrics "QRPivoted" i amcangyfrif safle trwy ffactorio QR.
- Ychwanegwyd y paramedr allweddol "alg" at "eigen", "eigen!", "eigvals", ac "eigvals!" ar gyfer mathau o fatrics hunan-gysylltiedig (undeb nodweddiadol "RealHermSymComplexHerm"), gan ganiatáu newid rhwng algorithmau echdynnu eigenwerth gwahanol.
- Ychwanegwyd fersiwn gyffredinol o ddadelfennu Cholesky heb ei flocio gyda samplu cylchdro (a elwir trwy "cholesky[!](A, RowMaximum())").
- Mae nifer diofyn yr edafedd BLAS bellach yn ystyried affinedd proses yn hytrach na nifer yr edafedd rhesymegol yn y system yn unig.
- Ychwanegwyd y ffwythiant "zeroslike", sy'n dychwelyd elfennau sero ar gyfer matricsau sy'n seiliedig ar dâp. Gall mathau o araeau personol arbenigo'r ffwythiant hwn i ddychwelyd y canlyniad cywir.
- Mae lluosi matrics "A * B" bellach yn galw "matprod_dest(A, B, T::Type)" i gynhyrchu'r cyrchfan. Mae'r ffwythiant hwn bellach yn gyhoeddus.
- Defnyddir y ffwythiant "haszero(T::Type)" i wirio a oes gan y math "T" elfen sero unigryw, a ddiffinnir fel "zero(T)". Mae bellach yn gyhoeddus.
- Ychwanegwyd y ffwythiant "diagview", sy'n dychwelyd golygfa o groeslin benodol o'r matrics "AbstractMatrix".
- Pecyn Proffil
- Mae "Profile.take_heap_snapshot" bellach yn derbyn paramedr newydd, "redact_data::Bool," gyda rhagosodiad o "true." Os yw wedi'i alluogi, ni fydd cynnwys gwrthrychau Julia (megis llinynnau) wedi'u cynnwys yn y ciplun pentwr.
- Mae "Profile.print()" bellach yn lliwio modiwlau Sylfaen/Craidd/Pecyn yn yr un ffordd ag y mae'n ei wneud mewn olion pentwr, ac mae llwybrau (hyd yn oed rhai wedi'u cwtogi) bellach yn gliciadwy mewn terfynellau sy'n cefnogi cysylltiadau URI ac yn caniatáu agor y ffeil a'r llinell benodol yn y golygydd a bennir gan "JULIA_EDITOR".
- REPL
- Drwy ddefnyddio'r nodwedd newydd "usings=true" yn y ffwythiant "names()", gall cwblhau REPL gwblhau enwau sy'n weladwy drwy "using".
- Gall cwblhau REPL nawr gwblhau llinynnau fel "[mewnforio|gan ddefnyddio] Mod: xxx|", er enghraifft cwblhau "gan ddefnyddio Base.Experimental: @op" i "gan ddefnyddio Base.Experimental: @opaque".
- Mae'r REPL bellach yn rhoi rhybudd os cyfeirir at enw trwy fodiwl nad yw'n ei ddiffinio (ac nad oes ganddo is-fodiwl sy'n ei ddiffinio), ac nad yw'r enw'n gyhoeddus yn y modiwl hwnnw. Er enghraifft, diffinnir "map" yn Base, a bydd gweithredu "LinearAlgebra.map" yn y REPL bellach yn rhoi rhybudd y tro cyntaf y gwneir cyfeiriad o'r fath.
- Wrth allbynnu mewnbwn i'r REPL, mae'r allbwn bellach yn cael ei fyrhau i 20 KiB. Nid yw hyn yn effeithio ar alwadau â llaw i "dangos," "argraffu," ac ati.
- Mae cwblhau awtomatig ar gyfer y cymeriad "\" bellach yn dangos y cymeriad neu'r emoji cyfatebol wrth ymyl pob gair cod cyfatebol.
- Pecyn prawf
- Os bydd y gyfres brawf DefaultTestSet yn methu, caiff generadur rhifau ar hap (RNG) y gyfres brawf ei argraffu i helpu i atgynhyrchu gwall stocastig sy'n dibynnu ar gyflwr yr RNG yn unig. Gallwch hefyd nodi'r RNG ar gyfer cyfres brawf trwy basio'r paramedr rng i'r macro @testset: julia gan ddefnyddio Test, Random @testset rng=Xoshiro(0x2e026445595ed28e, 0x07bb81ac4c54926d, 0x83d7d70843e8bad6, 0xdbef927d150af80b, 0xdbf91ddf2534f850) begin @test rand() == 0.559472630416976 end
- Pecyn InteractiveUtils
- Macros newydd "@trace_compile" a "@trace_dispatch" ar gyfer gweithredu mynegiadau gyda'r paramedrau "--trace-compile=stderr --trace-compile-timing" a "--trace-dispatch=stderr" yn y drefn honno.
- Dibyniaethau allanol
- Mae cronfa ddata gwybodaeth y derfynell ("terminfo") bellach wedi'i chynnwys yn ddiofyn yn Julia, gan wella perfformiad REPL pan nad yw terminfo ar gael ar y system. Gellir adeiladu Julia heb gynnwys y gronfa ddata trwy ddefnyddio'r paramedr Makefile "WITH_TERMINFO=0".
- Gwelliannau Offeryn
- Mae proffiliwr amser wal ar gael i ddefnyddwyr sydd angen proffiliwr samplu sy'n cipio tasgau waeth beth fo'u cyflwr (wedi'u hamserlennu/yn rhedeg). Mae'r proffiliwr hwn yn caniatáu proffilio tasgau sy'n ddwys o ran mewnbwn/allbwn ac yn helpu i nodi meysydd o gystadlu uchel yn y system.
Ffynhonnell: opennet.ru
