Size: a a a

2021 June 10
Блог*
#prog #cpp #article

C++20: удивить линкер четырьмя строчками кода — или сказ о том, как код студента вскрыл ошибку в компиляторе.
источник
2021 June 11
Блог*
#game

Tetrible — тетрис, но пол — это лава.

(thanks @backtracking)
источник
2021 June 12
Блог*
источник
2021 June 14
Блог*
"Является ли пинание трупа свободным действием?"

#quotes #wafflecontext
источник
2021 June 15
Блог*
Прошу прощения, поздравления были преждевременными
источник
Блог*
Рассказываем всё, что вы хотели узнать об автомобильных трюках в кино — от Чарли Чаплина до «Форсажей».

Как режиссёры используют практические и компьютерные эффекты для сцен с машинами, как готовят локации, и почему монтаж — самый важный этап для съёмки погони.
источник
2021 June 16
Блог*
#prog #rust

Пост на реддите про запрос на крейты с особенно хорошим кодом. Ну и ответами, разумеется.

(thanks @ozkriff)
источник
2021 June 17
Блог*
#prog #rust

Документация rustc, рассказывающая о том, как компилятор проверяет, что в match нет недостижимых ветвей и как он проверяет, что в match рассмотрены все возможные варианты (спойлер: вторая задача сводится к первой путём добавления _).
источник
Блог*
Кстати: технически в Rust нет сущностей без обобщённых параметров, а есть лишь сущности с нулевым количеством обобщённых параметров. Во всяком случае, пустую турборыбу (::<>) можно воткнуть практически везде:

fn fishy() {
   assert_eq!(String::from("><>"),
              String::<>::from::<>("><>").chars::<>().rev::<>().collect::<String>());
}
источник
2021 June 18
Блог*
@caralice с днём рождения! 🎉🥳
источник
Блог*
#meme
источник
Блог*
источник
2021 June 21
Блог*
#prog #rust

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

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

Но начну я, пожалуй, с парочки вещей, которые мне особенно примечательны по личным причинам. Как я уже рассказывал, я реализовал индексацию слайсов при помощи пар std::op::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 — и эти чаянья вы итоге не оправдались. Возможно, так же будет с юникодными идентификаторами, поживём — увидим.

Но у меня все ещё горит.
источник
Блог*
#music

Цепляющий электронный бит

Знатоки могут понять, во что я недавно играл.
источник
Блог*
#prog #sql

Отдельные выпуски уже репостил. Годнота, рекомендую к прочтению
источник
Блог*
источник
2021 June 22
Блог*
mod a {
   use self::super::a::{self};
}
источник
Блог*
источник
2021 June 23
Блог*
Лайфхаки для ютуба
document.getElementsByTagName("video")[0].playbackRate = 3
источник
Блог*
#prog #meme
источник