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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Вроде #prog #rust #meme, но говорят, что объявление реальное.

Source
🤡21😁14
#prog #rust #article

The borrowchecker is what I like the least about Rust

Не со всем согласен, но большинство аргументов здравые.

In this post, I want to make two arguments:

1. That the borrowchecker causes serious ergonomic problems for Rust.

2. That the role of the borrowchecker in Rust's safety is overstated.


Perversely, because Rust's lifetime riddles are challenging, they are sort of fun. I believe that partly explains why so many people don't seem to mind them. Instead of thinking about how to write my code to solve the scientific problems I'm being paid to solve, I have to think about how to write it to please the borrowchecker. The latter is usually more tractable, limited in scope, have clearer requirements and is more 'puzzle-like'. In that sense, Rust enables escapism: When writing Rust, you get to solve lots of 'problems' - not real problems, mind you, but fun problems.
👍10🤡5👎1😐1
#prog #rust #rustreleasenotes

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

▪️Стабилизировали вывод const generics в выражениях!

pub fn all_false<const LEN: usize>() -> [bool; LEN] {
[false; _]
}


К сожалению, использовать _ для const generics в сигнатурах всё ещё нельзя.

▪️Док-тесты теперь запускаются при кросс-компиляции.

▪️Атрибуты вида #![doc(test(attr(..)))] (которые добавляют #[attr(..)] ко всем док-тестам в модуле) теперь можно использовать везде, включая корень крейта.

▪️После фиксов для согласования с существующими компиляторами C/C++ теперь можно использовать i128 и u128 в extern "C" определениях, интероп корректно работает и, как следствие, improper_ctypes_definitions более не триггерится.

▪️Как я уже писал, продление времени жизни временных значений теперь работает и с кортежными конструкторами (кортежных структур и кортежных вариантов enum-ов).

▪️Стабилизированы интринсики (и связанные с ними target feature [1], [2]) из наборов инструкций AVX512, SHA512, SM3 и SM4 для x86-64.

▪️Макро-фрагмент в декларативных макросах без указанного типа теперь является ошибкой компиляции на всех edition.

▪️Результат вычисления format_args! теперь можно сохранять в переменных! 🎉

▪️std::array::IntoIter теперь реализовывает Default. Значение по умолчанию при этом является итератором, который ничего не возвращает. Полезно, когда нужно предоставить итерацию по опциональному массиву и при этом не хочется прокидывать Option в возвращаемое значение.

▪️LazyCell и LazyLock теперь реализуют DerefMut. Одной причиной использовать once_cell меньше.

▪️К слову о локах, для File теперь есть пачка методов ({, try_}lock{, _shared} и unlock) для работы с платформо-специфичными способами блокировки файлов. Напоминаю, что на Linux эти функции требуют кооперации: коду нужно явно указывать на то, что он обращает внимание на блокировки, а по умолчанию они ничего для сторонних процессов не делают.

▪️NonNull можно безопасно создать из ссылки, поскольку ссылки в Rust обязаны не быть null. Для этого есть реализация From<&T> for NonNull<T>. К сожалению, этот способ конвертации не очень очевиден, и на практике многие писали код с NonNull::new_unchecked, в котором ссылка приводилась к сырому указателю по месту вызова. Видимо, чтобы сделать безопасный способ конвертации более видимым и очевидным в исходниках, к NonNull добавили конструктор from_reffrom_mut для конвертации из &mut T). Также этому типу добавили методы для работы с provenance (expose_provenance, with_exposed_provenance, without_provenance), которые аналогичны таковым для сырых указателей, но принимают/возвращают NonZero<usize> вместо usize.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥32
😁27💯7🤯31
#prog #rust #article

Can Rust prevent logic errors?

TL;DR: да, потому что в Rust есть для этого средства, которые отсутствуют в подавляющем большинстве мейнстримных ЯП. Автор, впрочем, сравнивает в основном с Ruby.

Предотвращаемые ошибки показаны с примерами на других ЯП.
❤‍🔥3
#rust

Vitaly Reads: #3, August 2025


I’ve just completed reading an amazingly well-written book called “Refactoring to Rust” by Lily Mara and Joel Holmes, published recently by Manning Publications. I’m pretty sure that the book was supposed to be called “Rewrite it to Rust,” but then someone realized that this is already a meme, so it’d be too much.

Yet, the goal is exactly that – to teach folks how to gradually introduce Rust components to their existing codebases written in C/C++, Java, Python, or JavaScript. Such a goal reflects the intended audience: developers in those languages with little or no knowledge of Rust. One interesting thing, though, is that even Rust professionals might find a lot of interesting details about Rust itself, especially if they are not experienced in such areas as FFI (Foreign Function Interface), Rust-Python interoperability, or WebAssembly – those are the key topics of the book.


(thanks, разумеется, @bravit)
🥰7👍4
#prog #rust #article

Fully Automated Releases for Rust Projects

Статья с очень конкретными инструкциями
🔥4
#prog #rust #suckassstory

std::process::exit is not thread-safe in combination with C code calling exit

Древний дизайн из времён, когда многопоточности не существовало, вновь наносит удар! И да, проблемы те же, что и с env::{set_var, remove_var}.
😁4
#prog #rust хайлайты:

Реализовали derive через macro_rules!-макросы. Учитывая, насколько часто код, генерируемый derive, весьма простой, это позволит сильно упростить их написание, а также избежать выделения отдельного крейта только под процедурный макрос и, разумеется, не компилировать макрос в отдельную программу, которая общается с компилятором по RPC.
5👍4🤯2🔥1
😁12👎8🤡4💯2🤯1