Блог* – Telegram
1.9K subscribers
3.46K photos
135 videos
15 files
3.7K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
1. Cancel-unsafe — никакого вменяемого поведения при дропе, считай, unspecified behavior.
2. Strictly cancel-safe — удовлетворяет определению cancel safety из документации tokio выше, операция или происходит полностью, или не происходит вовсе при дропе футуры.
3. Weakly cancel-safe — дроп футуры не является noop, но, по крайней мере, эффект дропа полностью задокументирован.
4. Vacuously cancel-safe — код, который технически является cancel safe, но поощряет написание cancel unsafe кода. Как пишет автор: "These APIs are bug generators!".

Как автор выяснил (в частности, на собственных шишках), асинхронная операция push на очереди является weakly cancel safe, а операция взятия блокировки мьютекса — vacuously cancel-safe. В статье он предлагает cancel-safe альтернативу этим API, которые в итоге и были реализованы в последующих версиях lilos.

В несколько более техничной статье Writing a basic `async` debugger автор рассказывает о lildb — разработанным им инструменте, который позволяет неинтрузивно снимать с состояния программы await-trace-ы: именно, пути через код от корневых async-функций к листовым. Это позволяет помочь с ответами на вопросы в духе "почему эта часть асинхронного кода не исполняется". Существующие отладчики плохо подходят для подобных разбирательств, поскольку футуры в промежутках между вызовами poll — это просто структуры данных, у которых отсутствует стек. TL;DR: костыли.

В ещё более техничном продолжении Getting file/line in await traces автор рассказывает о том, как он смог сделать await-trace-ы более информативным за счёт указания на место в исходниках, в которых футуры остановились. TL;DR: больше костылей.
👍8
Forwarded from концлагерь "закат-13" [экстремист edition]
👍14😱6🙏4👎1
— Ты играешь в World of Tanks?
— Нет, я предпочитаю другие игры с танками.

Игры с танками:
1👍1
#meme про работу
🤬11😁5🍌1
#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.)

Также автор провёл тесты на нескольких крейтах (полный список в статье) из числа широко используемых. Все компилируются и проходят тесты.
🔥16👍1
#prog #rust хайлайты

▪️Примитивным числовым типам добавили метод для вычисления целочисленного квадратного корня.

▪️В случае, если тип в выражении в 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.
❤‍🔥5👍21
#prog #rust #amazingopensource

noscriptbob — это библиотека и утилита для перевода ASCII-диаграмм в SVG. На сайте проекта можете посмотреть эти и другие примеры (серьёзно, посмотрите, их там предостаточно, я заскринил лишь небольшую часть), причём в веб-редакторе вы можете отредактировать текстовые исходники и увидеть, как изменения сказываются на отрендеренном SVG.

В пару к нему — mdbook-noscriptbob, плагин к mdbook для использования noscriptbob-диаграм прям в исходниках.
🔥12👍42
#prog #rust #rustreleasenotes

Вышла версия 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 в ссылку.
👍91
Блог*
Photo
В Чат*е советуют ещё Wysiwyg-редакторы для ASCII-диаграмм:

asciiflow.com
textik.com

(thanks @tech_b0lt_Genona)
2👍1
Forwarded from partially unsupervised
AI, который мы заслужили
Forwarded from Jokes++ (Dmitry Alimov)
😁303
Forwarded from Jokes++ (Dmitry Alimov)
😁23
Блог*
Хочешь почувствовать себя старым? Первый фильм про Гарри Поттера вышел в 2001 году.
А "Ледниковый период" — годом позже, в 2002.

То есть 21 год назад.
🤯10🤡1