Julia 1.9 programozási nyelv elérhető

Megjelent a Julia 1.9 programozási nyelv kiadása, amely olyan tulajdonságokat ötvöz, mint a nagy teljesítmény, a dinamikus gépelés támogatása és a párhuzamos programozás beépített eszközei. Julia szintaxisa közel áll a MATLAB-hoz, néhány elemet a Rubytól és a Lisp-től kölcsönzött. A karakterlánc-manipulációs módszer a Perl-re emlékeztet. A projekt kódját az MIT licence alatt terjesztik.

A nyelv főbb jellemzői:

  • Nagy teljesítmény: a projekt egyik kiemelt célja a C programokhoz közeli teljesítmény elérése. A Julia fordító az LLVM projekt munkáján alapul, és hatékony natív gépi kódot generál számos célplatformhoz;
  • Támogatja a különféle programozási paradigmákat, beleértve az objektumorientált és funkcionális programozás elemeit. A szabványos könyvtár többek között funkciókat biztosít az aszinkron I/O-hoz, folyamatvezérléshez, naplózáshoz, profilalkotáshoz és csomagkezeléshez;
  • Dinamikus gépelés: a nyelv nem követeli meg a változók típusának kifejezett meghatározását, hasonlóan a szkript programozási nyelvekhez. Interaktív mód támogatott;
  • Opcionális lehetőség a típusok explicit megadására;
  • Ideális szintaxis numerikus számításokhoz, tudományos számításokhoz, gépi tanuláshoz és adatvizualizációhoz. Számos numerikus adattípus támogatása és a számítások párhuzamosítására szolgáló eszköz.
  • Funkciók közvetlen meghívása C-könyvtárakból további rétegek nélkül.

Főbb változások a Julia 1.9-ben:

  • Új nyelvi funkciók
    • Lehetővé teszi hozzárendelések elvégzését egy másik modulban a "setproperty!(::Module, ::Symbol, x)" használatával.
    • Több, a végső pozícióban nem szereplő feladat megengedett. Például az „a, b…, c = 1, 2, 3, 4” karakterlánc feldolgozása „a = 1; b… = 2, 3; c = 4". Ezt a Base.split_rest segítségével kezeljük.
    • Az egykarakteres literálok mostantól ugyanazt a szintaxist támogatják, mint a karakterlánc-literálok; azok. A szintaxis érvénytelen UTF-8 szekvenciákat jelenthet, amint azt a Char típus lehetővé teszi.
    • Hozzáadott támogatás a Unicode 15 specifikációhoz.
    • A sorok beágyazott kombinációi és az elnevezett karaktersorok mostantól használhatók típusparaméterként.
    • Új beépített függvények "getglobal(::Module, ::Symbol[, order])" és "setglobal!(::Module, ::Symbol, x[, order])" kizárólag globális változók olvasására és írására. A getglobal metódust most előnyben kell részesíteni a getfield metódussal szemben a globális változók eléréséhez.
  • Változások a nyelvben
    • Az 1.7-es verzióban bevezetett "@invoke" makró már exportálva van, és használható. Ezenkívül most a "Core.Typeof(x)" metódust használja az "Any" helyett abban az esetben, ha az "x" argumentum típusannotációja kimaradt. Erre azért van szükség, hogy az argumentumként átadott típusokat megfelelően feldolgozzák.
    • Az 1.7-es verzióban bevezetett "invokelatest" függvény és a "@invokelatest" makró exportálása engedélyezett.
  • Fordító/futásidejű fejlesztések
    • Jelentősen lerövidült az első végrehajtásig eltelt idő (TTFX – Az első végrehajtásig eltelt idő). Egy csomag előfordítása a natív kódot a "pkgimage"-ben tárolja, ami azt jelenti, hogy az előfordítási folyamat által generált kódot nem kell újrafordítani a csomag betöltése után. A pkgimages mód használata a "--pkgimages=no" opcióval letiltható.
    • A típuskövetkeztetés ismert kvadratikus összetettségi problémája kijavításra került, és a következtetés összességében kevesebb memóriát használ. Néhány éles eset, amely automatikusan generált hosszú függvényeket tartalmaz (mint például a ModelingToolkit.jl parciális differenciálegyenletekkel és nagy oksági modellekkel), sokkal gyorsabban fordítható le.
    • Вызовы с аргументами без конкретных типов теперь могут быть оптимизированы методом Union-splitting для внедрения или статического разрешения, даже если существует несколько разнотиповых кандидатов для диспетчеризации. Это может улучшить производительность в определённых ситуациях, когда типы объектов не полностью статически разрешены, за счёт статического разрешения сайтов вызова «@nospecialize-d» и избежания повторной компиляции.
    • A Base modulban a @pure makró minden felhasználását a Base.@assume_effects helyettesítette.
    • Az invoke(f, invokesig, args...) hívások, amelyek kevésbé specifikusak, mint általában az f(args...) esetén, már nem okozzák a csomag újrafordítását.
  • Változások a parancssori beállításokban
    • Linuxon és Windowson a "--threads=auto" opció most megpróbálja meghatározni a processzorok elérhető számát a CPU-affinitás alapján, amely maszk általában HPC- és felhőkörnyezetekben van beállítva.
    • A „--math-mode=fast” paraméter le van tiltva, helyette javasolt a „@fastmath” makrót használni, amely egyértelműen meghatározott szemantikával rendelkezik.
    • A "--threads" opció mostantól "auto | N[,auto|M]", ahol M a létrehozandó interaktív szálak számát jelzi (jelenleg az auto 1-et jelent).
    • Добавлена опция «—heap-size-hint=<size>», устанавливающая порог, после которого начинается активная сборку мусора. Размер может быть указан в байтах, килобайтах (1000 КБ), мегабайтах (300 МБ) или гигабайтах (1,5 ГБ).
  • Változások a többszálú kezelésben
    • A "Threads.@spawn" most már rendelkezik egy opcionális első argumentummal, amelynek értéke ":default" vagy ":interactive". Az interaktív feladatok alacsony válaszadási késleltetést igényelnek, és rövidre vagy gyakran végrehajtottra tervezték. Az interaktív feladatok interaktív szálakon futnak, ha a Julia indításakor meg vannak adva.
    • A Julia futási környezeten kívül futó szálak (például C-ből vagy Java-ból) mostantól a „jl_adopt_thread” használatával hívhatják meg a Julia kódot. Ez automatikusan megtörténik, amikor a Julia kódot a "cfunction" vagy a "@ccallable" belépési ponton keresztül írja be. Ennek eredményeként a szálak száma változhat a végrehajtás során.
  • Új könyvtári funkciók
    • Новая функция «Iterators.flatmap».
    • Az új "pkgversion(m::Module)" függvény az adott modult betöltött csomag verziójának lekéréséhez, hasonlóan a "pkgdir(m::Module)"-hoz.
    • Új "stack(x)" függvény, amely általánosítja a "reduce(hcat, x::Vector{<:Vector})" függvényt bármely dimenzióra, és lehetővé teszi az iterátorok bármely iterátorát. A "stack(f, x)" módszer általánosítja a "mapreduce(f, hcat, x)"-t, és hatékonyabb.
    • Új makró a lefoglalt memória "@allocations" elemzéséhez, hasonlóan a "@allocated"-hez, kivéve, hogy a memóriafoglalások számát adja vissza, nem pedig a lefoglalt memória teljes méretét.
  • Új könyvtári funkciók
    • A „RoundFromZero” mostantól a „BigFloat”-tól eltérő típusokhoz is használható.
    • A "Dict" mostantól manuálisan is csökkenthető a "sizehint!"
    • A „@time” mostantól külön határozza meg az érvénytelen metódusok újrafordítására fordított idő százalékos arányát.
  • Változások a szabványos könyvtárban
    • Устранена проблема параллельного доступа в методах итерации для Dict и других производных объектов, таких как keys(::Dict), values(::Dict) и Set. Эти методы итерации теперь можно вызывать для Dict или Set параллельно для неограниченного количества потоков при условии, что нет действий, изменяющих словарь или набор.
    • Отрицание функции-предиката «!f» теперь возвращает составную функцию «(!) ∘ f» вместо анонимной функции.
    • A dimenziós szelet függvények mostantól több dimenzióban is működnek: az "eachslice", "eachrow" és "eachcol" egy "Slices" objektumot ad vissza, amely lehetővé teszi a feladást a hatékonyabb módszerek biztosítása érdekében.
    • В общедоступный API добавлен макрос «@kwdef».
    • Kijavítottuk a műveletek sorrendjével kapcsolatos hibát az "fld1"-ben.
    • A rendezés mostantól mindig időstabil (a QuickSort újratervezésre került).
    • A „Base.splat” most exportálva van. A visszatérési érték "Base.Splat" típusú, nem pedig anonim függvény, ami lehetővé teszi a szép kimenetet.
  • Csomagkezelő
    • "Csomagbővítmények": A Julia munkamenetben betöltött más csomagokból származó kódrészlet betöltésének támogatása. Az alkalmazás hasonló a „Requires.jl” csomaghoz, de az előzetes fordítás és a beállítások kompatibilitása támogatott.
  • LineárisAlgebra Könyvtár
    • Az elemenkénti osztással való összetéveszthetőség miatt eltávolította az "a" és "b\a" skalárt és "b" vektort tartalmazó "a/b" és "b\a" metódusokat, amelyek egyenértékűek az "a * pinv(b)"-vel.
    • A BLAS és a LAPACK hívása mostantól "libblastrampoline (LBT)"-t használ. Az OpenBLAS alapértelmezés szerint rendelkezésre áll, de a rendszerkép más BLAS/LAPACK könyvtárakkal való felépítése nem támogatott. Ehelyett javasolt az LBT-mechanizmus használata a BLAS/LAPACK lecserélésére egy másik meglévő könyvtárkészlettel.
    • A "lu" egy új mátrixforgatási stratégiát, a "RowNonZero()"-t támogatja, amely kiválasztja az első nem nulla elforgatási elemet az új aritmetikai típusokhoz és képzési célokra.
    • A "normalize(x, p=2)" mostantól minden normalizált "x" vektorteret támogat, beleértve a skalárokat is.
    • A BLAS-szálak alapértelmezett száma most megegyezik az ARM-architektúrák CPU-szálainak számával, más architektúrákon pedig a CPU-szálak számának felével.
  • Printf: Átdolgozott hibaüzenetek a helytelenül formázott karakterláncokhoz a jobb olvashatóság érdekében.
  • Profil: Új „Profile.take_heap_snapshot(file)” funkció, amely a Chrome-ban támogatott JSON-alapú „.heapsnapshot” formátumú fájlt ír.
  • Véletlenszerű: a randn és a randexp mostantól minden rand-ot definiáló AbstractFloat típushoz használható.
  • REPL
    • Az "Alt-e" billentyűkombináció megnyomásával megnyílik az aktuális bevitel a szerkesztőben. A tartalom (ha módosítva) a szerkesztőből való kilépéskor végrehajtódik.
    • A REPL-ben aktív aktuális modulkontextus megváltoztatható (alapértelmezetten Main) a "REPL.activate(::Module)" funkcióval, vagy a modul REPL-ben történő megadásával és az "Alt-m" billentyűkombináció megnyomásával.
    • A "számozott prompt" mód, amely minden bemenethez és kimenethez számokat nyomtat, és a pontozott eredményeket Out-ban tárolja, a "REPL.numbered_prompt!()" segítségével aktiválható.
    • Автодополнение с помощью табуляции отображает доступные аргументы ключевого слова.
  • SuiteSparse: Код для решателя «SuiteSparse» перемещён в «SparseArrays.jl». Решатели теперь повторно экспортируются «SuiteSparse.jl».
  • SparseArrays
    • A „SuiteSparse” megoldók mostantól „SparseArrays” almodulként érhetők el.
    • Az UMFPACK és a CHOLMOD szálvédelmi módokat a globális változók kiiktatásával és a zárak használatával javították. Többszálú "ldiv!" Az UMFPACK objektumok mostantól biztonságosan végrehajthatók.
    • A "SparseArrays.allowscalar(::Bool)" kísérleti függvény lehetővé teszi a ritka tömbök skaláris indexelésének letiltását vagy engedélyezését. Ez a funkció a "SparseMatrixCSC" objektumok véletlenszerű skaláris indexelésének észlelésére szolgál, ami a teljesítményproblémák gyakori forrása.
  • Новый отказоустойчивый режим для наборов тестов, который досрочно завершает тестовый запуск в случае сбоя или ошибки. Устанавливается либо через «@testset kwarg failfast=true», либо «export JULIA_TEST_FAILFAST=true». Подобное бывает необходимо в запусках CI для досрочного получения сообщений об ошибке.
  • Dátumok: Az üres karakterláncok többé nem értelmezhetők hibásan érvényes "DateTime", "Dates" vagy "Times" értékként, hanem "ArgumentError"-t dobnak a konstruktorokba és az elemzésbe, míg a "tryparse" nem ad vissza semmit.
  • Kiosztott csomag
    • A csomagkonfiguráció (aktív projekt, "LOAD_PATH", "DEPOT_PATH") most terjesztésre kerül a helyi munkavégző folyamatok hozzáadásakor (például az "addprocs(N::Int)" használatával vagy a "--procs=N" parancssori jelzővel.
    • «addprocs» для локальных рабочих процессов теперь принимает аргумент с именем «env» для передачи переменных окружения рабочим процессам.
  • Unicode: «graphemes(s, m:n)» возвращает подстроку от m-й до n-й графемы в «s».
  • A DelimedFiles csomagot eltávolították a rendszerkönyvtárakból, és külön csomagként terjesztik, amelyet kifejezetten telepíteni kell a használathoz.
  • Külső függőségek
    • Linux alatt a rendszer automatikusan felismeri a libstdc++ rendszerkönyvtár verzióját, és ha újabb, akkor betölti. A régi libstdc++ beépített betöltési viselkedés a rendszer verziójától függetlenül visszaállítható a "JULIA_PROBE_LIBSTDCXX=0" környezeti változó beállításával.
    • Eltávolítottuk az „RPATH” elemet a julia binárisból, ami megtörheti azokat a Linux könyvtárakat, amelyek nem definiálják a „RUNPATH” változót.
    • Eszközfejlesztések: A "MethodError" és a metódusok kimenete (például a "methods(my_func)"-ból) mostantól a metódusok veremnyomban történő kimeneti elvének megfelelően formázva és színezett.

    Forrás: opennet.ru

Hozzászólás