#prog #rust #rustreleasenotes
Да, да, я знаю, что я лениваяжягодица, не напоминайте.
Вышел Rust 1.53.0! Как обычно, я не буду разбирать релиз целиком, а выделю лишь то, что привлекло лично моё внимание.
Но начну я, пожалуй, с парочки вещей, которые мне особенно примечательны по личным причинам. Как я уже рассказывал, я реализовал индексацию слайсов при помощи пар std::ops::Bound, и в этой версии моя реализация наконец докатилась до стабильной версии Rust. Очень приятно видеть изменение в release notes и осознавать, что ты непосредственно приложил руку к тому, чтобы этот пункт появился. Ещё одно примечательное изменение — это стабилизация Vec::extend_from_within, реализованного замечательным @WaffleLapkin. Жму руку, коллега!
Перейдём теперь к изменениям в языке. Самое, пожалуй, крутое — это то, что или-паттерны теперь могут быть вложенными (пример беззастенчиво стырю из блога):
Ещё одна не менее заметная вещь — теперь можно итерироваться напрямую по массивам, то есть наконец-то можно писать
А теперь перейдём к полезным плюшкам из стандартной библиотеки.
То, что, пожалуй, затронет почти всех — это то, что для чисел с плавающей точкой теперь реализованы парсинг и печать специальных значений в соответствии с тем, как того требует стандарт IEEE 754. Наиболее заметное изменение — это то, что теперь негативный ноль всегда печатается со знаком минус. На этом уже обожглись авторы различных численных библиотек.
В модуль
До сих пор я старательно обходил стороной слона в комнате, но теперь придётся представить и его: в Rust теперь можно писать идентификаторы из не ASCII символов. Честно, у меня с этого горит. Никакой реальной нужды в этом нет, в tracking issue всё ещё висит вопрос насчёт RTL, и само наличие этой фичи открывает возможность написания проектов, фактически, не на английском языке, что резко увеличивает порог входа внешних контрибуторов и потому вообще-то идёт вразрез с декларируемыми ценностями Rust-сообщества. Как и ожидалось, пропихнул это Центрил, который уже известен своими по меньшей мере сомнительными предложениями.
С другой стороны, когда Rust только вышел, хейтеры говорили, что все проекты поголовно будут в unsafe — и эти чаянья вы итоге не оправдались. Возможно, так же будет с юникодными идентификаторами, поживём — увидим.
Но у меня все ещё горит.
Да, да, я знаю, что я ленивая
Вышел 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 — и эти чаянья вы итоге не оправдались. Возможно, так же будет с юникодными идентификаторами, поживём — увидим.
Но у меня все ещё горит.
Forwarded from There will be no singularity
Все выпуски SQL-TIL (чтобы вы могли пошарить):
postgresql edition:
1) https://t.me/nosingularity/535
2) https://t.me/nosingularity/541
3) https://t.me/nosingularity/548
4) https://t.me/nosingularity/572
snowflake edition:
5) https://t.me/nosingularity/582
6) https://t.me/nosingularity/602
7) https://t.me/nosingularity/753 и https://t.me/nosingularity/754
8) https://t.me/nosingularity/762
mix:
9) https://t.me/nosingularity/755
10) https://t.me/nosingularity/803 и https://t.me/nosingularity/804
postgresql edition:
1) https://t.me/nosingularity/535
2) https://t.me/nosingularity/541
3) https://t.me/nosingularity/548
4) https://t.me/nosingularity/572
snowflake edition:
5) https://t.me/nosingularity/582
6) https://t.me/nosingularity/602
7) https://t.me/nosingularity/753 и https://t.me/nosingularity/754
8) https://t.me/nosingularity/762
mix:
9) https://t.me/nosingularity/755
10) https://t.me/nosingularity/803 и https://t.me/nosingularity/804
Forwarded from мне не нравится реальность (вафель 🧇🍓)
mod a {
use self::super::a::{self};
}
Forwarded from Mirror of Mind
Лайфхаки для ютуба
document.getElementsByTagName("video")[0].playbackRate =
3"И вообще, как известно, программисты делятся на две категории: тех, кто ненавидит C++ и пишет не на нём, и тех, кто ненавидит C++ и пишет на нём."
#prog #cpp #quotes
Источник
#prog #cpp #quotes
Источник
Хабр
Почему я всё ещё люблю C, но при этом терпеть не могу C++?
Мне на удивление часто приходится говорить о том, почему мне всё ещё нравится язык C, и о том, почему я плохо отношусь к C++. Поэтому я решил, что мне стоит об этом написать, а не снова и снова...
Forwarded from Backtracking (Дима Веснин)
Алексей Яковлев, художник из Moon Studios, выпустил бесплатный генератор панелек для блендера 2.93 и выше
в нём можно настраивать размеры панельки, частотность разных типов окон, подъездов и кучу ещё всего интересного
artstation, gumroad ($0+)
в нём можно настраивать размеры панельки, частотность разных типов окон, подъездов и кучу ещё всего интересного
artstation, gumroad ($0+)
Forwarded from oleg_log (Oleg Kovalov)