sab123: (Default)
[personal profile] sab123
Как выяснилось, благодаря всем правилам доступа, в Рже не только нельзя сделать обычные списки, но и нельзя просто взять и отсортировать ссылки на объекты в массиве/векторе. Для сортировки нужно:

1. Создать и отсортировать вектор индексов объектов в первом массиве ("создать план")

2. Переместить ссылки из вектора во временный вектор через операцию drain, более конкретно магическим заклинанием:

 let mut old_data: Vec<Option<MyObject>> =
            data.drain(..).map(Some).collect();


3. Переместить ссылки назад в правильном порядке через операцию take:

        for data_id in plan {
            data.push(
                old_data[data_id.index()]
                    .take()
                    .expect("Item already taken during topological sort"),
            );
        }


Я не уверен, насколько при этом перемещаются ссылки, и насколько собственно данные. А в более дубовой реализации, где программист (или ИИ) поленился правильно поперемещать все, выходит еще и полное копирование через clone().

Еще раз выходит язык, непригодный для живых людей, такие эпические паттерны исполнять на каждый чих способен только ИИ, и то без присмотра норовит резать углы.

P.S. А нет, это похоже наши писатели так написали. Две опции можно поменять содержимым через swap(), так что и обычная сортировка _должна_ работать.

Date: 2026-03-31 02:02 pm (UTC)
vlad_m: (Default)
From: [personal profile] vlad_m
Как же он служил в очистке?™

Кто-то же всерьез обсуждал идею переписать Линукс на этом.

March 2026

S M T W T F S
12345 6 7
8910 11121314
151617 1819 20 21
22232425 262728
29 3031    

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 7th, 2026 07:41 am
Powered by Dreamwidth Studios