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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#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
Сегодня мне приснилась некая азиатская (вроде) страна, которая была баснословно богатой (кажется, за счёт экспорта ценного сырья), но при этом в ужасающем состоянии. Принцип "казаться, а не быть" там был возведён в абсолют: для того, чтобы создать видимость радостного народа, возвели повсюду аниматроников из человеческих тел, а чтобы скрыть тотальную разруху и отсутствие нормальной инфраструктуры и создать видимость солнечной, счастливой страны — всюду постоянно распыляли наркотики, которые заставляли воспринимать реальность так, как нужно, и заставляли аниматроников выглядеть, как реальных людей. И ещё на руках у правителя этой страны было жуткое оружие — некая "мили-бомба", которая буквально уничтожала время — и он не боялся подорвать её у себя в стране, потому что она и так безнадёжно застряла в прошлом.

К чему бы это?
🤔6💩1
#rust #article

Do we need a "Rust Standard"?

While this comes down to a definition question, standardization is usually associated with the work done by a “standardization body” such as ISO or ECMA: an organisation that takes responsibility for the coordination of the evolution of a standard. These organisations have processes through which stakeholders from all over the world can participate in the evolution of the technologies they standardize.

However, in the Rust Project, we already have an open process for evolving the language, based on RFCs, team consensus, and unstable experimentation. Handing off the responsibility to a standards organisation means giving up our control, with little to no benefit. We’d lose our ability to shape the processes the way we think works best, and we might no longer be able to guarantee an open and inclusive environment that’s up to our standards.

Many companies and individuals participate in C++ standardization to influence the language; to add their own feature to the language. However, an effort towards a Rust specification is not about changing Rust. We already have a process for changing Rust, and the companies I’ve spoken to that would benefit from a Rust specification are actually not interested in changing the ways in which they can influence the evolution of the language.
🔥8💩1
#prog #rust #performancetrap #article

The stable HashMap trap

You read about faster hash functions and switch to one. Most of your code gets the expected speed boost, but some parts mysteriously get slower – much slower, especially when dealing with large hashmaps. If this sounds familiar, you might have encountered the stable HashMap trap.
💩1
Делать ли отдельный хештег под неочевидные способы потерять производительность?
Final Results
80%
Да
5%
Нет
16%
Кешбери
🤮1💩1
Блог* pinned «Делать ли отдельный хештег под неочевидные способы потерять производительность?»