Блог*
Готов поспорить, вы слышали, про фильм "Армагеддон". Да-да, в котором Брюс Уиллис исполняет главную роль. Так вот, этот фильм был создан компанией Touchstone Pictures — также, как и пачка других, включая "Общество мёртвых поэтов". Несколько менее известен…
Бен Аффлек: “I asked Michael [Bay] why it was easier to train oil drillers to become astronauts than it was to train astronauts to become oil drillers, and he told me to shut the fuck up, so that was the end of that talk.”
Отсюда
Отсюда
Film School Rejects
61 Things We Learned from the ‘Armageddon’ Commentary
'Armageddon' is a whole lotta movie, so it makes sense that the commentary features Michael Bay, Bruce Willis, and Ben Affleck.
👎1
#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
Быть инженером — это, получив управляемую по 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
Вышел Linux 6.1, первая версия с поддержкой драйверов и модулей на Rust.
Хабр
Вышел Linux 6.1
11 декабря 2022 года Линус Торвальдс представил первый стабильный релиз ядра Linux 6.1 . Выпуск новой версии ядра Linux вышел в соответствии с графиком, но всё же с задержкой на неделю, спустя два...
❤12🔥10
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.
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👍6❤1
Решал задачу из Advent of Code с использованием breadth first search. Получил на тестовом примере какую-то чепуху. Стал разбираться.
Оказалось, я в очередь в качестве стартового положения положил цель. 🤦♂️
Оказалось, я в очередь в качестве стартового положения положил цель. 🤦♂️
😁11
Ещё один день, ещё одно issue с метками
Даже сделали сначала линтом, а не hard error, потому что непонятно, как много кода этим охвачено.
regression-from-stable-to-stable, P-critical и I-unsound в репе #rust.Даже сделали сначала линтом, а не hard error, потому что непонятно, как много кода этим охвачено.
GitHub
Seg fault in Rust 1.65.0 if I don't create temporary variable · Issue #105295 · rust-lang/rust
I tried this code: use std::{cell::RefCell}; pub struct MessageListeners<'a> { listeners: RefCell<Vec<Box<dyn FnMut(()) + 'a>>&g...
😢5
Forwarded from dev optozorax
ААААААААА, ЭТО ОФИГЕННО!!!! 🤩 Клеточный автомат «Игра Жизнь» симулируется на самом себе бесконечно в обе стороны!!! Просто откройте!
https://oimo.io/works/life/
https://oimo.io/works/life/
oimo.io
Life Universe
🔥15
То есть за всё время существования cargo функционал по отдаче результатов тестов в машинно-читаемом формате всё ещё нестабильный?!
#rust #бомбёжкипост
#rust #бомбёжкипост
GitHub
Tracking issue for libtest JSON output · Issue #49359 · rust-lang/rust
Added in #46450 Available in nightly behind a -Z flag.
🤡2
Блог*
То есть за всё время существования cargo функционал по отдаче результатов тестов в машинно-читаемом формате всё ещё нестабильный?! #rust #бомбёжкипост
И cargo-nextest эту проблему тоже не решает
GitHub
Machine-readable output for cargo nextest run · Issue #20 · nextest-rs/nextest
The output should be similar to what cargo itself provides, complete with --message-format json and --message-format json-render-status options.
#prog #rust #rustreleasenotes
Вышла версия Rust 1.66.0! Как всегда, вычленю только интересное мне, а остальное в детальных заметках о релизе.
▪️Очень важная фича для интеропа: теперь даже для
▪️Наконец-то можно бенчмаркать код без того, чтобы оптимизатор вырезал всё подчистую для тривиальных случаев: стабилизирована функция core::hint::black_box, которая функционально эквивалентна
В документации, однако, сказано:
> Note however, that
▪️Теперь можно вызывать
▪️Изменение, о котором я говорил, докатилось до стейбла: в паттернах теперь можно использовать диапазоны с открытой нижней границей:
▪️
▪️Вопреки принятому RFC,
▪️Option::unzip 👏
▪️BTreeMap и BTreeSet обзавелись методами для доступа к первым (= минимальным) и последним (= максимальным) элементам:
Да, это правда, что технически приличную долю этих методов можно заменить на вызовы методов итераторов. Но итераторы у
▪️Примитивные числовые типы обзавелись методами для прибавления соответствующих типов противоположной знаковости (
▪️Компилятор стал побыстрее за счёт LTO для самого rustc и BOLT для LLVM (BOLT?). К сожалению, только на Linux.
Вышла версия 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
}first_key_value
BTreeMap::{
,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.
blog.rust-lang.org
Announcing Rust 1.66.0 | Rust Blog
Empowering everyone to build reliable and efficient software.
🔥4👍1