1.83K subscribers
3.3K photos
131 videos
15 files
3.57K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#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.
👍53
Блог*
#prog #rust Очередное напоминание, что Rust не является просто улучшенным C и что ссылки не являются просто продвинутой версией указателей. Рассмотрим вот такой код, полностью нормальный с точки зрения сишника: fn main() { let a: [i32; 2] = [0, 1];…
#prog #rust

И ещё пример, когда это может выстрелить. Пусть у нас есть вот такой вот код для того, чтобы вынимать несколько элементов из вектора за раз:

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
Forwarded from Neural Machine
До сих пор странно, что мы прожили столько поколений.
14
😒🤚 Turing machine
😒🤚 Post machine
😏👉 Shitpost machine
12🌚4
Блог*
Video
Ничего себе, как разошлось
🔥3❤‍🔥2🫡2🥰1
Блог*
— Их сослали в ад? — Хуже, в Висконсин.
"Метатрон" звучит не как имя ангела, а как имя персонажа из вселенной Трансформеров
👍9
Ммммм
🥰11🤯5🔥1🤮1💩1
#go

(thanks @repushko)
😁30🤡3👍1
Forwarded from Neural Machine
Нет способа контролировать психическое увечье нашего правителя.
👍7👏1
Forwarded from Generative Anton
Бывало и такое, да
😁24
Я за равноправие полов.

Хентай с тентаклями должен быть и с мужчинами.
14👎7🤡4👍3🤯1🍌1
Внезапный #python
😁11
У меня нет второй половинки, даже не смотря на то, что я придерживаюсь оптимальной стратегии: ничего не делать и ждать, пока significant other не упадёт самостоятельно мне на голову.
😁13👍7
#gamedev #article

Алексис Кеннеди рассказывает о истории создания Cultist simulator. Увлекательно и немного с юмором.

В конце предостерегает других инди-разработчиков от использования истории успеха Cultist simulator для оценки своих проектов, так как он считает, что ему очень сильно повезло.

Часть 1
Часть 2
Часть 3
Часть 4
Часть 5
Часть 6
2👍1🔥1