Files
archy/core/target/debug/deps/libonce_cell-db04c746d2c5ae91.rmeta
T

437 lines
132 KiB
Plaintext
Raw Normal View History

2026-01-24 22:59:20 +00:00
rust
Í#rustc 1.93.0 (254b59607 2026-01-19)Áõ…·fÊ ¦%g--c48c539199cbc88bÁ³VOÐêùÿ²?ÑL¼§Ì±-a7a40eb546f9e2b0Áá\ƒ¦è3$|]åŒ[IÚ tæ-14b12edc9f8cd90bÁë&Gf·Ã ¬ëñq:¤»b-bb76018b1173caf6Áà 9m Ù„«ÐÒþá•cB;-030c5b0bba47cc8fÁrustc_std_workspace_coreÁÛ¹þÓ7>H%¸ÚÉ­-4b81d37a5530864dÁüÃùs<Uß7VyóHr#QÏ-c66cc7807550ce25Á miniz_oxideÁõFÖˆÚ™ª‹"ÞXzLVª-62cbc7af83058505Áadler2Á—wÉD‘嵯|6¨%Œ
+-2f171dd2394b4b62Á hashbrownÁ,ïcV¼¨ø¢:Ê\'È߈-9571ba9e0f6c7a90Árustc_std_workspace_allocÁ%¥Èxµù·¼5Ä3Bœ-aac566ad65903fa4Á
std_detectÁMmáýZ^9õ Îà§e˜÷e-2edb296e590136d8Árustc_demangleÁ@¼§VÉNb˜æ¨fHÌ+V3-53b132e4a2fa6e26Ácfg_ifÁfÝv.Å"ÒÜuPp¹ˆ¶-f76b385d7d4d7f3eÁ addr2lineÁÕú-WiúQVÓ¬
µT§5-fe25100bd73e48e4ÁgimliÁ¹xLáÇí÷‘o±Ñ8£Å-265ba9e6e4f70b3fÁobjectÁÔ³ÝzÓÿ¶ò°öM›¼òü`-9ae0d1f8ea52a318ÁmemchrÁRÎ÷׎™te~QÓ¿ØC\Ò-0bff3c8e8f4e489eÁ  –©HtGNÏ·ˆ!á-d69228d077d46f36ÁimpÁ¶b<æacritical-sectionÁ”ðaäæaÅŒc<×b parking_lotÁláb¼×btestsÁ,ÕLà$ÊL¹
 portable-atomicÁŒ÷ Üí áÅ 
  
 
with_valueÁis_initializedÁ
initializeÁ   waitÁ
get_uncheckedÁget_mutÁ
into_innerÁ
INCOMPLETEÁRUNNINGÁCOMPLETEÁINCOMPLETE_PTRÁ COMPLETE_PTRÁ
STATE_MASKÁWaiterÁ.ç.signaledÁ.¥ GuardÁ2'aÁ2queueÁ2 new_queueÁ6²7 initialize_or_waitÁ9 Æ
; ; strictÁ>addrÁ?> with_addrÁA>map_addrÁCCimpl FnOnce(usize) -> usizeÁunsyncÁFFFFFFFFFF F
F FOnceCellÁSSinnerÁFVFXFZZ>F]]ÍF``È`ËFddÕFgFiiïFll lû lgetÁlå
lsetÁl
try_insertÁl get_or_initÁt²
tVoidÁt lget_or_try_initÁx²
xº
ltakeÁló
FLazyÁ}}²
}cellÁ}initÁF ²
F
²
ÍF ²
 
into_valueÁ Ž F ²
forceÁ  force_mutÁ èå
F
²
šFžž²
žF¢¢>Â¥¥¥¥¥¥¥¥¥¥¬¯
¯¯ì¥³³>¥Í¥¹¹È¹Ë¥½½ï¥ÀÀեåÅÅ Åû ÅèÅÆ
Åå
ÅÑ
ÅùŃΠÅв
ЭРżԲ
Ôº
ÅàÅó
¥òÙÙ²
ÙÙ¥ÞÞ²
ÞÍ¥ââ²
¥ åå²
¥
èè²
è èîì í ¥ ïï²
ïžò ï°ô ïèïå
¥ øø²
øšø¥
ýý²
ý¥>¥_dummyÁraceÁ èÑ
 as_const_ptrÁ_ALIGNMENT_COMPATIBLEÁù²
­ ¼²
º
žº
ž(impl FnOnce() -> Result<NonZeroUsize, E>Áç¢ ¢è¢ù¢¦²
¦ ¢¼©²
©º
© ¢û¢to_usizeÁOnceRefÁ¯¡ ¯¯Â¯ghostÁ´¡ ´·¡ ··Í»¡ »»>¿¡ ¿¿ ¿è¿ù¿Å²
Å­Å ¿¼É²
ɺ
¿Ìº
Ì!impl FnOnce() -> Result<&'a T, E>Á¿çÏ ¿Á once_boxÁÓÓÓÓÓÓÓÓOnceBoxÁÛÛÂÛíÓßßÍÓââ>Óåå²Óèè èû èèèùèî²
î­î è¼ò²
òº
èõº
õ"impl FnOnce() -> Result<Box<T>, E>ÁÓøÓúúÈÓÁ¬þþª þ˜ÍOnceNonZeroUsizeÁÂ>ÍOnceBoolÁÂ> Í

$
%
&
6
7
9
9
;
_
_
_
b
c
c
f
f
p
q
r
s
t
x
{
ˆ
ˆ
ˆ



˜

¡
¸
¸
¸
»
¼
¼
Â
Â
É
Ê
Ë
Ì
Í
Î
Ð
Ô
×
á
á
á
ò
ô
ö
÷
ü







ž
¡
¤
¥
¦
©
º
º
º
Ã
Ä
Å
É
Ì
Ï
á
á
á
ç
ì
í
î
ò
õ
ü



Š
Š
Š



à`þþ¬ª ˜¤—ÛsÒ\MûÓ&¨âÓ&À±Ó&¿±Ó& 22 4ª 5 ñ—j…ÒÉ8À±SS¬UÂFPÔMÄB|Š'¿±(Ä‚(à`‚(Þ‚(ž‚(‚(£(ú‚(Š'À±}}òFF-îŽeëï
Š'²
à`ƒ)ìƒ)ùƒ)Ä}}òFF-îŽeëï
Š'Š'ᝰ¬²ì¥ Mj>êŠ'à`®*Þ®*ú®*Š'ž®*®*£®*à`ÙÙòܥݥ Nü3ž#>¶Š'»)¡+À±¡+ì¡+ù¡+ÄÙÙòܥݥ Nü3ž#>¶Š'ž*ÄŽ!Âj߈ÿà`Ö,ÄÇ!ŒÂ8÷ô¡ÃÏ^à`”-¯¯Æ²Â³íeM‡€ò„B¡ à`Ò-ÄÒ-à`ÛÛ°ÝÂÓÞíÓĵJ©S?>Š'IJ. ².².Þ².þ]S…¯ÞÙ·¯ßÛþâÙ´¯øÛþþVS‚ÙþXS6ÛZ¯Ù»¯âÛ`¯úÛd¯g¯i¯ÙžÙà` ’<¨âÀ±¿±  Ä Þ5ž£ ú ì ù
ô°



[..ë /ç0ÿ 1¥ ~ïV«ùˆVYt¿
+ “2w¬×


ø°Š'%
,|×

Î.ø°ú°û°Ðü°ý°þ°ìHˈXêE>Š' ë
üž
P
þŠ' í
ô
üë ‰Ó&\ˆ
çZçZ\éZÓZ{Ð%¶Òý“2£Ç.Ç.
UnsafeCellÁÉ.˜¸+ö)=ê „9Û«3g«3g¢+Ü2äÎ 
&,
3 2 ,Ü2 Yäó   -
ø°Š' U
\ ¥3gx Ž ü¼ U
þŠ'  üú
 3Ó& Š',™ ã4h™5«3Š'c˜2ƒ[,Ü20x0Á·90x1Á·90x2ÁÌë"Të"(·9Ü2üÇ">+Ü2\Ý"$9(·9¼¨#D¨#*·9Ü2ü†#:,Ü2\š#$9*·9·90x3Á¬ƒy$“y
ø°Š'%
,|ƒy¥37H —yüñx)
SŠ' ™y¤yüÁxcn(\×x™5¥«3¤2ä«z\»z,Àz
ø°Š' ÅzC
J|«z¥3Uf Æzü™z0
SŠ' ÈzÓzüÚyyo(\ÿyŠ',òy™5Ì«3ËŠ'ʘ!O|“à '-
4l“Ã
nŠ'Q¬ªÃT´Ã$¹Ã /
ø°») ½ÃY
`LªÃ
ê,ø°ú°û°Ðü°ý°þ°ìHˈXêE>»)µÇ ¾Ãü†Ã;
}Š'») Àà ËÃüÐÂ{ ÊÃŒ5ƒ)Tí»)$á‚(ÉÉ,É,qË,˜¸+»\¡Ø ÊÆ@¨Æ@§»)¦_³T¬ö
D¬ö
Š',¤£ö
¯Š' ¶öÁöÇüóõN®*\‰öÓ& ´¿÷,Ï÷ 
$|¿÷
Š'4F Ô÷ü¶÷
¯Š' Õ÷à÷ü÷öiÈ®*\œ÷Š',÷Ó&µŠ'³˜L|þÍ '-
4lþÍ
ÇŠ'R”•Î<ŸÎ ¤Î /
ø°») ¥ÎY
`L•ÎÀ@k} ¦ÎüñÍ8
ÙŠ'») ¨Î ³Îü¾Íu ²Îë5¡+TØÍ») ÏÍ®*ËB3Æ@2»)1gþ3œÏ
„Ï
¸¸ à·9>üÁ#
 ãêüœNÖ,®¸®¸b¯¸ÓZiVwƒ'¸Lüõ4üõ/Ìõ
¼õ
¢êJ*œ‘
Œ‘
¢·9*eq·9 
 £» ¨·9Ý$ ü»pQøIí=

³UF 
3N°MØp·9o·9n·9Hx޼ì2
“2
'üÞ2'
 „3‹3£ü¹2R”-$Ï2Ö,sü¬E|»E
l»E
¸.*7
>t¬E
[.N_ ÊE\ÔE
Ç.Ç.£4É.˜¸+ö)=ê „9Û ‘.üžEC
¯‘. àEçEÂüùDn¯¯Æ²Â³íeM‡€ò„B.$EçZçZ\éZõ3ÓZ{Ð%¶Òý‘.v ‘.wŠ PhantomDataÁÑ{·Ë…YÚèPMÉü¶c|Åc
lÅc
¸Š'*7
>t¶c
[Š'N_ Ôc\Þc
ø°ú°û°Ðü°ý°þ°ìHˈXêE>BoxÁ샚íƒlÕ°Ù[¢'õŠ'•E•EEGlobalÁ Ï€ûkW¬ sü¨cC
ÛŠ' êcõcêüÿbv².$•cçZçZ\éZõ3ÓZ{Ð%¶ÒýŠ'· Š'¸ŠúQÑ{·Ë…YÚµTƒƒ´±ë
¯Š'°)®*4Ó&;Bá,Ôaüäît # OverviewÁËüJG `once_cell` provides two new cell-like types, [`unsync::OnceCell`] andÁü^PM [`sync::OnceCell`]. A `OnceCell` might store arbitrary non-`Copy` types, canÁü¯HE be assigned to at most once and provides direct access to the storedÁüøKH contents. The core API looks *roughly* like this (and there's much moreÁ´Ä inside, read on!):ÁÛË”ß ```rust,ignoreÁÌò impl<T> OnceCell<T> {ÁüŒ-* const fn new() -> OnceCell<T> { ... }Áüº85 fn set(&self, value: T) -> Result<(), T> { ... }Áüó+( fn get(&self) -> Option<&T> { ... }Á ```Á­Ëü±MJ Note that, like with [`RefCell`] and [`Mutex`], the `set` method requiresÁüÿOL only a shared reference. Because of the single assignment restriction `get`ÁüÏ=: can return a `&T` instead of `Ref<T>` or `MutexGuard<T>`.ÁËü‘NK The `sync` flavor is thread-safe (that is, implements the [`Sync`] trait),Áüà" while the `unsync` one is not.ÁƒËü‡52 [`unsync::OnceCell`]: unsync/struct.OnceCell.htmlÁü½1. [`sync::OnceCell`]: sync/struct.OnceCell.htmlÁüïGD [`RefCell`]: https://doc.rust-lang.org/std/cell/struct.RefCell.htmlÁü·C@ [`Mutex`]: https://doc.rust-lang.org/std/sync/struct.Mutex.htmlÁüûB? [`Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.htmlÁ¾ Ë
# RecipesÁÐ ËüÔ 96 `OnceCell` might be useful for a variety of patterns.ÁŽ
Ëü’
)& ## Safe Initialization of Global DataÁ¼
Ë
 ```rustÁ¼Ì
 use std::{env, io};Áä
Ëüè
" use once_cell::sync::OnceCell;Á ˤ  #[derive(Debug)]Á¼¤  pub struct Logger {Á // ...Á ¹\üÑ 85 static INSTANCE: OnceCell<Logger> = OnceCell::new();ÁŠ ËŒŽ  impl Logger {Áü  ,) pub fn global() -> &'static Logger {ÁüÍ >; INSTANCE.get().expect("logger is not initialized")Á

Ëüš
HE fn from_cli(args: env::Args) -> Result<Logger, std::io::Error> {ÁŒã
 // ...ÁÄõ
 # Ok(Logger {})Á°g¹\žË fn main() {Áü²<9 let logger = Logger::from_cli(env::args()).unwrap();Áüï&# INSTANCE.set(logger).unwrap();Áü–-* // use `Logger::global()` from now onÁ¹\Æ\ÒËüÖ# ## Lazy Initialized Global DataÁúËüþFC This is essentially the `lazy_static!` macro, but without a macro.ÁÅË€düÕ1. use std::{sync::Mutex, collections::HashMap};ÁËü‹"¾d®Ëü²>; fn global_data() -> &'static Mutex<HashMap<i32, String>> {ÁüñQN static INSTANCE: OnceCell<Mutex<HashMap<i32, String>>> = OnceCell::new();ÁüÃ! INSTANCE.get_or_init(|| {Áüå'$ let mut m = HashMap::new();Áü.+ m.insert(13, "Spica".to_string());Áü¼/, m.insert(74, "Hoyten".to_string());ÁÌì Mutex::new(m)ÁT† })Á,¹\<—Æ\ŸËü£OL There are also the [`sync::Lazy`] and [`unsync::Lazy`] convenience types toÁäó streamline this pattern:ÁË\”€dü 1ökôÒ use once_cell::sync::Lazy;ÁñËüõJG static GLOBAL_DATA: Lazy<Mutex<HashMap<i32, String>>> = Lazy::new(|| {ÁüÀ# let mut m = HashMap::new();Áüä*' m.insert(13, "Spica".to_string());Áü+( m.insert(74, "Hoyten".to_string());Á¬» Mutex::new(m)Á });ÁÙË÷hüí63 println!("{:?}", GLOBAL_DATA.lock().unwrap());Á¹\Æ\²Ëü¶KH Note that the variable that holds `Lazy` is declared as `static`, *not*Áü‚PM `const`. This is important: using `const` instead compiles, but works wrong.ÁÓËü×)& [`sync::Lazy`]: sync/struct.Lazy.htmlÁü-* [`unsync::Lazy`]: unsync/struct.Lazy.htmlÁ¯Ëü³&# ## General purpose lazy evaluationÁÚËüÞ=: Unlike `lazy_static!`, `Lazy` works with local variables.ÁœË\ €dü¬  use once_cell::unsync::Lazy;ÁÍË÷hüá  let ctx = vec![1, 2, 3];Áü‚" let thunk = Lazy::new(|| {Áü¥# ctx.iter().sum::<i32>()Á });ÁôÕ assert_eq!(*thunk, 6);Á¹\Æ\Ëü†LI If you need a lazy field in a struct, you probably should use `OnceCell`ÁüÓA> directly, because that will allow you to access `self` duringÁœ• initialization.Á©Ë\­€dü¹! use std::{fs, path::PathBuf};ÁÛËüß$! use once_cell::unsync::OnceCell;ÁË„ˆ
struct Ctx {Áì™ config_path: PathBuf,Áü·! config: OnceCell<String>,Á¹\ßË impl Ctx {ÁüòB? pub fn get_config(&self) -> Result<&str, std::io::Error> {Áüµ 63 let cfg = self.config.get_or_try_init(|| {Áüì 52 fs::read_to_string(&self.config_path)Á„¢!
})?;Áä³! Ok(cfg.as_str())ÁLÐ!°g,Ú!¹\<à!Æ\è!Ëäì! ## Lazily Compiled RegexÁ‰"Ëü"HE This is a `regex!` macro which takes a string literal and returns anÁüÖ"63 *expression* that evaluates to a `&'static Regex`:Á#Ë<#Æ\Ä™# macro_rules! regex {Áü²#! ($re:literal $(,)?) => {{ÁüÔ#b_ static RE: once_cell::sync::OnceCell<regex::Regex> = once_cell::sync::OnceCell::new();Áü·$>; RE.get_or_init(|| regex::Regex::new($re).unwrap())Á\ö$ }};Á,%¹\<ˆ%Æ\%
deadlock.ÁOËüšO&# **Does this crate support async?**ÁÁO˼ÅO No, but you can useÁüÝOJG [`async_once_cell`](https://crates.io/crates/async_once_cell) instead.Á¨PËü¬P)& **Does this crate support `no_std`?**ÁÖPËüÚPJG Yes, but with caveats. `OnceCell` is a synchronization primitive whichÁü¥QMJ _semantically_ relies on blocking. `OnceCell` guarantees that at most oneÁüóQMJ `f` will be called to compute the value. If two threads of execution callÁüÁR85 `get_or_init` concurrently, one of them has to wait.ÁúRËüþRMJ Waiting fundamentally requires OS support. Execution environment needs toÁüÌSPM understand who waits on whom to prevent deadlocks due to priority inversion.ÁüTMJ You _could_ make code to compile by blindly using pure spinlocks, but theÁüëT+( runtime behavior would be subtly wrong.Á—UËü›UHE Given these constraints, `once_cell` provides the following options:ÁäUËüèUPM - The `race` module provides similar, but distinct synchronization primitiveÁü¹VMJ which is compatible with `no_std`. With `race`, the `f` function can beÁü‡WNK called multiple times by different threads, but only one thread will winÁÜÖW to install the value.ÁüòWNK - `critical-section` feature (with a `-`, not `_`) uses `critical_section`ÁäÁX to implement blocking.ÁÞXËüâX! **Can I bring my own mutex?**Á„YËüˆYOL There is [generic_once_cell](https://crates.io/crates/generic_once_cell) toÁ¤ØY allow just that.ÁíYËüñYJG **Should I use `std::cell::OnceCell`, `once_cell`, or `lazy_static`?**Á¼ZËüÀZPM If you can use `std` version (your MSRV is at least 1.70, and you don't needÁü‘[PM extra features `once_cell` provides), use `std`. Otherwise, use `once_cell`.Áäâ[ Don't use `lazy_static`.Áÿ[ˤƒ\ # Related cratesÁ˜\Ëüœ\LI * Most of this crate's functionality is available in `std` starting withÁüé\EB Rust 1.70. See `std::cell::OnceCell` and `std::sync::OnceLock`.Áü¯]KH * [double-checked-cell](https://github.com/niklasf/double-checked-cell)Áüû]52 * [lazy-init](https://crates.io/crates/lazy-init)Áü±^30 * [lazycell](https://crates.io/crates/lazycell)Áüå^;8 * [mitochondria](https://crates.io/crates/mitochondria)Áü¡_96 * [lazy_static](https://crates.io/crates/lazy_static)ÁüÛ_A> * [async_once_cell](https://crates.io/crates/async_once_cell)Áü`LI * [generic_once_cell](https://crates.io/crates/generic_once_cell) (bringÁ¬ê` your own mutex)ÁŽ+áž+Ž+Ž+Ž+”Çaž+<äc»”c —c Êc8à˜c c Éc8<œc ¤c7,¦c$ «c8Æ ­c °c Èc8<±c ¹c7l»cü’c:èc()*+,-.29;>þq$ÀÉ,£4TÆÇ.
RefUnwindSafeÁlßÀ±
UnwindSafeÁT UTŽâZ
\LšçZÕдçÿThreadÁ4ÃËEü®ŸÎпÁ¥§~prac(S4´@Bü÷0©âŠ' ƒŠ'$†¨âŠ'$Ó&&(ü«)ƒÏ ·¢ÏÓ&üÙAƒÏ ÞÀ±Š'¿±Š'Ó&')üž .ƒÏ £ ²ÐÓ&œÑ ƒÏ Ö Ó& $%&'üë (ÿ Ó&ÐCüú
7 Š'Ó&÷D˜Úüú +
 Ó&

Š'$˜
üÉk Ó&»)ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶°Mº
²
!º
"!" è©â») â©âœÔ å»)°MÄ›»)°Mê³í³î³Òï³ìð³ñ³ò³ìäs{©¶Š'œÔ
Š'»)œÔþ 窱¦¨ <closure_kind>Á#<closure_signature>Á#<upvars>Á## #Š'»)œÔ°M Æ@  «3 ËÓÌ Ó&°M Õ
$Š'ü°/ Ó& Š' Ó
%Š'üÔ2 Ó&ø°ú°û°Ðü°ý°þ°ìHˈXêE> Š' ê
&Š'üï+Ó&«3
'Š'$ˆ¼ï!Tõ!·9¤Ž"<”"·9¬ª"D°"·9üÇ"!tÍ"Ü2ü†#dŒ#Ü2¼°$T¶$·9l¬&4³&“2~ïV«ùˆVY/01äÀ&4À&..É,É,qË,˜¸+»\¡Ø Êø°ú°û°Ðü°ý°þ°ìHˈXêE>ËEËEšÍÌEÂânlû/©‘r¤â&Dâ&..âZâZUãZÿIÓZ/&†ìK 58Œü&$ü&..Ü2„È',Ï'¡ 3322 4ª 5 ñ—j…ÒÉ¡ ñ—j…ÒÉ457Õ'äß',ß'22 ¡ ã4´(L(22Ü2¼œ(8Â'7 7”º($½( Â'°M6 Â(6
78$Ç(¸*7ºÕ8ÒÕ8ïÕ8878·9·9°MüÓ.\”Ö.˜ ˜ã4ø°ú°û°Ðü°ý°þ°ìHˈXêE>  °M°M°M ð.
9ª ,é.$ˆ/µ29ºÕ:ÒÕ:ïÕ::9:ùà°Müû7?$þ7š šã4Ü2°M Š8
;ª ,ƒ8
curr_queueÁT¢8µ:;ºÕ<ÒÕ<ïÕ<<;<ùà°M÷;;ºÕ=ÒÕ=ïÕ==;=ùà ·9Tö@4ú@?ACü¥AG,\‡A$³AðV·9@@ƒÏ,æA
?Š'÷ »A ¸Aü—DZ,\ùCL¥DðV·9ðVBBƒÏ,ëD
AŠ'÷ ²DŽ
$¿D ¯DüðJl,\ÒJDþJðVÍ
ðVDÍ
EDE©âÅçÜšKƒÏ,ÖKÅçüà´ŸKÅçüà·9,°K
CŠ'Åç÷ ŠKþ —K ‡K`bt™düîc*' Single-threaded version of `OnceCell`.Á4¡dS}q$ÉdÉ,FI£4TÏdÇ.FJÍädÁ]FKmemÁédÕFL,üdìFNDerefMutÁDƒeùFOÌlžeÀ±FQ±ÌT­e¿±FRü²d¬®ŸŽ|~oqXZ"JL9;´ÒjüÆeDA A cell which can be written to only once. It is not thread safe.ÁfËü—fC@ Unlike [`std::cell::RefCell`], a `OnceCell` provides simple `&`Áüßf references to the contents.ÁƒgËü‹gRO [`std::cell::RefCell`]: https://doc.rust-lang.org/std/cell/struct.RefCell.htmlÁâgËlêg
# ExampleÁ<ügÆ\üˆh$Æ|±hËü¹h let cell = OnceCell::new();ÁüÝh" assert!(cell.get().is_none());Á„iËüŒi.+ let value: &String = cell.get_or_init(|| {Áü¿i# "Hello, World!".to_string()Á<çiásüói'$ assert_eq!(value, "Hello, World!");ÁüŸj" assert!(cell.get().is_some());Á<ÆjÆ\DÝjTTƒÏ æj(PÔMÄB|Uä¢k,¢kFSS™5üªmAWWƒÏ ¯m¢Ðl²m²ÐTÂm‚(üóm.YYƒÏ øm²ÐTûm‚(üªn[[ƒÏ ¯n‚(\Å\¤Ôn<×n(ZZ
\Š'ü˜o.^^ƒÏ oà`Š'T o(_á`_!üÑo4Ôoœ ‚( œÁ`Á`œÃ`è Á]Ä`bufÁÁ]Ê­\É:•ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶°MѼѼÒ¼ štÀ.] Øo]
_Š'$Ùoþ ßoüËq$aaƒÏ ÐqÞŠ',Óq(bcßàbc(*ôúq,ýqž ž‚(‚(` ƒr`
bŠ'$„rüÈs'TËsŸ  Ÿ‚(  ‚(°M` Ös`
cŠ'$ÛssourceÁ4ásü¼u,eeƒÏ ÁužŠ'Š'LÄu(f f"$üóu"öu¡¢ ¡‚( ¢‚(d ùud
fŠ'$úuî ,€vôÓvhhƒÏ Øv£Š'Ûv(üúvjjƒÏ ÿv‚(kük̤w$§wŠ'(ii
kŠ'˜,¬wœýwmmƒÏ x(nopqrstx{|üÁx!ì›x Creates a new empty cell.ÁÎx(ll¿?üÚy0ü®y# Creates a new initialized cell.ÁTçyŠ'(ll
oŠ'˜Åüâ{üÝz-* Gets a reference to the underlying value.Á“{ËüŸ{(% Returns `None` if the cell is empty.Áé{£ £‚(ø°ú°û°Ðü°ý°þ°ìHˈXêE> £Š'l í{l
pŠ'$î{ü‡„+üÙ~52 Gets a mutable reference to the underlying value.ÁËü£(àüÔËüàNK This method is allowed to violate the invariant of writing to a `OnceCell`Áü·€IF at most once because it requires `&mut` access to `self`. As with allÁü‰FC interior mutability, `&mut` access permits arbitrary modification:ÁØËÆ\üô$Æ|¡‚Ëü­2/ let mut cell: OnceCell<u32> = OnceCell::new();ÁÔè‚ cell.set(92).unwrap();Áü‹ƒ" *cell.get_mut().unwrap() = 93;Áü¶ƒ&# assert_eq!(cell.get(), Some(&93));Á<åƒÆ\<Ž„¤ ¤‚(ø°ú°û°Ðü°ý°þ°ìHˈXêE> ¤Š'l –„l
qŠ'$›„ü‰,ü±….+ Sets the contents of this cell to `value`.Áè…Ëüô…EB Returns `Ok(())` if the cell was empty and `Err(value)` if it wasÁL† full.ÁÔ†Ëlà†Çì<ö†Æ\ü†‡$Æ|³‡Ëü¿‡ÿìüç‡"§í’ˆËüžˆ%" assert_eq!(cell.set(92), Ok(()));Áü̈&# assert_eq!(cell.set(62), Err(62));ÁûˆËü‡‰"ûî<²‰Æ\ɉ¥ ¥‚(Š'ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶°MŠ'l ͉l
rŠ'$Ή˜,Ô‰üìŽ9üRO Like [`set`](Self::set), but also returns a reference to the final cell value.Áè‹Ëlô‹Çì<ŠŒÆ\üšŒ$Æ|ÇŒËüÓŒÿìüûŒ"§í¦Ëü²-* assert_eq!(cell.try_insert(92), Ok(&92));Áüè41 assert_eq!(cell.try_insert(62), Err((&92, 62)));Á¥ŽËü±Ž"ûî<ÜŽÆ\TóŽ¦ ¦‚(Š'ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ ¦Š
uu ª™lÏÔ §™ðÔlÚ™»)°MŠ' æ™
tŠ'»)$«™þ ±™>@Lÿ™$„šFvtï‚‚ÐMLGtï‚‚ÐMLG³štºÕwÒÕwïÕwwtwŠ'»)°Mê³í³î³Òï³ìð³ñ³ò³ìäs{©¶Š'Ô»)ü×¢qü¹›>; Gets the contents of the cell, initializing it with `f` ifÁü€œ@= the cell was empty. If the cell was empty and `f` failed, anÁ´Éœ error is returned.ÁèœËdôœŽËü•F£ŽÔäòއžËü“žE¢Ôážð„ŸËlŸÇì<¦ŸÆ\ü¶Ÿ$Æ|ãŸËüïŸÿìü— :7 assert_eq!(cell.get_or_try_init(|| Err(())), Err(()));ÁüÚ "§íü…¡<9 let value = cell.get_or_try_init(|| -> Result<i32, ()> {ÁtÊ¡ Ok(92)Á<á¡ásüñ¡ assert_eq!(value, Ok(&92));Áü™¢%" assert_eq!(cell.get(), Some(&92))Á<Ç¢Æ\|Þ¢¨ ¨‚(»)ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ ¨Š'œÔl²
yº
zyz ô¢lÏÔ î¢ßÔ ñ¢ðÔᣂÕd»£
2026-01-24 22:59:20 +00:00
xŠ'»)œÔ$õ¢þ û¢?ACEü€±#üŒ¨UR Takes the value out of this `OnceCell`, moving it back to an uninitialized state.Áê¨Ëüö¨OL Has no effect and returns `None` if the `OnceCell` hasn't been initialized.ÁΩËtÚ© # ExamplesÁñ©Ë<ý©Æ\üª$Æ|ºªËüƪ52 let mut cell: OnceCell<String> = OnceCell::new();Áü„«" assert_eq!(cell.take(), None);Á¯«Ëü»«# let mut cell = OnceCell::new();Áüç«+( cell.set("hello".to_string()).unwrap();Áü›¬74 assert_eq!(cell.take(), Some("hello".to_string()));ÁüÛ¬! assert_eq!(cell.get(), None);Á<…­Æ\•­Ëü¡­N”ÿüø­IìÿüÊ®F¿€™¯Ë<¥¯Æ\üµ¯$Æ|â¯Ëüî¯2ÀÔ©°ûṴ̈ cell = OnceCell::new();Á<ð°Æ\$‡±© ©‚(«3l Œ±l
{Š'$‘±üƒ¶$üâ±96 Consumes the `OnceCell`, returning the wrapped value.Á¤²Ëü°²)& Returns `None` if the cell was empty.Áâ²Ëtž…³Ë<‘³Æ\ü¡³$Æ|γËüÚ³1. let cell: OnceCell<String> = OnceCell::new();Áü”´(% assert_eq!(cell.into_inner(), None);ÁÅ´ËüÑ´ÿìüù´+‰ ü­µ=: assert_eq!(cell.into_inner(), Some("hello".to_string()));Á<óµÆ\Tж(«3ll
|Š'$•¶üà»!ü˜¸52 A value which is initialized on the first access.ÁÒ¸ËlÚ¸Çì<ì¸Æ\üø¸ ¨x¹Ëü¥¹(% let lazy: Lazy<i32> = Lazy::new(|| {ÁüÒ¹! println!("initializing");ÁTø¹ 92Á<‡ºás´“º println!("ready");ÁÔ®º println!("{}", *lazy);ÁÔͺÍ©ìºËtôº // Prints:Át‡» // readyÁ¬š» // initializingÁ\´» // 92Á\Ļժ<Ô»Æ\$ë»~²
~ƒÏ ð»ÏÔló»ƒ)-îŽeëï
(*, ó»ž*ŒŒ¼$Œ¼F}}‚(¬§¼$§¼F}}ËBüɼWƒ²
ƒƒÏ μÏÔ ѼÀ±»)lÔ¼À±‚(l“½ƒ)3579ü©½0²
ƒÏ ®½ÏÔ ½½ óT±½ƒ)ˆá`ˆ%')+üä½4罪«¬ ªƒ) «Á`Á`œÃ`è Á]Ä`©óÁ]Ê­\É:•¬Ïô ë½
ˆŠ'»)$ì½þ ò½¬‹¿Š²
ŠƒÏ ¿ÏÔ “¿ƒ)ŒüÐÂ'ü«¿B? Creates a new lazy value with the given initializing function.Áö¿Ël‚ÀÇì<˜ÀÆ\Œ¨À # fn main() {ÁüÂÀ ¨xëÀËü÷À,) let hello = "Hello, World!".to_string();Á¬ÁËü¸Á2/ let lazy = Lazy::new(|| hello.to_uppercase());ÁóÁËüÿÁ(% assert_eq!(&*lazy, "HELLO, WORLD!");Á<°Â # }Á<ÀÂÆ\Ý»)ƒ)
ŒŠ'»)¼ üïÄ3üÕÃ41 Consumes this `Lazy` returning the stored value.Á’ÄËüžÄHE Returns `Ok(value)` if `Lazy` is initialized and `Err(f)` otherwise.ÁTöă)ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶Š'»)
Š'»)thisÁ$ŒƺՎÒÕŽïÕŽŽŽŠ'»)°M») ËBÂÆºÕÒÕïÕŠ'»)’¸°MüŸÇ$²
ñ“ ¶ÇÏÔ §ÇðÔlªÇƒÏ ¤Çƒ)“˜35ü‰Ë%üÎÇGD Forces the evaluation of this lazy value and returns a reference toÁ|žÈ the result.Á¶ÈËüÂÈ<9 This is equivalent to the `Deref` impl, but is explicit.Á‡ÉËl“ÉÇì<©ÉÆ\ü¹É ¨xâÉËüîÉ  let lazy = Lazy::new(|| 92);Á—ÊËü£Ê(% assert_eq!(Lazy::force(&lazy), &92);ÁäÔÊ assert_eq!(&*lazy, &92);Á<ùÊÆ\,Ë­ ­ƒ) ­Š' œË
Š'»)«¶$–ËÓ˺ÕÒÕïÕŠ'»)°MŠ' ƒ)üÏÐ1üÿÌOL Forces the evaluation of this lazy value and returns a mutable reference toÁ|×Íâ¹ïÍËüûÍ?< This is equivalent to the `DerefMut` impl, but is explicit.ÁÃÎËlÏÎÇì<åÎÆ\üõÎ ¨xžÏËüªÏ$! let mut lazy = Lazy::new(|| 92);Á×ÏËüãÏ0- assert_eq!(Lazy::force_mut(&mut lazy), &92);ÁԜРassert_eq!(*lazy, 92);Á<¿ÐÆ\LÖЮ ®ƒ) ®Š' æÐ
Š'»)«¶$àÐðÓºÕÒÕïÕŠ'»)°M Š'°MüÉ×+ü–Ô:7 Gets the reference to the result of this lazy value ifÁüÙÔ1. it was initialized, otherwise returns `None`.Á“ÕËlŸÕÇì<µÕÆ\üÅÕ ¨xîÕËüúÕ ‹»£ÖËü¯Ö'$ assert_eq!(Lazy::get(&lazy), None);ÁäßÖò»ü„×,) assert_eq!(Lazy::get(&lazy), Some(&92));Á<¹×Æ\Ðׯ ¯ƒ)ø°ú°û°Ðü°ý°þ°ìHˈXêE> ¯Š' Ú×
Š'»)«¶$Ô×ü÷Û7ü¦ØB? Gets the mutable reference to the result of this lazy value ifÁüñØ1²Ã«ÙËl·ÙÇì<ÍÙÆ\üÝÙ ¨x†ÚËü’Ú$õ¿¿ÚËüËÚ/, assert_eq!(Lazy::get_mut(&mut lazy), None);ÁÔƒÛèÀü¦Û85 assert_eq!(Lazy::get_mut(&mut lazy), Some(&mut 92));Á<çÛÆ\<þÛ° °ƒ)ø°ú°û°Ðü°ý°þ°ìHˈXêE> °Š' ŒÜ
˜Š'»)«¶$†ÜüæÜ.š²
šñ“ ýÜÏÔ îÜðÔlñÜƒÏ ë܃)œíî9;\ŸÝ4¤ÝŠ'¬¸Ý,»Ý± ±ƒ) ±Š' ÁÝ
Š'»)$ÂÝüƒÞ1Ÿ²
 Ÿ ñ“ šÞÏÔ ‹ÞðÔlŽÞƒÏ ˆÞƒ)¡ú¡24ü¿Þ!LÂÞ² ²ƒ) ²Š'ž ÌÞž
¡Š'»)$ÑÞüšß$££ƒÏ ŸßÄŠ'<¢ßæ)¤Å¤#%¼œàüÉßJG Creates a new lazy value using `Default` as the initializing function.Á<Ÿàæ)¢¢
¤Š'd×áüëà0- Thread-safe, blocking version of `OnceCell`.Á»žá ¡á Ôá8÷¢á ¥á Óá8<¦á ®á7,°á$ µá8<·á ¿á7Ø”Ááüœá:$ßᯰÙq$„âÉ,¥§Í’âÁ]¥¨äè—âÕ¥©,ªâ쥫éD±âù¥¬ÌlËâÀ±¥­ImpÁ‚ãþ¥®üîáqTþá©rt_a¤ÄâQ¤êâ>7+üŒã96 A thread-safe cell which can be written to only once.ÁÊãËüÒãKH `OnceCell` provides `&` references to the contents without RAII guards.Á¢äËüªä>; Reading a non-`None` value out of `OnceCell` establishes aÁüíäKH happens-before relationship with a corresponding write. For example, ifÁü½åEB thread A initializes the cell with `get_or_init(f)`, and thread BÁü‡æLI subsequently reads the result of this call, B also observes all the sideÁœØæ effects of `f`.ÁðæËløæÇì<ŠçÆ\ü–ç"¾d½çËüÅç41 static CELL: OnceCell<String> = OnceCell::new();Áüþç" assert!(CELL.get().is_none());Á¥èËÜ­è std::thread::spawn(|| {ÁüÍè2/ let value: &String = CELL.get_or_init(|| {Áü„é'$ "Hello, World!".to_string()Á\°éæyüÀé+( assert_eq!(value, "Hello, World!");Á¼ðé }).join().unwrap();ÁŒêËü”ê,) let value: Option<&String> = CELL.get();ÁìÅê assert!(value.is_some());Áüçê96 assert_eq!(value.unwrap().as_str(), "Hello, World!");Á<¥ëÆ\D¼ë±±ƒÏ Åë®*‹Mj>ê°²Ó&®*7+N¥Ó&®*¯¯
°Š'eg4È륯¯Ó&üÖë´´ƒÏ Ûë®*µÅµÜ€ì<ƒì®*³³
2026-01-24 22:59:20 +00:00
µŠ'üÏì.··ƒÏ Ôì óT×ì®*¸á`¸üˆí4‹í³´µ ³®* ´Á`Á`œÃ`è Á]Ä`©óÁ]Ê­\É:•µÏô í
¸Š'$íþ –íü‚ï$ººƒÏ ‡ï•ö,Šï®*»¼ß໼')ô±ï,´ï ®*®*¹ ºï¹
»Š'$»ïü÷ð'Túð·¸ ·®* ¸®*°M¹ …ñ¹
¼Š'$Šñýö4ñüëò¾¾ƒÏ ðò®*¿ü¿Ì•ó$˜óŠ'®*½½
¿Š'˜,óüêó,ÁÁƒÏ ïó®øLòó®* Âü¡ô)¤ô¹º ¹®* º®*À §ôÀ
Š'$¨ôî ,®ôôˆõÄÄƒÏ õçùõ®*œ¯õÆÆƒÏ ´õ®*ÇÈÉÊËÌÍÎÐÔר,.üóõ!ìÍõ×ú€ö®*ÅÅäFü÷ö0üËö#±ûT„÷Š'®*ÅÅ
ÈŠ'˜p"ü›ùüê÷/, Gets the reference to the underlying value.Á¢øËü®øC@ Returns `None` if the cell is empty, or being initialized. ThisÁÄúø method never blocks.Á¢ù» »®*ø°ú°û°Ðü°ý°þ°ìHˈXêE> »Š'Å ¦ùÅ
ÉŠ'$§ùįü™ûDA Gets the reference to the underlying value, blocking the currentÁÜæû thread until it is set.ÁŠüË<–üÆ\ü¦ü"¾dÑüËüÝü85 let mut cell = std::sync::Arc::new(OnceCell::new());Áüžý  let t = std::thread::spawn({Á
ÑÑ ߢÅÏÔ Ü¢ðÔl£ñ“ ›£
Њ'»)$à¢þ æ¢35L´£$¹£¥Ò¨iú d]ɽ¨iú d]ɽè£ÐºÕÓÒÕÓïÕÓÓÐÓŠ'»)°Mê³í³î³Òï³ìð³ñ³ò³ìäs{©¶Š'¡‰––üï¬qüî¤>«•üµ¥@ó•´þ¥¼–¦Ëd©¦Ž¾¦Ëüʦ=: If `f` panics, the panic is propagated to the caller, andÁü§# the cell remains uninitialized.Á¼§Ëüȧ?< It is an error to reentrantly initialize the cell from `f`.Áü¨<9 The exact outcome is unspecified. Current implementationÁüÕ¨@= deadlocks, but this may be changed to a panic in the future.Áž©Ëlª©Çì<À©Æ\üЩ"¾dû©Ëü‡ªÿìü¯ª:˜üòª"§íü«<á˜t⫦™<ù«ásü‰¬Ê™ü±¬%ó™<߬Æ\|ö¬Â ®*»)ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ Š'œÔŲ
Õº
ÖÖÕ Œ­ÅÏÔ †­ßÔ ‰­ðÔÄÇ­‚ÕdÓ­
ÔŠ'»)œÔ$­þ “­@BDFü¢¹#ü²°UÍœ±Ëüœ±O¸ô±Ët€²œž—²Ë<£²Æ\ü³²"¾dÞ²Ëüê²5åžü¨³"¤ŸÓ³Ëüß³#ÜŸü‹´+‰ ü¿´7¾ üÿ´!ÿ <©µÆ\¹µËüŵN”ÿüœ¶Iìÿüî¶F¿€½·Ë<É·Æ\üÙ·"¾d„¸Ëü¸2ÀÔ˸ûÜ¢<’¹Æ\$©¹Ã î*«3Å ®¹Å
׊'$³¹ü©¾$ü„ºA> Consumes the `OnceCell`, returning the wrapped value. ReturnsÁüκ! `None` if the cell was empty.ÁøºËt„»œž›»Ë<§»Æ\ü·»"¾dâ»Ëüî»1‹¥ü¨¼(Æ¥Ù¼Ëüå¼ÿìü½+‰ üÁ½= ¦<‡¾Æ\T°¾®*«3ÅÅ
ØŠ'$»¾ü£Æ!ü…¿5¶§¿¿ËüÇ¿85 This type is thread-safe and can be used in statics.Á„ÀËlŒÀÇìžÀË<¦ÀÆ\ü²À" use std::collections::HashMap;ÁÙÀËôáÀ­q„ÁËüŒÁ?< static HASHMAP: Lazy<HashMap<i32, String>> = Lazy::new(|| {ÁüÐÁ!å¨üöÁ#²rüžÂ*ÞrüÍÂ+‘sLýÂ<‹Ãás—ÃË|ŸÃ÷hԳà println!("ready");ÁüÒíúüöÃ/, println!("{:?}", HASHMAP.get(&13));ÁܪÄŒûüÊÄ+( println!("{:?}", HASHMAP.get(&74));ÁúÄË”‚Å // Prints:Á”™Å // readyÁ̰Å // initializingÁÔÎÅ // Some("Spica")ÁÜíÅ // Some("Hoyten")Á,ƹ\<—ÆÆ\$®ÆÚ²
ÛÚÛƒÏ ³ÆÏÔl¶Æ¡+ Nü3ž#>¶ÜÝ(*, ¶Æž*ŒÏÆ$ÏÆ¥ÙÙ®*¬êÆ$êÆ¥ÙÙËBüŒÇ0ß²
ààßƒÏ ‘ÇÏÔ  Ç óT”Ç¡+áá`á%')+üÇÇ4ÊÇÄÅÆ Ä¡+ ÅÁ`Á`œÃ`è Á]Ä`©óÁ]Ê­\É:•ÆÏôÞ ÎÇÞ
áŠ'»)$ÏÇþ ÕÇüôÊCã²
äãäƒÏ €ËÏÔ ƒË¨â»)$†Ë®*$³Ë¡+2468üçËWæ²
çæçƒÏ ìËÏÔ ïËä­lòËÀ±®*l±Ì¡++-/1¬ÇÌé²
êéêƒÏ ÌÌÏÔ ÏÌ¡+ëìü¾Í$üçÌ85 Creates a new lazy value with the given initializingÁl¨Í
function.ÁËÍ»)¡+èè
ëŠ'»)þ$ü×Ï3ü½Î4‹´úÎËü†ÏHÕ´TÞÏ¡+º¶èè
ìŠ'»)«¶$éÏúÐìºÕíÒÕíïÕííìíŠ'»)’¸¸ªÑìºÕîÒÕîïÕîîìîŠ'»)’¸°Mü‡Ò$ð²
ññðñ“ žÒÏÔ ÒðÔl’ÒƒÏ ŒÒ¡+òôö÷35üãÕ%ü¶Ò0- Forces the evaluation of this lazy value andÁüïÒ96 returns a reference to the result. This is equivalentÁü±Ó)& to the `Deref` impl, but is explicit.ÁãÓËlïÓÇì<…ÔÆ\ô•Ô­q¼ÔËüÈÔ ‹»ñÔËüýÔ(Á»ä®Õò»<ÓÕÆ\,êÕÇ Ç¡+ ÇŠ'ï öÕï
òŠ'»)«¶$ðÕ­ÖòºÕóÒÕóïÕóóòóŠ'»)Ù¾ ¡+üùÚ1üÙ×0ä¨ü’ØA> returns a mutable reference to the result. This is equivalentÁüÜØ)ᩎÙËlšÙÇì<°ÙÆ\ôÀÙ­qçÙËüóÙ$õ¿ ÚËü¬Ú41 assert_eq!(Lazy::force_mut(&mut lazy), &mut 92);Á<éÚÆ\L€ÛÈ È¡+ ÈŠ'ï Ûï
ôŠ'»)«¶$ŠÛšÞôºÕõÒÕõïÕõõôõŠ'»)ÍðMüñá+üÀÞ:îÂüƒß1²Ã½ßËlÉßÇì<ß߯\ôïß­q–àËü¢à ‹»ËàËü×à'ÅÄä‡áò»ü¬á,ƒÅ<ááÆ\øáÉ É¡+ø°ú°û°Ðü°ý°þ°ìHˈXêE> ÉŠ'ï ‚âï
öŠ'»)«¶$üáü—æ7üÎâ:îÂü‘ã1²ÃËãËl×ãÇì<íãÆ\ôýã­q¤äËü°ä$õ¿ÝäËüéä/¥Èä¡åò»üÆå8ëÈ<‡æÆ\<žæÊ Ê¡+ø°ú°û°Ðü°ý°þ°ìHˈXêE> ÊŠ'ï ¬æï
÷Š'»)«¶$¦æü†ç.ù²
úúùñ“ çÏÔ ŽçðÔl‘çƒÏ ‹ç¡+ûüíîü9;\¿ç4ÄçøøŠ'¬Øç,ÛçË Ë¡+ ËŠ'ø áçø
üŠ'»)$âçü£è1þ²
ÿþÿñ“ ºèÏÔ «èðÔl®èƒÏ ¨è¡+€ú24üßè!LâèÌ Ì¡+ ÌŠ'ý ìèý
Š'»)$ñèüºé$ƒÏ ¿éäÏ<ÂéѼ¼êüééJžÏ<¿ê,
ƒŠ'\¬î4¯î¥°M
d×î»Àî Ãî Ôî8<Äî Ìî7Î4ÎîľîüEB Thread-safe, non-blocking, "first one wins" flavor of `OnceCell`.ÁFËüJIF If two threads race to initialize a type from the `race` module, theyÁü”JG don't block, execute initialization function together, but only one ofÁÜß them stores the result.ÁûËüÿ/, This module does not require `std` feature.Á¯Ë´³ # Atomic orderingsÁÊËüÎ85 All types in this module use `Acquire` and `Release`Áü‡LI [atomic orderings](Ordering) for all their operations. While this is notÁüÔPM strictly necessary for types other than `OnceBox`, it is useful for users asÁü¥MJ it allows them to be certain that after `get` or `get_or_init` returns onÁüóJG one thread, any side-effects caused by the setter thread prior to themÁü¾OL calling `set` or `get_or_init` will be made visible to that thread; withoutÁüŽOL it, it's possible for it to appear as if they haven't happened yet from theÁüÞMJ getter thread's perspective. This is an acceptable tradeoff to make sinceÁü¬IF `Acquire` and `Release` have very little performance overhead on mostÁüö# architectures versus `Relaxed`.Á$ßî¯Ó¹ ÓZ\L¸
çZˆb\Ã
®¸Õ
дŠ£4Të
Ç.úQ\‰ŒúQŠŒ NonZeroUsizeÁd¥º’÷ ½êް<Á[ÛÒ”Ó Ýü¯
*ÐÒÀ®°´ß
 Ìû
‘¼šaL·Q¬ÐÖ,ž¡Ôœìì×ú©Ö,ûNü¡)ôð Gets the underlying value.Á¨Í ÍÖ,ø°ú°û°Ðü°ý°þ°ìHˈXêE>£ £ ¤ Ϧ ì ™‘‹ÖqËî·9 ¬
üÅ2ü­KH Get the reference to the underlying value, without checking if the cellÁœý is initialized.ÁËd€ö®Ëü¶F¢öü?òöÎ ÎÖ,’Ê á
üœ0Ï ÏêJ ·9 ¯
 ¬œßü»¬Á°Mü™"8üû .¬„®!Ëü¶!B? Returns `Ok(())` if the cell was empty and `Err(())` if it wasÁLý!¾… "Ð ÐÖ,’Êê³í³î³Òï³ìð³ñ³ò³ìäs{©¶°M°M ¤"
$¥"˜,«"üì%aüÒ#KH Gets the contents of the cell, initializing it with `f` if the cell wasÁT¢$ empty.Á±$Ëü¹$LI If several threads concurrently run `get_or_init`, more than one `f` canÁüŠ%KH be called. However, all threads will return the same value, produced byÁlÚ%
some `f`.Á\ó%Ñ ÑÖ,²
’ʲ
˜˜ ‚&©âÐÒ ÿ%ÐÒ°MÄ´&ÐÒ°M ’ÊdÀ&
ÐÒ$ƒ&þ ‰&EGLÜ&$á&åÊžX*UåÊžX*UŒ'ºÕšÒÕšïÕšššÐÒ°Mê³í³î³Òï³ìð³ñ³ò³ìäs{©¶’ÊðÓÐÒüç*~ü‰(>«•üÌ(@ó•´‘)¼–¬)Ëü´)LñÏü…*KÆÐlÕ*™Ñ|î*Ò ÒÖ,ÐÒê³í³î³Òï³ìð³ñ³ò³ìäs{©¶’ʺ
²
ϼ
œ „+ýÒ þ*©â«× +ŽÓüÁ+#ÐÒ°MÙÖ¼Í+
ÐÒ«×$…+þ ‹+PRLNüÿ,Y$-Ó ÓÖ,§ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶’ʺ
º
Ÿ§  Ÿ Š-©âÛÙ ‡-©â„Ùü”-(„Ù°Mü™-#„Ù°M‰Ù¼¥-
žÛÙ„Ù$‹-þ ‘-\^XZüÂ/E„Å/Ô ÔÖ,’Êê³í³î³Òï³ìð³ñ³ò³ìäs{©¶·9·9 Ö/
¡$×/Ý/lõ1”-£¤¥¦©­®Ô¹2ì‰2×úÆ2”-¢¢
£üÂ3!ô‘3‡ÈÉ3Õ Õ”-ø°ú°û°Ðü°ý°þ°ìHˈXêE>¢ Í3¢
¤$Î3ü¾50ü 4.¬„Ó4ËüÛ4BûÌL¢5¾…Å5Ö Ö”-õ΢ É5¢
¥$Ê5˜,Ð5üÄ8Qüª6K€ÏTú6Óω7Ëü‘7LñÏüâ7KÆÐl²8™Ñ\Ë8× ×”-ÐÒ¢²
§§ Ú8¢ýÒ ×8ŽÓ„„9ÐÒ°M$9
¦ÐÒ$Û8þ á88:Ì9¦ºÕ¨ÒÕ¨ïÕ¨¨¦¨ÐÒ°M’ÊÉÕüÎ<nüð9>«•ü³:@ó•´ø:¼–“;Ëü›;LñÏüì;KÆÐl¼<™Ñ|Õ<Ø Ø”-ÐÒê³í³î³Òï³ìð³ñ³ò³ìäs{©¶«×¢²
ªº
«ª« ë<¢ýÒ å<ì× è<ŽÓÜ =ÐÒ°M»ã|¬=
©ÐÒ«×$ì<þ ò<FHKMæ=©ºÕ¬ÒÕ¬ïÕ¬¬©¬ÐÒ«×°MÙÖÉÕü±>*T´>’Ê¢¢
­˜,¿>ü?(D“?’Ê¢¢
2026-01-24 22:59:20 +00:00
®˜,œ?ÌÈ@üŽ@9ÌÓ<Ó@¡ °±°±©â‘. ß@‘.¡ üA%Ò-eM‡€ò„B²³Û@35œè@,è@¯¯­RM,A¯¯ŠúQÑ{·Ë…YÚÇ.Ç.£4É.˜¸+ö)=ê „9Û ¡ ‘.üëA0¡ µµÔç ûA‘.$þAÒ-÷Aü B/¡ ¸¹¸¹Ôç ©BÒ-ºá`º¥BüÖBDÙBÙÚÛ ÙÒ- ÚÁ`Á`œÃ`è Á]Ä`©óÁ]Ê­\É:•ÛÏô· ÝB·
º¡ ‘.$ÞBþ äBüÕC&¡ ¼½¼½Ôç ÞCÒ-¾Å¾ÚC¤‚D<…DÒ-»»
¾¡ ‘.Ô¶D¡ ÀÁÀÁÔç ¿DÒ-ÂÃÄÅÉÌÏÑ»D%'ÔùDì×D×ú†EÒ-¿¿
¡ .üŸF"üíE-Ÿü¦FÜ ÜÒ-ø°ú°û°Ðü°ý°þ°ìHˈXêE>£é¿ ªF¿
á ‘.$«Fü¸H1ü¥G.¬„ØGËüàGEð„LªH¾…¿HÝ ÝÒ-£éõο ÃH¿
Ä¡ ‘.$ÄH˜,ÊHü„LSüêIK€ÏTºJÓÏÉJËüÑJLñÏü¢KKÆÐlòK™Ñ\‹LÞ ÞÒ-²
£é¿²
ÆÆ šL¿©â›ò —L›ò°MŒÅL›ò°M£é,ÑL
Å¡ ‘.›ò$›Lþ ¡LNPLæL$ëLÇ0LüžO?ð…0LüžO?ð…–MźÕÈÒÕÈïÕÈÈÅÈ‘.›ò°Mê³í³î³Òï³ìð³ñ³ò³ìäs{©¶•QÄó›òüêPpüŒN>«•üÏN@ó•´”O¼–¯OËü·OLñÏüˆPKÆÐlØP™Ñ|ñPß ßÒ-›òê³í³î³Òï³ìð³ñ³ò³ìäs{©¶£éº
¿²
ʺ
ËËÊ ‡Q¿Èò Q©â…÷ „QÙòä½Q›ò°M³ö„ÉQ
2026-01-24 22:59:20 +00:00
É¡ ‘.›ò…÷$ˆQþ ŽQXZTVüöRK$ùRà àÒ-ºê³í³î³Òï³ìð³ñ³ò³ìäs{©¶£éœÔ¿º
ͺÎÍÎ S¿ßÔ þR©âèøü‹S!èø°MäSèø°Míø„œS
Ì¡ ‘.œÔèø$‚Sþ ˆSdf`bü…U@„ˆUá áÒ-£éê³í³î³Òï³ìð³ñ³ò³ìäs{©¶°M ‘.¿ ™U¿
Ï¡ .$šU˜, U\­WϺÕÐÒÕÐïÕÐÐÏБ.âR°M°M\ýZ4€[°M¿¿
Ñ¡ ‘.¼±[då[»Í[ Ð[ â[8<Ñ[ Ù[7á<Û[ÌË[Dé[Ûý\LŒ\çZÓÕÕD—\дÓÖúQ\¹\ÓØúQŠÓØ÷ Æ\êÓÙ‡Tã\ÓÚüü[$ƒprüª\ œ±\g?AŒÕ\2¬«]üí\9ÌÓ<¶]ÜÜƒÏ ¾]².ĵJ©S?>ÝÞç!#œË],Ë]ÓÛÛ»Vüè]",è]ÓÛÛúVü—^'ààƒÏ œ^².áá`áüÉ^DÌ^âãä â². ãÁ`Á`œÃ`è Á]Ä`©óÁ]Ê­\É:•äÏôß Ð^ß
áŠ'$Ñ^þ ×^ôð_ããƒÏ õ_².äÅ䤙`<œ`².ââ
äŠ'ÜÝ`ææƒÏ â`².ç 甃a$†aå å².°Må ‹aå
çŠ'$a”¼bééƒÏ Áb².êëìíîòõÔÿbìÙb×úŒc².èè
êŠ'ü´d(üÿc,) Creates a new cell with the given value.ÁT»dùT².èè
ëŠ'˜,ÆdüýeüÇe-Ÿü„fæ æ².ø°ú°û°Ðü°ý°þ°ìHˈXêE> æŠ'è ˆfè
ìŠ'$‰füüh6üÙg.¬„hËüœhEð„Lêh¾…ƒiç ç².ùTê³í³î³Òï³ìð³ñ³ò³ìäs{©¶°MùTè ‡iè
íŠ'$ˆi˜,Žiü‹oYüÙlK€ÏT­mÓÏÀmËüÌmLñÏü¡nKÆÐlõn™Ñ\’oè è².») èŠ'è²
ïï ¡oèÏÔ žoðÔ”Ño»)°MùT4Ýo
îŠ'»)$¢oþ ¨o:<Lûo$€pÓðDsþ¹®ðàDsþ¹®ðà¯pîºÕñÒÕñïÕññîñŠ'»)°Mê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ùT—Œ––ü´tvüºq>«•ür@ó•´Êr¼–érËüõrLñÏüÊsKÆÐlžt™Ñ|»té é².»)ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ éŠ'œÔè²
óº
ôóô ÑtèÏÔ ËtßÔ ÎtðÔìŒu»)°Mê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ùTœÔŒ˜u
òŠ'»)œÔ$Òtþ Øt˜šŸüévI$ìvÓê ê².ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ êŠ'«×èº
ö÷ö÷ ôvèì× ñv©âú‘üþv"ú‘°Mìƒwú‘°Mê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ùT«×Œw
õŠ'«×ú‘$õvþ ûv¯±«­üÿz/ùùƒÏ ‹{“Ï$Ž{¢Ï$•{².ü·{#ûûƒÏ ¼{•ö,¿{².üßü¼å{,è{ë ë².².ú î{ú
üŠ'$ï{\ù~4ü~Ó°M
ýìáÿÿƒÏ üÓ&¤—ÛsÒ\Mû Äîþþã4äŒþþ™5(ÙƒƒƒÏ ó,Ó&„á`IKìíî ìÓ& íÁ`Á`œÃ`è Á]Ä`©óÁ]Ê­\É:•îÏôÙ
Š'þöÜ—üÃ9ÌÓ„¢Ö,j߈ÿ”¹êJ8G†/Ö,ˆÅˆ!#Ö,
ˆ(H0Ö,Šá`Š!#ïðñ ïÖ, ðÁ`Á`œÃ`è Á]Ä`©óÁ]Ê­\É:•ñÏôH
Š,þÊœ¿1üë09ÌÓDÊ1”-8÷ô¡ÃÏ^Œ¼Ù1,Ù1Ö,8K®11”-ŽÅŽ!#”-
Ž(L·12”-á`!#òóô ò”- óÁ`Á`œÃ`è Á]Ä`©óÁ]Ê­\É:•ôÏôL·1
,·1þÊio&Æio&wko&Õko&wlo&°(o&oo&´po& •/o&_qo&Rzo& âoo&Lìoo&{o&e{o& éso&%|o& ‡vo&
o&o&=„o&\†o&††o& o&Q~o&Bxo& õ½o&Lÿ½o&¥qo&7oo&Ìlo&Þjo&ßio&io&ê_o& ™ío&L£ío&G_o&â^o& ˜ño&§]o& µôo&[o&ªWo&Vo&}To&Ro&‡Po&ÇLo&nHo&SFo&@o& ØÇo&LâÇo&ß:o& 9o&Z7o&
6o& 5o&/4o&þ+o&+o&¹*o&)o&ô'o&“%o&i$o&P#o&D"o&Å!o&!o&Yo&©o& çBo&Co&Äo&8o&yo& o&×o&»o&o& Ú^o&ô^o&Žo&Ù
o&
o&G o&ô o&zo&Þo&;o&Ao& o&Úo&ào&o&|o&o&8o&l‰Åèèo#https://github.com/indiv0/lazycell/Ástd::sync::OnceÁÿ4ÂlazycellÁ4https://doc.rust-lang.org/std/marker/trait.Sync.htmlÁ
sync::LazyÁsync/struct.Lazy.htmlÁ!https://crates.io/crates/lazycellÁË(https://crates.io/crates/async_once_cellÁgeneric_once_cellÁ*https://crates.io/crates/generic_once_cellÁunsync::OnceCellÁunsync/struct.OnceCell.htmlÁ mitochondriaÁ4https://github.com/rust-lang-nursery/lazy-static.rs/Á lazy_cellÁÙ£"https://crates.io/crates/lazy-initÁÂ4https://doc.rust-lang.org/std/sync/struct.Mutex.htmlÁ¬¤å¤ÙŸ¤Ž¥Ëasync_once_cellÁ¹¥æ¥«¦Sø lazy_staticÁö¦¯§ lazy-initÁçÂ¥6https://doc.rust-lang.org/std/cell/struct.RefCell.htmlÁ溺¤Ÿ¤3https://doc.rust-lang.org/std/sync/struct.Once.htmlÁËʨ¹¥$https://crates.io/crates/lazy_staticÁunsync/struct.Lazy.htmlÁøö¦þ¨.https://github.com/niklasf/double-checked-cellÁš©sync/struct.OnceCell.htmlÁ¸©ï§ç std::syncÁ…ªʨ%https://crates.io/crates/mitochondriaÁï