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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
😁15👎2💩1
Oh no
8😱5💩1
о даааааа.
была у меня одна такая подруга🌚
5💩1
Forwarded from chan []Боян
Как было сказано в пресконференции связанной с запретом мультфильма Симпсоны - "Что бы ваш ребёнок не стал Бартом Симпсоном, Необходимо что-бы вы не были Гомером Симпсоном".
😁72💩1
#prog #math #article

Comparing Floating-Point Numbers Is Tricky

Не смотря на то, что написано про C(++), принципиальные соображения насчёт чисел с плавающей точкой применимы и к другим языкам программирования
💩1
The Rule Of 2 из документации Chromium

When you write code to parse, evaluate, or otherwise handle untrustworthy inputs from the Internet — which is almost everything we do in a web browser! — we like to follow a simple rule to make sure it's safe enough to do so. The Rule Of 2 is: Pick no more than 2 of

* untrustworthy inputs;
* unsafe implementation language; and
* high privilege.
👍5💩1
Forwarded from About Japan
Посмотрите, японцы оставили старое здание и сделали из него почту, сохранив стиль и не испортив здание.
🔥9👍1🤩1💩1
Forwarded from Neural Meduza
В Уфе пройдет фестиваль суицидов в поддержку Путина
🎉14🥰2💩2🔥1
Forwarded from Doque Embedded
Парень нашел бродячего котика в саду у подруги, просканировал его флиппером, нашел его хозяев по айди и вернул его им. Оказалось что кот убежал из дома два года назад.

Я считаю что код для сканирования животных это самый добрый код что я писал.

https://discord.com/channels/740930220399525928/746304505879986267/1036339525070356550
11👍4👎1💩1
Блог*
Нашёл напиток с неоднозначным названием
А на вкус ничего так, кстати. Похож на Coca-Cola, но менее приторный и, в отличие от неё, не оставляет неприятного ощущения на зубах
👍3💩3
😁25😢21👍1👎1
Блог*
Among ඞ us
Among 📮 us
3
Блог*
#prog #rust Generic associated types to be stable in Rust 1.65 АААААААААААААААААААААА
Да, вышла версия сегодня! Чуть позднее распишу детали
🎉11👍1
#prog #rust #rustreleasenotes

Вышла версия Rust 1.65.0! Как всегда, вычленю только то, что интересно мне, за подробностями в RELEASES.md.

▪️Generic associated types (GAT) стабилизировали. Не буду повторять ещё раз, почему это так важно, и просто покажу пачку примеров из официального блогопоста:

/// An `Iterator`-like trait that can borrow from `Self`
trait LendingIterator {
type Item<'a> where Self: 'a;

fn next<'a>(&'a mut self) ->
Option<Self::Item<'a>>;
}

/// Can be implemented over smart pointers, like `Rc` or `Arc`,
/// in order to allow being generic over the pointer type
trait PointerFamily {
type Pointer<T>: Deref<Target = T>;

fn new<T>(value: T) -> Self::Pointer<T>;
}

/// Allows borrowing an array of items. Useful for
/// `NdArray`-like types that don't necessarily store
/// data contiguously.
trait BorrowArray<T> {
type Array<'x, const N: usize> where Self: 'x;

fn borrow_array<'a, const N: usize>(&'a self)
-> Self::Array<'a, N>;
}

▪️let теперь можно использовать с refutable паттернами. В этом случае за выражением должна следовать ветка else с фигурными скобками, в которых должно быть выражение типа !. Небольшой пример:

let (Some(x), Some(y)) = (iter.next(), iter.next()) else {
return Err(Error::UnsufficientItems)
};

Лично я частенько писал код с if let, который делает ранний возврат в else, так что для меня это определённо позитивное изменение. С другой стороны, в общем случае сказать, не видя определения, является ли паттерн refutable или нет, нельзя, что может сказаться на читаемости при злоупотреблении. В общем, практика покажет.

▪️break теперь можно использовать внутри любых блоков с меткой, а не только циклов, и при этом ещё и возвращать значение. Таким образом можно делать ранний возврат в рамках блока, а не функции целиком:

let result = 'block: {
do_thing();
if condition_not_met() {
break 'block 1;
}
do_next_thing();
if condition_not_met() {
break 'block 2;
}
do_last_thing();
3
};

До этого изменения люди имитировали этот функционал в реальном коде с использованием loop, который делал лишь одну итерацию. С использованием этой фичи можно гораздо лучше передавать намерения.

▪️По поводу того, являются ли неинициализированные числа UB, долгое время не было консенсуса. В частности, в документации MaybeUninit долгое время было написано:

(Notice that the rules around uninitialized integers are not finalized yet, but until they are, it is advisable to avoid them.)

Так вот, теперь эти правила прописаны: записывание неинициализированных битов в значения примитивных типов теперь является немедленным неопределённым поведением, даже если результат не используется. Минус одно неясное место для unsafe-кода.

▪️Изменение, о котором я уже говорил: компилятор теперь лучше эксплуатирует ниши в перечислениях для оптимизации представления значений типов в памяти.

▪️Стабилизированы нативные бектрейсы.

▪️Стабилизирована std::io::read_to_string:

Read all bytes from a reader into a new String.

This is a convenience function for
Read::read_to_string. Using this function avoids having to create a variable first and provides more type safety since you can only get the buffer out if there were no errors. (If you use Read::read_to_string you have to remember to check whether the read succeeded because otherwise your buffer will be empty or only partially full.)

▪️RLS всё

▪️Парочка оптимизаций компиляции. Во-первых, cargo теперь лучше учитывает приоритеты зависимостей при компиляции. Во-вторых, компилятор теперь использует встраивание кода на уровне MIR. Оба улучшения показали свою эффективность на реальном коде.

▪️И ещё одно улучшение компиляции: компилятор теперь поддерживает вынос отладочных символов в отдельн(ый, ые) объектные файлы. Это может ускорить компиляцию за счёт снижения работы, которую нужно выполнять линковщику. По умолчанию, однако, это поведение всё ещё отключено.
🔥19🎉64😱1