پروگرامنگ ٻولي جوليا 1.9 دستياب

جوليا 1.9 پروگرامنگ ٻولي جو خلاصو شايع ڪيو ويو آهي، اهڙين خاصيتن کي گڏ ڪندي جيئن اعلي ڪارڪردگي، متحرڪ ٽائپنگ لاءِ سپورٽ ۽ متوازي پروگرامنگ لاءِ بلٽ ان ٽولز. جوليا جو نحو MATLAB جي ويجهو آهي، روبي ۽ ليسپ کان ڪجهه عناصر قرض وٺي رهيو آهي. اسٽرنگ مينيپوليشن جو طريقو پرل جي ياد ڏياريندو آهي. پروجيڪٽ ڪوڊ MIT لائسنس تحت ورهايو ويو آهي.

ٻوليءَ جون اهم خاصيتون:

  • اعلي ڪارڪردگي: پروجيڪٽ جي اهم مقصدن مان هڪ سي پروگرامن جي ويجهو ڪارڪردگي حاصل ڪرڻ آهي. جوليا ڪمپيلر LLVM پروجيڪٽ جي ڪم تي ٻڌل آهي ۽ ڪيترن ئي ٽارگيٽ پليٽ فارمن لاءِ موثر اصلي مشين ڪوڊ ٺاهي ٿو.
  • مختلف پروگرامنگ پيراڊمز کي سپورٽ ڪري ٿو، بشمول اعتراض تي مبني ۽ فنڪشنل پروگرامنگ جا عنصر. معياري لائبريري مهيا ڪري ٿي، ٻين شين جي وچ ۾، افعال لاء غير مطابقت رکندڙ I/O، پروسيس ڪنٽرول، لاگنگ، پروفائلنگ، ۽ پيڪيج مينيجمينٽ؛
  • متحرڪ ٽائپنگ: ٻولي کي متغيرن لاءِ قسمن جي واضح تعريف جي ضرورت نه آهي، ساڳي طرح اسڪرپٽنگ پروگرامنگ ٻولين وانگر. انٽرايڪٽو موڊ سپورٽ؛
  • واضح طور تي قسمن جي وضاحت ڪرڻ جي اختياري صلاحيت؛
  • عددي ڪمپيوٽنگ، سائنسي ڪمپيوٽنگ، مشين لرننگ، ۽ ڊيٽا بصري لاءِ نحو مثالي. ڪيترن ئي عددي ڊيٽا جي قسمن لاءِ سپورٽ ۽ حسابن جي برابري لاءِ اوزار.
  • اضافي تہن کان سواءِ C لائبريرين مان افعال کي سڌو سنئون ڪال ڪرڻ جي صلاحيت.

جوليا 1.9 ۾ اهم تبديليون:

  • نئين ٻولي خاصيتون
    • "سيٽ پراپرٽي!(::Module, ::Symbol, x)" استعمال ڪندي تفويض کي ٻئي ماڊل ۾ ڪرڻ جي اجازت ڏيو.
    • گهڻن تفويض جي آخري پوزيشن ۾ نه آهي اجازت ڏني وئي آهي. مثال طور، اسٽرنگ "a, b…, c = 1, 2, 3, 4" تي عمل ڪيو ويندو "a = 1؛ ب…، = 2، 3؛ ج = 4" هي Base.split_rest ذريعي سنڀاليو ويو آهي.
    • سنگل اکر لٽريچر هاڻي ساڳي نحو کي سپورٽ ڪن ٿا جيئن اسٽرنگ لٽرلز؛ اهي. نحو غلط UTF-8 ترتيبن جي نمائندگي ڪري سگھي ٿو، جيئن چار قسم جي اجازت ڏني وئي آھي.
    • يونيڪوڊ 15 وضاحتن لاءِ سپورٽ شامل ڪئي وئي.
    • ٽوپلس ۽ نالي واري ڪردار جي ٽوپلن جا Nested مجموعا هاڻي استعمال ڪري سگھجن ٿا ٽائيپ پيرا ميٽرز طور.
    • نئون بلٽ ان فنڪشن "getglobal(::Module, ::Symbol[, order])" ۽ "setglobal!(::Module, ::Symbol, x[, order])" خاص طور تي عالمي متغيرن کي پڙهڻ ۽ لکڻ لاءِ. Getglobal طريقو کي هاڻي ترجيح ڏني وڃي Getfield جي طريقي تي عالمي متغيرن تائين رسائي حاصل ڪرڻ لاءِ.
  • ٻولي ۾ تبديليون
    • نسخو 1.7 ۾ متعارف ٿيل "@ invoke" ميڪرو هاڻي برآمد ڪيو ويو آهي ۽ استعمال لاءِ دستياب آهي. اضافي طور تي، اهو هاڻي استعمال ڪري ٿو "Core.Typeof(x)" طريقو "ڪنهن" جي بدران ان صورت ۾ جتي قسم جي تشريح کي "x" دليل لاءِ ختم ڪيو ويو آهي. اهو ضروري آهي ته انهي کي يقيني بڻائي سگهجي ته قسم جي طور تي منظور ٿيل دليلن تي صحيح طريقي سان عمل ڪيو وڃي.
    • "invokelatest" فنڪشن ۽ "@invokelatest" ميڪرو جي برآمد کي فعال ڪيو، نسخو 1.7 ۾ متعارف ڪرايو ويو.
  • مرتب ڪندڙ / رن ٽائم بهتري
    • خاص طور تي پهريون عمل ڪرڻ جو وقت گھٽايو ويو (TTFX - پهريون عمل ڪرڻ جو وقت). هڪ پئڪيج کي اڳي ترتيب ڏيڻ هاڻي اصلي ڪوڊ کي "pkgimage" ۾ محفوظ ڪري ٿو، مطلب ته اهو ڪوڊ تيار ڪرڻ جي عمل طرفان تيار ڪيل ڪوڊ کي ٻيهر ٺاهڻ جي ضرورت نه هوندي پيڪيج لوڊ ٿيڻ کان پوء. pkgimages موڊ جي استعمال کي "--pkgimages=no" اختيار استعمال ڪندي غير فعال ڪري سگھجي ٿو.
    • ڄاڻايل چوگرد پيچيدگي واري مسئلي جي قسم جو اندازو لڳايو ويو آهي، ۽ اندازو مجموعي طور تي گهٽ ياداشت استعمال ڪندو آهي. ڪجهه ايج ڪيس پاڻمرادو ٺاهيل ڊگھي ڪمن سان گڏ (جهڙوڪ ModelingToolkit.jl جزوي فرق جي مساواتن سان ۽ وڏا سبب ماڊل) تمام تيز مرتب ڪن ٿا.
    • ڪنڪريٽ قسمن جي بغير دليلن سان ڪالون ھاڻي يونين جي تقسيم ٿي سگھي ٿي انجيڪشن يا جامد حل لاءِ اصلاحي، جيتوڻيڪ اتي موڪلن لاءِ ڪيترائي مختلف قسم جا اميدوار آھن. اهو ڪجهه حالتن ۾ ڪارڪردگي بهتر ڪري سگهي ٿو جتي اعتراض جا قسم مڪمل طور تي حل نه ڪيا ويا آهن، "@nospecialize-d" ڪال سائيٽن کي مستحڪم طور تي حل ڪرڻ ۽ ٻيهر گڏ ڪرڻ کان پاسو ڪندي.
    • بيس ماڊل ۾ @pure ميڪرو جا سڀ استعمال Base.@assume_effects سان تبديل ڪيا ويا آهن.
    • invoke (f, invokesig, args...) لاءِ ڪالون گھٽ مخصوص قسمن جي ڀيٽ ۾ عام طور تي f(args...) لاءِ استعمال ٿيڻ کان پوءِ پيڪيج کي ٻيهر گڏ ڪرڻ جو سبب نه بڻجنديون.
  • ڪمانڊ لائن اختيارن ۾ تبديليون
    • لينڪس ۽ ونڊوز تي، "--threads=auto" اختيار هاڻي CPU لاڳاپن جي بنياد تي پروسيسرز جي دستياب تعداد کي طئي ڪرڻ جي ڪوشش ڪري ٿو، هڪ ماسڪ عام طور تي HPC ۽ ڪلائوڊ ماحول ۾ مقرر ڪيو ويو آهي.
    • "--math-mode=fast" پيٽرولر بند ٿيل آهي، ان جي بدران "@fastmath" ميڪرو استعمال ڪرڻ جي سفارش ڪئي وئي آهي، جنهن ۾ واضح طور تي وضاحت ڪئي وئي آهي.
    • "-threads" اختيار هاڻي فارميٽ ۾ آهي "آٽو | N[،auto|M]"، جتي M ظاھر ڪري ٿو انٽرايڪٽو ٿريڊز جو تعداد ٺاھڻ لاءِ (في الحال آٽو مطلب 1).
    • شامل ڪيو ويو اختيار "—هيپ-سائيز-اشارو=" "، جيڪو حد مقرر ڪري ٿو جنهن کان پوء فعال گندگي گڏ ڪرڻ شروع ٿئي ٿو. سائيز بائيٽ، ڪلوبائيٽس (1000 KB)، ميگا بائيٽ (300 MB)، يا گيگا بائيٽ (1,5 GB) ۾ بيان ڪري سگھجي ٿو.
  • multithreading ۾ تبديليون
    • "Threads.@spawn" وٽ ھاڻي ھڪڙو اختياري پھريون دليل آھي جنھن ۾ قدر ":default" يا ":interactive" آھي. هڪ انٽرايڪٽو ڪم کي گهٽ جوابي ويڪرائي جي ضرورت آهي ۽ ٺهيل آهي مختصر يا بار بار انجام ڏيڻ لاءِ. انٽرايڪٽو ڪم انٽرايڪٽو موضوعن تي هلندا جيڪڏهن اهي بيان ڪيا وڃن جڏهن جوليا شروع ٿيندي.
    • جوليا رن ٽائم کان ٻاهر هلندڙ موضوع (جهڙوڪ سي يا جاوا مان) هاڻي "jl_adopt_thread" استعمال ڪندي جوليا ڪوڊ ڪال ڪري سگهن ٿا. اهو خودڪار طريقي سان ٿئي ٿو جڏهن جوليا ڪوڊ داخل ڪيو وڃي "cfunction" يا "@ccallable" انٽري پوائنٽ ذريعي. نتيجي طور، سلسلو جو تعداد ھاڻي عمل جي دوران تبديل ٿي سگھي ٿو.
  • نئين لائبريري افعال
    • نئون فنڪشن "Iterators.flatmap".
    • نئون فنڪشن "pkgversion(m::Module)" پيڪيج جو ورجن حاصل ڪرڻ لاءِ جيڪو ڏنل ماڊيول لوڊ ڪيو، "pkgdir(m::Module)" وانگر.
    • نئون فنڪشن "اسٽيڪ (x)" جيڪو عام ڪري ٿو "reduce(hcat, x::Vector{<:Vector})" کي ڪنهن به طول و عرض ڏانهن ۽ اجازت ڏئي ٿو ڪنهن به ٻيهر ورجائيندڙ کي. "اسٽيڪ (f، x)" طريقو عام ڪري ٿو "mapreduce(f، hcat، x)" ۽ وڌيڪ ڪارائتو آهي.
    • مختص ڪيل ياداشت جي تجزيي لاءِ نئون ميڪرو "@allocations"، "@allocated" سان ملندڙ جلندڙ، سواءِ ان جي ته اهو مختص ڪيل ميموري جي ڪل سائيز جي بجاءِ ميموري مختص ڪرڻ جو تعداد واپس ڪري ٿو.
  • نئين لائبريري خاصيتون
    • "RoundFromZero" هاڻي "BigFloat" کان سواء ٻين قسمن لاء ڪم ڪري ٿو.
    • "Dict" ھاڻي دستي طور گھٽائي سگھجي ٿو "sizehint!"
    • "@ وقت" ھاڻي الڳ الڳ بيان ڪري ٿو وقت جو سيڪڙو خرچ ٿيل غلط طريقن کي ٻيهر گڏ ڪرڻ ۾.
  • معياري لائبريري ۾ تبديليون
    • Dict ۽ ٻين نڪتل شين جهڙوڪ ڪيز(::Dict)، قدر(::Dict) ۽ سيٽ لاءِ iteration طريقن ۾ هڪ اتفاق مسئلو حل ڪيو. انهن iteration طريقن کي هاڻي ڊڪشنري يا سيٽ تي متوازي طور تي لامحدود تعداد جي سلسلي لاءِ سڏي سگهجي ٿو، جيستائين ڪو به عمل نه هجي جيڪي لغت يا سيٽ کي تبديل ڪن.
    • اڳڪٿي واري فنڪشن "!f" کي رد ڪرڻ هاڻي هڪ گمنام فنڪشن جي بدران هڪ جامع فنڪشن "(!) ∘ f" واپس ڪري ٿو.
    • طول و عرض جي سلائسن جا ڪم ھاڻي گھڻن طول و عرض تي ڪم ڪن ٿا: "eachslice"، "eachrow" ۽ "eachcol" ھڪڙو "slices" اعتراض موٽائي ٿو جيڪو موڪلڻ کي وڌيڪ موثر طريقا مهيا ڪرڻ جي اجازت ڏئي ٿو.
    • عوامي API ۾ "@kwdef" ميڪرو شامل ڪيو ويو.
    • "fld1" ۾ آپريشن جي ترتيب سان مسئلو حل ڪيو.
    • ترتيب ڏيڻ ھاڻي ھميشه وقت تي مستحڪم آھي (QuickSort کي نئين سر ٺاھيو ويو آھي).
    • "Base.splat" هاڻي برآمد ڪيو ويو آهي. واپسي جي قيمت هڪ "Base.Splat" قسم آهي بلڪه هڪ گمنام فنڪشن، ان کي اجازت ڏئي ٿو ته ان کي چڱي طرح آئوٽ ڪيو وڃي.
  • پيڪيج مئنيجر
    • "پيڪيج ايڪسٽينشنز": جوليا سيشن ۾ لوڊ ٿيل ٻين پيڪيجز مان ڪوڊ اسنيپٽ لوڊ ڪرڻ لاءِ سپورٽ. ايپليڪيشن "Requires.jl" پيڪيج سان ملندڙ جلندڙ آهي، پر اڳ-تاليف ۽ سيٽنگون مطابقت جي حمايت ڪئي وئي آهي.
  • لڪير الجبرا لائبريري
    • عنصر وار ڊويزن سان مونجهاري جي خطري جي ڪري، "a/b" ۽ "b\a" طريقن کي اسڪيلر "a" ۽ vector "b" سان هٽايو، جيڪي "a * pinv(b)" جي برابر هئا.
    • BLAS ۽ LAPACK کي ڪال ڪرڻ هاڻي "libblastrampoline (LBT)" استعمال ڪري ٿو. OpenBLAS ڊفالٽ طور تي مهيا ڪئي وئي آهي، پر ٻين BLAS/LAPACK لائبريرين سان سسٽم جي تصوير کي تعمير ڪرڻ جي سهولت نه آهي. ان جي بدران، اها سفارش ڪئي وئي آهي ته LBT ميڪانيزم کي استعمال ڪرڻ لاءِ BLAS/LAPACK کي ڪنهن ٻئي موجود لائبريرين سان تبديل ڪيو وڃي.
    • "lu" ھڪڙي نئين ميٽرڪس گھمڻ واري حڪمت عملي کي سپورٽ ڪري ٿو، "RowNonZero()"، جيڪو نئين رياضي جي قسمن ۽ تربيتي مقصدن لاء استعمال ڪرڻ لاء پھريون غير صفر گھمڻ واري عنصر کي منتخب ڪري ٿو.
    • "normalize(x, p=2)" ھاڻي سپورٽ ڪري ٿو ڪنھن به نارمل ٿيل ویکٹر اسپيس "x"، بشمول اسڪالر.
    • BLAS ٿريڊز جو ڊفالٽ نمبر ھاڻي ARM آرڪيٽيڪچرز تي CPU ٿريڊز جي تعداد جي برابر آھي ۽ ٻين آرڪيٽيڪچرز تي CPU ٿريڊز جو اڌ تعداد.
  • Printf: بهتر پڙهڻ جي قابليت لاءِ غلط فارميٽ ٿيل تارن لاءِ ٻيهر ڪم ڪيو ويو.
  • پروفائل: نئون فنڪشن "Profile.take_heap_snapshot(file)"، جيڪو ڪروم ۾ سپورٽ ڪيل JSON-based ".heapsnapshot" فارميٽ ۾ فائل لکي ٿو.
  • Random: Randn ۽ randexp هاڻي ڪم ڪن ٿا ڪنهن به AbstractFloat قسم لاءِ جيڪو رينڊ جي وضاحت ڪري ٿو.
  • رد ڪريو
    • "Alt-e" ڪيئي ميلاپ کي دٻائڻ سان ھاڻي ايڊيٽر ۾ موجوده ان پٽ کوليندو آھي. مواد (جيڪڏهن تبديل ٿيل) تي عمل ڪيو ويندو جڏهن توهان ايڊيٽر کان ٻاهر نڪرندا.
    • REPL ۾ فعال موجوده ماڊيول جي حوالي سان تبديل ڪري سگھجي ٿو (Main by default) فنڪشن استعمال ڪندي "REPL.activate(::Module)" يا REPL ۾ ماڊيول داخل ڪري ۽ ڪيئي ميلاپ "Alt-m" کي دٻائيندي.
    • ”نمبرڊ پرامپٽ“ موڊ، جيڪو هر ان پٽ ۽ آئوٽ پُٽ لاءِ نمبر پرنٽ ڪري ٿو ۽ اسڪور ٿيل نتيجن کي آئوٽ ۾ محفوظ ڪري ٿو، ”REPL.numbered_prompt!()“ استعمال ڪندي چالو ڪري سگھجي ٿو.
    • ٽئب جي مڪمل ٿيڻ سان موجود لفظي دليلن کي ڏيکاري ٿو.
  • SuiteSparse: "SuiteSparse" سولور لاءِ ڪوڊ منتقل ڪيو ويو "SparseArrays.jl". حل ڪندڙ هاڻي "SuiteSparse.jl" طرفان ٻيهر برآمد ڪيا ويا آهن.
  • SparseArrays
    • "SuiteSparse" حل ڪندڙ ھاڻي "SparseArrays" ذيلي ماڊل طور موجود آھن.
    • UMFPACK ۽ COLMOD سلسلي جي حفاظت جا طريقا عالمي متغيرن کي ختم ڪرڻ ۽ تالا استعمال ڪندي بهتر ڪيا ويا آھن. گهڻن موضوعن واري "ldiv!" UMFPACK شيون ھاڻي محفوظ طور تي عمل ڪري سگھجن ٿيون.
    • تجرباتي فنڪشن "SparseArrays.allowscalar(::Bool)" توهان کي اجازت ڏئي ٿو اسپارس صفن جي اسڪيلر انڊيڪسنگ کي غير فعال يا فعال ڪرڻ. هي فنڪشن ٺهيل آهي "SparseMatrixCSC" شين جي بي ترتيب اسڪيلر انڊيڪسنگ کي ڳولڻ لاء، جيڪو ڪارڪردگي جي مسئلن جو هڪ عام ذريعو آهي.
  • ٽيسٽ سوٽ لاءِ نئون ناڪام محفوظ موڊ جيڪو ناڪامي يا غلطي جي صورت ۾ شروعاتي ٽيسٽ کي ختم ڪري ٿو. يا ته "@testset kwarg failfast=true" يا "Export JULIA_TEST_FAILFAST=true" ذريعي سيٽ ڪريو. اهو ڪڏهن ضروري آهي CI رنن ۾ غلطي پيغامن کي جلدي حاصل ڪرڻ لاءِ.
  • تاريخون: خالي اسٽرنگ هاڻي غلط طور تي صحيح "تاريخ وقت"، "تاريخون" يا "ٽائمز" قدرن جي طور تي پارس نه ڪيا ويا آهن ۽ ان جي بدران "ArgumentError" ٺاھيندڙن ۽ پارسنگ ۾ اڇلائي، جڏھن ته "Tryparse" ڪجھ به نه موٽائي.
  • ورهايل پيڪيج
    • پيڪيج جي جوڙجڪ (فعال پروجيڪٽ، "LOAD_PATH"، "DEPOT_PATH") هاڻي پروپيگنڊا ڪئي وئي آهي جڏهن مقامي ڪم ڪندڙ عملن کي شامل ڪيو وڃي (مثال طور استعمال ڪندي "addprocs(N::Int)" يا ڪمان لائن پرچم استعمال ڪندي "--procs=N").
    • "addprocs" مقامي ڪم ڪندڙ عملن لاءِ هاڻي "env" نالي هڪ دليل کي قبول ڪري ٿو جيڪو ڪم ڪندڙ عملن ڏانهن ماحولياتي متغيرن کي منتقل ڪرڻ لاءِ.
  • يونيڪوڊ: "graphemes(s, m:n)" "s" ۾ mth کان nth گرافيمس جي ذيلي اسٽرينگ کي موٽائي ٿو.
  • DelimitedFiles پيڪيج سسٽم لائبريري مان هٽايو ويو آهي ۽ هاڻي هڪ الڳ پيڪيج جي طور تي ورهايو ويو آهي جيڪو واضح طور تي نصب ڪيو وڃي استعمال ٿيڻ لاء.
  • خارجي انحصار
    • لينڪس ۾، libstdc++ سسٽم لائبريري جو نسخو خودڪار طور تي معلوم ٿئي ٿو ۽، جيڪڏهن اهو نئون آهي، اهو لوڊ ڪيو ويندو آهي. پراڻي libstdc++ بلٽ ان لوڊ ڪرڻ وارو رويو، سسٽم ورزن کان سواءِ، ماحولي تبديليءَ کي ترتيب ڏيندي بحال ڪري سگھجي ٿو "JULIA_PROBE_LIBSTDCXX=0".
    • جوليا بائنري مان "RPATH" کي هٽايو ويو، جيڪو لينڪس تي لائبريرين کي ٽوڙي سگھي ٿو جيڪي "RUNPATH" متغير جي وضاحت ڪرڻ ۾ ناڪام ٿين ٿيون.
    • اوزار جي بهتري: "MethodError" ۽ طريقن جو آئوٽ پُٽ (مثال طور "طريقو(my_func)" مان) ھاڻي فارميٽ ڪيو ويو آھي ۽ اسٽيڪ ٽريس ۾ طريقن جي آئوٽ پٽ جي اصول جي مطابق رنگ ٿيل آھي.

    جو ذريعو: opennet.ru

تبصرو شامل ڪريو