Forwarded from partially unsupervised
Семь лет назад я занимался AR примеркой обуви. Однажды к нам пришел один из VC партнеров и спросил: "а почему у вас в приложении нет allbirds? В Долине все только их и носят".
Процедура добавления новой модели предполагала покупку физической пары, потом их сканировали, делали фотограмметрию, а результат доводили до ума руками. Так на полке со скопившейся обувью осталась пара allbirds ровно моего размера, и при увольнении мне ее подарили.
С тех пор я стоптал пар пять этих прекрасных кроссовок разных цветов, они подходили мне идеально. И вот эпоха ушла: allbirds официально переключаются с обуви на GPU инфраструктуру. Раньше мы нагружали видеокарты, чтобы рендерить их кроссовки, теперь они сами будут продавать GPU-часы.
Процедура добавления новой модели предполагала покупку физической пары, потом их сканировали, делали фотограмметрию, а результат доводили до ума руками. Так на полке со скопившейся обувью осталась пара allbirds ровно моего размера, и при увольнении мне ее подарили.
С тех пор я стоптал пар пять этих прекрасных кроссовок разных цветов, они подходили мне идеально. И вот эпоха ушла: allbirds официально переключаются с обуви на GPU инфраструктуру. Раньше мы нагружали видеокарты, чтобы рендерить их кроссовки, теперь они сами будут продавать GPU-часы.
🤩8
Forwarded from AlexTCH
Another piece of a bit stale news:
https://www.acm.org/about-acm/acm-pres-on-oa-transition-and-dl-changes
This ain't no small change!
As of January 1, 2026, ACM completed its transition to full open access: all ACM-published articles and related research artifacts in the DL are freely available worldwide without barriers to reading or reuse.
https://www.acm.org/about-acm/acm-pres-on-oa-transition-and-dl-changes
This ain't no small change!
www.acm.org
A Message From the ACM President Regarding the Open Access Transition
The move to open access is ongoing. We will continue to listen, communicate, and adapt thoughtfully in partnership with the community as we move forward.
🔥7🤔2
#prog #article
AArch64 Bitmask Immediates
AArch64 (aka 64-битный ARM) — это архитектура с постоянным числом бит на кодировку инструкции (в противовес, скажем, x64). Это означает, что хотя архитектура и оперирует 64-битными числами, инструкции не могут использовать полноразмерные 64-битные литералы — они банально не влезают. К примеру, инструкции mov*, помещающие значение в регистр, могут принимать литералом только 16-битное число.
Подобные ограничения действуют и для инструкций, использующих побитовые логические операции. Однако там используется особый формат кодировки значений — т. н. bitmask immediate, который эксплуатирует тот факт, что на практике битовые маски, как правило, не произвольные числа, а имеют определённую структуру, и позволяет закодировать широкий набор битовых масок в всего 13 битах. Эта статья рассказывает, как устроена эта кодировка, и приводит код на Rust для того, чтобы переводить битовые маски в эту кодировку.
AArch64 Bitmask Immediates
AArch64 (aka 64-битный ARM) — это архитектура с постоянным числом бит на кодировку инструкции (в противовес, скажем, x64). Это означает, что хотя архитектура и оперирует 64-битными числами, инструкции не могут использовать полноразмерные 64-битные литералы — они банально не влезают. К примеру, инструкции mov*, помещающие значение в регистр, могут принимать литералом только 16-битное число.
Подобные ограничения действуют и для инструкций, использующих побитовые логические операции. Однако там используется особый формат кодировки значений — т. н. bitmask immediate, который эксплуатирует тот факт, что на практике битовые маски, как правило, не произвольные числа, а имеют определённую структуру, и позволяет закодировать широкий набор битовых масок в всего 13 битах. Эта статья рассказывает, как устроена эта кодировка, и приводит код на Rust для того, чтобы переводить битовые маски в эту кодировку.
👍3
#prog #rust #rustreleasenotes
Вышла версия Rust 1.95.0! Как всегда, тут только выдержки, всё остальное в детальных заметках о релизе.
▪️
▪️Частично примыкающее изменение: компилятор больше не выдаёт предупреждение на безусловные паттерны в
Эта идиома позволяет привязать значение и что-то сделать/проверить с ним и при этом не пустить имя в окружающую область видимости.
▪️Добавили новый макрос cfg_select!, который позволяет сделать подобие
Технически этот макрос не даёт новых возможностей, но без него нужные атрибуты
▪️Навряд ли кого-то коснётся, но:
▪️Поддержку части платформ подняли до Tier 2 — в основном встраиваемые ARM-платформы от Apple (и их симуляторные версии).
▪️Стабилизированы несколько API, в частности:
🔸Конверсии по ссылке из
🔸Аналогичные конверсии по ссылке между массивами в
🔸Модуль core::range, в котором собираются диапазоны, планируемые на замену текущим. Пока что стабилизированы только RangeInclusive и его итератор. В отличие от текущих диапазонов, новый тип не служит одновременно итератором и потому реализует
🔸Функция core::hint::cold_path для пометки пути исполнения, который не предполагается, что будет часто исполняться. Этакая замена
▪️rustdoc теперь предпочитает стабильные определения нестабильным при сортировке результатов поиска.
Вышла версия 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 теперь предпочитает стабильные определения нестабильным при сортировке результатов поиска.
🎉9❤2🔥1🥰1
Forwarded from Neural Machine
Я хочу быть максимально удовлетворен своей жизнью. Если окажется херня, я поделюсь, как этого добился.
👍8🥰1
#prog #article
Exceptions in Cranelift and Wasmtime
И немного о том, почему добавить поддержку исключений в уже существующий WASM-рантайм оказалось не самой тривиальной задачей
Exceptions in Cranelift and Wasmtime
И немного о том, почему добавить поддержку исключений в уже существующий WASM-рантайм оказалось не самой тривиальной задачей
👍6🥰1😭1
Раньше: "Если все пойдут с гаражей прыгать, ты тоже пойдёшь?"
Сейчас: "Если все пойдут вайбкодить, ты тоже пойдёшь?"
Сейчас: "Если все пойдут вайбкодить, ты тоже пойдёшь?"
😭12👌3❤2🥰1😁1🤔1
Forwarded from Neural Machine
Я мужчина. Я хочу подождать, пока я стану достаточно взрослым.
❤10😢2🍌2🥰1