en
Feedback
Блог*

Блог*

Open in Telegram

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

Show more
1 927
Subscribers
+124 hours
+17 days
-530 days
Posts Archive
#prog #rust #serde #article Faster Rust Serialization Или несколько советов о том, как делать меньше лишней работы при сериализации с использованием serde.

#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/CHANGELOG

#prog #rust #rustlib copypasta — библиотека для кроссплатформерной работы с буфером обмена

Repost from Бэкдор
Максимальный киберпанк: на базе нейронки Runway запустили телевидение. Это бесконечный стрим рандомных нейророликов и трейлеров, будто из параллельных вселенных. Если смотрели «Рик и Морти» и помните Межвселенское ТВ — это оно. Залипать тут. @whackdoor

Наиболее практичное применение #ml

#video ANIME ROCK, PAPER, SCISSORS 2 Впечатляет, отчасти из-за увеличенного хронометража, отчасти из-за того, что удалось создать убедительные молодые версии персонажей, сыгранных теми же взрослыми актёрами. Но в некоторых аспектах это скорее шаг назад: именно, анимация рта серьёзно пострадала. Во многих сценах рот говорящего человека не шевелится, а в парочке сцен с крупным планом AI сделал персонажу два ряда зубов. Ну и, конечно, видео о создании.

Repost from optozorax
У меня появился новый товарищ
У меня появился новый товарищ

#justrusteceanthings

Repost from Segment@tion fault
Если ваша работа кажется вам бесполезной, вспомните что кто-то собирает пакеты cargo и rustc для Debian.

#prog #rust Апкаст трейтов стабилизировали буквально вчера!

Repost from Meme Trap
photo content

Немного сексисткий #meme

#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 _) };
    // ...
}
практически никогда не является верным из-за возможных гонок.

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 предупреждает о случаях, когда это происходит безусловно — почти наверняка это не то, чего хочет программист.

#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. Кусочек из тестов:

Что-то вот этот пост уже и не выглядит таким уж нереалистичным

Всё, меняю хештег itsec на catgirls

Repost from The After Times
😘 Хакеры Гей-Фурри взломали ядерную лабораторию США и требуют начать исследования по созданию кошкодевочек В недавнем инциде
😘 Хакеры Гей-Фурри взломали ядерную лабораторию США и требуют начать исследования по созданию кошкодевочек В недавнем инциденте кибербезопасности, группа хакеров SiegedSec, самоопределяющаяся как "Гей Фурри Хакеры", осуществила взлом Американской ядерной лаборатории INL. Эта группа, известная своими атаками на серверы НАТО, на этот раз получила доступ к персональным данным сотрудников INL, включая социальные номера и домашние адреса. В ответ на взлом, хакеры предложили необычную сделку лаборатории:
Мы готовы заключить сделку с INL. Если они начнут исследования по созданию в реальной жизни кошкодевочек, то мы все удалим.
Помимо прочего, SiegedSec известна своими политическими мотивами, включая атаки на правительственные организации в знак протеста против нарушений прав человека и дискредитацию трансгендеров. INL, филиал Министерства энергетики США, работает над различными проектами, в том числе в области ядерных реакторов и устойчивой энергетики, насчитывая более 5000 сотрудников.