FatErasedPtr
- Vorherrschende Sprache
- Rust
- Sterne
- 137
- Forks
- 15
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
I had just fun: Type erased pointers that Drop properly:
```
pub struct FatErasedPtr {
ptr: ErasedPtr,
dropfn: fn(ErasedPtr),
}
impl From
for FatErasedPtr {
#[inline(always)]
fn from(this: P) -> Self {
fn dropfn (this: ErasedPtr) {
unsafe {
::unerase(this) };
}
FatErasedPtr {
ptr: P::erase(this),
dropfn: dropfn::
,
}
}
}
impl Drop for FatErasedPtr {
fn drop(&mut self) {
(self.dropfn)(self.ptr)
}
}
#[test]
fn faterasedptr() {
use alloc::rc::Rc;
let rc: Rc = Rc::new(123);
let fat_erased: FatErasedPtr = FatErasedPtr::from(rc);
assert_eq!(core::mem::size_of_val(&fat_erased), core::mem::size_of::()*2);
}
```
Was just a curious experiment here. I can complete that and send a PR if this is interesting.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Beginne mit der Durchsicht der bestehenden APIs von ErasablePtr und ErasedPtr und vergleiche anschließend die vorgeschlagene FatErasedPtr-Implementierung sowie ihren faterasedptr-Test mit den aktuellen Pointer-Utilities des Crates. Bestätige, ob das Experiment zum Projekt passt, und definiere vor dem Vorschlagen eines PRs Akzeptanzkriterien für das ordnungsgemäße Dropping und das demonstrierte Größenverhalten.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- rust
- Bereich
- tooling
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 30/100