Блог*
Photo
Играть в Baba is you — довольно странный опыт. Ты как будто бы постоянно хакаешь игру. А в экстра-уровнях (помеченных точками в различных количествах вместо чисел) ты ещё и используешь второстепенные отличия и способности блоков, которые вроде как не важны для решения.
🍌2
Автор канала не умеет считать и решил, что ему нужно в ближайшее время делать регистрацию либо visa run, хотя от прописанных 180 дней прошли только около половины.
Forwarded from Северное техно
В десятые мы были в шаге от отмены для граждан РФ виз в Европу. Сейчас мы тоже в шаге от отмены для граждан РФ виз в Европу, НО ЕСТЬ НЮАНС.
😢16😁11🤔1
Удивительно, как много людей пишут скрипты на sh/bash — языках, которые вставляют палки в колёса везде, где только можно, и в которых самый прямолинейный способ что-то сделать всегда неправильный
👍16👎3🤔1🤡1
Forwarded from Код, коты и карандаш
Yuriosity> А представьте, назвать сына Лжедмитрием
Oleg K> Двоих
Oleg K> Двоих
😁12
Фразу "я бы вдул" по отношению к женщине допустимо применять, только если женщина — надувная
😢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