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

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

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

ዋና ፈጠራዎች:

  • የተጨመረው የቧንቧ መስመር ማጠናቀር ሁነታ (በቧንቧ የተዘረጋ)፣ በዚህ ውስጥ የጥገኛ ክሬት እሽግ መገንባት የሚጀምረው የጥገኛ ሜታዳታ እንደተገኘ ጥምርነቱ እስኪጠናቀቅ ድረስ ነው። አንድ ጥቅል በሚዘጋጅበት ጊዜ ጥገኞቹ ሙሉ በሙሉ መሰብሰብ አያስፈልጋቸውም, ሜታዳታውን ብቻ ይግለጹ, ይህም የዓይነቶችን, ጥገኞችን እና ወደ ውጭ የሚላኩ ንጥረ ነገሮችን ያካትታል. ዲበ ውሂብ በማጠናቀር ሂደት መጀመሪያ ላይ ይገኛል፣ ስለዚህ የተገናኙ ጥቅሎች አሁን በጣም ቀደም ብለው ሊጠናከሩ ይችላሉ። ነጠላ ፓኬጆችን በሚገነቡበት ጊዜ, የታቀደው ሁነታ በአፈፃፀም ላይ ተጽዕኖ አይኖረውም, ነገር ግን ግንባታው ከቅርንጫፍ ጥገኝነቶች ጋር እሽጎችን የሚሸፍን ከሆነ, አጠቃላይ የግንባታ ጊዜ በ 10-20% ሊቀንስ ይችላል;
  • የተግባሮችን ትክክለኛ አጠቃቀም መለየት ያረጋግጣል std :: mem :: unitialized и std :: mem :: ዜሮ. ለምሳሌ, std :: mem :: uniitialized በፍጥነት አደራደሮችን ለመፍጠር አመቺ ነው, ነገር ግን የመነሻ መስሎ ስለሚታይ ማቀናበሪያውን ያሳሳታል, ነገር ግን በእውነቱ እሴቱ ገና ሳይታወቅ ይቀራል. mem:: ያልታወቀ ተግባር አስቀድሞ እንደ ተቋረጠ ምልክት ተደርጎበታል እና በምትኩ መካከለኛ ዓይነት እንዲጠቀሙ ይመከራል። ምናልባት ዩኒት. እንደ mem :: zeroed, ይህ ተግባር ዜሮ እሴቶችን መቀበል በማይችሉ ዓይነቶች ላይ ችግር ይፈጥራል.

    ያልተገለጸ ባህሪን ለመለየት እንዲረዳ አዲሱ ልቀት በሜም :: unitialized ወይም mem :: ዜሮ የተደረገ አንዳንድ ችግሮችን የሚያውቅ በአቀናባሪው ላይ የሊንት ቼክ ይጨምራል። ለምሳሌ፣ ሜም::የማይታወቅ ወይም mem::ዜሮ በዓይነት &T እና ቦክስ‹T› ለመጠቀም ስትሞክር አሁን ስህተት ያጋጥምሃል እነዚህም ባዶ እሴቶችን መቀበል የማይችሉ ጠቋሚ ነገሮችን ይወክላሉ።

  • የ"#[የተቋረጠ]" አይነታ ተዘርግቷል የሳጥን ፓኬጆች ጊዜ ያለፈባቸው ተብለው እና ለወደፊቱ እንዲሰረዙ መርሐግብር ተይዞላቸዋል። እንደ ዝገት 1.38, ይህ አይነታ ለማክሮዎች ጥቅም ላይ ሊውል ይችላል;
  • በንዑስ ሞጁሎች ውስጥ የ"#[global_allocator]" ባህሪን የመጠቀም ችሎታ ታክሏል;
  • የተጨመረ ባህሪ std:: ማንኛውም:: አይነት_ስም::, ይህም የዓይነቱን ስም ለማወቅ ያስችልዎታል, ይህም ለማረም ዓላማዎች ጠቃሚ ሊሆን ይችላል. ለምሳሌ ፣ በፕሮግራሙ አፈፃፀም ወቅት ተግባሩ ምን ዓይነት ተብሎ እንደሚጠራ ማወቅ ይችላሉ-

    fn gen_value‹T፡ ነባሪ>() -› ቲ {
    println!("የ{}ን ምሳሌ በማስጀመር ላይ"፣ std:: ማንኛውም:: አይነት_ስም:: ‹T›());
    ነባሪ:: ነባሪ()
    }

    fn ዋና() {
    ፍቀድ _: i32 = gen_value (); # "i32" ይታተማል
    ይሁን _: ሕብረቁምፊ = gen_value (); # "alloc::string::string" ያትማል
    }

  • የመደበኛ ቤተ-መጽሐፍት የተራዘሙ ተግባራት፡-
    • ቁራጭ::{concat, connect, join} አሁን እሴቱን መውሰድ ይችላል &[T] ከ &T;
    • "* const T" እና "*mut T" አሁን ምልክት ማድረጊያን ተግባራዊ ያድርጉ:: ይንቀሉ;
    • «አርክ‹[T]›» እና «Rc‹[T]›» አሁን FromIterator‹T›ን ይተግብሩ።
    • iter::{StepBy, Peekable, Take} አሁን DoubleEndedIteratorን ይተግብሩ።
    • አስኪ :: EscapeDefault Clone እና Displayን ይተገብራል።
  • የተረጋጉ ዘዴዎችን ጨምሮ አዲስ የኤፒአይ ክፍል ወደ የተረጋጋ ምድብ ተላልፏል
    • ‹*const T›:: cast፣ ‹*mut T›:: cast፣
    • የሚፈጀው ጊዜ::እንደ_ሰከንድ{32|64}፣
    • የሚፈጀው ጊዜ::div_duration_f{32|64}፣
    • የሚፈጀው ጊዜ::div_f{32|64},
    • የሚፈጀው ጊዜ::ከሴኮንድ_ረ{32|64}፣
    • የሚፈጀው ጊዜ::mul_f{32|64},
    • የመከፋፈል ስራዎች ከቀሪው ጋር
      div_euclid እና rem_euclid ለሁሉም ኢንቲጀር ፕሪሚቲቭ;

  • በጭነት ጥቅል አቀናባሪ ውስጥ የተለያዩ ባህሪያትን ለማንቃት የ"- ባህሪያት" አማራጭን ብዙ ጊዜ ለመጥቀስ ተጨማሪ ድጋፍ;
  • አቀናባሪው ሶስተኛውን ያቀርባል ደረጃ ለዒላማ መድረኮች ድጋፍ aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msuxvc ዒላማዎች፣ armv7-ያልታወቀ-ሊን -gnueabi፣ armv7-ያልታወቀ-ሊኑክስ-ሙስሌቢ፣ ሄክሳጎን-ያልታወቀ-ሊኑክስ-ሙስል እና riscv32i-ያልታወቀ-የለም-elf። ሶስተኛው ደረጃ መሰረታዊ ድጋፍን ያካትታል ነገር ግን ያለ አውቶማቲክ ሙከራ እና ኦፊሴላዊ ግንባታዎች መታተምን ያካትታል.

ምንጭ: opennet.ru

አስተያየት ያክሉ