#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
Блог*
#music Что удивительно, это единственный трек Foo Fighters, который мне зашёл. youtu.be/SBjQ9tuuTJQ
🌚6
Блог*
— Их сослали в ад? — Хуже, в Висконсин.
"Метатрон" звучит не как имя ангела, а как имя персонажа из вселенной Трансформеров
👍9
#prog #rust #rustlib #menacingopensource
gpt-macro — ChatGPT powered Rust proc macro that generates code at compile-time.
gpt-macro — ChatGPT powered Rust proc macro that generates code at compile-time.
GitHub
GitHub - retrage/gpt-macro: ChatGPT powered Rust proc macro that generates code at compile-time.
ChatGPT powered Rust proc macro that generates code at compile-time. - retrage/gpt-macro
😁11💩4🤡2🤮1
Я за равноправие полов.
Хентай с тентаклями должен быть и с мужчинами.
Хентай с тентаклями должен быть и с мужчинами.
❤14👎7🤡4👍3🤯1🍌1
У меня нет второй половинки, даже не смотря на то, что я придерживаюсь оптимальной стратегии: ничего не делать и ждать, пока significant other не упадёт самостоятельно мне на голову.
😁13👍7
#gamedev #article
Алексис Кеннеди рассказывает о истории создания Cultist simulator. Увлекательно и немного с юмором.
В конце предостерегает других инди-разработчиков от использования истории успеха Cultist simulator для оценки своих проектов, так как он считает, что ему очень сильно повезло.
Часть 1
Часть 2
Часть 3
Часть 4
Часть 5
Часть 6
Алексис Кеннеди рассказывает о истории создания Cultist simulator. Увлекательно и немного с юмором.
В конце предостерегает других инди-разработчиков от использования истории успеха Cultist simulator для оценки своих проектов, так как он считает, что ему очень сильно повезло.
Часть 1
Часть 2
Часть 3
Часть 4
Часть 5
Часть 6
Medium
Alexis Kennedy on the Cultist Simulator: The Way through the Wood, Part 1
On 25th May 2016, the day I left Failbetter, I made my last ever post on the company blog:
❤2👍1🔥1