Блог*
Вписывает «Angel beats!» в список слёзовыжималок
YouTube
Angel Beats Op Full HD w/lyrics My Soul, Your Beats!
Artist : Lia
Title: My Soul, Your Beats!
I don't take credit for this video. All copyrights and properties go to their respective owners.
Video was intended to promote the anime and for fans to enjoy.
English Translation
I open my eyes again…
Title: My Soul, Your Beats!
I don't take credit for this video. All copyrights and properties go to their respective owners.
Video was intended to promote the anime and for fans to enjoy.
English Translation
I open my eyes again…
❤🔥1
#prog #rust #zig #article
When Zig Outshines Rust - Memory Efficient Enum Arrays
Или об ограничениях Rust, вытекающих из отсутствия staged compilation
When Zig Outshines Rust - Memory Efficient Enum Arrays
Или об ограничениях Rust, вытекающих из отсутствия staged compilation
alic.dev
When Zig outshines Rust - Memory efficient enum arrays
Proper support for sum types or tagged unions have become table stakes for systems programming languages. However, they can incur a lot of memory fragmentation that's not trivial to avoid without good support for metaprogramming. This post goes into Zig's…
Блог*
С новым обновлением телеги появилась у каналов появилась возможность делать сторис — но только если за них проголосует достаточно пользователей с премиумом. Так вот. Пожалуйста, не голосуйте за мой канал, чтобы не давать мне искушения пользоваться сториз…
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