جولیا 1.9 پروگرامنگ زبان دستیاب ہے۔

جولیا 1.9 پروگرامنگ لینگویج کا اجراء شائع کیا گیا ہے، جس میں اعلیٰ کارکردگی، ڈائنامک ٹائپنگ کے لیے سپورٹ اور متوازی پروگرامنگ کے لیے بلٹ ان ٹولز جیسی خصوصیات شامل ہیں۔ جولیا کا نحو MATLAB کے قریب ہے، جو روبی اور لِسپ سے کچھ عناصر مستعار لے رہا ہے۔ سٹرنگ ہیرا پھیری کا طریقہ پرل کی یاد تازہ کرتا ہے۔ پروجیکٹ کوڈ MIT لائسنس کے تحت تقسیم کیا جاتا ہے۔

زبان کی اہم خصوصیات:

  • اعلی کارکردگی: پراجیکٹ کے کلیدی اہداف میں سے ایک C پروگراموں کے قریب کارکردگی کو حاصل کرنا ہے۔ جولیا کمپائلر LLVM پروجیکٹ کے کام پر مبنی ہے اور بہت سے ٹارگٹ پلیٹ فارمز کے لیے موثر مقامی مشین کوڈ تیار کرتا ہے۔
  • مختلف پروگرامنگ پیراڈیمز کی حمایت کرتا ہے، بشمول آبجیکٹ اورینٹڈ اور فنکشنل پروگرامنگ کے عناصر۔ معیاری لائبریری دیگر چیزوں کے ساتھ ساتھ، غیر مطابقت پذیر I/O، پراسیس کنٹرول، لاگنگ، پروفائلنگ، اور پیکیج مینجمنٹ کے لیے افعال فراہم کرتی ہے۔
  • متحرک ٹائپنگ: زبان کو اسکرپٹنگ پروگرامنگ زبانوں کی طرح متغیر کے لیے اقسام کی واضح تعریف کی ضرورت نہیں ہے۔ انٹرایکٹو موڈ کی حمایت کی؛
  • واضح طور پر اقسام کی وضاحت کرنے کی اختیاری صلاحیت؛
  • عددی کمپیوٹنگ، سائنسی کمپیوٹنگ، مشین لرننگ، اور ڈیٹا ویژولائزیشن کے لیے ایک نحو مثالی ہے۔ کئی عددی ڈیٹا کی اقسام اور حسابات کے متوازی ہونے کے لیے ٹولز کے لیے معاونت۔
  • اضافی تہوں کے بغیر C لائبریریوں سے فنکشنز کو براہ راست کال کرنے کی صلاحیت۔

جولیا 1.9 میں اہم تبدیلیاں:

  • نئی زبان کی خصوصیات
    • "setproperty!(::Module, ::Symbol, x)" کا استعمال کرتے ہوئے اسائنمنٹس کو دوسرے ماڈیول میں کرنے کی اجازت دیں۔
    • متعدد اسائنمنٹس کی اجازت نہیں ہے جو حتمی پوزیشن میں نہیں ہیں۔ مثال کے طور پر، سٹرنگ "a, b…, c = 1, 2, 3, 4" کو "a = 1" کے طور پر پروسیس کیا جائے گا۔ ب…، = 2، 3؛ c = 4"۔ یہ Base.split_rest کے ذریعے سنبھالا جاتا ہے۔
    • سنگل کریکٹر لٹریلز اب سٹرنگ لٹریلز کی طرح ایک ہی نحو کی حمایت کرتے ہیں۔ وہ نحو غلط UTF-8 ترتیب کی نمائندگی کر سکتا ہے، جیسا کہ چار قسم کی اجازت ہے۔
    • یونیکوڈ 15 تفصیلات کے لیے تعاون شامل کیا گیا۔
    • ٹیپلز اور نام شدہ کریکٹر ٹیپلز کے نیسٹڈ امتزاج کو اب ٹائپ پیرامیٹرز کے طور پر استعمال کیا جا سکتا ہے۔
    • نئے بلٹ ان فنکشنز "getglobal(::Module, ::Symbol[, order])" اور "setglobal!(::Module, ::Symbol, x[, order])" عالمی متغیرات کو خصوصی طور پر پڑھنے اور لکھنے کے لیے۔ عالمی متغیرات تک رسائی حاصل کرنے کے لیے گیٹ گلوبل میتھڈ کو اب گیٹ فیلڈ میتھڈ پر ترجیح دی جانی چاہیے۔
  • زبان میں تبدیلیاں
    • ورژن 1.7 میں متعارف کرایا گیا "@invoke" میکرو اب برآمد اور استعمال کے لیے دستیاب ہے۔ مزید برآں، یہ اب اس صورت میں "کسی بھی" کے بجائے "Core.Typeof(x)" طریقہ استعمال کرتا ہے جہاں "x" دلیل کے لیے ٹائپ تشریح کو چھوڑ دیا جاتا ہے۔ یہ یقینی بنانے کے لیے ضروری ہے کہ دلائل کے طور پر منظور شدہ اقسام پر صحیح طریقے سے کارروائی کی جائے۔
    • ورژن 1.7 میں متعارف کرائے گئے "invokelatest" فنکشن اور "@invokelatest" میکرو کی برآمد کو فعال کیا گیا۔
  • کمپائلر/رن ٹائم بہتری
    • پہلی پھانسی کا وقت نمایاں طور پر کم کر دیا گیا (TTFX - پہلی پھانسی کا وقت)۔ ایک پیکج کو پہلے سے مرتب کرنا اب مقامی کوڈ کو "pkgimage" میں محفوظ کرتا ہے، یعنی پہلے سے کمپائلیشن کے عمل سے تیار کردہ کوڈ کو پیکج کے لوڈ ہونے کے بعد دوبارہ کمپائل کرنے کی ضرورت نہیں ہوگی۔ pkgimages موڈ کے استعمال کو "--pkgimages=no" اختیار کا استعمال کرتے ہوئے غیر فعال کیا جا سکتا ہے۔
    • قسم کا اندازہ لگانے کا معلوم چوکور پیچیدگی کا مسئلہ طے کر دیا گیا ہے، اور اندازہ مجموعی طور پر کم میموری استعمال کرتا ہے۔ خود کار طریقے سے پیدا ہونے والے طویل فنکشنز کے ساتھ کچھ ایج کیسز (جیسے ModelingToolkit.jl جزوی تفریق مساوات اور بڑے کازل ماڈلز کے ساتھ) بہت تیزی سے مرتب ہوتے ہیں۔
    • کنکریٹ اقسام کے بغیر دلائل کے ساتھ کالز اب انجیکشن یا سٹیٹک ریزولوشن کے لیے یونین اسپلٹنگ کو بہتر بنایا جا سکتا ہے، چاہے ڈسپیچ کے لیے متعدد مختلف قسم کے امیدوار ہوں۔ یہ کچھ ایسی حالتوں میں کارکردگی کو بہتر بنا سکتا ہے جہاں آبجیکٹ کی قسمیں مکمل طور پر مستحکم طور پر حل نہیں ہوتی ہیں، "@nospecialize-d" کال سائٹس کو مستحکم طور پر حل کرکے اور دوبارہ مرتب کرنے سے گریز کریں۔
    • بیس ماڈیول میں @pure میکرو کے تمام استعمال کو Base.@assume_effects سے بدل دیا گیا ہے۔
    • عام طور پر f(args...) کے لیے استعمال ہونے والی کم مخصوص اقسام کے ساتھ invoke(f, invokesig, args...) کی کالز پیکیج کو دوبارہ مرتب کرنے کا سبب نہیں بنتی ہیں۔
  • کمانڈ لائن کے اختیارات میں تبدیلیاں
    • لینکس اور ونڈوز پر، "-threads=auto" آپشن اب CPU وابستگی کی بنیاد پر پروسیسرز کی دستیاب تعداد کا تعین کرنے کی کوشش کرتا ہے، یہ ماسک عام طور پر HPC اور کلاؤڈ ماحول میں سیٹ کیا جاتا ہے۔
    • "--math-mode=fast" پیرامیٹر کو غیر فعال کر دیا گیا ہے، اس کے بجائے "@fastmath" میکرو کو استعمال کرنے کی سفارش کی جاتی ہے، جس نے واضح طور پر الفاظ کی وضاحت کی ہے۔
    • "-threads" آپشن اب "auto |" فارمیٹ میں ہے۔ N[،آٹو
    • آپشن شامل کیا گیا "—ڈھیر کے سائز کا اشارہ =" "، جو اس حد کو متعین کرتا ہے جس کے بعد فعال کچرا جمع کرنا شروع ہوتا ہے۔ سائز بائٹس، کلو بائٹس (1000 KB)، میگا بائٹس (300 MB) یا گیگا بائٹس (1,5 GB) میں بیان کیا جا سکتا ہے۔
  • ملٹی تھریڈنگ میں تبدیلیاں
    • "Threads.@spawn" میں اب ":default" یا ":interactive" کی قدر کے ساتھ ایک اختیاری پہلی دلیل ہے۔ ایک انٹرایکٹو ٹاسک کے لیے کم جوابی تاخیر کی ضرورت ہوتی ہے اور اسے مختصر یا کثرت سے انجام دینے کے لیے ڈیزائن کیا گیا ہے۔ انٹرایکٹو ٹاسک انٹرایکٹو تھریڈز پر چلیں گے اگر وہ جولیا شروع کرتے وقت بتائے جائیں۔
    • جولیا رن ٹائم سے باہر چلنے والے تھریڈز (جیسے سی یا جاوا سے) اب "jl_adopt_thread" کا استعمال کرتے ہوئے جولیا کوڈ کو کال کر سکتے ہیں۔ "cfunction" یا "@ccallable" انٹری پوائنٹ کے ذریعے جولیا کوڈ درج کرتے وقت یہ خود بخود ہوتا ہے۔ نتیجے کے طور پر، اب عمل کے دوران تھریڈز کی تعداد تبدیل ہو سکتی ہے۔
  • لائبریری کے نئے افعال
    • نیا فنکشن "Iterators.flatmap"۔
    • نیا فنکشن "pkgversion(m::Module)" پیکج کا وہ ورژن حاصل کرنے کے لیے جس نے ایک دیئے گئے ماڈیول کو لوڈ کیا، جیسا کہ "pkgdir(m::Module)"۔
    • نیا فنکشن "stack(x)" جو کسی بھی جہت میں "reduce(hcat, x::Vector{<:Vector})" کو عام کرتا ہے اور کسی بھی تکرار کرنے والے کو دوبارہ کرنے کی اجازت دیتا ہے۔ "stack(f, x)" طریقہ "mapreduce(f, hcat, x)" کو عام کرتا ہے اور زیادہ موثر ہے۔
    • مختص کردہ میموری "@allocations" کا تجزیہ کرنے کے لیے نیا میکرو، "@allocated" سے ملتا جلتا ہے، سوائے اس کے کہ یہ مختص کردہ میموری کے کل سائز کے بجائے، میموری مختص کی تعداد واپس کرتا ہے۔
  • لائبریری کی نئی خصوصیات
    • "RoundFromZero" اب "BigFloat" کے علاوہ دیگر اقسام کے لیے کام کرتا ہے۔
    • "Dict" کو اب "sizehint!" کا استعمال کرتے ہوئے دستی طور پر کم کیا جا سکتا ہے۔
    • "@time" اب الگ سے غلط طریقوں کو دوبارہ مرتب کرنے میں گزارے گئے وقت کا فیصد بتاتا ہے۔
  • معیاری لائبریری میں تبدیلیاں
    • Dict اور دیگر اخذ کردہ اشیاء جیسے کیز(::Dict)، اقدار(::Dict) اور سیٹ کے لیے تکرار کے طریقوں میں ہم آہنگی کا مسئلہ طے کیا۔ تکرار کے ان طریقوں کو اب لامحدود تعداد میں تھریڈز کے متوازی طور پر ایک Dict یا Set پر بلایا جا سکتا ہے، جب تک کہ لغت یا سیٹ کو تبدیل کرنے والی کوئی کارروائی نہ ہو۔
    • ایک predicate فنکشن "!f" کی نفی کرنا اب ایک گمنام فنکشن کی بجائے ایک کمپوزٹ فنکشن "(!) ∘ f" لوٹاتا ہے۔
    • ڈائمینشن سلائس فنکشنز اب متعدد جہتوں پر کام کرتے ہیں: "eachslice"، "eachrow" اور "eachcol" ایک "Slices" آبجیکٹ واپس کرتے ہیں جو ڈسپیچنگ کو زیادہ موثر طریقے فراہم کرنے کی اجازت دیتا ہے۔
    • عوامی API میں "@kwdef" میکرو کو شامل کیا۔
    • "fld1" میں کارروائیوں کی ترتیب کے ساتھ ایک مسئلہ طے کیا گیا۔
    • چھانٹنا اب ہمیشہ وقت کے لحاظ سے مستحکم ہوتا ہے (QuickSort کو دوبارہ ڈیزائن کیا گیا ہے)۔
    • "Base.splat" اب برآمد کیا گیا ہے۔ ریٹرن ویلیو ایک گمنام فنکشن کے بجائے "Base.Splat" قسم ہے، جس سے یہ اچھی طرح سے آؤٹ پٹ ہو سکتا ہے۔
  • پیکیج مینیجر
    • "پیکیج ایکسٹینشنز": جولیا سیشن میں لوڈ کیے گئے دوسرے پیکجوں سے کوڈ کا ٹکڑا لوڈ کرنے کے لیے سپورٹ۔ ایپلیکیشن "Requires.jl" پیکج کی طرح ہے، لیکن پہلے سے تالیف اور ترتیبات کی مطابقت کی حمایت کی جاتی ہے۔
  • لکیری الجبرا لائبریری
    • عنصر کے لحاظ سے تقسیم کے ساتھ الجھن کے خطرے کی وجہ سے، اسکیلر "a" اور ویکٹر "b" کے ساتھ "a/b" اور "b\a" طریقوں کو ہٹا دیا گیا، جو "a * pinv(b)" کے برابر تھے۔
    • BLAS اور LAPACK کو کال کرنا اب "libblastrampoline (LBT)" کا استعمال کرتا ہے۔ OpenBLAS بطور ڈیفالٹ فراہم کیا جاتا ہے، لیکن دیگر BLAS/LAPACK لائبریریوں کے ساتھ سسٹم امیج بنانا تعاون یافتہ نہیں ہے۔ اس کے بجائے، BLAS/LAPACK کو لائبریریوں کے دوسرے موجودہ سیٹ سے تبدیل کرنے کے لیے LBT طریقہ کار استعمال کرنے کی سفارش کی جاتی ہے۔
    • "lu" ایک نئی میٹرکس گردش کی حکمت عملی کی حمایت کرتا ہے، "RowNonZero()"، جو ریاضی کی نئی اقسام کے ساتھ اور تربیتی مقاصد کے لیے استعمال کے لیے پہلے غیر صفر گردشی عنصر کا انتخاب کرتا ہے۔
    • "normalize(x, p=2)" اب کسی بھی نارملائزڈ ویکٹر اسپیس "x" کو سپورٹ کرتا ہے، بشمول اسکیلرز۔
    • بی ایل اے ایس تھریڈز کی ڈیفالٹ تعداد اب اے آر ایم آرکیٹیکچرز پر سی پی یو تھریڈز کی تعداد اور دیگر آرکیٹیکچرز پر سی پی یو تھریڈز کی نصف تعداد کے برابر ہے۔
  • پرنٹف: بہتر پڑھنے کی اہلیت کے لیے غلط طریقے سے فارمیٹ کیے گئے تاروں کے لیے دوبارہ کام کیا گیا۔
  • پروفائل: نیا فنکشن "Profile.take_heap_snapshot(file)"، جو کروم میں تعاون یافتہ JSON پر مبنی ".heapsnapshot" فارمیٹ میں فائل لکھتا ہے۔
  • Random: randn اور randexp اب کسی بھی AbstractFloat قسم کے لیے کام کرتے ہیں جو rand کی وضاحت کرتی ہے۔
  • REPL
    • "Alt-e" کلید کے امتزاج کو دبانے سے اب ایڈیٹر میں موجودہ ان پٹ کھل جاتا ہے۔ جب آپ ایڈیٹر سے باہر نکلیں گے تو مواد (اگر ترمیم کی گئی ہے) کو عمل میں لایا جائے گا۔
    • REPL میں فعال موجودہ ماڈیول سیاق و سباق کو "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 رن میں ضروری ہوتا ہے تاکہ غلطی کے پیغامات جلد موصول ہوں۔
  • تاریخیں: خالی سٹرنگز کو درست "ڈیٹ ٹائم"، "تاریخ" یا "ٹائمز" ویلیوز کے طور پر اب غلط طریقے سے پارس نہیں کیا جاتا ہے اور اس کے بجائے کنسٹرکٹرز اور پارسنگ میں "آرگومنٹ ایرر" پھینک دیتے ہیں، جب کہ "ٹرائی پارس" کچھ نہیں لوٹاتا ہے۔
  • پیکیج تقسیم کیا گیا۔
    • پیکیج کی ترتیب (فعال پروجیکٹ، "LOAD_PATH"، "DEPOT_PATH") اب مقامی کارکن کے عمل کو شامل کرتے وقت پروپیگنڈہ کیا جاتا ہے (جیسے "addprocs(N::Int)" کا استعمال کرتے ہوئے یا کمانڈ لائن پرچم "--procs=N" کا استعمال کرتے ہوئے)۔
    • مقامی کارکن کے عمل کے لیے "addprocs" اب کارکن کے عمل میں ماحولیاتی متغیرات کو منتقل کرنے کے لیے "env" نامی دلیل کو قبول کرتا ہے۔
  • یونیکوڈ: "graphemes(s, m:n)" "s" میں mth سے nth graphemes تک سبسٹرنگ لوٹاتا ہے۔
  • DelimitedFiles پیکیج کو سسٹم لائبریریوں سے ہٹا دیا گیا ہے اور اب اسے ایک علیحدہ پیکیج کے طور پر تقسیم کیا گیا ہے جسے استعمال کرنے کے لیے واضح طور پر انسٹال کرنا ضروری ہے۔
  • بیرونی انحصار
    • لینکس میں، libstdc++ سسٹم لائبریری کے ورژن کا خود بخود پتہ چل جاتا ہے اور، اگر یہ نیا ہے، تو اسے لوڈ کر دیا جاتا ہے۔ پرانے libstdc++ بلٹ ان لوڈنگ رویے، سسٹم ورژن سے قطع نظر، ماحول کے متغیر "JULIA_PROBE_LIBSTDCXX=0" کو ترتیب دے کر بحال کیا جا سکتا ہے۔
    • جولیا بائنری سے "RPATH" کو ہٹا دیا گیا، جو لینکس پر ایسی لائبریریوں کو توڑ سکتا ہے جو "RUNPATH" متغیر کی وضاحت کرنے میں ناکام رہتی ہیں۔
    • ٹول میں بہتری: "MethodError" اور طریقوں کی آؤٹ پٹ (مثال کے طور پر "methods(my_func)" سے) اب اسٹیک ٹریس میں طریقوں کے آؤٹ پٹ کے اصول کے مطابق فارمیٹ اور رنگین ہے۔

    ماخذ: opennet.ru

نیا تبصرہ شامل کریں