Forwarded from chan []Боян
Как было сказано в пресконференции связанной с запретом мультфильма Симпсоны - "Что бы ваш ребёнок не стал Бартом Симпсоном, Необходимо что-бы вы не были Гомером Симпсоном".
😁7❤2💩1
#prog #math #article
Comparing Floating-Point Numbers Is Tricky
Не смотря на то, что написано про C(++), принципиальные соображения насчёт чисел с плавающей точкой применимы и к другим языкам программирования
Comparing Floating-Point Numbers Is Tricky
Не смотря на то, что написано про C(++), принципиальные соображения насчёт чисел с плавающей точкой применимы и к другим языкам программирования
Bit Bashing
Comparing Floating-Point Numbers Is Tricky
Yet another programming blog. Thoughts on software and related misadventures.
💩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.
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
Блог*
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…
Почему в телеге на телефоне ссылки в подписи к медиа не сохраняется после редактирования?
💩2
Forwarded from Doque Embedded
Парень нашел бродячего котика в саду у подруги, просканировал его флиппером, нашел его хозяев по айди и вернул его им. Оказалось что кот убежал из дома два года назад.
Я считаю что код для сканирования животных это самый добрый код что я писал.
https://discord.com/channels/740930220399525928/746304505879986267/1036339525070356550
Я считаю что код для сканирования животных это самый добрый код что я писал.
https://discord.com/channels/740930220399525928/746304505879986267/1036339525070356550
❤11👍4👎1💩1
Блог*
Нашёл напиток с неоднозначным названием
А на вкус ничего так, кстати. Похож на Coca-Cola, но менее приторный и, в отличие от неё, не оставляет неприятного ощущения на зубах
👍3💩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) стабилизировали. Не буду повторять ещё раз, почему это так важно, и просто покажу пачку примеров из официального блогопоста:
▪️
▪️По поводу того, являются ли неинициализированные числа UB, долгое время не было консенсуса. В частности, в документации
(Notice that the rules around uninitialized integers are not finalized yet, but until they are, it is advisable to avoid them.)
Так вот, теперь эти правила прописаны: записывание неинициализированных битов в значения примитивных типов теперь является немедленным неопределённым поведением, даже если результат не используется. Минус одно неясное место для unsafe-кода.
▪️Изменение, о котором я уже говорил: компилятор теперь лучше эксплуатирует ниши в перечислениях для оптимизации представления значений типов в памяти.
▪️Стабилизированы нативные бектрейсы.
▪️Стабилизирована
Read all bytes from a reader into a new
This is a convenience function for
▪️RLS всё
▪️Парочка оптимизаций компиляции. Во-первых, cargo теперь лучше учитывает приоритеты зависимостей при компиляции. Во-вторых, компилятор теперь использует встраивание кода на уровне MIR. Оба улучшения показали свою эффективность на реальном коде.
▪️И ещё одно улучшение компиляции: компилятор теперь поддерживает вынос отладочных символов в отдельн(ый, ые) объектные файлы. Это может ускорить компиляцию за счёт снижения работы, которую нужно выполнять линковщику. По умолчанию, однако, это поведение всё ещё отключено.
Вышла версия 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🎉6❤4😱1
Сегодня мне приснилась некая азиатская (вроде) страна, которая была баснословно богатой (кажется, за счёт экспорта ценного сырья), но при этом в ужасающем состоянии. Принцип "казаться, а не быть" там был возведён в абсолют: для того, чтобы создать видимость радостного народа, возвели повсюду аниматроников из человеческих тел, а чтобы скрыть тотальную разруху и отсутствие нормальной инфраструктуры и создать видимость солнечной, счастливой страны — всюду постоянно распыляли наркотики, которые заставляли воспринимать реальность так, как нужно, и заставляли аниматроников выглядеть, как реальных людей. И ещё на руках у правителя этой страны было жуткое оружие — некая "мили-бомба", которая буквально уничтожала время — и он не боялся подорвать её у себя в стране, потому что она и так безнадёжно застряла в прошлом.
К чему бы это?
К чему бы это?
🤔6💩1
Блог*
Сегодня мне приснилась некая азиатская (вроде) страна, которая была баснословно богатой (кажется, за счёт экспорта ценного сырья), но при этом в ужасающем состоянии. Принцип "казаться, а не быть" там был возведён в абсолют: для того, чтобы создать видимость…
Да, я читал "Футурологический конгресс" Станислава Лема
❤4👍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.
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.
blog.m-ou.se
Do we need a "Rust Standard"?
Languages like C and C++ are standardized.
They are fully specified in an internationally recognized standards document.
Languages like Python, Swift and Rust do not have such a standards document.
Should Rust be standardized? Why, or why not?
In this blog…
They are fully specified in an internationally recognized standards document.
Languages like Python, Swift and Rust do not have such a standards document.
Should Rust be standardized? Why, or why not?
In this blog…
🔥8💩1