پروگرامنگ لینگویج Rust 1.75 اور unikernel Hermit 0.6.7 کی ریلیز

Rust 1.75 عام مقصد کی پروگرامنگ لینگویج کی ریلیز، جسے Mozilla پروجیکٹ نے قائم کیا تھا، لیکن اب اسے آزاد غیر منافع بخش تنظیم Rust Foundation کے زیر اہتمام تیار کیا گیا ہے، شائع کیا گیا ہے۔ زبان میموری کی حفاظت پر توجہ مرکوز کرتی ہے اور کوڑا اٹھانے والے اور رن ٹائم کے استعمال سے گریز کرتے ہوئے اعلی ملازمت کے متوازی کو حاصل کرنے کے ذرائع فراہم کرتی ہے (رن ٹائم کو معیاری لائبریری کی بنیادی شروعات اور دیکھ بھال تک کم کیا جاتا ہے)۔

زنگ کے میموری ہینڈلنگ کے طریقے ڈویلپر کو پوائنٹرز میں ہیرا پھیری کرتے وقت غلطیوں سے بچاتے ہیں اور نچلے درجے کی میموری ہینڈلنگ کی وجہ سے پیدا ہونے والے مسائل سے بچاتے ہیں، جیسے کہ میموری کے علاقے کو آزاد ہونے کے بعد اس تک رسائی حاصل کرنا، null pointers کا حوالہ دینا، بفر اووررن وغیرہ۔ لائبریریوں کو تقسیم کرنے، تعمیرات فراہم کرنے اور انحصار کا انتظام کرنے کے لیے، پروجیکٹ کارگو پیکیج مینیجر کو تیار کرتا ہے۔ کتب خانوں کی میزبانی کے لیے crates.io ریپوزٹری معاون ہے۔

Reference چیکنگ، آبجیکٹ کی ملکیت پر نظر رکھنے، آبجیکٹ کے لائف ٹائم (اسکوپس) کا ٹریک رکھنے اور کوڈ پر عمل درآمد کے دوران میموری تک رسائی کی درستگی کا اندازہ لگانے کے ذریعے رسٹ میں میموری کی حفاظت فراہم کی جاتی ہے۔ زنگ انٹیجر اوور فلو کے خلاف بھی تحفظ فراہم کرتا ہے، استعمال سے پہلے متغیر اقدار کی لازمی ابتداء کی ضرورت ہوتی ہے، معیاری لائبریری میں غلطیوں کو بہتر طریقے سے ہینڈل کرتا ہے، غیر متغیر حوالہ جات اور متغیرات کے تصور کو بطور ڈیفالٹ لاگو کرتا ہے، منطقی غلطیوں کو کم کرنے کے لیے مضبوط جامد ٹائپنگ پیش کرتا ہے۔

اہم اختراعات:

  • نجی خصلتوں میں "async fn" اور "-> impl Trait" اشارے استعمال کرنے کی صلاحیت شامل کی گئی۔ مثال کے طور پر، "->impl Trait" کا استعمال کرتے ہوئے آپ ایک خاصیت کا طریقہ لکھ سکتے ہیں جو ایک تکرار کرنے والا واپس کرتا ہے: trait Container { fn آئٹمز(&self) -> impl Iterator; } امپل کنٹینر برائے MyContainer { fn آئٹمز(&self) -> impl Iterator { self.items.iter().cloned() } }

    آپ "async fn" کا استعمال کرتے ہوئے خصلتیں بھی بنا سکتے ہیں: خاصیت HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // کو بڑھایا جائے گا: // fn fetch(&self, url: Url) -> impl Future; }

  • پوائنٹرز کی نسبت بائٹ آفسیٹس کا حساب لگانے کے لیے API کو شامل کیا گیا۔ ننگے پوائنٹرز ("*const T" اور "*mut T") کے ساتھ کام کرتے وقت، پوائنٹر میں آفسیٹ شامل کرنے کے لیے آپریشنز کی ضرورت پڑ سکتی ہے۔ پہلے، اس کے لیے "::add(1)" جیسی تعمیر کا استعمال کرنا ممکن تھا، جس میں "size_of::()" کے سائز کے مطابق بائٹس کی تعداد شامل کی جاتی تھی۔ نیا API اس آپریشن کو آسان بناتا ہے اور پہلے قسموں کو "*const u8" یا "*mut u8" پر ڈالے بغیر بائٹ آفسیٹس میں ہیرا پھیری کرنا ممکن بناتا ہے۔
    • پوائنٹر::byte_add
    • پوائنٹر::بائٹ_آفسیٹ
    • پوائنٹر::byte_offset_from
    • پوائنٹر::بائٹ_سب
    • پوائنٹر:: wrapping_byte_add
    • پوائنٹر:: wrapping_byte_offset
    • پوائنٹر:: wrapping_byte_sub
  • rustc کمپائلر کی کارکردگی کو بڑھانے کے لیے مسلسل کام۔ BOLT آپٹیمائزر کو شامل کیا گیا، جو لنک کے بعد کے مرحلے میں چلتا ہے اور پہلے سے تیار کردہ ایگزیکیوشن پروفائل سے معلومات استعمال کرتا ہے۔ BOLT کا استعمال آپ کو librustc_driver.so لائبریری کوڈ کے لے آؤٹ کو تبدیل کر کے کمپائلر کے عمل کو تقریباً 2% تیز کرنے کی اجازت دیتا ہے تاکہ پروسیسر کیش کے زیادہ موثر استعمال کے لیے۔

    LLVM میں اصلاح کے معیار کو بہتر بنانے کے لیے "-Ccodegen-units=1" آپشن کے ساتھ rustc کمپائلر بنانا شامل ہے۔ کئے گئے ٹیسٹ "-Ccodegen-units=1" کی تعمیر کے معاملے میں کارکردگی میں تقریباً 1.5% اضافہ ظاہر کرتے ہیں۔ شامل کردہ اصلاحات صرف x86_64-unknown-linux-gnu پلیٹ فارم کے لیے بطور ڈیفالٹ فعال ہیں۔

    پہلے ذکر کردہ آپٹیمائزیشنز کو گوگل نے Rust میں لکھے ہوئے Android پلیٹ فارم کے اجزاء کے تعمیراتی وقت کو کم کرنے کے لیے جانچا تھا۔ اینڈرائیڈ کی تعمیر کے دوران "-C codegen-units=1" استعمال کرنے سے ہمیں ٹول کٹ کا سائز 5.5% کم کرنے اور اس کی کارکردگی میں 1.8% اضافہ کرنے کی اجازت ملی، جب کہ ٹول کٹ کی تعمیر کا وقت تقریباً دوگنا ہو گیا۔

    لنک ٹائم کوڑا کرکٹ جمع کرنے ("--gc-sections") کو فعال کرنے سے کارکردگی میں 1.9% تک اضافہ ہوا، لنک ٹائم آپٹیمائزیشن (LTO) کو 7.7% تک، اور پروفائل پر مبنی آپٹیمائزیشن (PGO) کو 19.8% تک۔ فائنل میں، BOLT یوٹیلیٹی کا استعمال کرتے ہوئے اصلاح کا اطلاق کیا گیا، جس سے تعمیر کی رفتار کو 24.7% تک بڑھانا ممکن ہوا، لیکن ٹول کٹ کے سائز میں 10.9% اضافہ ہوا۔

    پروگرامنگ لینگویج Rust 1.75 اور unikernel Hermit 0.6.7 کی ریلیز

  • API کے ایک نئے حصے کو مستحکم کے زمرے میں منتقل کر دیا گیا ہے، بشمول خصوصیات کے طریقوں اور نفاذ کو مستحکم کیا گیا ہے:
    • ایٹمی*::from_ptr
    • فائل ٹائمز
    • فائل ٹائمز ایکسٹ
    • فائل::set_modified
    • فائل::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • اختیار:: as_slice
    • اختیار:: as_mut_slice
    • پوائنٹر::byte_add
    • پوائنٹر::بائٹ_آفسیٹ
    • پوائنٹر::byte_offset_from
    • پوائنٹر::بائٹ_سب
    • پوائنٹر:: wrapping_byte_add
    • پوائنٹر:: wrapping_byte_offset
    • پوائنٹر:: wrapping_byte_sub
  • "const" وصف، جو مستقل کی بجائے اسے کسی بھی سیاق و سباق میں استعمال کرنے کے امکان کا تعین کرتا ہے، افعال میں استعمال ہوتا ہے:
    • Ipv6Addr::to_ipv4_mapped
    • ہو سکتا ہےUninit::assume_init_read
    • ہو سکتا ہے یونیٹ::صفر
    • mem:: امتیازی
    • mem::zeroed
  • سپورٹ کی تیسری سطح csky-unknown-linux-gnuabiv2hf، i586-unknown-netbsd اور mipsel-unknown-netbsd پلیٹ فارمز کے لیے نافذ کی گئی ہے۔ تیسرے درجے میں بنیادی مدد شامل ہے، لیکن خودکار جانچ کے بغیر، آفیشل بلڈ کو شائع کرنا، یا یہ چیک کرنا کہ آیا کوڈ بنایا جا سکتا ہے۔

مزید برآں، ہم ہرمیٹ پراجیکٹ کے ایک نئے ورژن کو نوٹ کر سکتے ہیں، جو ایک خصوصی کرنل (unikernel) تیار کرتا ہے، جو زنگ کی زبان میں لکھا جاتا ہے، خود ساختہ ایپلی کیشنز بنانے کے لیے ٹولز فراہم کرتا ہے جو اضافی تہوں کے بغیر ہائپر وائزر یا ننگے ہارڈ ویئر کے اوپر چل سکتا ہے۔ اور آپریٹنگ سسٹم کے بغیر۔ جب بنایا جاتا ہے تو، ایپلیکیشن کو ایک لائبریری سے مستحکم طور پر منسلک کیا جاتا ہے، جو OS کرنل اور سسٹم لائبریریوں سے منسلک کیے بغیر، تمام ضروری فعالیت کو آزادانہ طور پر نافذ کرتی ہے۔ پروجیکٹ کوڈ اپاچی 2.0 اور MIT لائسنس کے تحت تقسیم کیا جاتا ہے۔ اسمبلی کو Rust، Go، Fortran، C اور C++ میں لکھی گئی ایپلی کیشنز کے اکیلے عمل درآمد کے لیے تعاون حاصل ہے۔ پروجیکٹ اپنا بوٹ لوڈر بھی تیار کر رہا ہے جو آپ کو QEMU اور KVM کا استعمال کرتے ہوئے Hermit لانچ کرنے کی اجازت دیتا ہے۔

ماخذ: opennet.ru

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