Блог* – Telegram
1.9K subscribers
3.46K photos
135 videos
15 files
3.69K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#prog #article

Быть инженером — это, получив управляемую по bluetooth с бажного приложения кофе-машину, зареверсить протокол, установить неиспользуемый MacBook со своим CLI в качестве средства общения с интернетом и повесить на заполнение нового issue в приватной репе Github хук через Guthub Actions, который командует кофе-машине сделать напиток с параметрами, указанными в тексте issue.

А, и потом ещё написать об этом статью в трёх частях.

Hacking Bluetooth to Brew Coffee from GitHub Actions
Part 1 - Bluetooth Investigation
Part 2 - Reverse Engineering
Part 3 - GitHub Actions
14👍1👏1😁1
Forwarded from какография
🌚9🤔3😁2
Co-host is just a viewer
1
This media is not supported in your browser
VIEW IN TELEGRAM
#prog #rust #rustlib

Flowistry is a tool that analyzes the information flow of Rust programs. Flowistry understands whether it's possible for one piece of code to affect another. Flowistry integrates into the IDE to provide a "focus mode" which helps you focus on the code that's related to your current task.
🤯12👍61
Решал задачу из Advent of Code с использованием breadth first search. Получил на тестовом примере какую-то чепуху. Стал разбираться.

Оказалось, я в очередь в качестве стартового положения положил цель. 🤦‍♂️
😁11
Ещё один день, ещё одно issue с метками regression-from-stable-to-stable, P-critical и I-unsound в репе #rust.

Даже сделали сначала линтом, а не hard error, потому что непонятно, как много кода этим охвачено.
😢5
Гостевой #meme
просто даунгрейдни ядро до 6.0
😁152🔥2
Forwarded from dev optozorax
ААААААААА, ЭТО ОФИГЕННО!!!! 🤩 Клеточный автомат «Игра Жизнь» симулируется на самом себе бесконечно в обе стороны!!! Просто откройте!

https://oimo.io/works/life/
🔥15
Блог*
#prog #go #meme
Кажется, хештег meme так-то лишний
🤔3
То есть за всё время существования cargo функционал по отдаче результатов тестов в машинно-читаемом формате всё ещё нестабильный?!

#rust #бомбёжкипост
🤡2
#prog #rust #rustreleasenotes

Вышла версия Rust 1.66.0! Как всегда, вычленю только интересное мне, а остальное в детальных заметках о релизе.

▪️Очень важная фича для интеропа: теперь даже для enum с данными на вариантах можно использовать явные дискриминанты. Пример:

#[repr(u8)]
enum Foo {
A(u8) = 0,
B(i8) = 1,
C(bool) = 42,
}

В сочетании с #[repr(primitive_int)] и #[repr(C, primitive_int] это даёт предсказуемое представление в памяти: c #[repr(primitive_int)] enum будет union с вариантами перечисления, а с #[repr(C, primitive_int] enum будет парой из явного дискриминанта и union с вариантами без поля под дискриминант. И в том, и в другом случае дискриминант будет первым полем в представлении enum, и reference говорит, что дискриминант можно всегда можно достать путём кастования указателя на enum в указатель на типа дискриминанта. Например, в случае Foo, указанного выше:

impl Foo {
fn discriminant(&self) -> u8 {
unsafe { *(self as *const Self as *const u8) }
}
}

▪️Ошибка при вычислении константного выражения наконец-то останавливает компиляцию, а не просто выдаёт предупреждение.

▪️Наконец-то можно бенчмаркать код без того, чтобы оптимизатор вырезал всё подчистую для тривиальных случаев: стабилизирована функция core::hint::black_box, которая функционально эквивалентна core::convert::identity, но при этом с точки зрения оптимизатора может сделать что угодно. В блогопосте есть пример использования.

В документации, однако, сказано:

> Note however, that black_box is only (and can only be) provided on a “best-effort” basis. The extent to which it can block optimisations may vary depending upon the platform and code-gen backend used. Programs cannot rely on black_box for correctness in any way.

▪️Теперь можно вызывать transmute между обобщёнными типами, которые отличаются лишь подставленными лайфтайм-параметрами.

▪️Изменение, о котором я говорил, докатилось до стейбла: в паттернах теперь можно использовать диапазоны с открытой нижней границей: ..X и ..=X.

▪️impl Trait-типы теперь наследуют #[must_use]-аннотации от супертрейтов. В частности, теперь компилятор предупреждает о неиспользуемом impl ExactSizeIterator.

▪️Вопреки принятому RFC, #[derive(Default)] на enum добавлял баунд : Default на тИповых параметрах. Сейчас это поправили.

▪️Option::unzip 👏

▪️BTreeMap и BTreeSet обзавелись методами для доступа к первым (= минимальным) и последним (= максимальным) элементам:

BTreeSet::{
first
,
last
,
pop_first
,
pop_last
}
BTreeMap::{
first_key_value
,
last_key_value
,
first_entry
,
last_entry
,
pop_first
,
pop_last
}

При этом методы first_entry и last_entry возвращают (опционально, разумеется) OccupiedEntry, то есть ещё и дают возможность манипулировать значением in-place.

Да, это правда, что технически приличную долю этих методов можно заменить на вызовы методов итераторов. Но итераторы у BTreeMap и BTreeSet двухсторонние и потому вынуждены спускаться в по дереву в обе стороны, что является лишней работой в случае, если требуется элемент лишь с одной стороны.

▪️Примитивные числовые типы обзавелись методами для прибавления соответствующих типов противоположной знаковости (iX::*_add_unsigned и uX::*_add_signed), а знаковые типы — и методами для вычитания беззнаковых чисел. Почему-то есть checked_*, overflowing_*, saturating_* и wrapping_* варианты, но нету просто прибавления без уточнения поведения.

▪️Компилятор стал побыстрее за счёт LTO для самого rustc и BOLT для LLVM (BOLT?). К сожалению, только на Linux.
🔥4👍1