Forwarded from The After Times
В недавнем инциденте кибербезопасности, группа хакеров SiegedSec, самоопределяющаяся как "Гей Фурри Хакеры", осуществила взлом Американской ядерной лаборатории INL. Эта группа, известная своими атаками на серверы НАТО, на этот раз получила доступ к персональным данным сотрудников INL, включая социальные номера и домашние адреса.
В ответ на взлом, хакеры предложили необычную сделку лаборатории:
Мы готовы заключить сделку с INL. Если они начнут исследования по созданию в реальной жизни кошкодевочек, то мы все удалим.
Помимо прочего, SiegedSec известна своими политическими мотивами, включая атаки на правительственные организации в знак протеста против нарушений прав человека и дискредитацию трансгендеров.
INL, филиал Министерства энергетики США, работает над различными проектами, в том числе в области ядерных реакторов и устойчивой энергетики, насчитывая более 5000 сотрудников.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰13😁2👎1
The After Times
Всё, меняю хештег itsec на catgirls
🤡5
Афиша Daily
«ТНТ Music» заблюрил радугу в клипе кей-поп-группы Seventeen «God Of Music» — вместо нее показали черно-белое изображение. В интернете предположили, что канал опасается новых штрафов за «ЛГБТ-пропаганду». Подписывайтесь на Афишу Daily 🙃
Что-то вот этот пост уже и не выглядит таким уж нереалистичным
Telegram
Блог*
⚡️«Может сойти за пропаганду». Российским окулистам запретили упоминать радужку
😁5
#prog #rust хайлайты:
▪️На реализациях метода
▪️Парсер теперь восстанавливается от ключевых слов перед fn с дубликатами или в неправильном порядке. (для справки, порядок
▪️Компилятор теперь предупреждает при использование нестабильной фичи через флаг
▪️Стабилизировали
▪️Как я рассказывал, в модуле
▪️В настоящий момент Rust поддерживает атрибуты на item-ах, но не на отдельных выражениях. В частности, в 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. Кусочек из тестов:👍2❤1
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 предупреждает о случаях, когда это происходит безусловно — почти наверняка это не то, чего хочет программист.GitHub
Emit #[inline] on derive(Debug) by saethlin · Pull Request #117727 · rust-lang/rust
While working on #116583 I noticed that the cross_crate_inlinable query identifies a lot of derived Debug impls as a MIR body that's little more than a call, which suggests they may be a go...
❤5👍2
#prog
Отдельное изменение в стандартной библиотеке #rust заслуживает отдельного упоминания — не потому, что оно затрагивает многих пользователей, но потому, что изменение может привести к трудно диагностируемым ошибкам. Именно, после этого PR методы
На всякий случай: если вы просто хотите получить уникальную ссылку на содержимое
Отдельное изменение в стандартной библиотеке #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 _) };
// ...
}
GitHub
Weaken needlessly restrictive orderings on Arc::*_count by SUPERCILEX · Pull Request #115546 · rust-lang/rust
Follow up to #95183 from this zulip: https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/Why.20does.20Arc.3A.3Astrong_count.20use.20Acquire.20instead.20of.20Relaxed.3F/near/386213850...
👍3
Блог*
#prog #rust Кажется, что такой код должен работать: trait Super {} trait Sub: Super {} fn upcast(x: &dyn Sub) -> &dyn Super { x as &dyn Super } Но нет, он валится с ошибкой. Такой, казалось бы, очевидный функционал был описан в RFC от 2013 (!) года…
#prog #rust
Апкаст трейтов стабилизировали буквально вчера!
Из наиболее насущного вопроса: да, апкаст сырого указателя на
Апкаст трейтов стабилизировали буквально вчера!
Из наиболее насущного вопроса: да, апкаст сырого указателя на
dyn Trait
с невалидной vtable является UB.GitHub
Stabilize RFC3324 dyn upcasting coercion by Urgau · Pull Request #118133 · rust-lang/rust
This PR stabilize the trait_upcasting feature, aka rust-lang/rfcs#3324.
The FCP was completed here: #65991 (comment).
And also remove the deref_into_dyn_supertrait lint which is now handled by dyn ...
The FCP was completed here: #65991 (comment).
And also remove the deref_into_dyn_supertrait lint which is now handled by dyn ...
❤1👍1
Forwarded from Segment@tion fault
Если ваша работа кажется вам бесполезной, вспомните что кто-то собирает пакеты cargo и rustc для Debian.
👎16👍4🤔3👌1
Блог*
#video Anime Rock Paper Scissors (thanks @ffarnn) А как посмотрите — предлагаю посмотреть видео о том, как это создавалось.
#video
ANIME ROCK, PAPER, SCISSORS 2
Впечатляет, отчасти из-за увеличенного хронометража, отчасти из-за того, что удалосьсоздать убедительные молодые версии персонажей, сыгранных теми же взрослыми актёрами .
Но в некоторых аспектах это скорее шаг назад:именно, анимация рта серьёзно пострадала. Во многих сценах рот говорящего человека не шевелится, а в парочке сцен с крупным планом AI сделал персонажу два ряда зубов .
Ну и, конечно, видео о создании.
ANIME ROCK, PAPER, SCISSORS 2
Впечатляет, отчасти из-за увеличенного хронометража, отчасти из-за того, что удалось
Но в некоторых аспектах это скорее шаг назад:
Ну и, конечно, видео о создании.
YouTube
ANIME ROCK, PAPER, SCISSORS 2
With Your Support we can BRING EPISODE 3 TO LIFE! Join Us ► https://corridordigital.com/
Limited Edition Merch! https://corridordigital.store/
With the Kingdom now firmly in his grasp, King Philip faces the return of his twin brother Jules and a distant Barbarian…
Limited Edition Merch! https://corridordigital.store/
With the Kingdom now firmly in his grasp, King Philip faces the return of his twin brother Jules and a distant Barbarian…
Forwarded from Бэкдор
This media is not supported in your browser
VIEW IN TELEGRAM
Максимальный киберпанк: на базе нейронки Runway запустили телевидение. Это бесконечный стрим рандомных нейророликов и трейлеров, будто из параллельных вселенных.
Если смотрели «Рик и Морти» и помните Межвселенское ТВ — это оно. Залипать тут.
@whackdoor
Если смотрели «Рик и Морти» и помните Межвселенское ТВ — это оно. Залипать тут.
@whackdoor
🔥6
#prog #rust #rustlib
cargo-debstatus — инструмент для оценки того, насколько проект пригоден к опакечиванию в Debian.
cargo-deb — инструмент для собственно проведения этой операции.
cargo-dist — инструмент для автоматизации публикации новых релизов, с возможностью автоматически генерировать скрипты для релиза артефактов для CI:
For instance, enabling GitHub CI with
🔹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
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
Lib.rs
cargo-debstatus — command-line utility in Rust
cargo-tree for debian packaging
👍3🔥1