post-tree

Dec. 24th, 2022 04:12 pm
amarao: (Default)
[personal profile] amarao
Интернеты говорят, что во-первых Rc<RefCell> не идиоматично для Rust (деревья правильно держать как банальные вектора, содержащие в себе вектора векторов). Во-вторых, я, в целом, всё правильно сделал.

После некоторого кумекания получилось вот так вот, и я не вижу как его сделать существенно компактнее. Может быть, можно уйти от Enum и бального true/false хватит?

Да, получилось.

fn mktree(source: &[Option<i32>]) -> Tree {
if source.is_empty() || source[0].is_none() {
return None;
}
let tree: Tree = new_tree(source[0].unwrap());
let mut buff = VecDeque::new();
buff.push_back((tree.as_ref().cloned(), false));
for val in source[1..].into_iter() {
let subtree = val.and_then(|val| {
let subtree = new_tree(val);
buff.push_back((subtree.as_ref().cloned(), false));
subtree
});
let (node, is_last) = buff.pop_front().unwrap();
if is_last {
node.unwrap().borrow_mut().right = subtree;
} else {
node.as_ref().unwrap().borrow_mut().left = subtree;
buff.push_front((node.as_ref().cloned(), true));
}
}
tree
}

Что меня смущает? Изобилие as_ref().cloned(). Ща буду думать...

Date: 2022-12-25 07:54 pm (UTC)
From: [personal profile] eterevsky
Да, будут. Что вы курите?

И когда вам в последний раз случалось перезагружать компьютер из-за упавшего процесса в юзерспейсе?

Date: 2022-12-25 08:31 pm (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
Я бросил курить давно, а процесс не падает в юзерспайсе а убивает всех вокруг своего юзерспейса. На С++ такое сделать не возможно?

Date: 2022-12-25 08:36 pm (UTC)
From: [personal profile] eterevsky
Самое страшное что может случиться с C++ процессом это segfault, при котором процесс просто убивается.

В случае JVM даже этого не случается. Сам процесс JVM не должен падать, и критическая ошибка -- это просто exception который останавливает работу приложения.

С точки зрения пользователя разницы большой нет. С точки зрения программиста Java защищает от нескольких типов ошибок ценой потери производительности и эффективности использования памяти. Rust совмещает одно с другим.
Edited Date: 2022-12-25 08:37 pm (UTC)

Date: 2022-12-25 08:45 pm (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
Я неуверен, что вы хорошо знаете о том о чем говорите, особенно о самом страшном, что может случиться с С++. Ну да Бог с вами...

Что касается Rust и Go, то если они смогли избавиться от memory leaking, как это происходит в С++, то я в этом я очень глубоко сомневаюсь и тем более по поводу вашего "смелого" утверждения о "эффективности" использования памяти!
Edited Date: 2022-12-25 08:46 pm (UTC)

Date: 2022-12-25 09:09 pm (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
Плохо искал. Поищи про последний outage Roblox. Может чего поймешь, хотя наврядли…

Date: 2022-12-25 08:57 pm (UTC)
From: [personal profile] eterevsky
> Я неуверен, что вы хорошо знаете о том о чем говорите

Хе-хе =)

> Что касается Rust и Go, то если они смогли избавиться от memory leaking, как это происходит в С++

Это звучит довольно смешно после сомнений в моей компетенции.

Во-первых, memory leaking -- это вообще не проблема в современном C++. Это была и остаётся проблемой в C, где нет RAII. Проблема, которая остаётся в C++ и которая решена в Rust -- это use-after-free.

Во-вторых, Java, которую вы ставите в пример, как раз имеет проблему memory leaking потому что с garbage collection слишком легко случайно сохранить ссылку на объекты которые должны были быть удалены.

В-третьих, Go вообще не пересекается с Rust. У них принципиально разные подходы к памяти и прочим вопросам. С этой точки зрения Go работает скорее как Java.

В-четвёртых, да, Rust решает большинство проблем безопасности памяти: memory leaks, use after free, конфликты в одновременной модификации памяти из разных тредов.

Date: 2022-12-25 09:03 pm (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
Религиозный фанатик раста детектед!

Молодой человек, я в религиозных войнах не участвую так быть нахалом и тем более идиотом, не намерен…

Date: 2022-12-25 08:49 pm (UTC)
From: [personal profile] eterevsky
Да-да. Я просто решил отвести душу и посраться как в фидо 2002-го года. :) А то в последнее время везде принято слишком вежливо общаться.

Date: 2022-12-25 09:05 pm (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
Насри себе в душу, урод поганый!

Date: 2022-12-25 09:07 pm (UTC)
From: [personal profile] eterevsky
Вы не обижайтесь, я в хорошем смысле. Просто забавно спросить с человеком, который только краем уха слышал о предмете спора. :)

Date: 2022-12-25 09:10 pm (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
На обиженных Богом не обижаются, да и можешь больше не писать, с таким дерьмом как ты общаться, что против ветра плевать.

Date: 2022-12-25 09:47 pm (UTC)
From: [personal profile] permeakra
По-моему, это вообще не человек, а нейросетка.

Date: 2022-12-25 09:04 pm (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
Правильно, когда нечего сказать, тогда лучше всего навесить ярлык троллинга!

Вычеркнул, без всякого сожаления…

Profile

amarao: (Default)
amarao

February 2026

S M T W T F S
123456 7
8910111213 14
15161718192021
22232425262728

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 26th, 2026 04:14 am
Powered by Dreamwidth Studios