Связный список на Rust - уловить суть языка
От: Shmj Ниоткуда  
Дата: 25.06.23 01:29
Оценка:
Вот код на С, который требует указателя и динамического выделения памяти:

struct Node
{
  int data;
  struct Node *next;
}


Тут как бы классика. И интересно как сделать то же самое на Rust.

GPT дал версию с использованием системных Option и Box, что мне не интересно, т.к. не раскрывает внутреннего устройства как это работает. По сути Option и Box ничем не отличаются от умных указателей в С++, по этому как бы в чем преимущество языка — мне не ясно.

А без Option и Box вариант такой:

struct Node {
    data: i32,
    next: *mut Node,
}

impl Node {
    fn new(data: i32) -> Self {
        Node { data, next: std::ptr::null_mut() }
    }
}

fn main() {
    let mut third_node = Node::new(3);
    let mut second_node = Node::new(2);
    let mut first_node = Node::new(1);

    first_node.next = &mut second_node;
    second_node.next = &mut third_node;

    // Использование связанного списка
    let mut current_node = &first_node;
    while !current_node.next.is_null() {
        println!("Node data: {}", current_node.data);
        current_node = unsafe { &*current_node.next };
    }
}


Но! Как оказалось — этот код требует ручной очистки памяти.

И тут я совсем запутался — в чем же преимущество Rust? Ведь В С++ тоже есть умные указатели.

Можно ли получить лаконичный пример где Rust бьет C++ и видны его преимущества? Я не вижу преимуществ Option и Box по сравнению с умными указателями.
=сначала спроси у GPT=
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.