ዝገት 1.45 የፕሮግራም አወጣጥ ቋንቋ መለቀቅ

የታተመ የስርዓት ፕሮግራሚንግ ቋንቋ 1.45 መልቀቅ ዝገትበሞዚላ ፕሮጀክት የተመሰረተ። ቋንቋው በማህደረ ትውስታ ደህንነት ላይ ያተኩራል፣ አውቶማቲክ የማህደረ ትውስታ አስተዳደርን ይሰጣል፣ እና ቆሻሻ ሰብሳቢ ሳይጠቀሙ ከፍተኛ ተግባርን ትይዩ ለማድረግ የሚረዱ መሳሪያዎችን ይሰጣል። አሂድ.

የሩስት አውቶማቲክ ማህደረ ትውስታ አስተዳደር ጠቋሚዎችን በሚጠቀሙበት ጊዜ ስህተቶችን ያስወግዳል እና ከዝቅተኛ ደረጃ ማህደረ ትውስታ ማጭበርበር ከሚመጡ ችግሮች ይጠብቃል ፣ ለምሳሌ ከተለቀቀ በኋላ የማህደረ ትውስታ ክልል መድረስ ፣ ባዶ ጠቋሚዎች ፣ ቋት መጨናነቅ ፣ ወዘተ. ቤተ መፃህፍትን ለማሰራጨት፣ መገጣጠም እና ጥገኞችን በፕሮጀክቱ ለማስተዳደር የፓኬጅ አስተዳዳሪ እየተዘጋጀ ነው። ጭነት, ይህም ለፕሮግራሙ የሚያስፈልጉትን ቤተ-መጻሕፍት በአንድ ጠቅታ እንዲያገኙ ያስችልዎታል. ማከማቻ ቤተ መጻሕፍትን ለማስተናገድ ይደገፋል crates.io.

ዋና ፈጠራዎች:

  • ለረጅም ጊዜ የቆየ ተወግዷል ጉድለት ኢንቲጀር እና ተንሳፋፊ ነጥብ ቁጥሮች መካከል ልወጣዎችን ሲያካሂዱ. የ Rust compiler LLVMን እንደ ደጋፊ ስለሚጠቀም፣ አይነት የመቀየር ስራዎች የተከናወኑት በኤልኤልቪኤም መካከለኛ ኮድ መመሪያዎች በመሳሰሉት ነው። fptoui, አንድ ጉልህ ባህሪ ያለው - የተገኘው እሴት ከዒላማው አይነት ጋር የማይጣጣም ከሆነ ያልተገለጸ ባህሪ. ለምሳሌ የተንሳፋፊውን ዋጋ 300 ከ f32 አይነት ወደ ኢንቲጀር አይነት u8 ሲቀይሩ ውጤቱ ሊተነበይ የማይችል እና በተለያዩ ስርዓቶች ሊለያይ ይችላል። ችግሩ ይህ ባህሪ "አስተማማኝ" ተብሎ ባልተሰየመ ኮድ ውስጥ መታየቱ ነው።

    ከዝገት 1.45 ጀምሮ፣ የአይነት መጠን የትርፍ ፍሰት ባህሪ ጥብቅ ቁጥጥር ይደረግበታል፣ እና “እንደ” የሚለው የልወጣ ክወና የትርፍ ፍሰትን ይፈትሻል እና እሴቱ ወደ ከፍተኛው ወይም ዝቅተኛው የዒላማው አይነት እንዲቀየር ያስገድዳል (ከላይ ላለው ምሳሌ፣ 300 ወደ 255 ይቀየራል). እንደዚህ አይነት ቼኮችን ለማሰናከል፣ ተጨማሪ የኤፒአይ ጥሪዎች «{f64, f32}::ወደ_in unchecked» ቀርበዋል፣ ደህንነቱ ባልተጠበቀ ሁነታ የሚሰሩ።

    fn cast (x: f32) -> u8 {
    x እንደ u8
    }

    fn ዋና() {
    በጣም_ትልቅ = 300.0;
    በጣም_ትንሽ ይሁን = -100.0;
    let nan = f32::NAN;

    ይፍቀዱ x፡ f32 = 1.0;
    ይሁን y: u8 = ደህንነቱ ያልተጠበቀ {x.to_int_unchecked() };

    println!("too_big_casted = {}", cast(too_big)); // ውጤት 255
    println!("too_small_casted = {}", cast (በጣም_ትንሽ)); // ውጤት 0
    println!("not_a_number_casted = {}", cast (nan)); // ውጤት 0
    }

  • ተረጋጋ ተጠቀም የሂደት ማክሮዎችተግባር መሰል መግለጫዎች፣ አብነቶች እና መግለጫዎች። ከዚህ በፊት እንደዚህ ያሉ ማክሮዎች በሁሉም ቦታ ሊጠሩ አይችሉም, ነገር ግን በተወሰኑ የኮዱ ክፍሎች ብቻ (እንደ የተለየ ጥሪ, ከሌላ ኮድ ጋር ያልተጣመረ). ማክሮዎች የሚጠሩበትን መንገድ ማስፋፋት, ከተግባሮች ጋር ተመሳሳይነት ያለው, የድር ማዕቀፉን ለመስራት ከሚያስፈልጉት መስፈርቶች አንዱ ነበር ሮኬት በተረጋጋ የዝገት ልቀቶች ውስጥ። ከዚህ ቀደም በሮኬት ውስጥ ተቆጣጣሪዎችን ለመለየት ተጨማሪ ተለዋዋጭነትን ማግኘት በተረጋጋ የዝገት ስሪቶች ውስጥ የማይገኘውን “proc_macro_hygiene” የተባለ የሙከራ ባህሪን ማንቃት ያስፈልጋል። ይህ ተግባር አሁን በተረጋጋ የቋንቋ ልቀቶች ውስጥ ተገንብቷል።
  • በክልል እሴቶች ላይ ለመድገም የ"ቻር" አይነት ያላቸውን ክልሎች ለመጠቀም ተፈቅዶላቸዋል(ops::{ክልል፣ ክልልFrom፣ RangeFull፣ RangeInclusive፣ RangeTo}):

    ለ ch በ 'a'..='z' {
    ማተም! ("{}", ch);
    }
    println!(); // "abcdefghijklmnopqrstuvwxyz" ያትማል

  • አዲስ የኤፒአይዎች ክፍል የተረጋጋን ጨምሮ ወደ የተረጋጋ ምድብ ተላልፏል
    አርክ :: as_ptr,
    BTreeMap::መግቢያ_አስወግድ፣
    አርሲ:: እንደ_ptr፣
    rc :: ደካማ :: as_ptr,
    rc::ደካማ::ከጥሬው
    rc:: ደካማ:: ወደ_ጥሬው
    str :: ጭረት_ቅድመ ቅጥያ፣
    str :: ጭረት_ቅጥያ
    አመሳስል::ደካማ:: as_ptr,
    አመሳስል::ደካማ::ከጥሬ_ጥሬ፣
    አመሳስል::ደካማ::ወደ_ጥሬው
    ቻር:: UNICODE_VERSION፣
    ስፋት::ተፈታ በ፣
    ስፓን::በዚህ_ይገኛል
    ስፋት::የተደባለቀ_ጣቢያ፣
    unix :: ሂደት ::CommandExt :: arg0.

  • Rustc compiler የተለያዩ የዒላማ መድረክ ባህሪያትን የ"ዒላማ-ባህሪ" ባንዲራ በመጠቀም ለመሻር ድጋፍ አድርጓል፣ ለምሳሌ "-C target-feature=+avx2+fma"። አዲስ ባንዲራዎችም ታክለዋል፡-
    የብልሽት አያያዝ ስልት ምንም ይሁን ምን, የመፍታት ጥሪ ጠረጴዛዎችን ለማፍለቅ "የግዳጅ-የማሳለፍ-ጠረጴዛዎች"; LLVM ቢትኮድ በተፈጠሩ rlibs ውስጥ መካተቱን ለመቆጣጠር "embed-bitcode"። የግንባታ ጊዜ እና የዲስክ ቦታ ፍጆታን ለማመቻቸት የ"embed-bitcode" ባንዲራ በነባሪ በካርጎ ነቅቷል።

  • ለ mipsel-sony-psp እና thumbv7a-uwp-windows-msvc መድረኮች ሶስተኛ ደረጃ ድጋፍ ተሰጥቷል። ሶስተኛው ደረጃ መሰረታዊ ድጋፍን ያካትታል ነገር ግን ያለ አውቶማቲክ ሙከራ እና ኦፊሴላዊ ግንባታዎች መታተምን ያካትታል.

በተጨማሪም, ሊታወቅ ይችላል ታሪኩ ፡፡ በጣም ቀላሉን ስለመፍጠር መተግበሪያዎች በሩስት ቋንቋ የስርዓት ቡት ጫኝን በመጠቀም እና ከስርዓተ ክወናው ይልቅ እራሱን የቻለ ጭነት ዝግጁ ነው።
ጽሑፉ በዝቅተኛ ደረጃ ፕሮግራሚንግ እና በስርዓተ ክወና ልማት ውስጥ ተፈላጊ የሆኑ ቴክኒኮችን ለማሳየት በተዘጋጀ ተከታታይ ውስጥ የመጀመሪያው ነው።

ምንጭ: opennet.ru

አስተያየት ያክሉ