मैं वर्तमान में doing more stuff with arrays देख रहा हूं, लेकिन मुझे लगता है कि अगर हम किसी भी तरह से Leaked<T>
में आगे बढ़ने की इजाजत देते हैं, तो फ़ंक्शन समाप्त होने पर इसे अन-रिसाव करने के लिए उन परिचालनों का प्रदर्शन बेहतर हो सकता है। यह हमें बिना किसी सुरक्षा के लीक एम्पलीफिकेशन का उपयोग करने देगा) बी catch_panic(_)
स्थापित करना। क्या यह जंग में किसी भी तरह से संभव है?क्या कोई मूल्य पूर्व-अन-लीक करने का कोई तरीका है?
, एक पुनरावर्तक से एक सामान्य सरणी (इस स्पष्ट रूप से काम नहीं करता है) बनाने:
#[inline]
fn map_inner<I, S, F, T, N>(list: I, f: F) -> GenericArray<T, N>
where I: IntoIterator<Item=S>, F: Fn(&S) -> T, N: ArrayLength<T> {
unsafe {
// pre-leak the whole array, it's uninitialized anyway
let mut res : GenericArray<Leaked<T>, N> = std::mem::uninitialized();
let i = list.into_iter();
for r in res.iter_mut() {
// this could panic anytime
std::ptr::write(r, Leaked::new(f(i.next().unwrap())))
}
// transmuting un-leaks the array
std::mem::transmute::<GenericArray<Leaked<T>, N>,
GenericArray<T, N>>(res)
}
}
मैं नोट करना चाहिए कि हम या तो T
के आकार या एक प्रकार के संकलन समय पहुंच प्राप्त हो कि उधार से अपने अंदरूनी छिपा सकते हैं (जैसे उदाहरण में Leaked<T>
), यह पूरी तरह से व्यवहार्य है।
आप जिस प्रदर्शन की उम्मीद कर रहे हैं उसमें सुधार प्रदर्शन क्या हैं? 'लेन 'बढ़ाना नहीं है? – malbarbo
यदि मैं पैनिक्स को पकड़कर लीकिंग को रोकने की कोशिश करता हूं (जो अभी भी बीटा/रात में काम करता है), मुझे 'वीईसी' में एकत्र करने से लगभग 45% अधिक थ्रूपुट मिलता है। मुझे लगता है कि मैं प्री-लीकिंग से भी बेहतर परिणाम प्राप्त कर सकता हूं। – llogiq