#prog #rust #article
Важная веха в развитии rustc_codegen_gcc: теперь он в состоянии компилировать Rust for Linux
It was announced last year that rustc_codegen_gcc can compile Rust for Linux with very few hacks. Today, I’m happy to announce that it can compile Rust for Linux without any patches! (Well, we still need patches to GCC itself like the rest of rustc_codegen_gcc, but those will be merged upstream eventually.)
Также автор провёл тесты на нескольких крейтах (полный список в статье) из числа широко используемых. Все компилируются и проходят тесты.
Важная веха в развитии rustc_codegen_gcc: теперь он в состоянии компилировать Rust for Linux
It was announced last year that rustc_codegen_gcc can compile Rust for Linux with very few hacks. Today, I’m happy to announce that it can compile Rust for Linux without any patches! (Well, we still need patches to GCC itself like the rest of rustc_codegen_gcc, but those will be merged upstream eventually.)
Также автор провёл тесты на нескольких крейтах (полный список в статье) из числа широко используемых. Все компилируются и проходят тесты.
blog.antoyo.xyz
Progress Report #26: rustc_codegen_gcc can now compile Rust for Linux!
Antoyo's Personal Blog
🔥16👍1
#prog #rust хайлайты
▪️Примитивным числовым типам добавили метод для вычисления целочисленного квадратного корня.
▪️В случае, если тип в выражении в
▪️Добавили функцию для сравнения только адресов указателей (без сравнения метаданных).
▪️Метод Result::unwrap_or_else получил атрибут #[track_caller]. Код вида
▪️Линты, указывающие на невалидные UTF-8 значения, теперь стараются указывать на выражение, которое содержит исходный невалидный литерал.
▪️Добавлен макрос cfg_match!, который как cfg_if!, но мимикрирует под синтаксис
▪️Примитивным числовым типам добавили метод для вычисления целочисленного квадратного корня.
▪️В случае, если тип в выражении в
break
отличается от типа loop
в целом, компилятор теперь указывает на места в коде, из-за которых типы не совпадают (1, 2) (Эстебан, кто ж ещё).▪️Добавили функцию для сравнения только адресов указателей (без сравнения метаданных).
▪️Метод Result::unwrap_or_else получил атрибут #[track_caller]. Код вида
.unwrap_or_else(|| panic!(...))
часто используется, когда unwrap
и expect
не подходят (из-за ненужных ограничений на E
или недостаточно внятных сообщений). Сообщение о панике для такого кода теперь даже при отсутствии стектрейса будет указывать на место вызова метода, а не на кишки core.▪️Линты, указывающие на невалидные UTF-8 значения, теперь стараются указывать на выражение, которое содержит исходный невалидный литерал.
▪️Добавлен макрос cfg_match!, который как cfg_if!, но мимикрирует под синтаксис
match
.GitHub
Add "integer square root" method to integer primitive types by FedericoStra · Pull Request #116176 · rust-lang/rust
For every suffix N among 8, 16, 32, 64, 128 and size, this PR adds the methods
const fn uN::isqrt() -> uN;
const fn iN::isqrt() -> iN;
const fn iN::checked_isqrt() -> Option<iN>;
to ...
const fn uN::isqrt() -> uN;
const fn iN::isqrt() -> iN;
const fn iN::checked_isqrt() -> Option<iN>;
to ...
❤🔥5👍2❤1
#prog #rust #amazingopensource
svgbob — это библиотека и утилита для перевода ASCII-диаграмм в SVG. На сайте проекта можете посмотреть эти и другие примеры (серьёзно, посмотрите, их там предостаточно, я заскринил лишь небольшую часть), причём в веб-редакторе вы можете отредактировать текстовые исходники и увидеть, как изменения сказываются на отрендеренном SVG.
В пару к нему — mdbook-svgbob, плагин к mdbook для использования svgbob-диаграм прям в исходниках.
svgbob — это библиотека и утилита для перевода ASCII-диаграмм в SVG. На сайте проекта можете посмотреть эти и другие примеры (серьёзно, посмотрите, их там предостаточно, я заскринил лишь небольшую часть), причём в веб-редакторе вы можете отредактировать текстовые исходники и увидеть, как изменения сказываются на отрендеренном SVG.
В пару к нему — mdbook-svgbob, плагин к mdbook для использования svgbob-диаграм прям в исходниках.
🔥12👍4❤2
#prog #rust #rustreleasenotes
Вышла версия Rust 1.73.0! Как обычно, тут только выдержки, а полный ченджлог — для компилятора, для cargo и для clippy.
В целом довольно минорный релиз, сильных причин обновлять нету.
▪️Текущее поведение компилятора — считать
▪️В макросах теперь можно вставлять метапеременные типа block после ключевых слов
▪️Как и обещано, линт
▪️Задокументирована текущая (v0) используемая rustc версия манглинга имён.
▪️Строку теперь можно индексировать парами
Код:
▪️Для
▪️Для примитивных беззнаковых числовых типов доступны методы div_ceil (деление с округлением вверх, наконец-то!), next_multiple_of и checked_next_multiple_of. Все из них работают в cosnt-контексте.
▪️Ещё в const-контексте теперь можно создавать слабые ссылки (и Arc-сорта тоже) и переводить NonNull в ссылку.
Вышла версия Rust 1.73.0! Как обычно, тут только выдержки, а полный ченджлог — для компилятора, для cargo и для clippy.
В целом довольно минорный релиз, сильных причин обновлять нету.
▪️Текущее поведение компилятора — считать
impl
-ы трейтов неперекрывающимися, если попытка их унифицировать приводит к циклу в логике. Теперь на это поведение выдаётся предупреждение, поскольку, возможно, это могут поменять в будущем.▪️В макросах теперь можно вставлять метапеременные типа block после ключевых слов
try
и async
. Пример кода, который не работал раньше, но работает теперь (результат раскрытия второго макроса, конечно, всё ещё требует активации фичи):▪️Как я уже писал, компилятор теперь ловит безусловную рекурсию в дропах.
macro_rules! create_async {
($body:block) => {
async $body
};
}
macro_rules! create_try {
($body:block) => {
try $body
};
}
▪️Как и обещано, линт
cast_ref_to_mut
(на касты из &T
в &mut T
— в том числе и не напрямую) теперь deny
по умолчанию.▪️Задокументирована текущая (v0) используемая rustc версия манглинга имён.
▪️Строку теперь можно индексировать парами
core::ops::Bound
▪️Немного поменяли формат сообщений паник по умолчанию для assert!
и assert_eq!
/assert_ne!
. Примеры:Код:
До:
fn main() {
let file = "ferris.txt";
panic!("oh no! {file:?} not found!");
}
После:
thread 'main' panicked at 'oh no! "ferris.txt" not found!', src/main.rs:3:5
Код:
thread 'main' panicked at src/main.rs:3:5:
oh no! "ferris.txt" not found!
До:
fn main() {
assert_eq!("🦀", "🐟", "ferris is not a fish");
}
После:
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `"🦀"`,
right: `"🐟"`: ferris is not a fish', src/main.rs:2:5
По моему, стало более читаемо.
thread 'main' panicked at src/main.rs:2:5:
assertion `left == right` failed: ferris is not a fish
left: "🦀"
right: "🐟"
▪️Для
LocalKey<Cell<T>>
и LocalKey<RefCell<T>>
(LocalKey
— тип, в который заворачиваются значения в макросе thread_local!) добавили несколько методов для прямой манипуляции с значениями, без использования общего with
. Мало того, что это позволяет сделать код нагляднее, так ещё и позволяет в некоторых случаях избежать инициализации thread local переменной значением, которое будет тут же перезаписано. При этом в общности API не теряет, поскольку на практике почти всегда из-за требований внутренней изменяемости значение и так было завёрнуто в Cell
или RefCell
.▪️Для примитивных беззнаковых числовых типов доступны методы div_ceil (деление с округлением вверх, наконец-то!), next_multiple_of и checked_next_multiple_of. Все из них работают в cosnt-контексте.
▪️Ещё в const-контексте теперь можно создавать слабые ссылки (и Arc-сорта тоже) и переводить NonNull в ссылку.
GitHub
rust/RELEASES.md at master · rust-lang/rust
Empowering everyone to build reliable and efficient software. - rust-lang/rust
👍9❤1
Блог*
Photo
В Чат*е советуют ещё Wysiwyg-редакторы для ASCII-диаграмм:
asciiflow.com
textik.com
(thanks @tech_b0lt_Genona)
asciiflow.com
textik.com
(thanks @tech_b0lt_Genona)
❤2👍1
Блог*
Хочешь почувствовать себя старым? Первый фильм про Гарри Поттера вышел в 2001 году.
А "Ледниковый период" — годом позже, в 2002.
То есть 21 год назад.
То есть 21 год назад.
🤯10🤡1
Подписчики, чат канала подвёргся внезапному наплыву новых пользователей. Обычно это означает массированную спам-атаку. Во избежание неудобств я временно закрыл публичный доступ к Чат*у.
Также я скопом удалил всех новых участников чата. Если вдруг я удалил кого-то из реальных людей, не ботов — пишите в личку (ссылка в описании канала), разберёмся в частном порядке
UPD: волна вроде кончилась, Чат* снова открыт
Также я скопом удалил всех новых участников чата. Если вдруг я удалил кого-то из реальных людей, не ботов — пишите в личку (ссылка в описании канала), разберёмся в частном порядке
UPD: волна вроде кончилась, Чат* снова открыт
👍5😢1