Блог*
Ir al canal en Telegram
Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here
Mostrar más1 923
Suscriptores
-124 horas
-27 días
-630 días
Archivo de publicaciones
1 923
Repost from N/a
Три уровня погружения в статическую типизацию:
sqlx::query("SELECT keys.hex");
...
let key = row.try_get(hex)?;
sqlx::query!("SELECT keys.hex");
...
let key = Key::from_hex(row.hex)?;
sqlx::query!(r#"SELECT keys.hex as "hex: Key""#);
...
let key = row.hex;1 923
Repost from partially unsupervised
a16z выкатили примечательный блогпост про big ideas in tech 2025.
Примечателен он в первую очередь тем, как единственная страница может заставить включиться кулер нового макбука.
1 923
#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
1 923
Repost from Метаверсище и ИИще
ИИ - это не только ценный смех, это еще и способ вернуть возможность говорить немым пациентам.
Говорить - это доводить до озвучки свои попытки в голове что-то сказать.
Если эксперимент удастся воспроизвести на более разнообразных текстовых данных, а не только для тех, что использовались в статье, то это (мне кажется) невыносимо круто, учитывая заявленную точность в 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
1 923
#web #meme (и, пожалуй, #suckassstory)
5snb.club/posts/2023/do-not-stab
(thanks @installationwizard)
1 923
Пара новостей про Хабр.
1. На Хабре теперь есть эмодзи для статей.
2. Часть из них залочены за сторонним рекламным квестом.
1 923
И да, раз декабрь начался, знаете, что это означает? Всё правильно, это означает Advent of code
1 923
Repost from Алиса копается
Последние полторы недели я пилила 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 раза быстрее идиоматичного кода на паниках, не теряя в экспрессивности.1 923
Пока готовил список — узнал, что есть нестабильная фича для того, чтобы указывать выравнивание для функций
1 923
#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)], применённый на определение, которое не является перечислением, структурой или объединением.
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
