مورچا 1.78 جاری ہوا۔ بورگو زبان جو Go اور Rust کی طاقتوں کو یکجا کرتی ہے۔

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

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

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

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

  • ایک نیا انتساب نام کی جگہ "#[تشخیصی]" تجویز کیا گیا ہے، جو کمپائلر کے ذریعہ تیار کردہ غلطی کے پیغامات کو متاثر کرنے کا ذریعہ فراہم کرتا ہے۔ نئی جگہ میں پہلا "#[diagnostic::on_unimplemented]" وصف ہے، جس کا استعمال ایسی صورت حال میں پھینکے گئے غلطی کے پیغامات کو اپنی مرضی کے مطابق کرنے کے لیے کیا جا سکتا ہے جہاں آپ کو ایک خاصیت استعمال کرنے کی ضرورت ہے جو اس قسم کے لیے لاگو نہ ہو۔ #[diagnostic::on_unimplemented( پیغام = "My Message for `ImportantTrait<{A}>` کو `{Self}` کے لیے لاگو نہیں کیا گیا ہے"، label = "میرا لیبل"، نوٹ = "نوٹ 1"، نوٹ = "نوٹ 2" )] خاصیت ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } error[E32]: `Important Trait کے لیے میرا پیغام `` String` --> src/main.rs:0277:32 | کے لئے لاگو نہیں کیا گیا ہے۔ 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ میرا لیبل | | | اس کال | = مدد: خاصیت `اہم خصوصیت `` String` = نوٹ: نوٹ 18 = نوٹ: نوٹ 12 کے لیے ` لاگو نہیں کیا گیا ہے۔
  • غیر محفوظ فنکشنز پر لاگو پری اسسٹ چیکس کو اب کوڈ جنریشن تک موخر کیا جا سکتا ہے، جس سے ان چیکس کو "#[cfg(debug_asssertions)]" موڈ میں معیاری لائبریری بنانے کی ضرورت کے بغیر انجام دیا جا سکتا ہے۔ چیک کو ٹرگر کرنے کے لیے، اب آپ کے کوڈ کی جانچ یا ڈیبگ بلڈس کے لیے ڈیبگ اسسرٹس کو فعال کرنا کافی ہے۔
  • معیاری لائبریری میں فنکشنز کا برتاؤ جو پوائنٹرز اور سلائسز کی سیدھ کو متاثر کرتا ہے اب رن ٹائم کے وقت قابل قیاس ہے اور ان پٹ ڈیٹا پر منحصر ہے۔ فنکشن پوائنٹر::align_offset، جو پوائنٹر کو سیدھ میں لانے کے لیے آفسیٹ کا حساب لگاتا ہے، اب usize::MAX صرف اس صورت میں لوٹاتا ہے جب آپریشن ناکام ہو جائے۔ فنکشنز سلائس::align_to اور slice::align_to_mut دونوں، جو سلائسز کو ایک منسلک درمیانی سلائس اور اصل آغاز اور اختتامی سلائس کے ساتھ نمائندگی میں تبدیل کرتے ہیں، اب ہمیشہ سب سے بڑا درمیانی حصہ واپس کرتے ہیں۔
  • درج ذیل کو مستحکم زمرہ میں منتقل کیا گیا:
    • impl &Stdin کے لیے پڑھیں
    • کچھ std::error::Error سے متعلق نفاذ کے لیے غیر جامد (غیر جامد) زندگی بھر کے استعمال کی اجازت دیں۔
    • عمل درآمد ?سائز ویلیو کی اجازت ہے۔
    • سے impl io::Error کے لیے
  • Barrier::new() فنکشن کو مستحکم کیا گیا ہے تاکہ مستقل کی بجائے کسی بھی سیاق و سباق میں "const" وصف کے ساتھ استعمال کیا جا سکے۔
  • ہدف والے پلیٹ فارمز کے لیے x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm اور i686-pc-windows-gnullvm اور i10-pc-windows-gnu اب کم از کم ونڈوز XNUMX ورژن کی ضرورت ہے۔
  • حمایت کی تیسری سطح wasm32-wasip2، arm64ec-pc-windows-msvc، armv8r-none-eabihf اور loongarch64-unknown-linux-musl پلیٹ فارمز کے لیے نافذ کی گئی ہے۔ تیسرے درجے میں بنیادی مدد شامل ہوتی ہے، لیکن خودکار جانچ کے بغیر، سرکاری عمارتوں کو شائع کرنا، یا یہ جانچنا کہ آیا کوڈ بنایا جا سکتا ہے۔
  • ٹارگٹ پلیٹ فارم Add wasm32-wasip1 کے لیے سپورٹ کی دوسری سطح کو لاگو کر دیا گیا ہے۔ سپورٹ کے دوسرے درجے میں اسمبلی کی گارنٹی شامل ہے۔
  • پلیٹ فارم wasm32-wasi-preview1-threads کا نام بدل کر wasm32-wasip1-threads رکھ دیا گیا ہے۔
  • کمپائلر کو LLVM 18 استعمال کرنے کے لیے تبدیل کر دیا گیا ہے۔ x18-86 اور x32-86 فن تعمیر کے لیے LLVM 64 استعمال کرتے وقت، u128 اور i128 اقسام سے وابستہ ABI کو تبدیل کر دیا گیا ہے۔
  • کارگو پیکٹ مینیجر میں، لاک فائلوں کے ورژن 4 (لاک فائل v4) کو مستحکم کر دیا گیا ہے۔
  • کارگو کے پاس تازہ ترین ڈیٹا کے استعمال کے بارے میں معلومات کے ساتھ ایک مستحکم عالمی کیش ہے۔ کیشے کو SQLite کا استعمال کرتے ہوئے $CARGO_HOME/.global-cache میں ہوسٹ کیا جاتا ہے اور انڈیکس، کریٹ فائل، کوڈ ڈائرکٹری، گٹ کلون، اور گٹ چیک آؤٹ میں تازہ ترین تبدیلیوں کی عکاسی کرنے کے لیے اسے خود بخود اپ ڈیٹ کیا جاتا ہے۔

مزید برآں، بورگو پروگرامنگ زبان گو زبان سے زیادہ اظہار خیال کرنے کی کوشش کرتی ہے، لیکن رسٹ زبان سے کم پیچیدہ۔ بورگو ہر زبان کی خامیوں کو پورا کرتے ہوئے Go اور Rust کی بہترین خصوصیات کو یکجا کرتا ہے۔ مثال کے طور پر، Go سادہ اور سیدھا ہے، لیکن اعلی درجے کی حفاظتی خصوصیات فراہم نہیں کرتا ہے۔ رسٹ لینگویج محفوظ پروگرامنگ کے لیے ٹولز مہیا کرتی ہے، لیکن زیادہ پیچیدہ ہے۔ اس پروجیکٹ کو دی سادہ ہاسکل ہینڈ بک کے مصنف اور کواڈ سی آئی مسلسل انضمام کے نظام کے ڈویلپر مارکو سیمپلیگرینی نے تیار کیا ہے۔

مورچا 1.78 جاری ہوا۔ بورگو زبان جو Go اور Rust کی طاقتوں کو یکجا کرتی ہے۔

بورگو جامد ٹائپنگ، گو جیسی اقسام، اور زنگ نما نحو استعمال کرتا ہے۔ بورگو کوڈ میں لائنوں کے آخر میں سیمیکولنز اختیاری ہیں۔ بورگو کوڈ کو گو کی نمائندگی میں مرتب کیا گیا ہے جو موجودہ گو پیکجز کے ساتھ پوری طرح مطابقت رکھتا ہے۔ کمپائلر کوڈ Rust میں لکھا جاتا ہے اور ISC لائسنس کے تحت تقسیم کیا جاتا ہے۔ fmt enum NetworkState استعمال کریں۔ { لوڈنگ، ناکام(int)، Success(T)، } struct Response { title: string, duration: int, } fn main() { let res = Response { title: "Hello world", duration: 0, } let state = NetworkState.Success(res) msg ​​= match state { NetworkState.Loading => "ابھی لوڈ ہو رہا ہے"، NetworkState.Failed(code) => fmt.Sprintf("گٹ ایرر کوڈ: %d"، کوڈ)، NetworkState.Success (res) => res.title, } fmt.Println(msg) }

ماخذ: opennet.ru

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