Блог*
С новым обновлением телеги появилась у каналов появилась возможность делать сторис — но только если за них проголосует достаточно пользователей с премиумом. Так вот. Пожалуйста, не голосуйте за мой канал, чтобы не давать мне искушения пользоваться сториз…
Telegram
iggisv9t channel
Дайте буст
Сначала мне весь этот движ напомнил как в myspace в его последние дни стали добавлять всякие новые фишечки, чтобы взбодрить пользователей. Но Телеграм всё-таки хоронить рановато, как мне кажется. Поэтому потом я чуть-чуть подумал и вспомнил про…
Сначала мне весь этот движ напомнил как в myspace в его последние дни стали добавлять всякие новые фишечки, чтобы взбодрить пользователей. Но Телеграм всё-таки хоронить рановато, как мне кажется. Поэтому потом я чуть-чуть подумал и вспомнил про…
🤔1
Сочные сливы тут
Переходи по ссылке 👇
t.iss.one/+gddTb8OBMAN80dFV
t.iss.one/+gddTb8OBMAN80dFV
t.iss.one/+gddTb8OBMAN80dFV
Переходи по ссылке 👇
t.iss.one/+gddTb8OBMAN80dFV
t.iss.one/+gddTb8OBMAN80dFV
t.iss.one/+gddTb8OBMAN80dFV
😁9🌚5🔥2🥰1🤡1
Блог*
Кстати, одна из первых вещей, которая мне бросилась в глаза после прилёта — повсеместные национальные флаги. По крайней мере, в Ереване. Непривычно.
В последние дни видны флаги Арцаха
🤷5❤3👍1😁1🌚1
#prog #article
Death by a thousand microservices
(thanks @heather_schlock)
The truth is that most companies will never reach the massive size that will actually require building a true distributed system. Your cosplaying Amazon and Google - without their scale, expertise, and endless resources - is very likely just an egregious waste of money and time. Religiously following all the steps from an article called “Ten morning habits of very successful people” is not going to make you a billionaire.
The only thing harder than a distributed system is a BAD distributed system.
Death by a thousand microservices
(thanks @heather_schlock)
The truth is that most companies will never reach the massive size that will actually require building a true distributed system. Your cosplaying Amazon and Google - without their scale, expertise, and endless resources - is very likely just an egregious waste of money and time. Religiously following all the steps from an article called “Ten morning habits of very successful people” is not going to make you a billionaire.
The only thing harder than a distributed system is a BAD distributed system.
Renegadeotter
Death By a Thousand Microservices
The software industry is learning once again that complexity kills
👍5❤3
Блог*
#prog #rust Очередное напоминание, что Rust не является просто улучшенным C и что ссылки не являются просто продвинутой версией указателей. Рассмотрим вот такой код, полностью нормальный с точки зрения сишника: fn main() { let a: [i32; 2] = [0, 1];…
#prog #rust
И ещё пример, когда это может выстрелить. Пусть у нас есть вот такой вот код для того, чтобы вынимать несколько элементов из вектора за раз:
Дело в том, что
TL;DR: не используйте конец диапазона, возвращённый
И ещё пример, когда это может выстрелить. Пусть у нас есть вот такой вот код для того, чтобы вынимать несколько элементов из вектора за раз:
fn pop_many<T, const N: usize>(arr: &mut Vec<T>) -> Option<[T; N]> {
let Some(new_len) = arr.len().checked_sub(N) else {
return None;
};
let mut ret = std::mem::MaybeUninit::<[T; N]>::uninit();
unsafe {
arr.set_len(new_len);
std::ptr::copy_nonoverlapping(
arr.as_ptr().add(new_len),
ret.as_mut_ptr().cast(),
N,
);
Some(ret.assume_init())
}
}
Достаточно прямолинейный код, на который не ругается miri (можете сами проверить). У кого-то может возникнуть мысль, что для лучше документированности кода можно использовать метод, который подчёркивает, что используется конец инициализированной части кода: ...
std::ptr::copy_nonoverlapping(
arr.as_ptr_range().end,
ret.as_mut_ptr().cast(),
N
);
...
Ииии этот код не работает... В том смысле, что если его проверить на, скажем, таком примере:let mut v = vec![1, 2, 3];
let [_, _] = pop_many(&mut v).unwrap();
, то miri выдаёт ошибку. Почему?Дело в том, что
as_ptr_range
(возвращающий Range<*const T>
, к слову) — это метод не на векторе, а на слайсе, который вызывается тут за счёт deref coercion. Промежуточным этапом при вызове является создание &[T]
— и ссылка даёт право использовать образованные от неё указатели только в рамках памяти, на которую эта ссылка указывает. В частности, это означает, что сделать указатель за конец этого слайса можно, но вот использовать его для доступа к следующей за этим слайсом неинициализированной части вектора нельзя.TL;DR: не используйте конец диапазона, возвращённый
.as_ptr_range()
на векторе, для доступа к его неинициализированной части. Если уж так сильно хочется не использовать арифметику — можно использоватьvec.spare_capacity_mut().as_ptr().cast()
👍8