ar
Feedback
Блог*

Блог*

الذهاب إلى القناة على Telegram

Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here

إظهار المزيد
1 927
المشتركون
-124 ساعات
+47 أيام
+430 أيام
أرشيف المشاركات
«Я не против иронии, но фраза «Доброе утро» — это перебор»

Repost from You Had No Job
Обойдёмся без git clone
Обойдёмся без git clone

Repost from I’m CEO, beach
Команда, у нас и так мужчин в офисе почти нет. А те, кто остались, просятся идти работать из нашего подвала. Зачем? Если узнаю, что делаете там подкоп, чтобы свалить домой пораньше - будет штраф. Давайте работать.

От создателей "Поиск дополнительных проблем"
От создателей "Поиск дополнительных проблем"

Repost from N/a
photo content
+1

photo content

Спасибо @repushko, кстати

Блин, а можно как-нибудь сейчас перевернуть календарь?

photo content

Repost from Neural Machine
Не лучшая идея жить в ядерном реакторе.

А ещё я забыл, что ссылка на массив приводится к ссылке на слайс. Следовательно, раз у меня длина точная, мне не нужна std::slice::from_raw_parts в const-контексте, а достаточно std::str::from_utf8_unchecked, которая была стабилизирована в const-контексте ещё в Rust 1.55.0, год назад, что я сейчас и проверил только что на godbolt. Обновил гист. Опять. Ощущаю себя невероятно тупым.

Более того, зная наперёд количество цифр, мы можем заполнять массив с конца, чтобы строка получилась сразу в правильном порядке, а не оборачивать его в конце! Ещё раз обновил гист.

Если растаману отрубить голову, он ещё пять минут будет говорить о преимуществах borrow checker-а

#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], тогда miri жалуется. Короче, я тут так лихо отредактировал, что умудрился написать код, который вроде ок в const-контексте, но при этом вызывает UB в рантайме. Ещё раз поправил гист, теперь вроде висячих ссылок нету.

#prog #rust #моё "Вижу цель — не вижу препятствий", или о превратностях туннельного зрения. Даже после точного подсчёта размера буфера to_ascii возвращает пару из буфера и размера записанной части. Но зачем? Буфер _уже_ в точности того размера, который нужен — LEN! Значит, можно просто возвращать Array и не считать len, тем самым упростив код. Переписал гист.

События последних дней таки догнали мою психику. Разрыдался. И, кажется, у меня нервный тик.