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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
В Армении в последние дни последнего месяца осени пошёл снег. Немыслимо!
🎉4
😭15😁10
Блог*
Я абсолютно ненавижу культуру разработки вокруг BPF
Я ненавижу ошибки верификатора BPF
😁10👍2
Forwarded from someone's shitpost (devilreef)
🤯8🥰5😁1🤔1🥴1
не баян а классика #трудовыебудни
😁14👍9🤔3🔥1🤯1
#prog #rust #rustreleasenotes

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

▪️В const-контекстах теперь можно использовать &mut-ссылки, а также &-ссылки на типы с внутренней изменяемостью!

const fn inc(x: &mut i32) {
*x += 1;
}

const C: i32 = {
let mut c = 41;
inc(&mut c);
c
};


Написание const-кода серьёзно упростилось. Само итоговое значение константы, впрочем, не может быть изменяемой (в том числе через внутреннюю изменяемость) ссылкой.

Также итоговое значение константы теперь может содержать &-ссылку на static, если в типе нет внутренней изменяемости.

static S: i32 = 25;
const C: &i32 = &S;


По понятным причинам итоговое значение константы не может содержать изменяемую (в том числе через внутреннюю изменяемость) ссылку на static.

▪️Как прямое следствие предыдущего пункта — кучу функций можно теперь использовать в const-контексте, включая множество операций над сырыми указателями (в том числе NonNull) и различные функции для разбиения мутабельных слайсов на части.

▪️Также стабилизировали кучу новых вариантов io::ErrorKind. Забавный факт: эти варианты были и раньше и использовались в std, и в теории по ним можно было матчиться, используя реализацию Display. Ещё забавный факт: стабилизацию всех этих вариантов и ещё некоторых запланировали 23 месяца назад, но первый PR со стабилизацией застопорился из-за некоторых вариантов, которые были слишком специфичны для конкретных операционных систем. Собственно, новый PR со стабилизацией приняли лишь потому, что эти варианты из списка на стабилизацию выкинули.

▪️Ещё в число стабилизированных API вошли hash_map::{Entry, VacantEntry}::insert_entry. Эти методы вставляют переданное значение, но, в отличие от insert, возвращают не мутабельную ссылку на значение, а OccupiedEntry.

▪️Одновременные атомарные и неатомарные доступы на чтение из одной локации в памяти одного размера теперь не считаются гонкой данных и потому не являются UB (в C++ — является, поскольку атомарные доступы в C++ происходят через создание atomic_ref, абстрактная машина C++ оперирует типизированной памятью).

▪️Предыдущие версии языка ошибочно считали #[non_exhaustive]-структуры с ненаселёнными полями населёнными типами вне крейта, в которых они определены. В этой версии это странное поведение исправили. Для пользователей языка это означает, что, например, с вот таким определением:

enum Empty {}

#[non_exhaustive]
struct Foo(Empty);


следующая функция скомпилируется вне зависимости от того, определена ли она в том же крейте, что и Foo, или нет:

fn eliminate<T>(f: Foo) -> T {
match f {}
}


▪️Из забавного: компилятор теперь выдаёт ошибку на атрибут #[repr(Rust)], применённый на определение, которое не является перечислением, структурой или объединением.
👍84🎉2
Последние полторы недели я пилила Lithium — крейт для работы с исключениями в расте.

Exceptions? In my monadic language? It's more likely than you think!

Исключения хороши тем, что они, по сравнению с Result, добавляют меньше оверхеда в success path, и поэтому, если ошибки случаются достаточно редко, оказывается выгодным их использовать для передачи ошибок.

Если оставить в стороне вопрос идиоматичности, проблем с исключениями в Rust две: эргономика и производительность. К решению их обеих Lithium подступается, но не завершает, потому что это низкоуровневый крейт с фиксированным скоупом, который должен стать одним кирпичиком, а не быть идеальным решением.

Это пока обзорный пост, чтобы извиниться за лишние пинги оффтопом, потом напишу побольше.

- Эргономика

Для эргономики предоставляются функции throw и catch, аналогичные конструкциям из других языков. throw бросает произвольный T, catch ловит произвольный T, никакой проверки типов нет.

С одной стороны — это требует делать функции unsafe, с другой — если смотреть на существующий растовый код, опирающийся на Result, то там это требование всегда исполняется, поэтому проверка типов только добавила бы оверхед.

По сравнению с Rust-паниками снимается еще одно требование — бросаемый тип не обязан быть Send + 'static, поэтому можно спокойно бросать, например, ссылки на Cell.

- Производительность

Для производительности пробрасывание исключений идет через наиболее низкоуровневые доступные API, а не через panic!. В случае большинства платформ это Itanium EH, на Windows это SEH. Это несколько уменьшает оверхед от вызовов, а также в большинстве случаев позволяет снизить количество аллокаций до нуля.

В API есть еще одна особенность: интерфейс позволяет поймать исключение, промодифицировать его payload и перевыбросить исключение более эффективно, чем в два шага через catch + throw. Такое переиспользование буфферов тоже несколько увеличивает перф.

Итоговый результат — на большинстве платформ идиоматичный код на Lithium работает в 2.5 раза быстрее идиоматичного кода на паниках, не теряя в экспрессивности.
🤔13🔥6👎4👍2😱2🌚1
В СМЫСЛЕ УЖЕ ДЕКАБРЬ
🤡11🙏3😭3😁1
И да, раз декабрь начался, знаете, что это означает? Всё правильно, это означает Advent of code
👌12🤮4❤‍🔥3
Пара новостей про Хабр.

1. На Хабре теперь есть эмодзи для статей.

2. Часть из них залочена за сторонним рекламным квестом.
💩29🤡12🫡6🖕31😁1
Forwarded from Метаверсище и ИИще (Sergey Tsyptsyn ️️)
ИИ - это не только ценный смех, это еще и способ вернуть возможность говорить немым пациентам.

Говорить - это доводить до озвучки свои попытки в голове что-то сказать.

Если эксперимент удастся воспроизвести на более разнообразных текстовых данных, а не только для тех, что использовались в статье, то это (мне кажется) невыносимо круто, учитывая заявленную точность в 90% и выход на 97% после дотренировки.

Если на TLDR-пальцах:
Человеку имплантировали 4 электрода, которые регистрировали его нейроактивность. За 30-минут обучили ИИ превращать эти сигналы в текст. Текст озвучили с помощью text-2-speech. Это на словарном запасе 50 слов.
Но.
Потренировали еще полтора часа и вот уже словарный запас 125 000 слов (больше чем у любого школьника) и точность 90.2 процента.

Как тут не вспомнить про пластичность мозга, который может использовать новые сигналы взамен потерянных (кохлеарные имплантанты, писал тут 1 2 3), чтобы расшифровывать их в нужный канал восприятия (слух речь).
ИИ и есть эта пластичность в данном примере.

Для гиков.
Пациенту была проведена хирургическая имплантация четырех микроэлектродных массивов в левую прецентральную извилину, которые регистрировали нейронную активность с 256 внутрикорковых электродов. Такой нейропротез, декодировал его нейронную активность, когда он пытался говорить в условиях как заданной, так и неструктурированной беседы. Декодированные слова отображались на экране, а затем озвучивались с помощью text2speech. В первый день использования системы, после 30 минут попыток обучения речи, нейропротез достиг точности 99.6% при словарном запасе в 50 слов. На второй день объем возможного словарного запаса увеличился до 125 000 слов, и после 1.4 дополнительных часов обучения нейропротез достиг точности 90.2%. При дальнейшем обучении нейропротез сохранял точность 97.5% в течение восьми месяцев после хирургической имплантации. Участник использовал нейропротез для самостоятельного общения в течение более 248 часов. У человека с ALS и тяжелой дизартрией внутрикорковый речевой нейропротез достиг уровня производительности, пригодного для восстановления естественного общения, после короткого периода обучения.

Когда Маск сделает свою иголочку доступной на уровне амбулаторного укола в голову для всех, можно будет набирать текстовые сообщения молча. Нет, общаться с chatGPT молча. А еще круче - тихие Zoom-коллы. Все сидят в наушниках и молчат.

Если вы думаете, что все это шуточки, поглядите видео:
https://www.youtube.com/watch?v=thPhBDVSxz0

Немного не по себе после просмотра.
https://pubmed.ncbi.nlm.nih.gov/38645254/

А, самое значимое, код есть на Гитхабе.

@cgevent
👍8🔥8😐3❤‍🔥1👎1🎉1
😁9❤‍🔥2🔥1👌1💯1🤨1😭1
#prog #rust хайлайты

We are currently unconditionally verifying the LLVM IR in the backend (twice), ignoring the value of the verify-llvm-ir option. This has substantial compile-time impact for debug builds.

На скриншоте — результаты бенчмарков после мерджа.

github.com/rust-lang/rust/pull/133499
👏12💩4👍1
#meme

За что так точно 😢
3
Forwarded from partially unsupervised
a16z выкатили примечательный блогпост про big ideas in tech 2025.

Примечателен он в первую очередь тем, как единственная страница может заставить включиться кулер нового макбука.
😁8🤯6