ru
Feedback
Блог*

Блог*

Открыть в Telegram

Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here

Больше
1 930
Подписчики
-224 часа
+17 дней
-130 день
Архив постов
#meme

Repost from N/a
photo content

💅

Repost from Bad Pixel
photo content

#prog #meme

$ cargo branch -d cleanup #трудовыебудни

#ml #video youtube.com/watch?v=efPrtcLdcdM Aka "Я обучил языковую модель на 4chan, сделал бот, который давал ответы с её помощью, и посмотрел, что произойдёт" (thanks @DogeShibu)

#prog #scala #article Есть статья от Олега Нижника об экспериментальной новой фиче в Scala 3 — capture checking, опубликованная 14 февраля. Есть OTUS, которая на Хабре известна своими многочисленными дерьмовыми переводами. Что мы получим, если их соединим? Комедию в двух актах! Акт первый (перевод статьи от OTUS от 5 марта, с плохим переводом). Акт второй (перевод той же самой статьи от OTUS от 7 июня, с другим, но всё ещё плохим переводом). Клоуны, блин. 🤡

В рот мне декоратор! Сегодня мне написали товарищи с Хабра - я, оказывается, победил в технотексте-2021 со своей статьёй про
В рот мне декоратор! Сегодня мне написали товарищи с Хабра - я, оказывается, победил в технотексте-2021 со своей статьёй про собеседование в Яндекс 🤷‍♂ И пока я жду грузовики, наполненные доверху бабосами (хотя, кажется, подарят всё-таки просто толстовку), продолжаю писать новую статью. Писать статьи сложно, и, к сожалению, идей у меня значительно больше, чем сил для их написания. Ну штош... Дорогу осилит идущий. https://habr.com/ru/post/550088/

Поздравляю коллегу по цеху, так сказать

#prog #rust Хозяйке на заметку Иногда таки возникает такая задача: взять мутабельные ссылки на два элемента слайса. В лоб написать let (x, y) = (&mut arr[i], &mut arr[j]); не получится — borrow checker не даст. И тут есть два пути. Первый — обойтись исключительно safe-кодом. В этом случае мы разделяем слайс по индексам и вынимаем ссылки на концы сегментов. Вот один из способов, как это можно сделать: fn get_two_mut<T>( arr: &mut [T], idx1: usize, idx2: usize) -> (&mut T, &mut T) { let (ifirst, isecond) = ( idx1.min(idx2), idx1.max(idx2), ); let (first, last) = match &mut arr[ifirst..=isecond] { [first, .., last] => (first, last), _ => panic!("overlapping indices"), }; if ifirst == idx1 { (first, last) } else { (last, first) } } Это рабочее решение, но тут многовато операций, да и перестановка ссылок в соответствие с индексами выглядит некрасиво. Другой путь — это использовать немного unsafe, чтобы обойти ограничения borrow checker-а: fn get_two_mut<T>( arr: &mut [T], idx1: usize, idx2: usize) -> (&mut T, &mut T) { assert_ne!(idx1, idx2); let a: *mut T = &mut arr[idx1]; let b: *mut T = &mut arr[idx2]; unsafe { (&mut *a, &mut *b) } } Что же делает эту реализацию sound? Во-первых, мы используем обычный функционал индексирования для того, чтобы получить ссылки на элементы, поэтому индексы проверяются и функция паникует, если какой-то из них окажется за пределами слайса. Во-вторых, мы явно проверяем при помощи assert_ne!, что индексы не равны, поэтому возвращаемые ссылки заведомо не указывают на одну и ту же область памяти. В-третьих, не смотря на то, что мы образуем ссылку из сырого указателя, благодаря lifetime elision время жизни этой ссылки будет такое же, как и у входной ссылки на слайс. Иными словами, мы не делаем ссылки более долгоживущими, чем надо. Может использовать этот код без ограничений.

#prog #meme

В чатах русскоязычного сообщества повторяется история от 22 ноября?

ctx (thanks @alice_said)

Арена — это место, на котором ты сходишься в схватке с борроу-чекером

Repost from RWPS::Mirror
photo content