അസംബ്ലി ഇൻസെർട്ടുകൾക്കുള്ള പിന്തുണയോടെ റസ്റ്റ് 1.59 പ്രോഗ്രാമിംഗ് ഭാഷയുടെ റിലീസ്

മോസില്ല പ്രോജക്റ്റ് സ്ഥാപിച്ചതും എന്നാൽ ഇപ്പോൾ സ്വതന്ത്ര ലാഭേച്ഛയില്ലാത്ത സംഘടനയായ റസ്റ്റ് ഫൗണ്ടേഷന്റെ കീഴിൽ വികസിപ്പിച്ചതുമായ റസ്റ്റ് 1.59 പൊതു-ഉദ്ദേശ്യ പ്രോഗ്രാമിംഗ് ഭാഷയുടെ പ്രകാശനം പ്രസിദ്ധീകരിച്ചു. ഭാഷ മെമ്മറി സുരക്ഷയിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുകയും ഗാർബേജ് കളക്ടറിന്റെയും റൺടൈമിന്റെയും ഉപയോഗം ഒഴിവാക്കിക്കൊണ്ട് ഉയർന്ന ജോലി സമാന്തരത കൈവരിക്കുന്നതിനുള്ള മാർഗങ്ങൾ നൽകുകയും ചെയ്യുന്നു (റൺടൈം അടിസ്ഥാന ലൈബ്രറിയുടെ അടിസ്ഥാന സമാരംഭവും പരിപാലനവും ആയി ചുരുക്കിയിരിക്കുന്നു).

റസ്റ്റിന്റെ മെമ്മറി ഹാൻഡ്‌ലിംഗ് രീതികൾ പോയിന്ററുകൾ കൈകാര്യം ചെയ്യുമ്പോഴുള്ള പിശകുകളിൽ നിന്ന് ഡെവലപ്പറെ രക്ഷിക്കുകയും ലോ-ലെവൽ മെമ്മറി ഹാൻഡ്‌ലിംഗ് കാരണം ഉണ്ടാകുന്ന പ്രശ്‌നങ്ങളിൽ നിന്ന് സംരക്ഷിക്കുകയും ചെയ്യുന്നു, അതായത് മെമ്മറി ഏരിയ സ്വതന്ത്രമാക്കിയതിന് ശേഷം ആക്‌സസ് ചെയ്യുക, നൾ പോയിന്ററുകൾ ഒഴിവാക്കുക, ബഫർ ഓവർറൺ മുതലായവ. ലൈബ്രറികൾ വിതരണം ചെയ്യുന്നതിനും ബിൽഡുകൾ നൽകുന്നതിനും ഡിപൻഡൻസികൾ കൈകാര്യം ചെയ്യുന്നതിനും, പ്രോജക്റ്റ് കാർഗോ പാക്കേജ് മാനേജർ വികസിപ്പിക്കുന്നു. ലൈബ്രറികൾ ഹോസ്റ്റുചെയ്യുന്നതിന് crates.io റിപ്പോസിറ്ററി പിന്തുണയ്ക്കുന്നു.

റഫറൻസ് പരിശോധന, ഒബ്‌ജക്റ്റ് ഉടമസ്ഥതയുടെ ട്രാക്ക് സൂക്ഷിക്കൽ, ഒബ്‌ജക്റ്റ് ലൈഫ് ടൈം (സ്കോപ്പുകൾ) ട്രാക്ക് ചെയ്യൽ, കോഡ് എക്‌സിക്യൂഷൻ സമയത്ത് മെമ്മറി ആക്‌സസിന്റെ കൃത്യത വിലയിരുത്തൽ എന്നിവയിലൂടെ കംപൈൽ സമയത്ത് റസ്റ്റിൽ മെമ്മറി സുരക്ഷ നൽകുന്നു. റസ്റ്റ് പൂർണ്ണസംഖ്യ ഓവർഫ്ലോയ്‌ക്കെതിരെ സംരക്ഷണം നൽകുന്നു, ഉപയോഗിക്കുന്നതിന് മുമ്പ് വേരിയബിൾ മൂല്യങ്ങൾ നിർബന്ധമായും ആരംഭിക്കേണ്ടതുണ്ട്, സ്റ്റാൻഡേർഡ് ലൈബ്രറിയിൽ പിശകുകൾ നന്നായി കൈകാര്യം ചെയ്യുന്നു, സ്ഥിരസ്ഥിതിയായി മാറ്റമില്ലാത്ത റഫറൻസുകളുടെയും വേരിയബിളുകളുടെയും ആശയം പ്രയോഗിക്കുന്നു, ലോജിക്കൽ പിശകുകൾ കുറയ്ക്കുന്നതിന് ശക്തമായ സ്റ്റാറ്റിക് ടൈപ്പിംഗ് വാഗ്ദാനം ചെയ്യുന്നു.

പ്രധാന കണ്ടുപിടുത്തങ്ങൾ:

  • കുറഞ്ഞ തലത്തിൽ നിർവ്വഹണം നിയന്ത്രിക്കേണ്ട അല്ലെങ്കിൽ പ്രത്യേക മെഷീൻ നിർദ്ദേശങ്ങൾ ഉപയോഗിക്കാൻ കഴിയുന്ന ആപ്ലിക്കേഷനുകളിൽ ആവശ്യക്കാരുള്ള അസംബ്ലി ഭാഷ ഉൾപ്പെടുത്തലുകൾ ഉപയോഗിക്കാൻ കഴിയും. മാക്രോസ് "asm!" ഉപയോഗിച്ച് അസംബ്ലി ഉൾപ്പെടുത്തലുകൾ ചേർക്കുന്നു കൂടാതെ "global_asm!" റസ്റ്റിലെ സ്ട്രിംഗ് മാറ്റിസ്ഥാപിക്കുന്നതിന് ഉപയോഗിക്കുന്നതുപോലെ രജിസ്റ്ററുകൾക്ക് പേരിടുന്നതിന് സ്ട്രിംഗ് ഫോർമാറ്റിംഗ് സിന്റാക്സ് ഉപയോഗിക്കുന്നു. x86, x86-64, ARM, AArch64, RISC-V ആർക്കിടെക്ചറുകൾക്കുള്ള അസംബ്ലി നിർദ്ദേശങ്ങൾ കംപൈലർ പിന്തുണയ്ക്കുന്നു. ഉൾപ്പെടുത്തൽ ഉദാഹരണം: ഉപയോഗിക്കുക std::arch::asm; // ഷിഫ്റ്റുകൾ ഉപയോഗിച്ച് x-നെ 6 കൊണ്ട് ഗുണിക്കുക, കൂടാതെ ചേർക്കുന്നു mut x: u64 = 4; സുരക്ഷിതമല്ല { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "ചേർക്കുക {x}, {tmp}", x = inout(reg ) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
  • വിഘടിപ്പിച്ച (സമാന്തര) അസൈൻമെന്റുകൾക്കുള്ള പിന്തുണ ചേർത്തു, അതിൽ പദപ്രയോഗത്തിന്റെ ഇടതുവശത്ത് നിരവധി സ്വഭാവസവിശേഷതകൾ, സ്ലൈസുകൾ അല്ലെങ്കിൽ ഘടനകൾ വ്യക്തമാക്കിയിട്ടുണ്ട്. ഉദാഹരണത്തിന്: അനുവദിക്കുക (a, b, c, d, e); (എ, ബി) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; സ്ട്രക്റ്റ് {ഇ, ..} = സ്ട്രക്റ്റ് {ഇ: 5, എഫ്: 3}; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • കോൺസ്റ്റ് ജനറിക്‌സിനായി സ്ഥിരസ്ഥിതി മൂല്യങ്ങൾ വ്യക്തമാക്കാനുള്ള കഴിവ് നൽകിയിട്ടുണ്ട്: struct ArrayStorage {arr: [ടി; N], } impl അറേ സ്റ്റോറേജ് {fn new(a: T, b: T) -> ArrayStorage { ArrayStorage {arr: [a, b], } } }
  • കംപൈലറിലെ പിശകുകൾ കാരണം പ്രോസസ്സ് ചെയ്യുന്ന ഡിപൻഡൻസികളിലെ അസാധുവായ ഘടനകളുടെ ഉപയോഗത്തെക്കുറിച്ചുള്ള മുന്നറിയിപ്പുകൾ കാർഗോ പാക്കേജ് മാനേജർ നൽകുന്നു (ഉദാഹരണത്തിന്, ഒരു പിശക് കാരണം, പാക്ക് ചെയ്ത ഘടനകളുടെ ഫീൽഡുകൾ സുരക്ഷിത ബ്ലോക്കുകളിൽ കടമെടുക്കാൻ അനുവദിച്ചു). Rust-ന്റെ ഭാവി പതിപ്പിൽ അത്തരം നിർമ്മാണങ്ങളെ ഇനി പിന്തുണയ്‌ക്കില്ല.
  • ഒരു പ്രത്യേക യൂട്ടിലിറ്റിയെ വിളിക്കേണ്ട ആവശ്യമില്ലാതെ, ഡീബഗ്ഗിംഗ് ഡാറ്റയും (സ്ട്രിപ്പ് = "ഡീബഗിൻഫോ") ചിഹ്നങ്ങളും (സ്ട്രിപ്പ് = "ചിഹ്നങ്ങൾ") നീക്കം ചെയ്ത എക്സിക്യൂട്ടബിൾ ഫയലുകൾ സൃഷ്ടിക്കുന്നതിനുള്ള ബിൽറ്റ്-ഇൻ കഴിവ് കാർഗോയ്ക്കും റസ്റ്റ്‌സിക്കും ഉണ്ട്. Cargo.toml ലെ "സ്ട്രിപ്പ്" പാരാമീറ്ററിലൂടെ ക്ലീനിംഗ് ക്രമീകരണം നടപ്പിലാക്കുന്നു: [profile.release] സ്ട്രിപ്പ് = "debuginfo", "ചിഹ്നങ്ങൾ"
  • ഇൻക്രിമെന്റൽ കംപൈലേഷൻ ഡിഫോൾട്ടായി പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു. കംപൈലറിലെ ഒരു ബഗിനുള്ള താത്കാലിക പരിഹാരമാണ് കാരണമായി പറയപ്പെടുന്നത്, ഇത് ക്രാഷുകളിലേക്കും ഡീസിയലൈസേഷൻ പിശകുകളിലേക്കും നയിക്കുന്നു. ഒരു ബഗ് പരിഹരിക്കൽ ഇതിനകം തയ്യാറാക്കിയിട്ടുണ്ട്, അടുത്ത പതിപ്പിൽ ഉൾപ്പെടുത്തും. ഇൻക്രിമെന്റൽ കംപൈലേഷൻ നൽകുന്നതിന്, നിങ്ങൾക്ക് പരിസ്ഥിതി വേരിയബിൾ RUSTC_FORCE_INCREMENTAL=1 ഉപയോഗിക്കാം.
  • API-യുടെ ഒരു പുതിയ ഭാഗം സ്ഥിരതയുള്ള വിഭാഗത്തിലേക്ക് നീക്കി, സ്വഭാവസവിശേഷതകളുടെ രീതികളും നടപ്പിലാക്കലുകളും സുസ്ഥിരമാക്കിയിരിക്കുന്നു:
    • std::thread::available_parallelism
    • ഫലം:: പകർത്തി
    • ഫലം::ക്ലോൺ ചെയ്തു
    • കമാനം::asm!
    • കമാനം::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • u8-ന് വേണ്ടി ശ്രമിക്കുക
    • char::TryFromCharError (ക്ലോൺ, ഡീബഗ്, ഡിസ്പ്ലേ, PartialEq, കോപ്പി, Eq, പിശക്)
    • iter::zip
    • NonZeroU8:: is_power_of_to
    • NonZeroU16:: is_power_of_to
    • NonZeroU32:: is_power_of_to
    • NonZeroU64:: is_power_of_to
    • NonZeroU128:: is_power_of_to
    • ToLowercase ഘടനയ്ക്കുള്ള DoubleEndedIterator
    • Touppercase ഘടനയ്ക്കുള്ള DoubleEndedIterator
    • ട്രൈഫ്രം<&mut [T]> എന്നതിന് [T; N]
    • വൺസ് സ്ട്രക്ചറിനായി UnwindSafe
    • ഒരിക്കൽ RefUnwindSafe
    • armv8 നിയോൺ സപ്പോർട്ട് ഫംഗ്ഷനുകൾ aarch64-നുള്ള കമ്പൈലറിൽ നിർമ്മിച്ചിരിക്കുന്നു
  • കോൺസ്റ്റന്റുകൾക്ക് പകരം ഏത് സന്ദർഭത്തിലും ഉപയോഗിക്കാനുള്ള സാധ്യത നിർണ്ണയിക്കുന്ന "const" ആട്രിബ്യൂട്ട് ഫംഗ്ഷനുകളിൽ ഉപയോഗിക്കുന്നു:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MaybeUninit::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

അവലംബം: opennet.ru

ഒരു അഭിപ്രായം ചേർക്കുക