Интернеты говорят, что во-первых Rc<RefCell> не идиоматично для Rust (деревья правильно держать как банальные вектора, содержащие в себе вектора векторов). Во-вторых, я, в целом, всё правильно сделал.
После некоторого кумекания получилось вот так вот, и я не вижу как его сделать существенно компактнее. Может быть, можно уйти от Enum и бального true/false хватит?
Да, получилось.
Что меня смущает? Изобилие as_ref().cloned(). Ща буду думать...
После некоторого кумекания получилось вот так вот, и я не вижу как его сделать существенно компактнее. Может быть, можно уйти от 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(). Ща буду думать...
no subject
Date: 2022-12-24 02:54 pm (UTC)Чего? Ты просто хочешь обесценить? Начни с чего-то более почтенного. PL/I?
no subject
Date: 2022-12-24 03:25 pm (UTC)Создание языков, по принципу, чтобы его всю жизнь учить и не выучить ведёт в тупик и с этим надо что-то делать, но скорее всего это проблема под силу решить только ИИ, который просто вытеснит и заменит миллионы программистов занимающиеся сизифовым трудом, переписывая с одного языка на другой одни и те же задачи!
no subject
Date: 2022-12-24 03:30 pm (UTC)Я не "всю жизнь учу язык". У меня язык программирования, за который мне деньги платят, это jinja. С примесью питона, и всё завёрнуто я ямл (который параметризируют jinj'ой). И чем дальше я со всем этим вожусь, тем меньше мне он нравится, хоть мне и платят всё больше за это.
Rust - для души. Я им занимаюсь в свободное от работы время (а времени у меня мало). Это невероятная дисциплина ума. В том незначительном объёме, в котором я его использовал для практических задач, я задачи решал, но у меня очень много времени уходило на доучивание кусков, которые я к тому моменту ещё не знал хорошо. Будет с этого практический выхлоп или нет, я не знаю, но язык мне интересен сам по себе, в отрыве от работы.
no subject
Date: 2022-12-24 03:42 pm (UTC)Будут ли платить за раст? Конечно будут, пока не напишут другой бред сивой кобылы, за который заплатят больше!
Что касается души, то не продавайте ее дьяволу за бесценок!
no subject
Date: 2022-12-24 08:18 pm (UTC)Пока что я свою карьеру всегда поворачивал в сторону интересного, а потом оказывалось, что за это больше платят. Если бы я слушался людей и делал то, что нужно бизнесу здесь-и-сейчас, то я сначала бы выучил 1С и был бы гуру виндовых серверов с видеонаблюдением, ip-телефонии и бы мастером chef'а. Но всё это мне не понравилось и я его скипнул. Так же как скипнул "некрасивый" перл с powershell и ровно так же как сейчас меня не особо вдохновляет тераформ.
no subject
Date: 2022-12-24 08:27 pm (UTC)no subject
Date: 2022-12-24 09:54 pm (UTC)Спасибо за предсказания, но я со своей карьерой как-нибудь сам разберусь, чай не первый десяток лет занимаюсь.
no subject
Date: 2022-12-24 11:20 pm (UTC)no subject
Date: 2022-12-25 02:50 am (UTC)Ты немного заблуждаешься. Платят тебе больше из-за того, что тебе интересно. Я в том смысле - что ты всё делаешь правильно. :)
no subject
Date: 2022-12-25 12:44 pm (UTC)Ну, я понимаю, что это становится конкурентным преимуществом, но я в целом, смотрю на индустрию - масса тоскливых тенхологий просто не взлетела или умерла. Тот же шеф, от него пахло дурным инжинирингом. Как только я увидел из chef-sdk, 600Мб deb-файл с несколькими завенодоренными копиями erlang'а, мне стало настолько неприятно, что я его скипнул, хотя и были объективные причины учить. Итог - progressive.
Вот сейчас мне так же неприятно от того, куда катится вся это ямло-кодла.
no subject
Date: 2022-12-25 01:13 pm (UTC)no subject
Date: 2022-12-25 01:30 pm (UTC)А при чём systemd-то? Он взял на себя огромный кусок легаси, и реализация в systemd - отличная. За годы работы с ним, я знаю единицы багов, и ни одного архитектурного бага вида "ну не предусмотрели". В целом, systemd/networkd - отличные штуки. timesyncd - сложнее, но 90% проблем проистекает из-за того, что он не сервер и его трудно мониторить на актуальность.
Вот на конструкции с оверлейными образами от вендоров я смотрю с опаской и недоверием, это да.
no subject
Date: 2022-12-25 03:04 pm (UTC)