Блог*
前往频道在 Telegram
Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here
显示更多1 928
订阅者
+324 小时
+57 天
-630 天
帖子存档
1 928
#prog #rust #serde #article
Faster Rust Serialization
Или несколько советов о том, как делать меньше лишней работы при сериализации с использованием serde.
1 928
#prog #rust #rustlib
cargo-debstatus — инструмент для проверки того, насколько проект пригоден к опакечиванию в Debian.
cargo-deb — инструмент для собственно проведения этой операции.
cargo-dist — инструмент для автоматизации публикации новых релизов, с возможностью автоматически генерировать скрипты для релиза артефактов для CI:
For instance, enabling GitHub CI with
cargo dist init will generate release.yml, which implements the full pipeline of plan, build, host, publish, announce:
🔹Plan
🔸Waits for you to push a git tag for a new version (v1.0.0, my-app-v1.0.0, my-app/1.0.0, ...)
🔸Selects what apps in your workspace to announce new releases for based on that tag
🔸Generates a machine-readable manifest with changelogs and build plans
🔹Build
🔸Spins up machines for each platform you support
🔸Builds your binaries and tarballs
🔸Builds installers for your binaries
🔹Publish:
🔸Uploads to package managers
🔹Host + Announce:
🔸Creates (or edits) a GitHub Release
🔸Uploads build artifacts to the Release
🔸Adds relevant release notes from your RELEASES/CHANGELOG1 928
Repost from Бэкдор
Максимальный киберпанк: на базе нейронки Runway запустили телевидение. Это бесконечный стрим рандомных нейророликов и трейлеров, будто из параллельных вселенных.
Если смотрели «Рик и Морти» и помните Межвселенское ТВ — это оно. Залипать тут.
@whackdoor
1 928
#video
ANIME ROCK, PAPER, SCISSORS 2
Впечатляет, отчасти из-за увеличенного хронометража, отчасти из-за того, что удалось создать убедительные молодые версии персонажей, сыгранных теми же взрослыми актёрами.
Но в некоторых аспектах это скорее шаг назад: именно, анимация рта серьёзно пострадала. Во многих сценах рот говорящего человека не шевелится, а в парочке сцен с крупным планом AI сделал персонажу два ряда зубов.
Ну и, конечно, видео о создании.
1 928
Repost from Segment@tion fault
Если ваша работа кажется вам бесполезной, вспомните что кто-то собирает пакеты cargo и rustc для Debian.
1 928
#prog
Отдельное изменение в стандартной библиотеке #rust заслуживает отдельного упоминания — не потому, что оно затрагивает многих пользователей, но потому, что изменение может привести к трудно диагностируемым ошибкам. Именно, после этого PR методы
strong_count и weak_count на Arc и sync::Weak загружают соответствующие счётчики с порядком Relaxed вместо Acquire. Если вы использовали эти методы в каком-то сложном lockless коде, то вам может понадобиться вставить Acquire memory fence.
На всякий случай: если вы просто хотите получить уникальную ссылку на содержимое Arc, то вам лучше использовать методы Arc::get_mut и Arc::make_mut. Код вида
if Arc::strong_count(&arc_ptr) == 1 {
let ptr = unsafe { &mut *(Arc::as_ptr(&arc_ptr) as *mut _) };
// ...
}
практически никогда не является верным из-за возможных гонок.1 928
error: cannot construct `HashMap<_, _, _>` with struct literal syntax due to private fields
--> $DIR/suggest-box-new.rs:16:13
|
LL | let _ = std::collections::HashMap {};
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: ... and other private field `base` that was not provided
help: you might have meant to use an associated function to build this type
|
LL | let _ = std::collections::HashMap::new();
| ~~~~~~~
LL | let _ = std::collections::HashMap::with_capacity(_);
| ~~~~~~~~~~~~~~~~~~
LL | let _ = std::collections::HashMap::with_hasher(_);
| ~~~~~~~~~~~~~~~~
LL | let _ = std::collections::HashMap::with_capacity_and_hasher(_, _);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
help: consider using the `Default` trait
|
LL | let _ = <std::collections::HashMap as std::default::Default>::default();
| +
Изменение важно также и тем, что помогает новичкам узнавать о доступных конструкторах без ручного чтения документации.
▪️В fmt исправлен баг с некорректным округлением при использовании экспоненциальной нотации.
▪️В Clippy внесли несколько новых линтов. Отмечу только парочку:
🔸Вы знали, что один и тот же тип не может реализовывать одновременно Borrow<str>, Borrow<[u8]> и Hash? Теперь знаете. А новый линт impl_hash_borrow_with_str_and_bytes объяснит почему: str и [u8] хешируются по разному.
🔸Path::join замещает путь целиком, если добавляемый путь является абсолютным. Это документированное, но неочевидное поведение. Линт join_absolute_paths предупреждает о случаях, когда это происходит безусловно — почти наверняка это не то, чего хочет программист.1 928
#prog #rust хайлайты:
▪️На реализациях метода
Debug::fmt, сгенерированных derive-макросом, теперь добавляется #[inline]. Суммарно это привело к меньшему времени компиляции (!) на громадном количестве компиляторных бенчмарков. Подробнее в разборе (ищите Emit #[inline] on derive(Debug)).
▪️Парсер теперь восстанавливается от ключевых слов перед fn с дубликатами или в неправильном порядке. (для справки, порядок pub, default, const, async, unsafe, extern)
▪️Компилятор теперь предупреждает при использование нестабильной фичи через флаг -Ctarget-feature. Да, раньше не предупреждал.
▪️Стабилизировали Option::inspect и Result::{inspect, inspect_err}:
impl Option<T> {
pub fn inspect<F: FnOnce(&T)>(self, f: F) -> Self;
}
impl Result<T, E> {
pub fn inspect<F: FnOnce(&T)>(self, f: F) -> Self;
pub fn inspect_err<F: FnOnce(&E)>(self, f: F) -> Self;
}
▪️Как я рассказывал, в модуле fmt стандартной библиотеки есть хелперы DebugList и прочие для облегчения кастомной реализации Debug. Их недостатком можно назвать тот факт, что методы для форматирования очередной порции структуры (например, DebugList::entry) принимают на вход значение, реализующее Debug, и вызывают на нём метод Debug::fmt. Как рассказывается в мотивации, это на практике приводило к использованию одноразовых типов, необходимых лишь ради их реализации Debug. Теперь к этим типам добавили методы, которые форматируют очередную порцию при помощи переданной аргументом функции, принимающей на вход ссылку на fmt::Formatter.
▪️В настоящий момент Rust поддерживает атрибуты на item-ах, но не на отдельных выражениях. В частности, в Rust нельзя непосредственно навесить атрибут пару атрибутов #[cfg(..)] на два выражения в конце функции (которые предназначены для возврата значения из функции). Попытка записать такой код приводила к не самой полезной ошибке Unexpected token: expected `;`, found `#`. Esteban Kuber внёс изменение в парсер, которое распознаёт эту ситуацию и предлагает обходной путь: добавление точки с запятой или оборачивание выражений в фигурные скобки.
▪️Компилятор теперь предупреждает о неиспользуемых Pin<P>, где на P есть атрибут #[must_use]. В частности, теперь компилятор предупреждает о коде вроде такого (пример из PR):
fn foo() -> Pin<Box<dyn Future<Output = i32>>> {
Box::pin(async { 42 })
}
// call `foo`, but forget to await the result
foo();
▪️Если выражение с оператором сравнения не компилируется из-за того, что типы разные за вычетом ссылки с одной стороны, то компилятор теперь предлагает разыменовать ссылку вместо взятия ссылки для другого аргумента. Пример:
fn main() {
let i: &i64 = &1;
if i < 0 {}
}
До:
error[E0308]: mismatched types
--> src/main.rs:3:12
|
3 | if i < 0 {}
| ^ expected `&i64`, found integer
|
help: consider borrowing here
|
3 | if i < &0 {}
| +
После:
error[E0308]: mismatched types
--> src/main.rs:3:12
|
3 | if i < 0 {}
| ^ expected `&i64`, found integer
|
help: consider dereferencing the borrow
|
3 | if *i < 0 {}
| +
▪️Как я уже писал, компилятор предлагает вызвать конструктор при попытке сконструировать структуру с приватными полями. Реализовано это было довольно костыльно: компилятор просто искал метод на типе с именем new и предлагал его, вообще не смотря на типы. Теперь компилятор предлагает все методы, которые возвращают Self. Кусочек из тестов:1 928
Repost from The After Times
😘 Хакеры Гей-Фурри взломали ядерную лабораторию США и требуют начать исследования по созданию кошкодевочек
В недавнем инциденте кибербезопасности, группа хакеров SiegedSec, самоопределяющаяся как "Гей Фурри Хакеры", осуществила взлом Американской ядерной лаборатории INL. Эта группа, известная своими атаками на серверы НАТО, на этот раз получила доступ к персональным данным сотрудников INL, включая социальные номера и домашние адреса.
В ответ на взлом, хакеры предложили необычную сделку лаборатории:
Мы готовы заключить сделку с INL. Если они начнут исследования по созданию в реальной жизни кошкодевочек, то мы все удалим.Помимо прочего, SiegedSec известна своими политическими мотивами, включая атаки на правительственные организации в знак протеста против нарушений прав человека и дискредитацию трансгендеров. INL, филиал Министерства энергетики США, работает над различными проектами, в том числе в области ядерных реакторов и устойчивой энергетики, насчитывая более 5000 сотрудников.
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
