1.83K subscribers
3.29K photos
130 videos
15 files
3.57K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
👍16🌚4🍌2💩1
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
#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. Кусочек из тестов:
👍21
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 предупреждает о случаях, когда это происходит безусловно — почти наверняка это не то, чего хочет программист.
5👍2
#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 _) };
// ...
}

практически никогда не является верным из-за возможных гонок.
👍3
Немного сексисткий #meme
1
Forwarded from Meme Trap (10satka)
❤‍🔥13🤡6🥰1
Блог* pinned «#prog #rust Апкаст трейтов стабилизировали буквально вчера! Из наиболее насущного вопроса: да, апкаст сырого указателя на dyn Trait с невалидной vtable является UB.»
Forwarded from Segment@tion fault
Если ваша работа кажется вам бесполезной, вспомните что кто-то собирает пакеты cargo и rustc для Debian.
👎16👍4🤔3👌1
Forwarded from dev optozorax
У меня появился новый товарищ
9🥰3🎉1
Блог*
#video Anime Rock Paper Scissors (thanks @ffarnn) А как посмотрите — предлагаю посмотреть видео о том, как это создавалось.
#video

ANIME ROCK, PAPER, SCISSORS 2

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

Ну и, конечно, видео о создании.
Наиболее практичное применение #ml
Forwarded from Бэкдор
This media is not supported in your browser
VIEW IN TELEGRAM
Максимальный киберпанк: на базе нейронки Runway запустили телевидение. Это бесконечный стрим рандомных нейророликов и трейлеров, будто из параллельных вселенных.

Если смотрели «Рик и Морти» и помните Межвселенское ТВ — это оно. Залипать тут.

@whackdoor
🔥6
#prog #rust #rustlib

copypasta — библиотека для кроссплатформерной работы с буфером обмена
7
#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
👍3🔥1