#prog #rust #article
Rust: When Empty Isn't Bottom
Или почему
Rust: When Empty Isn't Bottom
Или почему
! в Rust не является bottom типом. TL;DR: в Rust нет отношения подтипизации для типов, не включающих лайфтаймы.❤4🤔2
Блог*
#prog #ml #menacingopensource gremllm — библиотека для Python, которая позволяет создавать по описанию объекты, для которых поля и методы создаются LLM по мере необходимости. from gremllm import Gremllm # Be sure to tell your gremllm what sort of thing…
#prog #ml #rust #abnormalprogramming
slopc
(thanks @saddevdiary)
slopc
A proc macro that uses an hallucination machine to write your function bodies at compile time. Throw a signature, slap #[slop] on it, and pray. If it doesn't compile, it feeds the errors back and retries until it does (or gives up).(thanks @saddevdiary)
🔥9
Блог*
#prog #rust В Google переписывают Android binder (компонент ядра для IPC) с C на Rust. Это компонент, который используется практически всем на Android, а потому для нормального функционирования он должен быть быстрым и корректным. Авторы ожидают, что переписывание…
#prog #rust
Версия binder на Rust вошла в состав ядра в версии 6.18, а в патче, который должен попасть в ядро версии 7.4, старую версию, на C, полностью удалили.
Версия binder на Rust вошла в состав ядра в версии 6.18, а в патче, который должен попасть в ядро версии 7.4, старую версию, на C, полностью удалили.
🎉14👍2
#prog #rust #article
Why building a Rust LSP is hard
Why building a Rust LSP is hard
This will be a (hopefully coherent) story about how Rust LSPs work, from the perspective of both rust-analyzer and Rust Glancer: how things that seem easy turn out to be hard, things that seem hard turn out to be even harder, and things I didn't expect to exist at all somehow do.
LSP is more of a guess game, where at each step all you are presented with is the potentially incorrect state, and your goal is to guess what would make sense for the user.
❤6💯2
🤔4❤1👍1
#prog #rust #article
Rewriting an entire UI in Rust
(С Tauri на Iced)
И рандомная цитата:
Rewriting an entire UI in Rust
(С Tauri на Iced)
So. Was it worth it?
I answer: Yes.
И рандомная цитата:
One would think, that the software known as Windows, would be good at managing windows. One would, of course, be wrong.
❤13😁7
#prog #rust #rustlib #article
Deser: Rethinking Rust Serialization
Статья про новую библиотеку (де)сериализации. Решает проблемы, которые есть в serde и которые очень сложно или почти невозможно решить из-за архитектуры.
Разумеется, это не строго лучше serde, и в статье подробно об этом рассказывается. В частности, в отличие от serde, deser поддерживает только self-describing форматы.
Deser: Rethinking Rust Serialization
Статья про новую библиотеку (де)сериализации. Решает проблемы, которые есть в serde и которые очень сложно или почти невозможно решить из-за архитектуры.
Разумеется, это не строго лучше serde, и в статье подробно об этом рассказывается. В частности, в отличие от serde, deser поддерживает только self-describing форматы.
Armin Ronacher's Thoughts and Writings
Deser: Rethinking Rust Serialization
Can we do better than Serde?
👍8❤1
#prog #rust #rustreleasenotes
Вышел Rust 1.99.0! Бла-бла-бла, детали.
▪️В Rust добавили вариадики! ...Сишные. Раньше эти функции можно было декларировать, а теперь можно и определять:
Список типов, значения которых можно доставать через
Также такие функции могут быть
▪️Пачка линтов
▪️Теперь гарантируется, что получить доступ к содержимому
▪️
▪️Если имя метода неправильное (несуществующее), но является именем из
▪️Стабилизировали API, включая:
🔸
🔸VecDeque::retain_back: выкинуть из деки все элементы, кроме указанного числа последних.
🔸Box::into_non_null и Box::from_non_null.
🔸
🔸
🔸
▪️В rustdoc добавили линт, предупреждающий о неиспользованных сносках в документации.
Вышел Rust 1.99.0! Бла-бла-бла, детали.
▪️В Rust добавили вариадики! ...Сишные. Раньше эти функции можно было декларировать, а теперь можно и определять:
/// SAFETY: must be called with (at least) 2 i32 arguments.
unsafe extern "C" fn sum(mut args: ...) -> i32 {
// SAFETY: guaranteed by the caller.
let a = unsafe { args.next_arg::<i32>() };
let b = unsafe { args.next_arg::<i32>() };
a + b
}
fn foo() -> i32 {
unsafe { sum(0i32, 2i32) }
}
Список типов, значения которых можно доставать через
next_arg, ограничен sealed трейтом VaArgSafe. Связано это с тем, что в C значения некоторых типов при передаче в вариадическую функцию кастуются в более крупные типы, поэтому их по определению из VaList достать нельзя. Кстати, сам VaList, если сильно нужно, можно передавать явно и даже клонировать.Также такие функции могут быть
#[naked], и по очевидным причинам их нужно писать на ассемблере.▪️Пачка линтов
unused теперь включает в себя unreachable_cfg_select_predicates.▪️Теперь гарантируется, что получить доступ к содержимому
UnsafeCell<T> можно через каст сырого указателя в указатель на T, использовать UnsafeCell::get необязательно. Общие правила насчёт unsafe, соблюдающего правила языка, остаются в силе.▪️
RangeInclusive исторически плохо оптимизировался из-за того, что последняя итерация должна была обрабатываться отдельно. Это в какой-то мере исправили, добавив в трейт Step, на который опираются диапазоны, методы для итерации с возвратом флага переполнения.▪️Если имя метода неправильное (несуществующее), но является именем из
#[doc(alias)] на существующем методе, то этот метод будет предложен в первую очередь, выше имён со схожим написанием.▪️Стабилизировали API, включая:
🔸
IntoIterator на Box<[T; N]>, &Box<[T; N]> и &mut Box<[T; N]>.🔸VecDeque::retain_back: выкинуть из деки все элементы, кроме указанного числа последних.
🔸Box::into_non_null и Box::from_non_null.
🔸
Vec::into_parts и Vec::from_parts, где parts — это тройка из NonNull указателя на аллокацию, длины и ёмкости.🔸
core::mem::{size_of_val_raw, align_of_val_raw} и core::alloc::Layout::for_value_raw, аналогичные существующим функциям без *_raw, но работающие на сырых указателях. Разумеется, unsafe.🔸
std::fs::{set_times, set_times_nofollow} для установки временных отметок на файлах. На всех OS можно менять время доступа и модификации. Дополнительно на Windows и OS от Apple можно менять время создания. *_nofollow вариант при использовании на символической ссылке меняет атрибуты самой ссылки, а не файла, на который она указывает (довольно кривой дизайн, кмк: что, если потом нужно расширить набор флагов? Не делать же по функции на каждую комбинацию).▪️В rustdoc добавили линт, предупреждающий о неиспользованных сносках в документации.
blog.rust-lang.org
Announcing Rust 1.99.0 | Rust Blog
Empowering everyone to build reliable and efficient software.
👍8💩2👎1
#prog #rust #article
Generic Const Args and You
Статья о текущем состоянии экспериментальной поддержки констант в типовой системе Rust.
Generic Const Args and You
Статья о текущем состоянии экспериментальной поддержки констант в типовой системе Rust.
blog.rust-lang.org
Generic Const Args and You | Inside Rust Blog
Want to follow along with Rust development? Curious how you might get involved? Take a look!
❤7