Forwarded from Alexander
Блог*
if (Math.random() >= 0.5) print(chooseRandomWarning())
Похожим образом работает борроу чекер по мнению неосиливших Rust
😁24🤣1
Блог*
А для того, чтобы оно всё-таки работало, нужно, чтобы реализовали impl Fn() -> impl Trait in return position (привет, Вафель) и, желательно, синтаксис для явного написания замыкания с полиморфизмом высшего ранга. И то, кстати, не факт, что сработает, поскольку…
#prog #rust #rustlib
Ну а пока синтаксис для явного написания замыканий с полиморфизмом высшего ранга отсутствует, можно использовать higher_order_closure:
Ну а пока синтаксис для явного написания замыканий с полиморфизмом высшего ранга отсутствует, можно использовать higher_order_closure:
#[macro_use]
extern crate higher_order_closure;
fn main () {
let f = higher_order_closure! { // или hrtb!
for<'any> |x: &'any i32| -> &'any i32 {
x
}
};
{
let local = 42;
f(&local);
}
f(&42);
}
Поддержка lifetime elision также присутствует:let f = hrtb! {
|x: &'_ i32| -> &'_ i32 {
x
}
};
docs.rs
higher_order_closure - Rust
`::higher-order-closure`
Пачка небольших приятных изменений для #prog #rust.
Parser: Recover from using colon as path separator in imports — простое двоеточие в списке импорта теперь трактуется, как опечатка при написании
Recover wrong-cased keywords that start items (привет, Вафель) — аналогично парсер теперь продолжает разбор после ключевых слов, набранных не в том регистре. Не во всех местах, но всё же.
Suggest is_some when we've found Option but expected bool.
Suggest removing unnecessary . to use a floating point literal — для тех случаев, когда там, где ожидается число с плавающей точкой, по факту диапазон. Может быть опечаткой.
Consider #[must_use] annotation on async fn as also affecting the Future::Output.
И небольшая замена семантики для большей консистентности и меньшей хрупкости кода: Remove drop order twist of && and || and make them associative.
TL;DR;
Порядок дропа после изменения: 1, 2, 3, 4
Parser: Recover from using colon as path separator in imports — простое двоеточие в списке импорта теперь трактуется, как опечатка при написании
::
. Это всё ещё ошибка синтаксиса, но теперь она не мешает парсить код дальше.Recover wrong-cased keywords that start items (привет, Вафель) — аналогично парсер теперь продолжает разбор после ключевых слов, набранных не в том регистре. Не во всех местах, но всё же.
Suggest is_some when we've found Option but expected bool.
Suggest removing unnecessary . to use a floating point literal — для тех случаев, когда там, где ожидается число с плавающей точкой, по факту диапазон. Может быть опечаткой.
Consider #[must_use] annotation on async fn as also affecting the Future::Output.
async
-функции — не более, чем функции, возвращающие анонимную футуру. До этого изменения атрибут #[must_use]
отслеживал (не)использование этой самой футуры, что технически верно, но не особо полезно на практике. После этого изменения предупреждение также срабатывает и при неиспользовании значения, которое вернул .await
.И небольшая замена семантики для большей консистентности и меньшей хрупкости кода: Remove drop order twist of && and || and make them associative.
TL;DR;
f(1).g() && f(2).g() && f(3).g() && f(4).g()
Порядок дропа до изменения: 2, 3, 4, 1Порядок дропа после изменения: 1, 2, 3, 4
GitHub
Parser: Recover from using colon as path separator in imports by mucinoab · Pull Request #103443 · rust-lang/rust
I don't know if this is the right approach, any feedback is welcome.
r? @compiler-errors
Fixes #103269
r? @compiler-errors
Fixes #103269
👍3🔥1
#prog #rust #article
Stop writing Rust linked list libraries!
tl;dr:
Don’t write a Rust linked list library: they are hard to do well, and usually useless.
Use
If you are writing your own data structure, check if someone has done it already, and consider
Stop writing Rust linked list libraries!
tl;dr:
Don’t write a Rust linked list library: they are hard to do well, and usually useless.
Use
VecDeque
, which is great. If you actually need more than VecDeque
can do, use one of the handful of libraries that actually offer a significantly more useful API.If you are writing your own data structure, check if someone has done it already, and consider
slotmap
or generation_arena
, (or maybe Rc
/Arc
).👍4
Forwarded from Маша и Медведица ✨ (Маша Понедельник)
Телескоп Джеймс Уэбб сделал новую невероятную фотографию - перед вами эмиссионная область вокруг протозвезды из молекулярного облака L1527 в созвездии Телец.
Да, звезда ещё не сформировалась окончательно, она ещё не запустила термоядерные реакции синтеза в ядре, и светит за счёт гравитационного сжатия и выделения тепла. Она находится на самой ранней протозвёздной стадии. Её возраст всего лишь около 100 000 лет, а масса - 20-40% от солнечной.
В центре фигуры, похожей на песочные часы, можно увидеть тёмную перемычку - это протопланетный диск. Выбросы из полюсов протозвезды образовали полости в окружающей тёмной туманности. Оранжевый цвет показывает большее количество пыли, голубой - меньшее.
#ММ_JWST
Да, звезда ещё не сформировалась окончательно, она ещё не запустила термоядерные реакции синтеза в ядре, и светит за счёт гравитационного сжатия и выделения тепла. Она находится на самой ранней протозвёздной стадии. Её возраст всего лишь около 100 000 лет, а масса - 20-40% от солнечной.
В центре фигуры, похожей на песочные часы, можно увидеть тёмную перемычку - это протопланетный диск. Выбросы из полюсов протозвезды образовали полости в окружающей тёмной туманности. Оранжевый цвет показывает большее количество пыли, голубой - меньшее.
#ММ_JWST
🔥14👍3
#gamedev #article
Zendo—Design History — история о создании настольной игры Zendo, рассказанная её непосредственным создателем. Zendo — игра, в которой один игрок берёт на себя роль Мастера и загадывает правило, а остальные — Ученики — пытаются это правило отгадать, строя догадки из местных фигурок и получая контрпримеры от Мастера в случае, если высказанная вслух догадка неверна.
<...> More than anything else I’ve had a hand in creating, Zendo feels more like a discovery than an invention—as though any group of designers and playtesters, given nothing but the phrase “Interactive Bongard problems with Icehouse pieces”, would wend their way through the vastness of design-space, perhaps making different wrong turns and false starts and false assumptions, but ultimately arriving at the same crystal-clear destination. Perhaps this is only the illusion of a fanatic, sleep-deprived game designer, but it’s one I can’t shake.
Zendo—Design History — история о создании настольной игры Zendo, рассказанная её непосредственным создателем. Zendo — игра, в которой один игрок берёт на себя роль Мастера и загадывает правило, а остальные — Ученики — пытаются это правило отгадать, строя догадки из местных фигурок и получая контрпримеры от Мастера в случае, если высказанная вслух догадка неверна.
<...> More than anything else I’ve had a hand in creating, Zendo feels more like a discovery than an invention—as though any group of designers and playtesters, given nothing but the phrase “Interactive Bongard problems with Icehouse pieces”, would wend their way through the vastness of design-space, perhaps making different wrong turns and false starts and false assumptions, but ultimately arriving at the same crystal-clear destination. Perhaps this is only the illusion of a fanatic, sleep-deprived game designer, but it’s one I can’t shake.
👍2
Блог*
#rust Если вы надумывали купить билет на Rustcon 2022 — сейчас самое время. https://t.iss.one/rustcon_russia/1394
На покупку билета на RustCon 2022 действует промокод
FRIENDS
со скидкой на 15%. Он будет действовать вплоть до дня проведения конференции.#prog #rust #article
Набор из трёх статей Niko Matsakis про дизайн параллельных итераторов в rayon. Впрочем, первая статья посвящена обзору обычных, последовательных итераторов. Если у вас есть опыт работы с Rust — первую статью можно спокойно не читать.
Parallel Iterators Part 1: Foundations
Parallel Iterators Part 2: Producers
Parallel iterators, part 3: Consumers
И ещё небольшой документ в репе rayon о том, как реализовывать параллельные итераторы.
Набор из трёх статей Niko Matsakis про дизайн параллельных итераторов в rayon. Впрочем, первая статья посвящена обзору обычных, последовательных итераторов. Если у вас есть опыт работы с Rust — первую статью можно спокойно не читать.
Parallel Iterators Part 1: Foundations
Parallel Iterators Part 2: Producers
Parallel iterators, part 3: Consumers
И ещё небольшой документ в репе rayon о том, как реализовывать параллельные итераторы.
docs.rs
rayon - Rust
Rayon is a data-parallelism library that makes it easy to convert sequential computations into parallel.
👍8