ක්‍රමලේඛන භාෂාව ජූලියා 1.9 ඇත

Julia 1.9 ක්‍රමලේඛන භාෂාව නිකුතුව ප්‍රකාශයට පත් කර ඇත, ඉහළ කාර්ය සාධනය, ගතික ටයිප් කිරීම සඳහා සහය සහ සමාන්තර වැඩසටහන් සඳහා ගොඩනඟන ලද මෙවලම් වැනි ගුණාංග ඒකාබද්ධ කරයි. රූබි සහ ලිස්ප් වෙතින් සමහර මූලද්‍රව්‍ය ණයට ගනිමින් ජූලියාගේ වාක්‍ය ඛණ්ඩය MATLAB වෙත සමීප වේ. නූල් හැසිරවීමේ ක්‍රමය පර්ල් සිහිගන්වයි. ව්යාපෘති කේතය MIT බලපත්රය යටතේ බෙදා හරිනු ලැබේ.

භාෂාවේ ප්රධාන ලක්ෂණ:

  • ඉහළ කාර්ය සාධනය: ව්‍යාපෘතියේ එක් ප්‍රධාන ඉලක්කයක් වන්නේ C වැඩසටහන් වලට ආසන්න කාර්ය සාධනයක් ලබා ගැනීමයි. ජූලියා සම්පාදකය LLVM ව්‍යාපෘතියේ කාර්යය මත පදනම් වන අතර බොහෝ ඉලක්ක වේදිකා සඳහා කාර්යක්ෂම දේශීය යන්ත්‍ර කේතය ජනනය කරයි;
  • වස්තු-නැඹුරු සහ ක්‍රියාකාරී ක්‍රමලේඛනයේ මූලද්‍රව්‍ය ඇතුළුව විවිධ ක්‍රමලේඛන ආදර්ශ සඳහා සහය දක්වයි. සම්මත පුස්තකාලය වෙනත් දේ අතර, අසමමුහුර්ත I/O, ක්‍රියාවලි පාලනය, ලොග් වීම, පැතිකඩ කිරීම සහ පැකේජ කළමනාකරණය සඳහා කාර්යයන් සපයයි;
  • ගතික ටයිප් කිරීම: භාෂාවට විචල්‍ය සඳහා වර්ගවල පැහැදිලි අර්ථ දැක්වීමක් අවශ්‍ය නොවේ, ක්‍රමලේඛන භාෂා ස්ක්‍රිප්ට් කිරීම හා සමාන වේ. අන්තර්ක්‍රියාකාරී මාදිලිය සහය දක්වයි;
  • වර්ග පැහැදිලිව සඳහන් කිරීමට විකල්ප හැකියාව;
  • සංඛ්‍යාත්මක පරිගණනය, විද්‍යාත්මක පරිගණනය, යන්ත්‍ර ඉගෙනීම සහ දත්ත දෘශ්‍යකරණය සඳහා කදිම වාක්‍ය ඛණ්ඩයකි. ගණනය කිරීම් සමාන්තරකරණය සඳහා බොහෝ සංඛ්‍යාත්මක දත්ත වර්ග සහ මෙවලම් සඳහා සහාය.
  • අතිරේක ස්ථර නොමැතිව C පුස්තකාල වලින් කාර්යයන් කෙලින්ම ඇමතීමේ හැකියාව.

ජූලියා 1.9 හි ප්රධාන වෙනස්කම්:

  • නව භාෂා විශේෂාංග
    • "setproperty!(::Module, ::Symbol, x)" භාවිතයෙන් වෙනත් මොඩියුලයක පැවරුම් සිදු කිරීමට ඉඩ දෙන්න.
    • අවසාන ස්ථානයේ නොමැති බහු පැවරුම් වලට ඉඩ දෙනු ලැබේ. උදාහරණයක් ලෙස, "a, b..., c = 1, 2, 3, 4" තන්තුව "a = 1 ලෙස සකසනු ඇත; b..., = 2, 3; c = 4". මෙය Base.split_rest හරහා හසුරුවනු ලැබේ.
    • Single character Literals දැන් string Literals වලට සමාන සින්ටැක්ස් වලට සහය දක්වයි; එම. වාක්‍ය ඛණ්ඩයට Char වර්ගය මගින් අවසර දී ඇති පරිදි වලංගු නොවන UTF-8 අනුක්‍රම නියෝජනය කළ හැක.
    • යුනිකෝඩ් 15 පිරිවිතර සඳහා සහය එක් කරන ලදී.
    • ටියුපල් සහ නම් කරන ලද අක්ෂර ටියුපල් වල කැදලි සංයෝජන දැන් වර්ග පරාමිතීන් ලෙස භාවිතා කළ හැක.
    • ගෝලීය විචල්‍යයන් සඳහා පමණක් කියවීම සහ ලිවීම සඳහා නව බිල්ට්-ඉන් ශ්‍රිත "getglobal(::Module, ::Symbol[, order])" සහ "setglobal!(::Module, ::Symbol, x[, order])". ගෝලීය විචල්‍යයන් වෙත ප්‍රවේශ වීම සඳහා getfield ක්‍රමයට වඩා getglobal ක්‍රමය දැන් ප්‍රිය කළ යුතුය.
  • භාෂාවේ වෙනස්කම්
    • 1.7 අනුවාදයේ හඳුන්වා දුන් "@invoke" මැක්‍රෝ දැන් අපනයනය කර භාවිතයට ඇත. අතිරේක වශයෙන්, එය දැන් "x" තර්කය සඳහා ආකාරයේ විවරණයක් මඟ හැර ඇති අවස්ථාවක "ඕනෑම" වෙනුවට "Core.Typeof(x)" ක්‍රමය භාවිතා කරයි. තර්ක ලෙස සම්මත කරන ලද වර්ග නිවැරදිව සකස් කර ඇති බව සහතික කිරීමට මෙය අවශ්‍ය වේ.
    • 1.7 අනුවාදයෙන් හඳුන්වා දුන් “invokelatest” ශ්‍රිතය සහ “@invokelatest” සාර්ව සක්‍රීය අපනයනය.
  • සම්පාදක/ධාවන කාල වැඩිදියුණු කිරීම්
    • පළමු ක්‍රියාත්මක කිරීමේ කාලය සැලකිය යුතු ලෙස අඩු කරන ලදී (TTFX - පළමු ක්‍රියාත්මක කිරීමට කාලය). පැකේජයක් පෙර සම්පාදනය කිරීම දැන් ස්වදේශීය කේතය "pkgimage" තුළ ගබඩා කරයි, එනම් පැකේජය පූරණය වූ පසු පෙර සම්පාදන ක්‍රියාවලිය මගින් ජනනය කරන කේතය නැවත සම්පාදනය කිරීමට අවශ්‍ය නොවේ. "--pkgimages=no" විකල්පය භාවිතයෙන් pkgimages මාදිලිය භාවිතය අක්‍රිය කළ හැක.
    • වර්ග අනුමානයේ දන්නා චතුරස්‍ර සංකීර්ණතා ගැටළුව නිරාකරණය කර ඇති අතර, අනුමානය සමස්තයක් ලෙස අඩු මතකයක් භාවිතා කරයි. ස්වයංක්‍රීයව ජනනය කරන ලද දිගු ශ්‍රිත සහිත සමහර එජ් කේස් (ආර්ශ්වික අවකල සමීකරණ සහ විශාල හේතුකාරක ආකෘති සහිත ModelingToolkit.jl වැනි) වඩා වේගයෙන් සම්පාදනය වේ.
    • කොන්ක්‍රීට් වර්ග නොමැති තර්ක සහිත ඇමතුම් දැන් යැවීම සඳහා විවිධ වර්ගයේ අපේක්ෂකයින් කිහිප දෙනෙකු සිටියත්, එන්නත් කිරීම හෝ ස්ථිතික විභේදනය සඳහා ප්‍රශස්තකරණය කළ යූනියන්-බෙදීම කළ හැක. "@nospecialize-d" ඇමතුම් අඩවි ස්ථිතිකව නිරාකරණය කිරීමෙන් සහ නැවත සම්පාදනය කිරීමෙන් වැළකීමෙන්, වස්තු වර්ග සම්පූර්ණයෙන් ස්ථිතිකව විසඳා නොමැති ඇතැම් අවස්ථාවන්හිදී මෙය කාර්ය සාධනය වැඩිදියුණු කළ හැක.
    • මූලික මොඩියුලයේ ඇති @pure macro හි සියලුම භාවිතය Base.@assume_effects සමඟ ප්‍රතිස්ථාපනය කර ඇත.
    • සාමාන්‍යයෙන් f(args...) සඳහා භාවිතා කරන ප්‍රමාණයට වඩා අඩු විශේෂිත වර්ග සහිත invoke(f, invokesig, args...) සඳහා වන ඇමතුම් තවදුරටත් පැකේජය නැවත සම්පාදනය කිරීමට හේතු නොවේ.
  • විධාන රේඛා විකල්ප වෙත වෙනස්කම්
    • Linux සහ Windows මත, "--threads=auto" විකල්පය දැන් HPC සහ cloud පරිසරය තුළ සාමාන්‍යයෙන් සකසා ඇති වෙස් මුහුණක් වන CPU සම්බන්ධතාවය මත පදනම්ව පවතින ප්‍රොසෙසර ගණන තීරණය කිරීමට උත්සාහ කරයි.
    • “--math-mode=fast” පරාමිතිය අක්‍රිය කර ඇත, ඒ වෙනුවට පැහැදිලිව අර්ථකථනය කර ඇති “@fastmath” මැක්‍රෝ භාවිතා කිරීම නිර්දේශ කෙරේ.
    • "--නූල්" විකල්පය දැන් "auto | ආකෘතියෙන් ඇත N[,auto|M]", මෙහි M මඟින් නිර්මාණය කිරීමට අන්තර්ක්‍රියාකාරී නූල් ගණන දක්වයි (දැනට ස්වයංක්‍රීය යන්නෙන් අදහස් වන්නේ 1).
    • එකතු කරන ලද විකල්පය “—heap-size-hint=” ", එය සක්‍රීය කසළ එකතු කිරීම ආරම්භ වන එළිපත්ත සකසයි. ප්‍රමාණය බයිට්, කිලෝබයිට් (1000 KB), මෙගාබයිට් (300 MB) හෝ ගිගාබයිට් (1,5 GB) වලින් දැක්විය හැක.
  • බහු නූල් වල වෙනස්කම්
    • "Threads.@spawn" හට දැන් ":default" හෝ ":interactive" අගය සහිත විකල්ප පළමු තර්කයක් ඇත. අන්තර්ක්‍රියාකාරී කාර්යයක් සඳහා අඩු ප්‍රතිචාර ප්‍රමාදයක් අවශ්‍ය වන අතර එය කෙටි හෝ නිතර සිදු කිරීමට සැලසුම් කර ඇත. ජුලියා ආරම්භ කරන විට ඒවා නිශ්චිතව දක්වා ඇත්නම් අන්තර්ක්‍රියාකාරී කර්තව්‍ය අන්තර් ක්‍රියාකාරී නූල් මත ක්‍රියාත්මක වේ.
    • Julia ධාවන කාලයෙන් පිටත ධාවනය වන නූල් (C හෝ Java වැනි) දැන් "jl_adopt_thread" භාවිතයෙන් ජූලියා කේතය ඇමතීමට හැකිය. "cfunction" හෝ "@ccallable" ඇතුල්වීමේ ස්ථානය හරහා ජූලියා කේතය ඇතුලත් කිරීමේදී මෙය ස්වයංක්‍රීයව සිදුවේ. එහි ප්‍රතිඵලයක් ලෙස, දැන් ක්‍රියාත්මක කිරීමේදී නූල් ගණන වෙනස් විය හැක.
  • නව පුස්තකාල කාර්යයන්
    • නව කාර්යය "Iterators.flatmap".
    • "pkgdir(m::Module)" ට සමාන, දී ඇති මොඩියුලයක් පටවා ඇති පැකේජයේ අනුවාදය ලබා ගැනීමට "pkgversion(m::Module)" නව ශ්‍රිතය.
    • නව ශ්‍රිතය "stack(x)" එය "අඩු කිරීම(hcat, x::Vector{<:Vector})" ඕනෑම මානයකට සාමාන්‍යකරණය කරන අතර ඕනෑම පුනරාවර්තකයකට ඉඩ දෙයි. "stack(f, x)" ක්‍රමය "mapreduce(f, hcat, x)" සාමාන්‍යකරණය කරන අතර වඩාත් කාර්යක්ෂම වේ.
    • වෙන් කළ මතකයේ සම්පූර්ණ ප්‍රමාණයට වඩා එය මතක වෙන් කිරීම් ගණන ආපසු ලබා දෙනවා හැර, "@alocated" ට සමාන, වෙන් කළ මතකය "@alocations" විශ්ලේෂණය කිරීම සඳහා නව සාර්ව.
  • නව පුස්තකාල විශේෂාංග
    • "RoundFromZero" දැන් "BigFloat" හැර වෙනත් වර්ග සඳහා ක්‍රියා කරයි.
    • "Dict" දැන් "sizehint!" භාවිතයෙන් අතින් අඩු කළ හැක.
    • "@time" දැන් අවලංගු ක්‍රම නැවත සම්පාදනය කිරීමට ගත කරන කාලය ප්‍රතිශතය වෙන වෙනම සඳහන් කරයි.
  • සම්මත පුස්තකාලයේ වෙනස්කම්
    • Dict සහ යතුරු(::Dict), values(::Dict) සහ Set වැනි අනෙකුත් ව්‍යුත්පන්න වස්තු සඳහා පුනරාවර්තන ක්‍රමවල සමගාමී ගැටළුවක් විසඳා ඇත. මෙම පුනරාවර්තන ක්‍රම දැන් ශබ්දකෝෂය හෝ කට්ටලය වෙනස් කරන ක්‍රියාවක් නොමැති තාක්, අසීමිත නූල් සංඛ්‍යාවක් සඳහා සමාන්තරව ඩික්ට් එකක් හෝ කට්ටලයක් මත කැඳවිය හැක.
    • පුරෝකථන ශ්‍රිතයක් නිෂේධනය කිරීම "!f" දැන් නිර්නාමික ශ්‍රිතයක් වෙනුවට "(!) ∘ f" සංයුක්ත ශ්‍රිතයක් ලබා දෙයි.
    • Dimension slice ශ්‍රිත දැන් බහුවිධ මානයන් හරහා ක්‍රියා කරයි: "eachslice", "eachrow" සහ "eachcol" මඟින් යැවීමට වඩාත් කාර්යක්ෂම ක්‍රම සැපයීමට ඉඩ දෙන "Slices" වස්තුවක් ආපසු ලබා දේ.
    • පොදු API වෙත "@kwdef" මැක්‍රෝ එක් කරන ලදී.
    • "fld1" හි මෙහෙයුම් අනුපිළිවෙලෙහි ගැටලුවක් විසඳා ඇත.
    • වර්ග කිරීම දැන් සෑම විටම කාල ස්ථායී වේ (QuickSort ප්‍රතිනිර්මාණය කර ඇත).
    • "Base.splat" දැන් අපනයනය කර ඇත. ප්‍රතිලාභ අගය නිර්නාමික ශ්‍රිතයකට වඩා "Base.Splat" වර්ගයකි, එය මනාව ප්‍රතිදානය කිරීමට ඉඩ සලසයි.
  • පැකේජ කළමනාකරු
    • "පැකේජ දිගු": ජූලියා සැසියක පටවා ඇති අනෙකුත් පැකේජ වලින් කේත ස්නිපට් පූරණය කිරීම සඳහා සහාය. යෙදුම "Requires.jl" පැකේජයට සමාන වේ, නමුත් පූර්ව සම්පාදනය සහ සැකසීම් ගැළපුම සඳහා සහය දක්වයි.
  • රේඛීය වීජ ගණිත පුස්තකාලය
    • මූලද්‍රව්‍ය අනුව බෙදීම සමඟ ව්‍යාකූල වීමේ අවදානම හේතුවෙන්, "a * pinv(b)" ට සමාන වූ "a" සහ "b\a" ක්‍රම "a" සහ "b" දෛශිකය සමඟ ඉවත් කරන ලදී.
    • BLAS සහ LAPACK ඇමතීමෙන් දැන් "libblastrampoline (LBT)" භාවිතා කරයි. OpenBLAS පෙරනිමියෙන් සපයනු ලැබේ, නමුත් අනෙකුත් BLAS/LAPACK පුස්තකාල සමඟ පද්ධති රූපය ගොඩනැගීමට සහය නොදක්වයි. ඒ වෙනුවට, BLAS/LAPACK වෙනුවට පවතින වෙනත් පුස්තකාල කට්ටලයක් සමඟින් LBT යාන්ත්‍රණය භාවිතා කිරීම නිර්දේශ කෙරේ.
    • "lu" නව න්‍යාස භ්‍රමණ උපාය මාර්ගයක් සඳහා සහය දක්වයි, "RowNonZero()", එය නව අංක ගණිත වර්ග සමඟ භාවිතා කිරීම සඳහා සහ පුහුණු අරමුණු සඳහා පළමු ශුන්‍ය නොවන භ්‍රමණ මූලද්‍රව්‍යය තෝරා ගනී.
    • "normalize(x, p=2)" දැන් අදිශය ඇතුළු ඕනෑම සාමාන්‍යකරණය කළ දෛශික අවකාශය "x" සඳහා සහය දක්වයි.
    • BLAS නූල් වල පෙරනිමි සංඛ්‍යාව දැන් ARM ගෘහනිර්මාණවල CPU නූල් ගණනට සහ අනෙකුත් ගෘහ නිර්මාණ ශිල්පයේ CPU නූල් සංඛ්‍යාවෙන් අඩකට සමාන වේ.
  • Printf: වඩා හොඳ කියවීමේ හැකියාව සඳහා වැරදි ලෙස හැඩගස්වා ඇති තන්තු සඳහා නැවත සකස් කරන ලද දෝෂ පණිවිඩ.
  • පැතිකඩ: නව කාර්යය "Profile.take_heap_snapshot(file)", එය Chrome හි සහය දක්වන JSON මත පදනම් වූ ".heapsnapshot" ආකෘතියෙන් ගොනුවක් ලියනවා.
  • Random: Randn සහ randexp දැන් rand නිර්වචනය කරන ඕනෑම AbstractFloat වර්ගයක් සඳහා ක්‍රියා කරයි.
  • REPL
    • "Alt-e" යතුරු සංයෝජනය එබීමෙන් දැන් සංස්කාරකයේ වත්මන් ආදානය විවෘත වේ. ඔබ සංස්කාරකයෙන් පිටවන විට අන්තර්ගතය (වෙනස් කළහොත්) ක්‍රියාත්මක වේ.
    • "REPL.activate(::Module)" ශ්‍රිතය භාවිතයෙන් හෝ REPL හි මොඩියුලය ඇතුළු කර "Alt-m" යතුරු සංයෝජනය එබීමෙන් REPL හි සක්‍රිය වත්මන් මොඩියුල සන්දර්භය (ප්‍රධාන වශයෙන් පෙරනිමියෙන්) වෙනස් කළ හැක.
    • එක් එක් ආදානය සහ ප්‍රතිදානය සඳහා අංක මුද්‍රණය කරන සහ ලකුණු කළ ප්‍රතිඵල Out හි ගබඩා කරන "සංඛ්‍යාගත විමසුම්" මාදිලිය "REPL.numbered_prompt!()" භාවිතයෙන් සක්‍රිය කළ හැක.
    • ටැබ් සම්පූර්ණ කිරීම පවතින මූල පද තර්ක පෙන්වයි.
  • SuiteSparse: "SuiteSparse" විසඳුම සඳහා කේතය "SparseArrays.jl" වෙත ගෙන යන ලදී. විසඳුම් දැන් "SuiteSparse.jl" මගින් ප්‍රති-අපනයනය කර ඇත.
  • SparseArrays
    • "SuiteSparse" විසදුම් දැන් "SparseArrays" උපමොඩියුල ලෙස පවතී.
    • UMFPACK සහ CHOLMOD නූල් ආරක්ෂණ මාතයන් ගෝලීය විචල්‍යයන් ඉවත් කිරීමෙන් සහ අගුලු භාවිතයෙන් වැඩි දියුණු කර ඇත. බහු-නූල් "ldiv!" UMFPACK වස්තූන් දැන් ආරක්ෂිතව ක්‍රියාත්මක කළ හැක.
    • පර්යේෂණාත්මක ශ්‍රිතය "SparseArrays.allowscalar(::Bool)" ඔබට විරල අරා අදිශ සුචිගත කිරීම අක්‍රිය කිරීමට හෝ සක්‍රීය කිරීමට ඉඩ සලසයි. මෙම කාර්යය සැලසුම් කර ඇත්තේ "SparseMatrixCSC" වස්තු වල සසම්භාවී පරිමාණ සුචිගත කිරීම හඳුනා ගැනීම සඳහා වන අතර එය කාර්ය සාධන ගැටළු සඳහා පොදු මූලාශ්‍රයක් වේ.
  • පරීක්‍ෂණ කට්ටල සඳහා නව අසාර්ථක ආරක්‍ෂිත මාදිලිය අසාර්ථක වූ විට හෝ දෝෂයක් ඇති වූ විට පරීක්‍ෂණ ධාවනය ඉක්මනින් අවසන් කරයි. “@testset kwarg failfast=true” හෝ “export JULIA_TEST_FAILFAST=true” හරහා සකසන්න. මෙය සමහර විට CI ධාවන වලදී දෝෂ පණිවිඩ ඉක්මනින් ලබා ගැනීමට අවශ්‍ය වේ.
  • දින: හිස් තන්තු තවදුරටත් වලංගු "දින වේලාව", "දිනයන්" හෝ "වේලාවන්" අගයන් ලෙස වැරදි ලෙස විග්‍රහ නොකරන අතර ඒ වෙනුවට "Tryparse" කිසිවක් ලබා නොදෙන අතර, ඉදිකිරීම්කරුවන් සහ විග්‍රහ කිරීම් තුළ "ArgumentError" දමන්න.
  • පැකේජය බෙදා හැර ඇත
    • පැකේජ වින්‍යාසය (ක්‍රියාකාරී ව්‍යාපෘතිය, "LOAD_PATH", "DEPOT_PATH") දැන් දේශීය සේවක ක්‍රියාවලි එකතු කිරීමේදී (උදා: "addprocs(N::Int)" භාවිතයෙන් හෝ "--procs=N" විධාන රේඛා ධජය භාවිතා කරන විට) ප්‍රචාරණය කෙරේ.
    • දේශීය සේවක ක්‍රියාවලි සඳහා "addprocs" දැන් පරිසර විචල්‍යයන් සේවක ක්‍රියාවලීන් වෙත යැවීමට "env" නම් තර්කයක් පිළිගනී.
  • යුනිකෝඩ්: "graphemes(s, m:n)" මගින් "s" හි mth සිට nth graphemes දක්වා උපස්ථරය ලබා දෙයි.
  • DelimitedFiles පැකේජය පද්ධති පුස්තකාලවලින් ඉවත් කර ඇති අතර දැන් එය වෙනම පැකේජයක් ලෙස බෙදා හැර ඇති අතර එය භාවිතා කිරීමට පැහැදිලිව ස්ථාපනය කළ යුතුය.
  • බාහිර පරායත්තතා
    • Linux හි, libstdc++ පද්ධති පුස්තකාලයේ අනුවාදය ස්වයංක්‍රීයව අනාවරණය වන අතර, එය අලුත් නම්, එය පූරණය වේ. "JULIA_PROBE_LIBSTDCXX=0" පරිසර විචල්‍යය සැකසීමෙන් පැරණි libstdc++ පූරණය කිරීමේ හැසිරීම, පද්ධති අනුවාදය කුමක් වුවත්, ප්‍රතිසාධනය කළ හැක.
    • "RUNPATH" විචල්‍යය නිර්වචනය කිරීමට අපොහොසත් වන Linux හි පුස්තකාල බිඳ දැමිය හැකි ජුලියා ද්විමය වෙතින් "RPATH" ඉවත් කරන ලදී.
    • මෙවලම් වැඩිදියුණු කිරීම්: "MethodError" සහ ක්‍රමවල ප්‍රතිදානය (උදාහරණයක් ලෙස "methods(my_func)" වෙතින්) දැන් ස්ටැක් ට්‍රේස් එකක ක්‍රමවල ප්‍රතිදානයේ මූලධර්මය අනුව හැඩතල ගන්වා වර්ණ ගන්වා ඇත.

    මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න