< 返回版块

damody 发表于 2019-04-06 13:53

Tags:rust

Arenas vs. Indices:為型別寫函數要寫在型別裡還是外面?

作者舉了一些例子 下面簡單說明他討論的這個問題 他想為MVPArena寫一個add的函數 那把add這個函數從 impl MVPArena 移到外面 那首先就要解決生命週期的問題

struct MVPArena<T>(Vec<T>);

impl<T> MVPArena<T> {
    fn add(&mut self, T value) -> Idx { .. }
}

type Idx = u32;

impl<T> Index<Idx> for MVPArena<T> {
    type Output = T;
    fn index(&self, idx: Idx) -> &T {
        &self[idx as usize]
    }
}
// ..
fn add(&mut self, value: T) -> Idx<'a> {
    // ..
    Idx(index, self.tag)
}

impl<'a, T> Index<Idx<'a>> for MVPArena<'a, T> {
    type Output = T;
    fn index(&self, idx: Idx<'a>) -> &'a T {
        &self[idx.0 as usize]
    }
}

另外當你要寫一個樹結構的時候會遇到更多問題 因為生命週期沒辨法離開當前的區塊範圍

struct Tree<'i>(Option<(Idx<'i>, Idx<'i>)>);

fn build_tree(arena: &mut Arena<'i, Tree<'i>>, depth: usize) {
    if depth == 0 {
        arena.add(Tree(None))
    else {
        arena.add(Tree(Some((build_tree(arena, depth - 1),
                             build_tree(arena, depth - 1)))))
    }
}

in_arena(|arena| { build_tree(arena, 3); });

Read more

CRUST:試著用rust寫一個 C11 c compiler

作者想要學rust, 於是決定寫一個compiler來練練手

Read more

有人用rust實作了Peter Shirley's Ray Tracing的演算法

Read more

Steve Klabnik加入CloudFlare

一位rust大佬,他就是上次寫rust超越我的男人

Read more

Rust source code行數變化

img

使用工具 https://github.com/src-d/hercules

Read more

Future API終於要定案了!

一堆rust開發者都在等啊~~~~

Read more

Zola 0.6.0

一個快速的靜態網站產生器,讓人快速的產生blog上傳到github上

Read more

新版 HashMap 要合併到rust了

Read more


From 日报小组 @damody

日报订阅地址:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页