🦀 Rust: заметки о написании WASM
Rust - один из лучших языков для разработки WebAssembly, но у него есть немало «острых углов».
В своей статье Brooklyn Zelenka делится практическими уроками из реальной разработки Rust-WASM и объясняет, какие проблемы чаще всего встречаются и как их обходить.
• Rust отлично подходит для компиляции в WebAssembly - безопасная память, хорошая интеграция с LLVM и высокая производительность.
• Однако связка Rust + wasm-bindgen может быть неудобной, и многие разработчики сталкиваются с неожиданными ограничениями и странностями API.
• В реальных проектах важно выработать собственные паттерны архитектуры и взаимодействия с хост-средой (обычно JavaScript).
• Многие проблемы WASM связаны не с Rust, а с самим экосистемным слоем: биндинги, сборка, взаимодействие с браузером и tooling.
Автор делится конкретными практическими приёмами, которые позволяют значительно упростить работу с Rust-WASM и избежать типичных ошибок.
Если вы работаете с WebAssembly или только планируете использовать Rust для WASM — статья обязательна к прочтению.
https://notes.brooklynzelenka.com/Blog/Notes-on-Writing-Wasm
Rust - один из лучших языков для разработки WebAssembly, но у него есть немало «острых углов».
В своей статье Brooklyn Zelenka делится практическими уроками из реальной разработки Rust-WASM и объясняет, какие проблемы чаще всего встречаются и как их обходить.
• Rust отлично подходит для компиляции в WebAssembly - безопасная память, хорошая интеграция с LLVM и высокая производительность.
• Однако связка Rust + wasm-bindgen может быть неудобной, и многие разработчики сталкиваются с неожиданными ограничениями и странностями API.
• В реальных проектах важно выработать собственные паттерны архитектуры и взаимодействия с хост-средой (обычно JavaScript).
• Многие проблемы WASM связаны не с Rust, а с самим экосистемным слоем: биндинги, сборка, взаимодействие с браузером и tooling.
Автор делится конкретными практическими приёмами, которые позволяют значительно упростить работу с Rust-WASM и избежать типичных ошибок.
Если вы работаете с WebAssembly или только планируете использовать Rust для WASM — статья обязательна к прочтению.
https://notes.brooklynzelenka.com/Blog/Notes-on-Writing-Wasm
🔥17❤6🥰5👍1🤗1
Rust и QUIC уже делают то, к чему ИИ только подбирается
Пока все спорят про агентов и автокодинг, в системной разработке quietly происходит очень важная вещь. Люди начинают нормально проверять сложные системы, а не надеяться на тесты.
Команда Адольфо Очагавии взяла QUIC-симулятор на базе quinn и попыталась убедиться, что он вообще работает корректно. Не на простых кейсах, а на произвольных сетях, включая сценарии уровня Земля–Марс.
Обычные тесты быстро закончились. Покрыть такие сценарии руками невозможно.
Они пошли другим путём. Сначала зафиксировали на бумаге, что считается корректным поведением. Затем встроили audit-лог прямо в симуляцию. После этого написали отдельный verifier, который прогоняет каждую симуляцию и проверяет её автоматически.
Ключевой момент в том, как это реализовано. Основную логику вообще не трогали. Проверка вынесена в отдельный слой. Сам verifier достаточно простой, его можно прочитать и понять без погружения в систему. Поверх этого появились golden-тесты, которые ловят регрессии.
Это выглядит как практическая версия того, о чём сейчас много говорят в контексте ИИ. Не просто генерировать код или тесты, а формализовать поведение системы и проверять его на уровне свойств.
Если переносить на AI-системы, то это ровно та же проблема. У нас есть агенты, пайплайны, куча состояний и внешних эффектов. И почти нет нормальной верификации. Всё держится на эвристиках и наблюдении.
Этот кейс хорошо показывает, куда двигаться дальше. Не усложнять архитектуру, а добавлять слой проверяемости поверх неё.
Разбор здесь
https://ochagavia.nl/blog/a-real-world-case-of-property-based-verification/
Пока все спорят про агентов и автокодинг, в системной разработке quietly происходит очень важная вещь. Люди начинают нормально проверять сложные системы, а не надеяться на тесты.
Команда Адольфо Очагавии взяла QUIC-симулятор на базе quinn и попыталась убедиться, что он вообще работает корректно. Не на простых кейсах, а на произвольных сетях, включая сценарии уровня Земля–Марс.
Обычные тесты быстро закончились. Покрыть такие сценарии руками невозможно.
Они пошли другим путём. Сначала зафиксировали на бумаге, что считается корректным поведением. Затем встроили audit-лог прямо в симуляцию. После этого написали отдельный verifier, который прогоняет каждую симуляцию и проверяет её автоматически.
Ключевой момент в том, как это реализовано. Основную логику вообще не трогали. Проверка вынесена в отдельный слой. Сам verifier достаточно простой, его можно прочитать и понять без погружения в систему. Поверх этого появились golden-тесты, которые ловят регрессии.
Это выглядит как практическая версия того, о чём сейчас много говорят в контексте ИИ. Не просто генерировать код или тесты, а формализовать поведение системы и проверять его на уровне свойств.
Если переносить на AI-системы, то это ровно та же проблема. У нас есть агенты, пайплайны, куча состояний и внешних эффектов. И почти нет нормальной верификации. Всё держится на эвристиках и наблюдении.
Этот кейс хорошо показывает, куда двигаться дальше. Не усложнять архитектуру, а добавлять слой проверяемости поверх неё.
Разбор здесь
https://ochagavia.nl/blog/a-real-world-case-of-property-based-verification/
🔥17👍10❤5🥱3🥰2
🚨 В Rust появился безопасный способ брать указатели на поля без UB
Если работаешь с raw pointers, рано или поздно упираешься в проблему.
Нужно получить указатель на поле структуры. Но через обычную ссылку это может сломать правила borrow checker и привести к скрытым багам.
Особенно если речь про unsafe-код и тонкие места с aliasing.
Для этого в std есть addr_of! и addr_of_mut!.
Они позволяют взять указатель на поле напрямую, без создания временной ссылки. Это важно, потому что ты не нарушаешь stacked borrows и не создаёшь лишних промежуточных состояний.
По сути ты получаешь pointer projection без побочных эффектов.
Это мелкая деталь, но в низкоуровневом коде она решает реальные проблемы. Особенно в FFI, системном коде и оптимизациях.
Если пишешь unsafe в Rust, эти макросы стоит знать.
Если работаешь с raw pointers, рано или поздно упираешься в проблему.
Нужно получить указатель на поле структуры. Но через обычную ссылку это может сломать правила borrow checker и привести к скрытым багам.
Особенно если речь про unsafe-код и тонкие места с aliasing.
Для этого в std есть addr_of! и addr_of_mut!.
Они позволяют взять указатель на поле напрямую, без создания временной ссылки. Это важно, потому что ты не нарушаешь stacked borrows и не создаёшь лишних промежуточных состояний.
По сути ты получаешь pointer projection без побочных эффектов.
Это мелкая деталь, но в низкоуровневом коде она решает реальные проблемы. Особенно в FFI, системном коде и оптимизациях.
Если пишешь unsafe в Rust, эти макросы стоит знать.
❤35👍4🥰1🖕1🤗1
Spinlock<T> с нуля на Rust.
Без Mutex. Только AtomicBool, UnsafeCell и RAII-guard.
За ~60 строк unsafe-кода разобрался с memory ordering и получил рабочую альтернативу мьютексу 🦀
Репозиторий
https://github.com/1rishuraj/low-latency-rust/tree/main/spinlock
Без Mutex. Только AtomicBool, UnsafeCell и RAII-guard.
За ~60 строк unsafe-кода разобрался с memory ordering и получил рабочую альтернативу мьютексу 🦀
Репозиторий
https://github.com/1rishuraj/low-latency-rust/tree/main/spinlock
👍14🔥8🗿4😁3🥰2❤1😱1🤗1
Forwarded from Machine learning Interview
🔥 Плохой день для хейтеров ИИ. Сообщество Linux согласилось принимать код, сгенерированный ИИ, если это не низкокачественный мусор.
При этом вся ответственность остаётся за людьми - именно они должны гарантировать, что код соответствует стандартам Linux.
Линус не шутит, когда речь идёт о качестве кода. Это серьёзный шаг. (уже слышно, как он орёт в PR-ах)
На этой неделе в проекте Linux kernel впервые официально разрешили использовать ИИ при написании кода. Но с важным условием - вся ответственность теперь полностью на разработчике.
Позиция Линуса Торвальдса максимально простая: ИИ - это просто инструмент. Если разработчик приносит плохой код, проблема не в инструменте, а в нём самом. Поэтому вместо запретов решили ужесточить правила ответственности.
Ключевой момент - подпись в коммите. Строка Signed-off-by теперь ещё жёстче закрепляет правило: только человек имеет право её ставить. Это юридическое подтверждение того, что именно ты отвечаешь за код. Никакие AI-агенты не могут это делать.
Если, например, Claude сгенерировал race condition в block layer, а ты это пропустил - это твой баг. В истории останется твоя подпись, не модели.
Контекст важен. Open-source сейчас буквально захлёбывается от AI-кода сомнительного качества. Уже есть последствия:
создатель cURL закрыл bug bounty из-за потока галлюцинированных патчей
tldraw начал автоматически закрывать внешние PR
Node.js и OCaml ловят гигантские AI-патчи на 10k+ строк
Linux выбрал самый прагматичный путь - не запрещать, а заставить отвечать.
ИИ можно использовать. Но теперь без иллюзий: написал ты. Проверил ты. Отвечаешь тоже ты.
🖥 Полезные Linux ресурсы 🚀 Max
@machinelearning_interview
При этом вся ответственность остаётся за людьми - именно они должны гарантировать, что код соответствует стандартам Linux.
Линус не шутит, когда речь идёт о качестве кода. Это серьёзный шаг. (уже слышно, как он орёт в PR-ах)
На этой неделе в проекте Linux kernel впервые официально разрешили использовать ИИ при написании кода. Но с важным условием - вся ответственность теперь полностью на разработчике.
Позиция Линуса Торвальдса максимально простая: ИИ - это просто инструмент. Если разработчик приносит плохой код, проблема не в инструменте, а в нём самом. Поэтому вместо запретов решили ужесточить правила ответственности.
Ключевой момент - подпись в коммите. Строка Signed-off-by теперь ещё жёстче закрепляет правило: только человек имеет право её ставить. Это юридическое подтверждение того, что именно ты отвечаешь за код. Никакие AI-агенты не могут это делать.
Если, например, Claude сгенерировал race condition в block layer, а ты это пропустил - это твой баг. В истории останется твоя подпись, не модели.
Контекст важен. Open-source сейчас буквально захлёбывается от AI-кода сомнительного качества. Уже есть последствия:
создатель cURL закрыл bug bounty из-за потока галлюцинированных патчей
tldraw начал автоматически закрывать внешние PR
Node.js и OCaml ловят гигантские AI-патчи на 10k+ строк
Linux выбрал самый прагматичный путь - не запрещать, а заставить отвечать.
ИИ можно использовать. Но теперь без иллюзий: написал ты. Проверил ты. Отвечаешь тоже ты.
@machinelearning_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥37👍19❤8💊4😁2🖕2🏆1
🚨 uv под капотом
Лучший способ расти как инженер это разбирать сильные кодовые базы.
uv отличный пример. Это не просто пакетный менеджер, а аккуратно собранная система с продуманной архитектурой.
Внутри.
• Как устроен crate graph и резолвер зависимостей.
Как реализована конкуренция без лишних блокировок.
• Как работает кэш и ускоряет повторные операции.
• Как спроектирован инсталлер и пайплайн установки.
Такие проекты формируют инженерный вкус.
Ты начинаешь видеть, где упрощать.
Где разделять ответственность.
Как писать код, который масштабируется.
Это уровень, который не даёт ни один туториал.
Разбор
https://noos.blog/posts/uv-how-it-works-under-the-hood/
Лучший способ расти как инженер это разбирать сильные кодовые базы.
uv отличный пример. Это не просто пакетный менеджер, а аккуратно собранная система с продуманной архитектурой.
Внутри.
• Как устроен crate graph и резолвер зависимостей.
Как реализована конкуренция без лишних блокировок.
• Как работает кэш и ускоряет повторные операции.
• Как спроектирован инсталлер и пайплайн установки.
Такие проекты формируют инженерный вкус.
Ты начинаешь видеть, где упрощать.
Где разделять ответственность.
Как писать код, который масштабируется.
Это уровень, который не даёт ни один туториал.
Разбор
https://noos.blog/posts/uv-how-it-works-under-the-hood/
❤22🔥9🍓4🥰1🗿1
Rust 1.95.0 вышел. И это не просто минорный апдейт.
Добавили
В match наконец завезли
Под капотом много стабилизаций API и улучшений const. Больше логики можно выполнять на этапе компиляции, а не в рантайме.
• Меньше костылей
• меньше макросного ада
• больше контроля и предсказуемости
Rust продолжает делать то, за что его любят - тихо улучшать разработку на каждом уровне
blog.rust-lang.org/2026/04/16/Rust-1.95.0/
Добавили
cfg_select! - теперь проще управлять кодом под разные платформы без каши из #[cfg].В match наконец завезли
if let guards. Условия стали чище, меньше вложенности, код читается быстрее.Под капотом много стабилизаций API и улучшений const. Больше логики можно выполнять на этапе компиляции, а не в рантайме.
• Меньше костылей
• меньше макросного ада
• больше контроля и предсказуемости
Rust продолжает делать то, за что его любят - тихо улучшать разработку на каждом уровне
blog.rust-lang.org/2026/04/16/Rust-1.95.0/
❤41🔥17👍12🥰1🤗1
🦀 Google затащили Rust туда, где его реально ждали - прямо в cellular baseband у Pixel 10.
Не в приложение, не в системный сервис и даже не в очередную утилиту, а в прошивку модема. Это уже совсем другой уровень.
Первым шагом заменили DNS-парсер, который раньше был написан на C и регулярно оставался источником memory-safety проблем. Теперь там Rust на базе hickory-proto: bare-metal, no_std, FFI к существующим C-аллокаторам - все по-взрослому.
И самое важное тут даже не сам DNS-парсер. Главное, что Google уже протащили Rust в build system baseband. А значит, это не разовая демонстрация, а начало нормальной поэтапной миграции.
Вот так и выглядит реальное внедрение Rust в критическую инфраструктуру: без громких лозунгов, но с максимальной пользой. Сначала один опасный компонент, потом еще один, а дальше язык постепенно заходит в самые уязвимые части системы.
Rust все чаще идет не в новые игрушечные проекты, а в старые и сложные куски железа, где цена ошибки слишком высокая.
security.googleblog.com/2026/04/bringing-rust-to-pixel-baseband.html
#Rust #RustLang #MemorySafety #EmbeddedSystems #Android
Не в приложение, не в системный сервис и даже не в очередную утилиту, а в прошивку модема. Это уже совсем другой уровень.
Первым шагом заменили DNS-парсер, который раньше был написан на C и регулярно оставался источником memory-safety проблем. Теперь там Rust на базе hickory-proto: bare-metal, no_std, FFI к существующим C-аллокаторам - все по-взрослому.
И самое важное тут даже не сам DNS-парсер. Главное, что Google уже протащили Rust в build system baseband. А значит, это не разовая демонстрация, а начало нормальной поэтапной миграции.
Вот так и выглядит реальное внедрение Rust в критическую инфраструктуру: без громких лозунгов, но с максимальной пользой. Сначала один опасный компонент, потом еще один, а дальше язык постепенно заходит в самые уязвимые части системы.
Rust все чаще идет не в новые игрушечные проекты, а в старые и сложные куски железа, где цена ошибки слишком высокая.
security.googleblog.com/2026/04/bringing-rust-to-pixel-baseband.html
#Rust #RustLang #MemorySafety #EmbeddedSystems #Android
🔥54❤19👍13💊3🥰2👏2🥱2😍1💯1
🦀 Rust заходит на GPU по-взрослому
Появился мощный разбор от VectorWare: они смогли запустить обычные std::thread прямо на GPU.
Идея простая, но взрывающая мозг: вместо классической модели GPU с kernel’ами и ручной синхронизацией, потоки Rust мапятся на warps.
И код начинает выглядеть как нормальный Rust, а не как низкоуровневый ад с указателями и барьерами.
GPU всегда работал по другой логике: ты пишешь функцию, а она запускается тысячи раз параллельно. Вся синхронизация и контроль — на тебе. Именно поэтому GPU-код сложный и хрупкий
Здесь происходит сдвиг модели:
• пишешь как для CPU
• получаешь параллелизм GPU
• меньше дыр в безопасности и ручной работы
Каждый warp ведёт себя как поток
часть стандартной библиотеки начинает работать прямо на устройстве
Это попытка совместить два мира: thread-based модель CPU и kernel-based модель GPU
Один и тот же код можно гонять на CPU и GPU, сложная логика больше не требует переписывания под kernel.
Если такие абстракции взлетят, GPU перестанет быть «спецрежимом для математики» и станет обычной средой исполнения для сложных систем.
Ссылка на разбор: https://vectorware.com/blog/threads-on-gpu/
Появился мощный разбор от VectorWare: они смогли запустить обычные std::thread прямо на GPU.
Идея простая, но взрывающая мозг: вместо классической модели GPU с kernel’ами и ручной синхронизацией, потоки Rust мапятся на warps.
И код начинает выглядеть как нормальный Rust, а не как низкоуровневый ад с указателями и барьерами.
GPU всегда работал по другой логике: ты пишешь функцию, а она запускается тысячи раз параллельно. Вся синхронизация и контроль — на тебе. Именно поэтому GPU-код сложный и хрупкий
Здесь происходит сдвиг модели:
• пишешь как для CPU
• получаешь параллелизм GPU
• меньше дыр в безопасности и ручной работы
Каждый warp ведёт себя как поток
std::thread становится абстракцией поверх GPUчасть стандартной библиотеки начинает работать прямо на устройстве
Это попытка совместить два мира: thread-based модель CPU и kernel-based модель GPU
Один и тот же код можно гонять на CPU и GPU, сложная логика больше не требует переписывания под kernel.
Если такие абстракции взлетят, GPU перестанет быть «спецрежимом для математики» и станет обычной средой исполнения для сложных систем.
Ссылка на разбор: https://vectorware.com/blog/threads-on-gpu/
🔥61👍13🥰6❤2😁1😱1🤗1
Грэйдон Хоар возвращался домой в Ванкувере - лифт в его доме на 21-м этаже снова упал с ошибкой прошивки.
Пока он поднимался пешком, в голове оформилась идея. В тот же вечер он открыл ноутбук и начал проектировать язык.
Назвал его Rust - в честь грибков, известных своей абсурдной живучестью.
Было это в 2006 году, Хоару было 29 лет, он работал инженером в Mozilla.
Проблема, которую он хотел решить, существовала десятилетиями. Системное программирование жило в C и C++ - быстро, близко к железу, но с ценой: ручное управление памятью. На миллионах строк кода даже самые аккуратные инженеры допускают ошибки. Microsoft оценивает, что 70% уязвимостей в её продуктах - это баги управления памятью в C и C++. В 90-х Java, Python и JavaScript предложили альтернативу: сборщик мусора, автоматическая память. Но заплатить пришлось производительностью и непригодностью для bare-metal среды. Поле разделилось на два лагеря: быстро-но-опасно против безопасно-но-медленно.
Rust предложил третий путь. Компилятор просто откажется собирать программу, если нарушены правила работы с памятью. Система владения гарантирует, что на каждый кусок данных в любой момент существует ровно одна ссылка. Никакого рантайм-оверхеда, никакого сборщика мусора - в 2013 году команда вырезала его полностью. Язык стал быстрее и ближе к металлу, сохранив при этом безопасность на уровне архитектуры.
Результаты говорят сами за себя. Discord переписал один из core-сервисов с Go на Rust - он стал работать в 10 раз быстрее.
Dropbox переделал движок синхронизации, потому что Python не справлялся с миллиардами файлов. Cloudflare пропускает через Rust-системы больше 20% всего интернет-трафика. Программы на Rust потребляют примерно вдвое меньше электричества, чем аналоги на Java. Правительство США официально рекомендует переход на Rust как меру национальной кибербезопасности.
Семь лет подряд Rust занимает первое место в опросе Stack Overflow как самый любимый язык среди разработчиков. Сейчас им пользуются 2,8 миллиона человек по всему миру.
Хоар ушёл из проекта в том же 2013-м. Он запустил то, что уже не нуждалось в нём, - и оказался прав.
Пока он поднимался пешком, в голове оформилась идея. В тот же вечер он открыл ноутбук и начал проектировать язык.
Назвал его Rust - в честь грибков, известных своей абсурдной живучестью.
Было это в 2006 году, Хоару было 29 лет, он работал инженером в Mozilla.
Проблема, которую он хотел решить, существовала десятилетиями. Системное программирование жило в C и C++ - быстро, близко к железу, но с ценой: ручное управление памятью. На миллионах строк кода даже самые аккуратные инженеры допускают ошибки. Microsoft оценивает, что 70% уязвимостей в её продуктах - это баги управления памятью в C и C++. В 90-х Java, Python и JavaScript предложили альтернативу: сборщик мусора, автоматическая память. Но заплатить пришлось производительностью и непригодностью для bare-metal среды. Поле разделилось на два лагеря: быстро-но-опасно против безопасно-но-медленно.
Rust предложил третий путь. Компилятор просто откажется собирать программу, если нарушены правила работы с памятью. Система владения гарантирует, что на каждый кусок данных в любой момент существует ровно одна ссылка. Никакого рантайм-оверхеда, никакого сборщика мусора - в 2013 году команда вырезала его полностью. Язык стал быстрее и ближе к металлу, сохранив при этом безопасность на уровне архитектуры.
Результаты говорят сами за себя. Discord переписал один из core-сервисов с Go на Rust - он стал работать в 10 раз быстрее.
Dropbox переделал движок синхронизации, потому что Python не справлялся с миллиардами файлов. Cloudflare пропускает через Rust-системы больше 20% всего интернет-трафика. Программы на Rust потребляют примерно вдвое меньше электричества, чем аналоги на Java. Правительство США официально рекомендует переход на Rust как меру национальной кибербезопасности.
Семь лет подряд Rust занимает первое место в опросе Stack Overflow как самый любимый язык среди разработчиков. Сейчас им пользуются 2,8 миллиона человек по всему миру.
Хоар ушёл из проекта в том же 2013-м. Он запустил то, что уже не нуждалось в нём, - и оказался прав.
👍44❤17🔥8😇7🥰1🤯1🤝1
🦀 Rust не ловит дедлоки, он их просто не компилирует
Вместо того чтобы надеяться, что ты правильно расставил lock’и и ничего не сломаешь в рантайме, Surelock выносит всю проблему дедлоков на уровень типов.
Ошибся с порядком захвата мьютексов?
Код даже не соберётся.
И это не какая-то игрушка. API остаётся удобным.
По факту:
• компилятор сам проверяет порядок локов
• невозможно случайно создать дедлок
• эргономика остаётся на уровне обычного Rust
•
Это тот случай, когда безопасность не «поверх», а встроена в саму модель языка.
Rust снова делает то, что другие языки даже не пытаются.
https://notes.brooklynzelenka.com/Blog/Surelock
Вместо того чтобы надеяться, что ты правильно расставил lock’и и ничего не сломаешь в рантайме, Surelock выносит всю проблему дедлоков на уровень типов.
Ошибся с порядком захвата мьютексов?
Код даже не соберётся.
И это не какая-то игрушка. API остаётся удобным.
По факту:
• компилятор сам проверяет порядок локов
• невозможно случайно создать дедлок
• эргономика остаётся на уровне обычного Rust
•
Это тот случай, когда безопасность не «поверх», а встроена в саму модель языка.
Rust снова делает то, что другие языки даже не пытаются.
https://notes.brooklynzelenka.com/Blog/Surelock
❤27🥰4🔥2😇2
Если оборачиваешь указатели или хендлы для FFI, не полагайся на “и так сойдёт”.
Явно зафиксируй layout через repr.
Связка repr(transparent) и repr(C) даёт предсказуемое представление в памяти. Тип снаружи выглядит как обёртка, а для компилятора это тот же layout, что и у внутреннего значения.
Что это даёт на практике
• бинарная совместимость с C
• отсутствие скрытых паддингов и перестановок полей
• возможность делать приведения без transmute
• нормальный, идиоматичный способ оборачивать raw handle и pointer
В итоге ты получаешь типобезопасность Rust без потери контроля над ABI.
Если работаешь с FFI и не фиксируешь repr, ты оставляешь поведение на усмотрение компилятора. И это рано или поздно выстрелит.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤6🔥4🥰2🤗1
Forwarded from Machinelearning
🚀 DeepSeek выкатили V4 и сделали то, к чему все шли последние два года.
Длинный контекст больше не фича для демо. Теперь это базовый уровень.
Пока Запад празднует релизы с пафосными стримами, китайцы из DeepSeek сегодня утром просто выложили в Hugging Face две открытые модели и пошли пить чай. А теперь весь твиттер пытается осознать, что произошло. V4-Pro на 1.6 триллиона параметров с 49 миллиардами активных и V4-Flash на 284 миллиарда с 13 активными. Обе открытые, обе с миллионом контекста по дефолту, обе уже доступны через API и на chat.deepseek.com.
Главная фишка даже не в размере, а в том, что DeepSeek пересобрали внимание. Они запихнули в модель токенную компрессию и свою DeepSeek Sparse Attention, за счёт чего длинный контекст стал буквально дешёвым.
Не «технически возможным за пять долларов за запрос», как у конкурентов, а реально дешёвым. 1М теперь стандарт во всех официальных сервисах, а не премиум-опция за отдельную плату.
По цифрам V4-Pro претендует на открытый SOTA в агентном кодинге, тащит математику и STEM и в общих знаниях уступает только Gemini 3.1 Pro. Flash-версия идёт следом почти вплотную по ризонингу и ровно держит планку Pro на простых агентных задачах, но с меньшей задержкой и смешным прайсом.
Отдельно интересно, что API теперь поддерживает и формат OpenAI ChatCompletions, и Anthropic, с переключением между Thinking и Non-Thinking режимами. Старые deepseek-chat и deepseek-reasoner отключат 24 июля 2026, так что у команд есть три месяца на миграцию.
И конечно, DeepSeek не забыли ткнуть Anthropic в бок: в треде прямо написано, что V4 «бесшовно интегрируется с Claude Code, OpenClaw и OpenCode». То есть пока у Anthropic вчера был пост-мортем про сломанный харнесс, DeepSeek сегодня предлагает подменить им модель и сэкономить.
Закрытые лаборатории будут делать вид, что ничего не случилось, но стоимость миллиона токенов контекста только что стала публичной ценой, и от неё уже не отмотаешь.
В релизе есть упоминания - «950 supernodes» это отсылка к Huawei Atlas 950 SuperPoD, новой инференс-инфраструктуре Huawei на чипах Ascend. DeepSeek говорят, что во второй половине 2026 года, когда эти суперноды запустят в масштабе, цена Pro заметно упадёт. То есть они планируют гонять инференс не на Nvidia, а на китайском железе Huawei.
📄 Tech Report: https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/DeepSeek_V4.pdf
🤗 Open Weights: https://huggingface.co/collections/deepseek-ai/deepseek-v4
@ai_machinelearning_big_data
#DeepSeek
Длинный контекст больше не фича для демо. Теперь это базовый уровень.
Пока Запад празднует релизы с пафосными стримами, китайцы из DeepSeek сегодня утром просто выложили в Hugging Face две открытые модели и пошли пить чай. А теперь весь твиттер пытается осознать, что произошло. V4-Pro на 1.6 триллиона параметров с 49 миллиардами активных и V4-Flash на 284 миллиарда с 13 активными. Обе открытые, обе с миллионом контекста по дефолту, обе уже доступны через API и на chat.deepseek.com.
Главная фишка даже не в размере, а в том, что DeepSeek пересобрали внимание. Они запихнули в модель токенную компрессию и свою DeepSeek Sparse Attention, за счёт чего длинный контекст стал буквально дешёвым.
Не «технически возможным за пять долларов за запрос», как у конкурентов, а реально дешёвым. 1М теперь стандарт во всех официальных сервисах, а не премиум-опция за отдельную плату.
По цифрам V4-Pro претендует на открытый SOTA в агентном кодинге, тащит математику и STEM и в общих знаниях уступает только Gemini 3.1 Pro. Flash-версия идёт следом почти вплотную по ризонингу и ровно держит планку Pro на простых агентных задачах, но с меньшей задержкой и смешным прайсом.
Отдельно интересно, что API теперь поддерживает и формат OpenAI ChatCompletions, и Anthropic, с переключением между Thinking и Non-Thinking режимами. Старые deepseek-chat и deepseek-reasoner отключат 24 июля 2026, так что у команд есть три месяца на миграцию.
И конечно, DeepSeek не забыли ткнуть Anthropic в бок: в треде прямо написано, что V4 «бесшовно интегрируется с Claude Code, OpenClaw и OpenCode». То есть пока у Anthropic вчера был пост-мортем про сломанный харнесс, DeepSeek сегодня предлагает подменить им модель и сэкономить.
Закрытые лаборатории будут делать вид, что ничего не случилось, но стоимость миллиона токенов контекста только что стала публичной ценой, и от неё уже не отмотаешь.
В релизе есть упоминания - «950 supernodes» это отсылка к Huawei Atlas 950 SuperPoD, новой инференс-инфраструктуре Huawei на чипах Ascend. DeepSeek говорят, что во второй половине 2026 года, когда эти суперноды запустят в масштабе, цена Pro заметно упадёт. То есть они планируют гонять инференс не на Nvidia, а на китайском железе Huawei.
📄 Tech Report: https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/DeepSeek_V4.pdf
🤗 Open Weights: https://huggingface.co/collections/deepseek-ai/deepseek-v4
@ai_machinelearning_big_data
#DeepSeek
❤27🔥19👍11⚡2🥴1🏆1
Представьте: через три месяца вы открываете чужой Rust-код и читаете его как книгу.
Arc<Mutex<T>> не вызывает панику. impl Future не пугает. Вы точно знаете, почему компилятор ругается и как это починить за 10 секунд.
Это не фантазия. Это результат 50 уроков, в которых каждая концепция объясняется через код и закрепляется практикой.
Ownership, traits, generics, async, unsafe - всё, что казалось магией, станет рабочим инструментом.А бонусом - портфолио проектов: от CLI-утилит до REST API и WebAssembly.
Вы и так знаете, что Rust - ваш следующий язык. Этот курс просто сделает это реальностью.
Сегодня - 55% процентов от цены, торопись: https://stepik.org/a/269250/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4🖕4🔥3🥰1🌚1🤗1
MaybeUninit для ручной сборки структур без лишнего drop
Когда значение собирается по частям в unsafe-коде, FFI, парсере или аллокаторе, главная проблема не в самой инициализации. Главная проблема - что делать, если ошибка произошла посередине.
Например, одно поле структуры уже создано, а второе еще нет. В этот момент нельзя дропать всю структуру целиком: для Rust она еще не является полностью готовым объектом.
Правильный подход - явно помнить, какие поля уже инициализированы, и очищать только их. Для этого используют MaybeUninit, ptr::write, drop_in_place и, когда значение уже полностью готово, assume_init_drop.
MaybeUninit нужен не “чтобы обмануть Rust”, а чтобы аккуратно управлять жизненным циклом там, где компилятор уже не может сделать это за тебя.
Для таких случаев есть MaybeUninit:
use std::mem::MaybeUninit;
struct Buffer {
data: Vec<u8>,
meta: String,
}
let mut value = MaybeUninit::<Buffer>::uninit();
unsafe {
let ptr = value.as_mut_ptr();
std::ptr::addr_of_mut!((*ptr).data).write(vec![1, 2, 3]);
// Если дальше случилась ошибка,
// дропаем только уже инициализированное поле
std::ptr::addr_of_mut!((*ptr).data).drop_in_place();
// А всю Buffer не трогаем:
// meta еще не была создана
}
Более удобный вариант для полностью инициализированного MaybeUninit<T>:
let mut value = MaybeUninit::new(String::from("hello"));
unsafe {
value.assume_init_drop();
}
MaybeUninit<T> используют не просто для создания значения “без инициализации”. Он нужен, когда ты сам управляешь моментом, в который память становится настоящим T, и сам отвечаешь за корректный drop.
Если структура собирается по частям, компилятор уже не всегда может понять, какие поля реально созданы. Поэтому unsafe-логику лучше держать внутри маленькой функции или типа, а наружу отдавать обычный safe API. Так риск ошибок остается локальным и проверяемым.
#rust #rustlang #programming #unsafeRust
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥4🥰3🥴2👍1🤗1