1.85K subscribers
3.38K photos
134 videos
15 files
3.64K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Forwarded from Маша и Медведица  (Маша Понедельник)
Телескоп Джеймс Уэбб сделал новую невероятную фотографию - перед вами эмиссионная область вокруг протозвезды из молекулярного облака L1527 в созвездии Телец.

Да, звезда ещё не сформировалась окончательно, она ещё не запустила термоядерные реакции синтеза в ядре, и светит за счёт гравитационного сжатия и выделения тепла. Она находится на самой ранней протозвёздной стадии. Её возраст всего лишь около 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.
👍2
🔥16❤‍🔥2🌚2
Блог*
#rust Если вы надумывали купить билет на Rustcon 2022 — сейчас самое время. https://t.iss.one/rustcon_russia/1394
На покупку билета на RustCon 2022 действует промокод FRIENDS со скидкой на 15%. Он будет действовать вплоть до дня проведения конференции.
Блог* pinned «На покупку билета на RustCon 2022 действует промокод FRIENDS со скидкой на 15%. Он будет действовать вплоть до дня проведения конференции.»
Внезапно в исходниках systemd
👍13🤯81🤨1
Forwarded from Neural Machine
Я достаточно взрослый, чтобы долго плакать
😁2
BTW сегодня международный день мужчин. Поздравлямс причастных
🔥10👏31🎉1
доброго утра мне, ха-ха.
надеюсь вы выспались, мур 🦊
👍12
Forwarded from 🌈 деформирующий кринж - профессиональный веб блог дипломированного специалиста басиста у жужки пузо пушисто (ъohann)
ребят а что за защитники? я просто не в курсе
😁12💩3👎2😐2
#prog #rust #article

Набор из трёх статей Niko Matsakis про дизайн параллельных итераторов в rayon. Впрочем, первая статья посвящена обзору обычных, последовательных итераторов. Если у вас есть опыт работы с Rust — первую статью можно спокойно не читать.

Parallel Iterators Part 1: Foundations
Parallel Iterators Part 2: Producers
Parallel iterators, part 3: Consumers

И ещё небольшой документ в репе rayon о том, как реализовывать параллельные итераторы.
👍8
#prog #rust

Очередное напоминание, что Rust не является просто улучшенным C и что ссылки не являются просто продвинутой версией указателей.

Рассмотрим вот такой код, полностью нормальный с точки зрения сишника:

fn main() {
let a: [i32; 2] = [0, 1];
let ptr: *const _ = &a[0];
let x_ptr = unsafe { ptr.add(1) };
let x = unsafe { *x_ptr };
println!("{x}");
}

Тут мы получаем указатель на элементы массива через ссылку на его первый элемент — как это часто делают в C. Если этот код скомпилировать и запустить, то программа напечатает 1, как и ожидается. Но, строго говоря, он не обязан этого делать! Потому что в этой программе есть UB. Действительно, если на этом коде запустить miri, то вот какой будет результат:

error: Undefined Behavior: attempting a read access using <3091> at alloc1664[0x4], but that tag does not exist in the borrow stack for this location
--> src/main.rs:5:22
|
5 | let x = unsafe { *x_ptr };
| ^^^^^^
| |
| attempting a read access using <3091> at alloc1664[0x4], but that tag does not exist in the borrow stack for this location
| this error occurs as part of an access at alloc1664[0x4..0x8]
|
= help: this indicates a potential bug in the program: it performed an invalid operation, but the Stacked Borrows rules it violated are still experimental
= help: see https://github.com/rust-lang/unsafe-code-guidelines/blob/master/wip/stacked-borrows.md for further information
help: <3091> was created by a SharedReadOnly retag at offsets [0x0..0x4]
--> src/main.rs:3:25
|
3 | let ptr: *const _ = &a[0];
| ^^^^^
= note: BACKTRACE:
= note: inside `main` at src/main.rs:5:22

Ошибка довольно многословная, но суть её состоит в том, что указатель на первый элемент сформирован из ссылки на первый элемент массива и потому имеет право обращаться только к этому конкретному i32 и не может быть использован для того, чтобы обращаться дальше по памяти. Надо отметить, что сама операция ptr.add(1) UB не вызывает — в документации прямо сказано, что при помощи неё можно получить указатель "one byte past the end of the same allocated object". В данном случае именно такой указатель и будет сформирован, ибо этим самым allocated object является отдельный i32, а не массив целиком.

Если мы попытаемся обмануть компилятор и взять сырой указатель:

...
let ptr = core::ptr::addr_of!(a[0]);
...

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

Как же поступить правильно? Можно сформировать указатель на элемент из сырого указателя на сам массив:

let ptr = core::ptr::addr_of!(a) as *const i32;

Но это в основном имеет смысл, когда по каким-то причинам нет возможности использовать ссылку на массив. Если же есть, то проще использовать специальный метод для это, as_ptr (который, кстати, тут работает за счёт deref coercion из ссылки на массив в ссылку на слайс):

let ptr = a.as_ptr();

В любом случае, при использовании одного из этих двух методов miri не считает код содержащим UB.
🔥7👍1😱1
Маша-Rustеряша
😁8
👎31
Forwarded from Programmer Jokes
UI/UX commits VS backend commits
😁8
Forwarded from Mikail Bagishov
маршмэллоу это коммиты в доку
👍3
👎31