The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск языка программирования Rust 1.51, opennews (??), 26-Мрт-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


197. "Выпуск языка программирования Rust 1.51"  +1 +/
Сообщение от Ordu (ok), 26-Мрт-21, 21:59 
> Помоему язык развивается в противоположенную от упрощения сторону.

Не, тут пример показывает не простоту, а возможность. into_iter реально не хватало для array, потому что если хочется сделать что-то типа:

    ...
    .map(|arr| arr.into_iter())
    .flatten()
    .collect();


То это нифига не работало, поскольку arr никак в into_iter, а arr.iter() -- это итератор, который ссылается на arr, и если arr прекращает существовать, то ссылка оказывается висящей. Здесь же, arr существует только внутри замыкания передающегося в map, и собственно фишка в том, чтобы итератор пожил подольше, чтобы все эти итераторы можно было бы flatten в один единый итератор по всем элементам, чтобы потом сделать collect.

Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

200. "Выпуск языка программирования Rust 1.51"  –1 +/
Сообщение от Урри (ok), 26-Мрт-21, 22:12 
Охренеть какие сложности просто для того, чтобы обработать массив.

Сразу возникает вопрос - а почему не сделать было сразу нормальную итерацию по массивам? Почему надо навешивать очередную заплатку поверху?

Впрочем, вопрос риторический.

Ответить | Правка | Наверх | Cообщить модератору

208. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Ordu (ok), 26-Мрт-21, 22:42 
> Сразу возникает вопрос - а почему не сделать было сразу нормальную итерацию
> по массивам? Почему надо навешивать очередную заплатку поверху?

Это безопасность. Если в коде выше заменить into_iter() на iter(), то borrow-checker пошлёт тебя куда подальше, потому как итератор содержит в себе ссылку на локальный массив лежащей в переменной-аргументе arr, но после выхода из лямбды локальный массив перестанет существовать, и получается, что пытаясь сделать такое, ты пытался вернуть указатель на локальную переменную.

Вот тут оказывается полезным into_iter, который не просто так итератор по внешнему по отношению к нему массиву, а итератор который владеет массивом, по которому он итерирует. То есть этот массив будет существовать столько, сколько существует итератор.

Ответить | Правка | Наверх | Cообщить модератору

252. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Аноним (252), 27-Мрт-21, 08:49 
А все потому что в новости не удосужились нормально объяснить.
Ответить | Правка | Наверх | Cообщить модератору

269. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Ordu (ok), 27-Мрт-21, 16:02 
> А все потому что в новости не удосужились нормально объяснить.

Мне нормально. А тем, кто не понимает, зачем это надо, явно это не надо. Ну, реально, я понял с первого взгляда в чём фишка благодаря тому, что я как-то пытался отрисовать палитрованое изображение, заменяя номера цветов на цвет из палитры, добавляя к нему alpha компоненту, и впоролся в то, что когда я итератор по номерам цветов из палитры превращаю в итератор по rgba четвёркам, я потом не могу из этого итератора по [u8; 4] сделать итератор по итераторам по [u8; 4]. Надо было либо писать что-то типа IntoIter для [u8; 4], либо закапывать функциональщину и переписывать императивно. Кстати императивно лучше вышло, потому что таким образом я смог предвыделить память сразу под все четвёрки rgba. Но не так идеоматично.

Ответить | Правка | Наверх | Cообщить модератору

310. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Онаним (?), 28-Мрт-21, 21:59 
... когда я итератор по номерам цветов из палитры превращаю в итератор по rgba четвёркам, я потом не могу из этого итератора по [u8; 4] сделать итератор по итераторам по [u8; 4] ...

На этом месте стоило перестать курить раст, взять C, и сделать всё по-человечески, без итераторов.

Ответить | Правка | Наверх | Cообщить модератору

311. "Выпуск языка программирования Rust 1.51"  +1 +/
Сообщение от Онаним (?), 28-Мрт-21, 22:00 
(я охренел только от одного описания процесса, на код кмк там лучше даже не смотреть уже)
Ответить | Правка | К родителю #269 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру