Фразу "я бы вдул" по отношению к женщине допустимо применять, только если женщина — надувная
😢40😁10🤡6❤2👍2🤔2
Блог*
Фразу "я бы вдул" по отношению к женщине допустимо применять, только если женщина — надувная
Все реакции на посте понимаю, кроме этой
😢40🍌2
Короче
Я нашёл комикс, который начинается, как slice of life с тупыми гэгами, но постепенно перерастает в удивительно трогательную историю дружбы (при этом, что удивительно, не перерастающей в романтические отношения) с крайне живыми и убедительными персонажами (которые ещё и растут психологически по мере развития истории!).
Я вот только что дочитал последний, пятисотый эпизод, и я тронут, у меня глаза на влажном месте.
Почитать можно тут (в приложении удобнее):
webtoons.com/en/slice-of-life/waffles-and-pancakes/list?title_no=1310
Единственное: это совсем не детский комикс. Нет, какой-то особой жести там, но ругательств и некоторой небольшой дичи там хватает. И не говорите, что я вас не предупреждал.
Я нашёл комикс, который начинается, как slice of life с тупыми гэгами, но постепенно перерастает в удивительно трогательную историю дружбы (при этом, что удивительно, не перерастающей в романтические отношения) с крайне живыми и убедительными персонажами (которые ещё и растут психологически по мере развития истории!).
Я вот только что дочитал последний, пятисотый эпизод, и я тронут, у меня глаза на влажном месте.
Почитать можно тут (в приложении удобнее):
webtoons.com/en/slice-of-life/waffles-and-pancakes/list?title_no=1310
Единственное: это совсем не детский комикс. Нет, какой-то особой жести там, но ругательств и некоторой небольшой дичи там хватает. И не говорите, что я вас не предупреждал.
www.webtoons.com
Waffles & Pancakes
Two best friends attempt to answer life's greatest mysteries, such as "what if our butts had nipples?" This is a story of fart jokes and friendship. Currently updates on Tue, Thur, Sat. May not be suitable for younger audiences due to strong language and…
🤮4👍2🫡1
Внемлите мне, люди, ибо есть единственная — наиважнейшая! — причина обновиться до Rust 1.71.0:
стабилизация
стабилизация
CStr::is_empty()
drops mic👍7🔥2
Ну а теперь серьёзно.
#prog #rust #rustreleasenotes
Вышла версия Rust 1.71.0! Как обычно, тут только избранные куски, а все изменения в ченджлоге.
▪️Новый вариант опции атрибута
▪️ Уже имеющиеся варианты ABI обзавелись
Это изменение сделает более удобным разработку проектов, смешивающих код на Rust с кодом на других языках. Не
▪️Ещё одно изменение, связанное с паниками, но уже исключительно в рамках Rust. Ранее паника во время паники приводила к немедленному аборту процесса. Теперь это ограничение несколько ослабили: паника во время паники не приводит к аборту при условии, что она перехватывается на границе реализации
Но в одном аспекте требования к паникам, наоборот, сделали строже: паника внутри хука на панику сразу ведёт к аборту. В реальном коде это приводило к дедлоку из-за того, что рантайм держал блокировку на глобальный лок для бектрейса.
▪️Стало возможным включать в бинарники скрипты для визуализации значений пользовательских типов в отладчиках. Без этих скриптов в отладчике значение, скажем,
▪️Обновлена версия MUSL, используемая для *-linux-musl. Главным образом это означает, что 64-битная версия time_t, позволяющая избежать проблемы 2038 года, используется безусловно для всех систем, включая 32-битные.
▪️Макрос
* в этих случаях в результирующем коде теперь меньше виртуальных вызовов
* как следствие, макросы вроде log::info! теперь не вредят производительности из-за пробрасывания аргументов через
* core::fmt::Arguments::as_str() теперь чаще возвращает
* в бинаре теперь может сильно распухнуть секция
▪️Несколько изменений докатились до стейбла: улучшения расчёта раскладки типов, фикс расчёта приватности для Self-конструктора у кортежных структур, документация для const-инициализации thread local статиков, стабилизация BuildHasher::hash_one.
#prog #rust #rustreleasenotes
Вышла версия Rust 1.71.0! Как обычно, тут только избранные куски, а все изменения в ченджлоге.
▪️Новый вариант опции атрибута
#[link]
— конкретно kind="raw-dylib"
— позволяет на Windows линковаться с динамическими библиотеками, не требуя их наличия во время компиляции. Кросс-компиляция стала немного проще. А, и ещё атрибуты для импорта и экспорта символом из/в DLL, но я недостаточно в этом разбираюсь, чтобы понять разницу.▪️ Уже имеющиеся варианты ABI обзавелись
"*-unwind"
вариантами (полный список). Как нетрудно догадаться, паники и исключения, вызывающую раскрутку стека, могут проходить границу между языками. В частности, это означает, что исключения из C++ могут проходить через фреймы Rust-кода, а растовая паника может проходить через фреймы C++-кода. Ловить раскрутку стека, впрочем, можно лишь в фреймах того языка, в котором она была начата.Это изменение сделает более удобным разработку проектов, смешивающих код на Rust с кодом на других языках. Не
*-unwind
варианты ABI, как и раньше, абортят процесс, если раскрутка стека пытается пройти по FFI.▪️Ещё одно изменение, связанное с паниками, но уже исключительно в рамках Rust. Ранее паника во время паники приводила к немедленному аборту процесса. Теперь это ограничение несколько ослабили: паника во время паники не приводит к аборту при условии, что она перехватывается на границе реализации
drop
. Иными словами, паники внутри деструкторов — которые сами могут быть вызваны из-за паники — могут быть перехвачены и корректно обработаны, не приводя к немедленному прекращению работы.Но в одном аспекте требования к паникам, наоборот, сделали строже: паника внутри хука на панику сразу ведёт к аборту. В реальном коде это приводило к дедлоку из-за того, что рантайм держал блокировку на глобальный лок для бектрейса.
▪️Стало возможным включать в бинарники скрипты для визуализации значений пользовательских типов в отладчиках. Без этих скриптов в отладчике значение, скажем,
Vec<i32>
выглядело бы не как последовательность чисел, а как набор из адреса, длины и ёмкости — что, очевидно, не слишком-то полезно. Такими скриптами для визуализации укомплектовывается std. Новый механизм позволяет использовать этот же механизм и пользователям Rust.▪️Обновлена версия MUSL, используемая для *-linux-musl. Главным образом это означает, что 64-битная версия time_t, позволяющая избежать проблемы 2038 года, используется безусловно для всех систем, включая 32-битные.
▪️Макрос
format_args!
(на который опираются куча макросов как в std, так и вне её) теперь инлайнит форматируемые значения в форматные строки, если они являются литералами или вложенными format_args!. Если наглядно, то следующие пары вызовов теперь эквивалентны даже не на уровне бинарного кода, а ещё на уровне HIR:println!("Hello, {}!", "World");Из того, на что на это влияет:
println!("Hello, World!");
println!("[info] {}", format_args!("error"));
println!("[info] error");
println!("[{}] {}", status, format_args!("error: {}", msg));
println!("[{}] error: {}", status, msg);
println!("{} + {} = {}", 1, 2, 1 + 2);
println!("1 + 2 = {}", 1 + 2);
* в этих случаях в результирующем коде теперь меньше виртуальных вызовов
fmt
-методов;* как следствие, макросы вроде log::info! теперь не вредят производительности из-за пробрасывания аргументов через
format_args!
;* core::fmt::Arguments::as_str() теперь чаще возвращает
Some(_)
;* в бинаре теперь может сильно распухнуть секция
.text
из-за большего количества уникальных строк — особенно, если в коде активно используется макрос dbg!. Не то, чтобы это было большой проблемой, но может выйти боком, если проект компилируется, скажем, под embedded, где каждый байт на счету.▪️Несколько изменений докатились до стейбла: улучшения расчёта раскладки типов, фикс расчёта приватности для Self-конструктора у кортежных структур, документация для const-инициализации thread local статиков, стабилизация BuildHasher::hash_one.
blog.rust-lang.org
Announcing Rust 1.71.0 | Rust Blog
Empowering everyone to build reliable and efficient software.
👍8🎉2❤1👎1
▪️rustdoc теперь предупреждает о возможно пропущенных бектиках в док-комментах. Но линт для этого нужно включать явно. Пример:
▪️Гомогенные кортежи и массивы той же длины до 12 элементов включительно теперь можно конвертировать между собой через
▪️Очередная пачка API из разряда "стоп, почему такую элементарную вещь стабилизировали только сейчас":
* CStr::is_empty()
* BuildHasher::hash_one
* Пачка методов для обращения знака у
▪️
#![warn(rustdoc::unescaped_backticks)]Вывод:
/// `add(a, b) is the same as `add(b, a)`.
pub fn add(a: i32, b: i32) -> i32 { a + b }
warning: unescaped backtick▪️
--> src/lib.rs:3:41
|
3 | /// `add(a, b) is the same as `add(b, a)`.
| ^
|
help: a previous inline code might be longer than expected
|
3 | /// `add(a, b)` is the same as `add(b, a)`.
| +
help: if you meant to use a literal backtick, escape it
|
3 | /// `add(a, b) is the same as `add(b, a)\`.
| +
cargo new
/cargo init
внутри воркспейса теперь автоматически подтягивает поля из воркспейса выше.▪️Гомогенные кортежи и массивы той же длины до 12 элементов включительно теперь можно конвертировать между собой через
From
/Into
.▪️Очередная пачка API из разряда "стоп, почему такую элементарную вещь стабилизировали только сейчас":
* CStr::is_empty()
* BuildHasher::hash_one
* Пачка методов для обращения знака у
NonZero*
-типов (во всех вариациях).▪️
read{, _unaligned}
на сырых указателях теперь можно использовать в const-контексте — как методы, так и свободные функции в модуле std::ptr
. Также в const-контексте теперь можно вызывать split_at
(но почему-то всё ещё нельзя split_at_mut
:/)GitHub
rustdoc: Add a new lint for broken inline code by lukas-code · Pull Request #105848 · rust-lang/rust
This patch adds rustdoc::unescaped_backticks, a new rustdoc lint that will detect broken inline code nodes.
The lint woks by finding stray backticks and with some heuristics tries to guess where th...
The lint woks by finding stray backticks and with some heuristics tries to guess where th...
👍5
Блог*
Причины переехать в Армению: 1. Можно читать twitter без VPN
Так, причин переезжать в Армению не осталось
👎6👍3😁2
#prog #rust #article
Writing a Test Case Generator for a Programming Language
В статье автор шаг за шагом строит генератор валидных WASM-программ — который, кстати, оказался полезным для нахождения багов в инструментах анализа WASM-кода.
Принципы, которые излагает автор, достаточно общие, чтобы помочь с написанием произвольного случайного структурированного входа.
Writing a Test Case Generator for a Programming Language
В статье автор шаг за шагом строит генератор валидных WASM-программ — который, кстати, оказался полезным для нахождения багов в инструментах анализа WASM-кода.
Принципы, которые излагает автор, достаточно общие, чтобы помочь с написанием произвольного случайного структурированного входа.
Fitzgeraldnick
Writing a Test Case Generator for a Programming Language
Maxime Chevalier-Boisvert requested resources for learning about fuzzingprogramming language implementations on Twitter:
👍7