1.93K subscribers
3.74K photos
143 videos
15 files
3.94K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#prog #article

AArch64 Bitmask Immediates

AArch64 (aka 64-битный ARM) — это архитектура с постоянным числом бит на кодировку инструкции (в противовес, скажем, x64). Это означает, что хотя архитектура и оперирует 64-битными числами, инструкции не могут использовать полноразмерные 64-битные литералы — они банально не влезают. К примеру, инструкции mov*, помещающие значение в регистр, могут принимать литералом только 16-битное число.

Подобные ограничения действуют и для инструкций, использующих побитовые логические операции. Однако там используется особый формат кодировки значений — т. н. bitmask immediate, который эксплуатирует тот факт, что на практике битовые маски, как правило, не произвольные числа, а имеют определённую структуру, и позволяет закодировать широкий набор битовых масок в всего 13 битах. Эта статья рассказывает, как устроена эта кодировка, и приводит код на Rust для того, чтобы переводить битовые маски в эту кодировку.
👍3
13🌚9😁5
#prog #rust #rustreleasenotes

Вышла версия Rust 1.95.0! Как всегда, тут только выдержки, всё остальное в детальных заметках о релизе.

▪️if-гуарды на ветках match теперь могут использовать if let:

match value {
Some(x) if let Ok(y) = compute(x) => {
// Both `x` and `y` are available here
println!("{}, {}", x, y);
}
_ => {}
}


▪️Частично примыкающее изменение: компилятор больше не выдаёт предупреждение на безусловные паттерны в if let. Автор изменения мотивирует это распространением кода навроде такого:

fn main() {
if let x = funx() && x < usize::MAX {
// use x
}
}


Эта идиома позволяет привязать значение и что-то сделать/проверить с ним и при этом не пустить имя в окружающую область видимости.

▪️Добавили новый макрос cfg_select!, который позволяет сделать подобие match, но для cfg-предикатов:

cfg_select! {
unix => {
fn foo() { /* unix specific functionality */ }
}
target_pointer_width = "32" => {
fn foo() { /* non-unix, 32-bit functionality */ }
}
_ => {
fn foo() { /* fallback implementation */ }
}
}

let is_windows_str = cfg_select! {
windows => "windows",
_ => "not windows",
};


Технически этот макрос не даёт новых возможностей, но без него нужные атрибуты #[cfg] нужно выписывать самостоятельно, дублируя дословно все предикаты. Ровно по этой причине стал распространён и используется cfg-if — собственно, объявление в блоге напрямую на него и ссылается.

▪️Навряд ли кого-то коснётся, но: match по enum теперь всегда ведёт себя так, как будто он читает дискриминант. Это кажется странным, но объясняется #[non_exhaustive]. Без этого изменения то, есть ли в некотором unsafe-коде UB или нет, зависело от того, определён ли enum в текущем крейте или в другом. Также match теперь читает дискриминант, даже если только одна ветка населена — без этого изменения поведение различалось в обобщённом коде и в ручной мономорфизации.

▪️Поддержку части платформ подняли до Tier 2 — в основном встраиваемые ARM-платформы от Apple (и их симуляторные версии).

▪️Стабилизированы несколько API, в частности:

🔸Конверсии по ссылке из MaybeUninit-массивов в массивы и слайсы из MaybeUninit, а также конверсии по значению между ними
🔸Аналогичные конверсии по ссылке между массивами в Cell и массивами из Cell
🔸Модуль core::range, в котором собираются диапазоны, планируемые на замену текущим. Пока что стабилизированы только RangeInclusive и его итератор. В отличие от текущих диапазонов, новый тип не служит одновременно итератором и потому реализует Copy (при Copy-индексах, разумеется) и занимает меньше места: ему не нужно хранить состояние для отслеживания поведения на последней итерации, только два индекса.
🔸Функция core::hint::cold_path для пометки пути исполнения, который не предполагается, что будет часто исполняться. Этакая замена likely/unlikely.

▪️rustdoc теперь предпочитает стабильные определения нестабильным при сортировке результатов поиска.
🎉92🔥1🥰1
Forwarded from Neural Machine
Я хочу быть максимально удовлетворен своей жизнью. Если окажется херня, я поделюсь, как этого добился.
👍8🥰1
#prog #article

Exceptions in Cranelift and Wasmtime

И немного о том, почему добавить поддержку исключений в уже существующий WASM-рантайм оказалось не самой тривиальной задачей
👍6🥰1😭1
Forwarded from Neural Machine
Я не знаю, что делают взрослые, какие-нибудь глупости.
👍6🥰1
#meme про идеальную форму
😁14🫡2🥰1
🥰1🥴1
😁25🔥4💯2🥰1🥴1
🤝17👎11❤‍🔥4🤡3😐3👍1🤮1💩1💯1🤣1🤨1
🔥10😁2🥰1🤔1
Раньше: "Если все пойдут с гаражей прыгать, ты тоже пойдёшь?"

Сейчас: "Если все пойдут вайбкодить, ты тоже пойдёшь?"
😭12👌32🥰1😁1🤔1
Forwarded from Neural Machine
Я мужчина. Я хочу подождать, пока я стану достаточно взрослым.
10😢2🍌2🥰1
👍6🔥2🥰1🤡1
#meme про скриншоты
🫡8😁5🥰1🍌1
😁17🤯5🔥2🥰1
Forwarded from AlexTCH
For some reason they say "AI makes programmers obsolete, because anybody can make an app now", but nobody says "AI will push Shopify out of business because anyone can make a Web store now". Curious, huh?
😁12🤣6🥰1
😁8💯2🥰1🍌1
Блог*
Спустя год не потеряло актуальности
Всё ещё актуально
😢71👍1🥰1