1.83K subscribers
3.3K photos
132 videos
15 files
3.58K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Блог*
#prog #rust #моё "Вижу цель — не вижу препятствий", или о превратностях туннельного зрения. Даже после точного подсчёта размера буфера to_ascii возвращает пару из буфера и размера записанной части. Но зачем? Буфер уже в точности того размера, который нужен…
#prog #rust

То есть, согласно miri,

let s_rt: &[u8] = unsafe {
std::slice::from_raw_parts(
std::convert::identity([0]).as_ptr(),
1,
)
};

— это не ок, потому что тут создаётся висячая ссылка. Логично, значение, возвращаемое identity, дохнет после вызова функции.

Но: также согласно miri, тот же самый код, но в const-контексте,

const S_CONST: &[u8] = unsafe {
std::slice::from_raw_parts(
std::convert::identity([0]).as_ptr(),
1,
)
};

— это ок, тут никаких висящих ссылок нет. Потому что, тут, видимо, значение, возвращаемое константной identity, вызвано на константном значении и потому само является константным и может быть использовано для static promotion? Даже не смотря на отсутствие на identity атрибута #[rustc_promotable], поскольку возвращаемое значение не является непосредственно promotable значением и вычисляется внутри инициализатора константы?

И при этом, согласно всё тому же miri, если убрать identity:

let s_rt: &[u8] = unsafe {
std::slice::from_raw_parts([0].as_ptr(), 1)
};

, то всё ок и никаких висячих ссылок нету? Потому что [0] промоутится? А, нет, потому что это &[u8], но не &'static [u8], если поменять тип s_rt, тогда miri жалуется.

Короче, я тут так лихо отредактировал, что умудрился написать код, который вроде ок в const-контексте, но при этом вызывает UB в рантайме. Ещё раз поправил гист, теперь вроде висячих ссылок нету.
👏2
Если растаману отрубить голову, он ещё пять минут будет говорить о преимуществах borrow checker-а
👍22😁4🌚31
Блог*
#prog #rust #моё "Вижу цель — не вижу препятствий", или о превратностях туннельного зрения. Даже после точного подсчёта размера буфера to_ascii возвращает пару из буфера и размера записанной части. Но зачем? Буфер уже в точности того размера, который нужен…
Более того, зная наперёд количество цифр, мы можем заполнять массив с конца, чтобы строка получилась сразу в правильном порядке, а не оборачивать его в конце!

Ещё раз обновил гист.
🔥1😁1
Блог*
Более того, зная наперёд количество цифр, мы можем заполнять массив с конца, чтобы строка получилась сразу в правильном порядке, а не оборачивать его в конце! Ещё раз обновил гист.
А ещё я забыл, что ссылка на массив приводится к ссылке на слайс. Следовательно, раз у меня длина точная, мне не нужна std::slice::from_raw_parts в const-контексте, а достаточно std::str::from_utf8_unchecked, которая была стабилизирована в const-контексте ещё в Rust 1.55.0, год назад, что я сейчас и проверил только что на godbolt.

Обновил гист. Опять.

Ощущаю себя невероятно тупым.
👍1😁1
Forwarded from Neural Machine
Не лучшая идея жить в ядерном реакторе.
👍52
3😢1
Блин, а можно как-нибудь сейчас перевернуть календарь?
🔥17😱5😢4👍3💩21👎1😁1
Forwarded from Yan
👍12😢3🌚3
🔥10😁2👍1
От создателей "Поиск дополнительных проблем"
😁5
Forwarded from I’m CEO, beach
Команда, у нас и так мужчин в офисе почти нет. А те, кто остались, просятся идти работать из нашего подвала. Зачем? Если узнаю, что делаете там подкоп, чтобы свалить домой пораньше - будет штраф.
Давайте работать.
5🤮2😁1😢1
Forwarded from You Had No Job
Обойдёмся без git clone
👏14😁51
«Я не против иронии, но фраза «Доброе утро» — это перебор»
11😁3😢2💩1
👎1
Forwarded from я что-то �� и всё ����
🔁 hkc (carbonated)
Moral of the story: ignoring unknown parameters in API is a bad thing
🤔7👍2
#mechanics абсолютно гипнотическая штука
Forwarded from я что-то �� и всё ����
This media is not supported in your browser
VIEW IN TELEGRAM
👍17
Forwarded from Alex Sobko
😁14😢13🔥3