LINUX.ORG.RU

История изменений

Исправление shkolnick-kun, (текущая версия) :

Ну тащемта, он прав насчет выразительности (сам того не зная, ЛОЛ).

В задачах низкоуровневого системного программирования С более выразителен, чем Rust.

Вот смотри, списки: Вставка в зад, Rust:

    /// Adds the given node to the back of the list.
    fn push_back_node(&mut self, mut node: Box<Node<T>>) {
        unsafe {
            node.next = None;
            node.prev = self.tail;
            let node = Some(Shared::new(Box::into_raw(node)));

            match self.tail {
                None => self.head = node,
                Some(tail) => (**tail).next = node,
            }

            self.tail = node;
            self.len += 1;
        }
    }

То же на Си:

// Insert an item to a list
void bgrt_item_insert(bgrt_item_t *item, bgrt_item_t *head)
{
    // A tail of a list
    bgrt_item_t * tail;
    tail = head->prev;
    // Insert an item between a head and a tail
    item->prev = tail;
    item->next = head;

    head->prev = item;
    tail->next = item;
}

Вырезать из списка на Rust:

    fn pop_front_node(&mut self) -> Option<Box<Node<T>>> {
        self.head.map(|node| unsafe {
            let node = Box::from_raw(*node);
            self.head = node.next;

            match self.head {
                None => self.tail = None,
                Some(head) => (**head).prev = None,
            }

            self.len -= 1;
            node
        })
    }
То же на Си:
void bgrt_item_cut(bgrt_item_t *item)
{
    bgrt_item_t * prev;
    bgrt_item_t * next;
    prev = item->prev; //Previous item
    next = item->next; //Next item

    next->prev = prev;
    prev->next = next;

    item->prev = item;
    item->next = item;
}

Исходная версия shkolnick-kun, :

Ну иащемта, он прав. В задачах низкоуровневого системного программирования С более выразителен, чем Rust.

Вот смотри, списки: Вставка в зад, Rust:

    /// Adds the given node to the back of the list.
    fn push_back_node(&mut self, mut node: Box<Node<T>>) {
        unsafe {
            node.next = None;
            node.prev = self.tail;
            let node = Some(Shared::new(Box::into_raw(node)));

            match self.tail {
                None => self.head = node,
                Some(tail) => (**tail).next = node,
            }

            self.tail = node;
            self.len += 1;
        }
    }

То же на Си:

// Insert an item to a list
void bgrt_item_insert(bgrt_item_t *item, bgrt_item_t *head)
{
    // A tail of a list
    bgrt_item_t * tail;
    tail = head->prev;
    // Insert an item between a head and a tail
    item->prev = tail;
    item->next = head;

    head->prev = item;
    tail->next = item;
}

Вырезать из списка на Rust:

    fn pop_front_node(&mut self) -> Option<Box<Node<T>>> {
        self.head.map(|node| unsafe {
            let node = Box::from_raw(*node);
            self.head = node.next;

            match self.head {
                None => self.tail = None,
                Some(head) => (**head).prev = None,
            }

            self.len -= 1;
            node
        })
    }
То же на Си:
void bgrt_item_cut(bgrt_item_t *item)
{
    bgrt_item_t * prev;
    bgrt_item_t * next;
    prev = item->prev; //Previous item
    next = item->next; //Next item

    next->prev = prev;
    prev->next = next;

    item->prev = item;
    item->next = item;
}