То есть когда компилятор делает name mangling — это абсолютно нормально и не вызывает вопросов, но когда я пишу такой код напрямую — это сразу обфускация и грубое нарушение хороших практик?! 😤
😁18🌚3👎2💩1🤡1
Сдавая кровь на анализы в поликлиннике, произвёл небольшой фурор своими ноготочками и получил шоколадку.
😁12❤3👍2❤🔥1💩1
#prog #rust
Если вам вдруг потребовалось сделать набор взаимоисключающих фичи, то вместо квадратичного бойлерплейта с перечислением каждой пары фич и использованием compile_error! можно сделать так:
Если вам вдруг потребовалось сделать набор взаимоисключающих фичи, то вместо квадратичного бойлерплейта с перечислением каждой пары фич и использованием compile_error! можно сделать так:
// `foo`, `bar` и `baz` взаимно исключают друг другадо версии 1.66
// #[deny(const_err)] для Rust
#[rustfmt::skip]Ошибка не столь ясная, как в случае с
const _USE_ONLY_ONE_OF_FOO_BAR_BAZ: [(); 1] = [
();
0
+ cfg!(foo) as usize
+ cfg!(bar) as usize
+ cfg!(baz) as usize
];
compile_error!
, но этот паттерн тривиально масштабируется на любое количество фичей.doc.rust-lang.org
compile_error in std - Rust
Causes compilation to fail with the given error message when encountered.
👍10🤔3💩1
Блог*
#prog #rust Если вам вдруг потребовалось сделать набор взаимоисключающих фичи, то вместо квадратичного бойлерплейта с перечислением каждой пары фич и использованием compile_error! можно сделать так: // `foo`, `bar` и `baz` взаимно исключают друг друга //…
@tyranron совершенно справедливо добавил, что ошибку можно сделать и более читаемой:
#[deny(const_err)]Но это требует наличия паники в const-контексте, что доступно только с версии 1.57, в то время как вариант с длинной массива работает даже на Rust 1.0.
const _: () = {
let n_activated = cfg!(foo) as usize + cfg!(bar) as usize + cfg!(baz) as usize;
if n_activated != 1 {
panic!("Only one of `foo`, `bar` or `baz` can be used")
}
};
Telegram
Блог*
Тем временем вышел Rust 1.57 (анонс).
tl;dr несколько заинтересовавших меня штук:
— panic!/todo!/assert! макросы в константных контекстах
— кастомные профили компиляции (как dev, release, test и bench, но произвольные)
— try_reserve методы для коллекций…
tl;dr несколько заинтересовавших меня штук:
— panic!/todo!/assert! макросы в константных контекстах
— кастомные профили компиляции (как dev, release, test и bench, но произвольные)
— try_reserve методы для коллекций…
👍4💩1
Forwarded from ozkriff.games 🦀 (ozkriff🇺🇦)
# godbolt.org's LLVM Opt Pipeline View
Not exactly fresh news but it turns out that Compiler Explorer got an amazing feature last year: ability to step through the individual LLVM optimization passes and see what exact effect it has on your code sample. 🤯
Example: https://rust.godbolt.org/z/46P8MP3x1
Not exactly fresh news but it turns out that Compiler Explorer got an amazing feature last year: ability to step through the individual LLVM optimization passes and see what exact effect it has on your code sample. 🤯
Example: https://rust.godbolt.org/z/46P8MP3x1
👍12🔥3🤯1💩1
Forwarded from местный датасасер ☮️
👋 Привет! Я сделал бота, который умеет искать сохраненные мемы в инлайн-режиме — Memeries Bot.
Как это работает: присылаете боту картинку с текстом, он ее сохраняет и распознает на ней текст с помощью OCR-модели. Теперь эту картинку можно искать в инлайн-режиме по тексту, что был на ней. Бот поддерживает мемы на русском и английском, с другими языками — как повезет 😃
Попробовать можно тут: @memeries_bot
Идея поиска мемов по тексту у меня была давно, но сделать бота руки дошли только сейчас. Кстати, идея с инлайн-режимом появилась благодаря этому проекту и советам @Loskirs
Как это работает: присылаете боту картинку с текстом, он ее сохраняет и распознает на ней текст с помощью OCR-модели. Теперь эту картинку можно искать в инлайн-режиме по тексту, что был на ней. Бот поддерживает мемы на русском и английском, с другими языками — как повезет 😃
Попробовать можно тут: @memeries_bot
Идея поиска мемов по тексту у меня была давно, но сделать бота руки дошли только сейчас. Кстати, идея с инлайн-режимом появилась благодаря этому проекту и советам @Loskirs
👍4💩1
Forwarded from Segment@tion fault
Конец популярного крейта once_cell.
Потому что once_cell больше не отдельный крейт, а официально ушел в std. С чем его поздравляем, ура.
https://github.com/rust-lang/rust/pull/105587
Потому что once_cell больше не отдельный крейт, а официально ушел в std. С чем его поздравляем, ура.
https://github.com/rust-lang/rust/pull/105587
GitHub
Partial stabilization of `once_cell` by tgross35 · Pull Request #105587 · rust-lang/rust
This PR aims to stabilize a portion of the once_cell feature:
core::cell::OnceCell
std::cell::OnceCell (re-export of the above)
std::sync::OnceLock
This will leave LazyCell and LazyLock unstabili...
core::cell::OnceCell
std::cell::OnceCell (re-export of the above)
std::sync::OnceLock
This will leave LazyCell and LazyLock unstabili...
👍19🎉9🤯3🔥1💩1