Izdanje programskog jezika Julia 1.10

Objavljeno je izdanje programskog jezika Julia 1.10, koji kombinuje kvalitete kao što su visoke performanse, podrška za dinamičko kucanje i ugrađeni alati za paralelno programiranje. Julijina sintaksa je bliska MATLAB-u, pozajmljujući neke elemente iz Ruby-ja i Lisp-a. Metoda manipulacije stringovima podsjeća na Perl. Šifra projekta se distribuira pod MIT licencom.

Ključne karakteristike jezika:

  • Visoke performanse: jedan od ključnih ciljeva projekta je postizanje performansi bliskih C programima. Julia kompajler je zasnovan na radu LLVM projekta i generiše efikasan izvorni mašinski kod za mnoge ciljne platforme;
  • Podržava različite paradigme programiranja, uključujući elemente objektno orijentisanog i funkcionalnog programiranja. Standardna biblioteka pruža, između ostalog, funkcije za asinhroni I/O, kontrolu procesa, evidentiranje, profilisanje i upravljanje paketima;
  • Dinamičko kucanje: jezik ne zahtijeva eksplicitnu definiciju tipova za varijable, slično programskim jezicima za skriptiranje. Podržan interaktivni način rada;
  • Opciona mogućnost eksplicitnog specificiranja tipova;
  • Sintaksa idealna za numeričko računanje, naučno računanje, mašinsko učenje i vizualizaciju podataka. Podrška za mnoge tipove numeričkih podataka i alate za paralelizaciju izračunavanja.
  • Mogućnost direktnog pozivanja funkcija iz C biblioteka bez dodatnih slojeva.

Glavne promjene u Juliji 1.10:

  • Nove jezičke karakteristike
    • Po defaultu, omogućen je novi i poboljšani parser JuliaSyntax.jl. Ako se trebate vratiti na stari, trebali biste postaviti varijablu okruženja JULIA_USE_FLISP_PARSER na 1.
    • Simboli ⥺ (U+297A, \leftarrowsubset) i ⥷ (U+2977, \leftarrowless) sada se mogu koristiti kao binarni operatori sa strelicom prioriteta.
  • Promjene u jeziku
    • Prilikom pokretanja podređenih zadataka, lokalni RNG (generator slučajnih brojeva) roditeljskog zadatka više nije pogođen. Nova shema inicijalizacije generatora slučajnih brojeva slična je implementacijama SplitMix i DotMix.
    • Predloženo je novo pravilo odabira metoda koje razjašnjava tip "Union{}" u korist metode definisane eksplicitno za rukovanje argumentom tipa "Union{}".
    • Znak "h bar" ℏ (\hslash U+210F) se sada tretira kao ekvivalent ħ (\hbar U+0127).
    • Makro "@simd" sada ima specifičnu semantiku: dozvoljava samo preuređivanje i obrezivanje u pokretnom zarezu umjesto omogućavanja svih "@fastmath" optimizacija. Ako pokrenuti programi dožive degradaciju performansi zbog ove promjene, tada se prethodno ponašanje može vratiti pomoću "@fastmath @simd".
    • Kada se prikaže u tragu steka metode sa ključnim riječima, tekstualni prikaz ključnih riječi je sada pojednostavljen korištenjem nove makro sintakse "@Kwargs{key1::Type1, ...}".
  • Poboljšanja kompajlera/runtime
    • Sakupljač smeća sada vrši višenitnu selekciju objekata za odlaganje.
    • JITLink je omogućen po zadanim postavkama u Linux-sistemi zasnovani na aarch64 arhitekturi prilikom izgradnje Julije sa LLVM 15 ili novijom verzijom.
    • Proces predkompilacije uključuje zaključavanje pid datoteka. Samo jedan julia proces istovremeno izvodi predkompilaciju. Ranije su svi procesi radili paralelno i postojala je opasnost od oštećenja kompilacijskih keš fajlova zbog uslova trke.
  • Promjene u opcijama komandne linije
    • Dodata opcija "--gcthreads", koja vam omogućava da odredite koliko će paralelnih niti koristiti sakupljač smeća. Zadana vrijednost je "N/2", gdje je N broj radničkih niti ("-threads") koje koristi Julia.
  • Izgradite sistemske promjene
    • Čvorovi “SparseArrays” i “SuiteSparse” su podrazumevano isključeni iz slike sistema. Osnovni paket Julia više ne sadrži biblioteke s GPL licencom. Međutim, ove biblioteke su i dalje uključene u jezik u standardnoj binarnoj distribuciji.
  • Nove funkcije biblioteke
    • "tanpi" izračunava "tan(π*x)" preciznije od "tan(pi*x)".
    • "fourroot(x)" je definiran u Base.Math i može se koristiti za izračunavanje četvrtog korijena "x". Kratko ime za ovu metodu je Unicode znak ∜, koji se može uneti pomoću naredbe \fourthroot.
    • Dodane funkcije "Libc.memmove", "Libc.memset" i "Libc.memcpy", čija funkcionalnost odgovara funkcionalnosti odgovarajućih C poziva.
    • Dodata "Base.isprecompiled(pkg::PkgId)" metoda koja vraća "true" ako je paket već prekompiliran.
  • Opcije funkcije biblioteke
    • "binom (x, k)" sada podržava necijeli broj "x".
    • "CartesianIndex" se sada tretira kao "skalar" za emitovanje.
    • Metoda "printstyled" sada podržava kurziv izlaz.
    • Metode "parent" i "parentindices" sada podržavaju tip "SubStrings".
    • Metoda "replace(string,pattern...)" sada podržava opcioni "IO" argument za izlaz u tok umjesto vraćanja stringa.
    • Metoda "startswith" sada podržava I/O niti.
  • Promjene osnovne biblioteke
    • Od metoda “sortperm!” i “djelimično sortiranje!” uklonio ključnu riječ "initialized=true", što bi moglo dovesti do nesigurnog ponašanja.
    • Prilikom ispisa cijelih brojeva tipa "Rational", njihov nazivnik se sada preskače u kontekstu "Rational" otkucanih tokova (kao što su nizovi).
  • Package Manager
    • Metoda "Pkg.precompile" sada uzima "tajming" kao ključni argument, prikazujući informacije o vremenu prije kompajliranja za svaki paket - "Pkg.precompile(timing=true)".
  • LinearnaAlgebra
    • Tip "AbstractQ" više nije podtip "AbstractMatrix". Štaviše, metoda "adjoint(Q::AbstractQ)" više ne umotava "Q" u tip "Adjoint", zamjenjujući ga sa "AdjointQ", koji je i sam podtip "AbstractQ". Ova promjena je zbog činjenice da se tipično "AbstractQ" instance ponašaju kao linearni operatori zasnovani na funkcijama i matricama i da im se ne može pristupiti indeksom. Dodatno, mnogi tipovi "AbstractQ" mogu raditi na vektorima/matricama različitih veličina, djelujući kao matrica s veličinom ovisnom o kontekstu. Sa ovom promenom, tip "AbstractQ" sada ima dobro definisan interfejs, koji je detaljno opisan u Julia dokumentaciji.
    • Rezultati faktorizacije više nisu umotani u tipove omotača "Adjoint" i "Transpose". Umjesto toga, dodani su tipovi “AdjointFactorization” i “TranposeFactorization”, koji su sami po sebi podtipovi “faktorizacije”.
    • Nove funkcije "hermitianpart" i "hermitianpart!" pronaći hermitski (istinski simetrični) dio matrice.
    • Metoda "norm" transponovane podređene matrice tipa "AbstractMatrix" sada vraća normu roditeljske matrice po defaultu, koja odgovara trenutnom ponašanju za "AbstractVectors".
    • Dodate metode za izračunavanje sopstvenih vektora "eigen(A, B)" i "eigvals(A, B)" za slučaj kada je jedan od A ili B simetričan ili Hermitov.
    • Metode "eigvals/eigen(A, cholesky(B))" sada izračunavaju generalizirane svojstvene vrijednosti (eigen: i svojstvene vektore) A i B preko Choleskyjevog proširenja za pozitivno određeno B.
  • Printf
    • Specifikatori formata sada podržavaju dinamičku širinu i preciznost, kao što su "%*s" i "%*.*g".
  • ZAMJENA
    • Kada se ispisuje trag steka, dubina ispisanih tipova u potpisima funkcije je ograničena kako bi se izbjegao pretjerano opsežan izlaz.
  • test
    • Makro "@test_broken" (ili "@test" sa "broken=true") sada daje grešku ako testni izraz ne vrati false/true.
    • Ako postoji greška prilikom pozivanja "@test" ili greška unutar funkcije, sada je obezbeđeno detaljno praćenje steka kako bi se razumela pozicija testa u "@testsetu".
  • InteractiveUtils
    • "code_native" i "@code_native" sada koriste Intelovu sintaksu umjesto AT&T.
    • "@time_imports" sada prikazuje vrijeme izvršenja "__init__()" za uvezene module.
  • Zastarjele i podložne uklanjanju strukture
    • Makro "@pure" je zastario. Umjesto toga treba koristiti "Base.@assume_effects :foldable".

izvor: opennet.ru

Kupite pouzdan hosting za sajtove sa DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster