1.83K subscribers
3.24K photos
127 videos
15 files
3.52K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
@caralice с днём рождения! 🎉🥳
Forwarded from livin' in a society
#prog #rust #rustreleasenotes

Да, да, я знаю, что я ленивая жягодица, не напоминайте.

Вышел Rust 1.53.0! Как обычно, я не буду разбирать релиз целиком, а выделю лишь то, что привлекло лично моё внимание.

Но начну я, пожалуй, с парочки вещей, которые мне особенно примечательны по личным причинам. Как я уже рассказывал, я реализовал индексацию слайсов при помощи пар std::ops::Bound, и в этой версии моя реализация наконец докатилась до стабильной версии Rust. Очень приятно видеть изменение в release notes и осознавать, что ты непосредственно приложил руку к тому, чтобы этот пункт появился. Ещё одно примечательное изменение — это стабилизация Vec::extend_from_within, реализованного замечательным @WaffleLapkin. Жму руку, коллега!

Перейдём теперь к изменениям в языке. Самое, пожалуй, крутое — это то, что или-паттерны теперь могут быть вложенными (пример беззастенчиво стырю из блога):

match result {
Ok(Some(1 | 2)) => { .. }
Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. }
_ => { .. }
}

Готов поспорить, через несколько релизов растоманы будут удивляться, как они раньше без этого жили (как раньше жили без pattern match ergonomics).

Ещё одна не менее заметная вещь — теперь можно итерироваться напрямую по массивам, то есть наконец-то можно писать for x in [1, 2, 3] вместо жутко многословного array::IntoIter::new. Но есть один нюанс: вызов .into_iter() на массиве всё ещё возвращает итератор, возвращающий ссылки на элементы, как и раньше — и это при том, что IntoIter::into_iter(array) работает нормально. Как и ожидалось, это поведение реализовано при помощи чудовищного костыля: трейт IntoIterator (именно сам трейт, а не его реализация для массива) помечен специально созданным для этого атрибутом #[rustc_skip_array_during_method_dispatch] с названием, которое говорит само за себя. И, более, этот атрибут работает (точнее, планируется) только в edition-ах ниже 2021. Хороший пример того, как обратная совместимость заставляет принимать отвратительные технические решения.

А теперь перейдём к полезным плюшкам из стандартной библиотеки.

То, что, пожалуй, затронет почти всех — это то, что для чисел с плавающей точкой теперь реализованы парсинг и печать специальных значений в соответствии с тем, как того требует стандарт IEEE 754. Наиболее заметное изменение — это то, что теперь негативный ноль всегда печатается со знаком минус. На этом уже обожглись авторы различных численных библиотек.

В модуль cmp наконец-то добавлены функции {min, max}_by{, _key}. Не самая часто нужная вещь, но ранее, когда она требовалось, отсутствие этого функционала вызывало недоумение.

BTreeMap и BTreeSet получили по методу retain, которые удаляют из коллекций элементы, которые не удовлетворяют переданному предикату. Опять-таки, отсутствие этого метода до этих самых выглядело странно с учётом того, что аналогичный метод на векторе был с самой первой версии, а у HashMap и HashSet — с версии 1.18.

Option::insert замещает значение в Option и возвращает ссылку на него, и, в отличие от Option::get_or_insert, делает это безусловно, а не только при отсутствующем значении.

{integer}::BITS у всех примитивных численных типов. Минус строчки с mem::size_of::<type>() * 8.

До сих пор я старательно обходил стороной слона в комнате, но теперь придётся представить и его: в Rust теперь можно писать идентификаторы из не ASCII символов. Честно, у меня с этого горит. Никакой реальной нужды в этом нет, в tracking issue всё ещё висит вопрос насчёт RTL, и само наличие этой фичи открывает возможность написания проектов, фактически, не на английском языке, что резко увеличивает порог входа внешних контрибуторов и потому вообще-то идёт вразрез с декларируемыми ценностями Rust-сообщества. Как и ожидалось, пропихнул это Центрил, который уже известен своими по меньшей мере сомнительными предложениями.

С другой стороны, когда Rust только вышел, хейтеры говорили, что все проекты поголовно будут в unsafe — и эти чаянья вы итоге не оправдались. Возможно, так же будет с юникодными идентификаторами, поживём — увидим.

Но у меня все ещё горит.
#prog #sql

Отдельные выпуски уже репостил. Годнота, рекомендую к прочтению
Forwarded from мне не нравится реальность (вафель 🧇🍓)
mod a {
use self::super::a::{self};
}
Forwarded from какография
Forwarded from Mirror of Mind
Лайфхаки для ютуба
document.getElementsByTagName("video")[0].playbackRate = 3
Forwarded from Санечка Ъысь (Anna Weiss)
Философия — это бесполезный хлам.
👎7👍1
А Вафель (@meowaffle) тем временем сдал все экзамены! Поздравляю! 🎉
🤮1
Forwarded from Backtracking (Дима Веснин)
Алексей Яковлев, художник из Moon Studios, выпустил бесплатный генератор панелек для блендера 2.93 и выше

в нём можно настраивать размеры панельки, частотность разных типов окон, подъездов и кучу ещё всего интересного

artstation, gumroad ($0+)
Молящийся Архону ❤️