Rhyddhau iaith raglennu Julia 1.8

Mae rhyddhau iaith raglennu Julia 1.8 ar gael, sy'n cyfuno rhinweddau fel perfformiad uchel, cefnogaeth ar gyfer teipio deinamig ac offer adeiledig ar gyfer rhaglennu cyfochrog. Mae cystrawen Julia yn agos at MATLAB, gan fenthyg rhai elfennau 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.8:

  • Nodweddion iaith newydd
    • Bellach gellir anodi meysydd strwythur mutable fel cysonion i'w hatal rhag cael eu newid a chaniatáu optimeiddio.
    • Gellir ychwanegu anodiadau math at newidynnau cyffredinol.
    • Gellir creu araeau n-dimensiwn gwag gan ddefnyddio lled-colonau lluosog y tu mewn i fracedi sgwâr, er enghraifft mae "[;;;]" yn creu arae 0x0x0.
    • Rhowch gynnig ar flociau nawr yn ddewisol yn cael bloc arall, sy'n cael ei weithredu yn syth ar ôl y prif gorff os nad oes unrhyw wallau yn cael eu taflu.
    • Gellir gosod @inline a @noinline y tu mewn i gorff swyddogaeth, sy'n eich galluogi i anodi swyddogaeth ddienw.
    • Bellach gellir cymhwyso @inline a @noinline i swyddogaeth mewn safle galwadau neu floc i orfodi'r galwadau swyddogaeth cyfatebol i gael eu cynnwys (neu beidio â'u cynnwys).
    • Caniateir ∀, ∃ a ∄ fel nodau dynodwr.
    • Cefnogaeth ychwanegol i fanyleb Unicode 14.0.0.
    • Gellir defnyddio'r dull Modiwl (:enw, ffug, ffug) i greu modiwl nad yw'n cynnwys enwau, nad yw'n mewnforio Sylfaen neu Graidd, ac nad yw'n cynnwys cyfeiriad ato'i hun.
  • Newidiadau iaith
    • Bellach mae gan wrthrychau Tasg sydd newydd eu creu (@spawn, @async, ac ati) world_age ar gyfer dulliau o'r rhiant Dasg pan gânt eu creu, gan ganiatáu ar gyfer cyflawni wedi'i optimeiddio. Mae'r opsiwn actifadu blaenorol ar gael gan ddefnyddio'r dull Base.invokelatetest.
    • Mae cyfarwyddebau fformatio deugyfeiriadol anghytbwys Unicode bellach wedi'u gwahardd mewn llinynnau a sylwadau i osgoi pigiadau.
    • Mae Base.ifelse bellach yn cael ei ddiffinio fel swyddogaeth generig yn hytrach na swyddogaeth adeiledig, gan ganiatáu i becynnau ymestyn ei ddiffiniad.
    • Mae pob aseiniad i newidyn byd-eang nawr yn mynd trwy alwad i drosi(Unrhyw, x) neu drosi(T, x) yn gyntaf os datgenir bod y newidyn byd-eang o fath T. Cyn defnyddio newidynnau byd-eang, sicrhewch fod y newidyn newidyn (Unrhyw un , x) === x bob amser yn wir, fel arall gall arwain at ymddygiad annisgwyl.
    • Mae swyddogaethau adeiledig bellach yn debyg i swyddogaethau generig a gellir eu rhifo'n rhaglennol gan ddefnyddio dulliau.
  • Gwelliannau i'r Crynwyr/Adeg Rhedeg
    • Bu gostyngiad o tua 25% yn yr amser cychwyn.
    • Mae'r casglwr LLVM wedi'i wahanu o'r llyfrgell amser rhedeg i lyfrgell newydd, libjulia-codegen. Mae'n cael ei lwytho yn ddiofyn, felly ni ddylai fod unrhyw newidiadau yn ystod y defnydd arferol. Mewn gosodiadau nad oes angen casglwyr arnynt (er enghraifft, delweddau system lle mae'r holl god angenrheidiol wedi'i rag-grynhoi), gellir hepgor y llyfrgell hon (a'i dibyniaeth LLVM).
    • Mae casgliad math amodol bellach yn bosibl trwy drosglwyddo dadl i ddull. Er enghraifft, ar gyfer Base.ifelse(isa(x, Int), x, 0) yn dychwelyd ::Int hyd yn oed os yw'r math o x yn anhysbys.
    • Mae SROA (Adnewyddu Agregau Scalar) wedi'i wella: yn dileu galwadau cae â meysydd byd-eang parhaus, yn dileu strwythurau mudol â meysydd anghychwynnol, yn gwella perfformiad ac yn trin galwadau cae nythu.
    • Mae casgliad math yn olrhain effeithiau amrywiol - sgîl-effeithiau a pheidio â gollwng. Mae lluosogi cyson yn cael ei ystyried, sy'n gwella perfformiad amser llunio yn sylweddol. Mewn rhai achosion, er enghraifft, bydd galwadau i swyddogaethau na ellir eu mewnosod ond nad ydynt yn effeithio ar y canlyniad yn cael eu taflu yn ystod amser rhedeg. Gellir trosysgrifo rheolau ar gyfer effeithiau â llaw gan ddefnyddio'r macro Base.@assume_effects.
    • Mae rhag-grynhoi (gyda chyfarwyddebau rhag-grynhoi penodol neu lwythi gwaith penodedig) bellach yn arbed mwy o god wedi'i ddiffinio gan fath, gan arwain at gyflawni cyflymach tro cyntaf. Gall unrhyw gyfuniadau dull/math newydd sydd eu hangen ar eich pecyn, ni waeth ble y diffiniwyd y dulliau hynny, bellach gael eu storio yn y ffeil rhag-grynhoi os cânt eu galw gan ddull sy'n perthyn i'ch pecyn.
  • Newidiadau paramedr llinell orchymyn
    • Yr ymddygiad rhagosodedig ar gyfer monitro datganiadau @inbounds bellach yw'r opsiwn auto yn "--check-bounds=yes|na|auto".
    • Opsiwn "--strip-metadata" newydd i dynnu llinynnau doc, gwybodaeth am leoliad ffynhonnell, ac enwau newidyn lleol wrth greu delwedd system.
    • Opsiwn newydd "--strip-ir" i ganiatáu i'r casglwr gael gwared ar y gynrychiolaeth cod ffynhonnell ganolraddol wrth adeiladu delwedd y system. Bydd y ddelwedd canlyniadol yn gweithio dim ond os defnyddir "--compile=all" neu os yw'r holl god gofynnol wedi'i lunio ymlaen llaw.
    • Os yw'r nod " -" wedi'i nodi yn lle enw'r ffeil, yna darllenir y cod gweithredadwy o'r ffrwd mewnbwn safonol.
  • Newidiadau cymorth multithreading
    • Mae Threads.@threads yn ddiofyn yn defnyddio'r opsiwn amserlennu newydd :dynamic, sy'n wahanol i'r modd blaenorol gan y bydd iteriadau'n cael eu hamserlennu'n ddeinamig ar draws yr edafedd gweithwyr sydd ar gael yn hytrach na chael eu neilltuo i bob edefyn. Mae'r modd hwn yn caniatáu dosbarthiad gwell o ddolenni nythu gyda @spawn a @threads.
  • Swyddogaethau llyfrgell newydd
    • eachsplit(str) i weithredu hollt(str) sawl gwaith.
    • alequal(itr) i brofi a yw pob elfen mewn iterator yn hafal.
    • Gellir defnyddio hardlink(src, dst) i greu dolenni caled.
    • setcpuaffinity(cmd, cpus) i osod affinedd craidd y prosesydd i'r prosesau a lansiwyd.
    • diskstat(path=pwd()) i gael ystadegau disg.
    • Macro @showtime newydd i ddangos y llinell sy'n cael ei gwerthuso a'r adroddiad @time.
    • LazyString a lazy"str" ​​macro wedi eu hychwanegu i gefnogi adeiladu diog o negeseuon gwall mewn llwybrau gwall.
    • Wedi trwsio mater arian cyfred yn Dict a gwrthrychau deillio eraill megis allweddi (:: Dict), gwerthoedd (:: Dict) a Set. Bellach gellir galw dulliau iteru ar eiriadur neu set, cyn belled nad oes galwadau sy'n addasu'r geiriadur neu'r set.
    • Mae gan @time a @timev bellach ddisgrifiad dewisol, sy'n eich galluogi i anodi ffynhonnell adroddiadau amser, er enghraifft. @amser "Gwerthuso foo" foo().
    • Mae ystod yn cymryd naill ai stop neu hyd fel ei unig ddadl allweddair.
    • mae cywirdeb a setprecision bellach yn derbyn sylfaen fel allweddair
    • Mae gwrthrychau soced TCP bellach yn darparu dull ysgrifennu clos ac yn cefnogi'r defnydd o fodd hanner agored.
    • mae extrema bellach yn derbyn dadl init.
    • Mae Iterators.countfrom bellach yn derbyn unrhyw fath sy'n diffinio dull +.
    • Mae @time nawr yn dyrannu % yr amser a dreulir yn ail-grynhoi dulliau gyda mathau gwahanol.
  • Newidiadau Llyfrgell Safonol
    • Allweddi â gwerth Does dim byd bellach yn cael ei dynnu o'r amgylchedd yn addenv.
    • Mae iterators.reverse (ac felly'n olaf) yn cefnogi pob llinell.
    • Nid yw'r swyddogaeth hyd ar gyfer ystodau o fathau penodol bellach yn gwirio am orlif cyfanrif. Mae swyddogaeth newydd, checked_length, ar gael; mae'n cynnwys rhesymeg rheoli trosglwyddiadau did. Os oes angen, defnyddiwch SaferIntegers.jl i adeiladu'r math amrediad.
    • Mae'r iterator Iterators.Reverse yn gweithredu gwrthdroad pobindex os yn bosibl.
  • Rheolwr Pecyn
    • Dangosyddion ⌃ a ⌅ newydd wrth ymyl pecynnau yn y statws “pkg>” y mae fersiynau newydd ar gael ar eu cyfer. ⌅ yn nodi na ellir gosod fersiynau newydd.
    • Arg hen ffasiwn newydd::Bool arg i Pkg.status (--hen ffasiwn neu -o yn y modd REPL) i ddangos gwybodaeth am becynnau o fersiynau blaenorol.
    • Compat newydd::Arg Bool i Pkg.status (--compat neu -c yn y modd REPL) i ddangos unrhyw gofnodion [compat] yn Project.toml.
    • Modd "pkg>compat" (a Pkg.compat) newydd ar gyfer gosod cofnodion cydweddoldeb prosiect. Yn darparu golygydd rhyngweithiol trwy "pkg>compat" neu reolaeth record uniongyrchol trwy "pkg> Foo 0.4,0.5", sy'n gallu llwytho cofnodion cyfredol trwy gwblhau tab. Hynny yw, "pkg> compat Fo " yn cael ei ddiweddaru'n awtomatig i "pkg> Foo 0.4,0.5" i ganiatáu golygu cofnod sy'n bodoli eisoes.
    • Dim ond os yw'r gweinydd yn monitro'r gofrestr sy'n cynnwys y pecyn y mae Pkg yn ceisio lawrlwytho pecynnau o weinydd pecyn.
    • Bydd Pkg.instantiate nawr yn rhoi rhybudd pan nad yw Project.toml wedi'i gysoni â Manifest.toml. Mae'n gwneud hyn yn seiliedig ar stwnsh o gofnodion deps a compat y prosiect (mae meysydd eraill yn cael eu hanwybyddu) yn y maniffest wrth ei ddatrys, fel y gellir canfod unrhyw newid i'r deps Project.toml neu gofnodion compat heb eu hail-datrys.
    • Os na all "pkg>add" ddod o hyd i becyn gyda'r enw a roddwyd, bydd nawr yn awgrymu pecynnau ag enwau tebyg y gellir eu hychwanegu.
    • Nid yw'r fersiwn o julia sydd wedi'i storio yn y maniffest bellach yn cynnwys y rhif adeiladu, sy'n golygu y bydd meistr bellach yn cael ei ysgrifennu fel 1.9.0-DEV.
    • Bydd prawf erthyliad "pkg>" nawr yn cael ei ganfod yn fwy cyson, a bydd yn cael ei ddychwelyd yn gywir i'r REPL.
  • InteractiveUtils
    • Macro @time_imports newydd i adrodd am yr amser a dreuliwyd yn mewnforio pecynnau a'u dibyniaethau, gan amlygu amser llunio ac ail-grynhoi fel canran o fewnforion.
  • Algebra llinol
    • Mae is-fodiwl BLAS bellach yn cefnogi swyddogaethau lefel-2 BLAS spr!
    • Mae llyfrgell safonol LinearAlgebra.jl bellach yn gwbl annibynnol ar SparseArrays.jl, o safbwynt cod ffynhonnell a phrofi uned. O ganlyniad, nid yw araeau tenau bellach yn cael eu dychwelyd (yn ymhlyg) trwy ddulliau o LinearAlgebra a gymhwysir at wrthrychau Sylfaen neu LinearAlgebra. Yn benodol, mae hyn yn arwain at y newidiadau torri canlynol:
      • Mae concatenations sy'n defnyddio matricsau "tenau" arbennig (ee croeslin) bellach yn dychwelyd matricsau trwchus; O ganlyniad, mae meysydd D1 a D2 gwrthrychau SVD a grëwyd gan alwadau getproperty bellach yn fatricsau trwchus.
      • Mae'r dull tebyg(::SpecialSparseMatrix, ::Math, ::Dims) yn dychwelyd matrics null trwchus. O ganlyniad, mae cynhyrchion matricsau tridiagonal dau, tri, a chymesur â'i gilydd yn arwain at gynhyrchu matrics trwchus. Yn ogystal, mae adeiladu matricsau tebyg gyda thair dadl o fatricsau "prin" arbennig o fatricsau (ansefydlog) bellach yn methu oherwydd "sero(::Math{Matrics{T}})".
  • Printf
    • Mae %s a %c bellach yn defnyddio'r arg lled testun i fformatio'r lled.
  • Proffil
    • Mae proffilio llwyth CPU bellach yn cofnodi metadata gan gynnwys edafedd a thasgau. Mae gan Profile.print() arg groupby newydd sy'n eich galluogi i grwpio edafedd, tasgau neu is-edau/tasgau, tasgau/edau, a dadleuon edafedd a thasgau i ddarparu hidlo. Yn ogystal, mae canran y defnydd bellach yn cael ei adrodd naill ai fel un cyffredinol neu fesul edefyn, yn dibynnu a yw'r edau yn segur ai peidio ym mhob sampl. Mae Profile.fetch() yn cynnwys y metadata newydd yn ddiofyn. Ar gyfer cydnawsedd yn ôl â defnyddwyr allanol o ddata proffilio, gellir ei eithrio trwy basio include_meta=false.
    • Mae'r modiwl Profile.Allocs newydd yn eich galluogi i broffilio dyraniadau cof. Mae olion pentwr o fath a maint pob dyraniad cof yn cael ei gofnodi, ac mae'r ddadl sampl_rate yn caniatáu i nifer ffurfweddadwy o ddyraniadau gael eu hanwybyddu, gan leihau perfformiad gorbenion.
    • Bellach gall y defnyddiwr redeg proffilio CPU hyd sefydlog tra bod tasgau'n rhedeg heb lwytho'r proffil yn gyntaf, a bydd yr adroddiad yn cael ei arddangos wrth redeg. Ar MacOS a FreeBSD, pwyswch ctrl-t neu ffoniwch SIGINFO. Ar gyfer llwyfannau eraill, actifadwch SIGUSR1, h.y. % lladd -USR1 $ julia_pid. Nid yw hwn ar gael ar Windows.
  • REPL
    • Mae RadioMenu bellach yn cefnogi llwybrau byr bysellfwrdd ychwanegol ar gyfer dewis opsiynau yn uniongyrchol.
    • Mae'r dilyniant "?(x, y" ac yna pwyso TAB yn dangos yr holl ddulliau y gellir eu galw gyda dadleuon x, y, .... (Mae gofod arweiniol yn eich atal rhag mynd i mewn i'r modd cymorth.) "MyModule.?(x, y " yn cyfyngu'r chwiliad i "MyModule". Mae pwyso TAB yn gofyn bod o leiaf un arg o fath mwy penodol nag Unrhyw. Neu defnyddiwch SHIFT-TAB yn lle TAB i ganiatáu unrhyw ddulliau cydnaws.
    • Mae'r gwall newidyn byd-eang newydd yn eich galluogi i gael yr eithriad diweddaraf, yn debyg i ymddygiad ans gyda'r ymateb diwethaf. Mae cofnodi gwall yn ailargraffu'r wybodaeth eithrio.
  • Araeau Saen
    • Wedi symud y cod SparseArrays o gadwrfa Julia i ystorfa allanol SparseArrays.jl.
    • Mae'r swyddogaethau concatenation newydd sparse_hcat, sparse_vcat, a sparse_hvcat yn dychwelyd math SparseMatrixCSC waeth beth fo'r mathau o'r dadleuon mewnbwn. Daeth hyn yn angenrheidiol i uno'r mecanwaith ar gyfer gludo matricsau ar ôl gwahanu'r cod LinearAlgebra.jl a SparseArrays.jl.
  • Logio
    • Mae'r lefelau logio safonol BelowMinLevel, Debug, Info, Warn, Error ac AboveMaxLevel bellach yn cael eu hallforio o'r llyfrgell Logio safonol.
  • Unicode
    • Ychwanegwyd swyddogaeth isequal_normalized i wirio am gywerthedd Unicode heb adeiladu llinynnau normaleiddio yn benodol.
    • Mae swyddogaeth Unicode.normalize bellach yn derbyn yr allweddair charttransform, y gellir ei ddefnyddio i ddarparu mapiau nodau personol, a darperir y swyddogaeth Unicode.julia_chartransform hefyd i atgynhyrchu'r mapiau a ddefnyddir pan fydd parser Julia yn normaleiddio dynodwyr.
  • Prawf
    • Gellir defnyddio '@test_throws "some message" triggers_error()' i brofi a yw'r testun gwall a ddangosir yn cynnwys gwall "rhyw neges", waeth beth fo'r math o eithriad penodol. Cefnogir ymadroddion rheolaidd, rhestrau llinynnol, a swyddogaethau paru hefyd.
    • Bellach gellir defnyddio @testset foo() i greu set prawf o ffwythiant penodol. Enw'r achos prawf yw enw'r swyddogaeth sy'n cael ei galw. Gall y swyddogaeth a elwir yn cynnwys @test a diffiniadau @testset eraill, gan gynnwys ar gyfer galwadau i swyddogaethau eraill, tra'n cofnodi holl ganlyniadau profion canolradd.
    • Mae TestLogger a LogRecord bellach yn cael eu hallforio o'r llyfrgell Prawf safonol.
  • Dosbarthwyd
    • Mae SSHManager bellach yn cefnogi edafedd gweithwyr gyda deunydd lapio csh / tcsh trwy'r dull addprocs () a'r paramedr cragen =: csh.
  • Newidiadau eraill
    • Gellir defnyddio GC.enable_logging(gwir) i gofnodi pob gweithrediad casglu sbwriel gyda'r amser a swm y cof a gasglwyd.

Ffynhonnell: opennet.ru

Ychwanegu sylw