Интернеты говорят, что во-первых 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:41 pm (UTC)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 04:23 pm (UTC)no subject
Date: 2022-12-24 06:10 pm (UTC)> многоточия,
> двоеточие,
> точка с запятой,
> скобки трёх видов,
это всё есть даже не в С++, а в Си
кстати {} скобки в паскале тоже приняли
> подчеркивание
из Пролога
в C/C++ принято как соглашение во многих код стайлах
> все это говорит о том, что в голове тех кто создавал этот язык - хаос и дурдом ромашка
мнение игнорамуса
no subject
Date: 2022-12-24 07:19 pm (UTC)Что касается тех кто создавал языки для машин фон Неймана, то у них в головах не то, что хаос, а просто обычная импотенция из-за бессилия и тупика куда их загнала архитектура фон Неймана, которой скоро уже исполнится 100 лет и ее давно пора выкинуть на свалку истории, но смогут это сделать нейросети и ИИ? Нам осталось подождать еще совсем немного!
no subject
Date: 2022-12-24 08:10 pm (UTC)Насчёт "выкинуть на свалку"... Кто-то показал, что нейросети тьюринг-полные? Мне кажется, строго наоборот. Я с трудом себе могу представить зависшую нейросеть, а это означает, что какой-то класс алгоритмов не реализуем на нейросети, что в свою очередь означает, что она не тьюринг-полная.
Алсо, я видел как выглядит "профессиональное" описание картинки для StableDiffusion, и у меня нет ощущения, что получившийся мунспик сильно отличается от лиспа. Особенно, с учётом количества скобочек.
no subject
Date: 2022-12-24 08:13 pm (UTC)Я покрутил эту идею в голове... Основная проблема, что мы не знаем деления по слоям. Предположим, что мы его знаем. В этом случае мы можем формировать ноды n-1 слоя из нод n'ого слоя, итерацией (в любом порядке, кстати, вовсе не обязательно делать в обратном). Звучит разумно. Осталось придумать алгоритм деления на слои. В сокращённой записи последние слои обрезаны по началу последовательности None (допустим, реконструируемо)...
Первый слой - один элемент, второй - два. За каждый non-null мы добавляем к числу элементов следующего уровня два, за каждый null - 0.
Да, выглядит решаемо. Спасибо за идею. Попробую.
no subject
Date: 2022-12-24 08:15 pm (UTC)Да, я как раз с этой идеей бегаю. В принципе, деление по слоям восстаналиваемо простой итерацией (посчётом числа не-none в текущем слое). Будет некоторое страдание с восстановлением none'ов на нижних слоях...
no subject
Date: 2022-12-24 08:18 pm (UTC)no subject
Date: 2022-12-24 08:18 pm (UTC)Пока что я свою карьеру всегда поворачивал в сторону интересного, а потом оказывалось, что за это больше платят. Если бы я слушался людей и делал то, что нужно бизнесу здесь-и-сейчас, то я сначала бы выучил 1С и был бы гуру виндовых серверов с видеонаблюдением, ip-телефонии и бы мастером chef'а. Но всё это мне не понравилось и я его скипнул. Так же как скипнул "некрасивый" перл с powershell и ровно так же как сейчас меня не особо вдохновляет тераформ.
no subject
Date: 2022-12-24 08:19 pm (UTC)Тест Тьюринга или показать полноту по Тьюрингу? Так сказать, крайне различные вещи.
no subject
Date: 2022-12-24 08:22 pm (UTC)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 09:54 pm (UTC)Спасибо за предсказания, но я со своей карьерой как-нибудь сам разберусь, чай не первый десяток лет занимаюсь.
no subject
Date: 2022-12-24 11:20 pm (UTC)no subject
Date: 2022-12-24 11:24 pm (UTC)no subject
Date: 2022-12-25 02:50 am (UTC)Ты немного заблуждаешься. Платят тебе больше из-за того, что тебе интересно. Я в том смысле - что ты всё делаешь правильно. :)
no subject
Date: 2022-12-25 07:14 am (UTC)no subject
Date: 2022-12-25 07:22 am (UTC)Что-то я не понял твой код. Выглядит как будто ты делаешь дерево высотой ровно 2. Можешь линкануть задачу, которую ты решаешь?
no subject
Date: 2022-12-25 07:34 am (UTC)Чтобы одновременно выполнить следующие условия:
1. Эффективность: дать возможность писать realtime код, без overhead'а в виде GC и прочего рантайма.
2. Достаточно гибкие абстракции, в частности какой-то вариант generics.
3. Возможность писать относительно безопасный код, хотя бы если следовать определённым правилам.
4. Возможность работать с большим объёмом кода, на уровне сотен тысяч и миллионов строк.
Rust и C++ -- единственные языки, которые удовлетворяют всем этим условиям одновременно.
no subject
Date: 2022-12-25 11:27 am (UTC)ЗЫ. и не забудь проверить свой код на работу с пустым деревом. Если ты хочешь эффективное дерево, то там есть сложности.