мне не нравится реальность
Сегодня весь день писал один хитрый вариант строк 👀 Устал, но доволен что оно работает и меня не забрали в ад. (Подробности позже)
Обещал подробности, вот они.
Ещё позавчера ночь мне пришла идея о том, что можно сделать хитрую структуру, которая будет как slice (
Если кратко, то у меня получилась структура вида
Поскольку структура
Репозиторий тут: [strs]
Смотрите на свой страх и риск, там всё очень сырое. Работы ещё оооочень много :)
Ещё позавчера ночь мне пришла идея о том, что можно сделать хитрую структуру, которая будет как slice (
[_]) но только массив строк, которые будут хранится inline. Полезность такой структуры мне ещё предстоит выяснить, но пока что выглядит многообещающе.Если кратко, то у меня получилась структура вида
struct Strs {
len: usize,
buf: [u8],
}
len — количество хранимых строк, buf — все данные, а именно: индексы строк и сами строки. Приправлено это знатным слоем unsafe{}.Поскольку структура
!Sized, использовать её можно только за каким-то указателем. Изначально предполагался Arc, но в целом может быть и Box, и Rc, и даже обычная ссылка.Репозиторий тут: [strs]
Смотрите на свой страх и риск, там всё очень сырое. Работы ещё оооочень много :)
This media is not supported in your browser
VIEW IN TELEGRAM
Последние два дня полностью ушли на написание и переписывание этого чуда, сегодня я даже не обедал... Пойду поем и отдохну)
Forwarded from Блог*
#prog
TIL, что мьютексы из POSIX threads нельзя перемещать.
Once a mutex is created, it cannot be validly copied or moved to a new location. If the mutex is copied or moved to a new location, the new object is not valid and should not be used. Any attempt to use the invalid object will produce unpredictable results.
Здесь. Что ж, это объясняет, почему мьютексы из стандартной библиотеки Rust боксят нативные мьютексы.
TIL, что мьютексы из POSIX threads нельзя перемещать.
Once a mutex is created, it cannot be validly copied or moved to a new location. If the mutex is copied or moved to a new location, the new object is not valid and should not be used. Any attempt to use the invalid object will produce unpredictable results.
Здесь. Что ж, это объясняет, почему мьютексы из стандартной библиотеки Rust боксят нативные мьютексы.
GitHub
rust/library/std/src/sync/mutex.rs at e6d85ea5cbdc376ae388e1079769b67b9eda911c · rust-lang/rust
Empowering everyone to build reliable and efficient software. - rust-lang/rust
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from <илья as Человек> (ilya sheprut)
В моей первой программе на расте щас вылезло 104 warning'а 🙂
Для извращений со строками мне нужно аллоцировать
У меня получилось это:
А потом я сравнил
Слава zero-cost абстракциям!
[MaybeUninit<usize>] в обёртке Arc/Box/Rc. До этого я использовал функции new_uninit_slice, доступные только на найтли, но сегодня я решил поискать stable-решение.У меня получилось это:
iter::repeat(MaybeUninit::uninit()).take(len).collect()
Я думал сделать nightly фичу, чтобы люди на стейбле могли использовать немного более медленный вариант с итераторами, а на найтли использовалась бы более простая функция new_uninit_slice. (anyway создание Strs это редкая операция)А потом я сравнил
asm обоих вариантов... И знаете что? asm одинаковый. (godbolt)Слава zero-cost абстракциям!
This media is not supported in your browser
VIEW IN TELEGRAM
Оптозоракс написал интересный пост про системы оценки, почитайте: optozorax_dev/245
Telegram
dev optozorax
5-бальная шкала оценки неверна. #мысли
На данный пост меня вдохновило следующее сообщение: klavaorgwork/159174. В нём чувак говорит что оценка 3 - это оценка "удовлетворительно", когда сервис работает как полагается. 4 он ставит когда есть что-то действительно…
На данный пост меня вдохновило следующее сообщение: klavaorgwork/159174. В нём чувак говорит что оценка 3 - это оценка "удовлетворительно", когда сервис работает как полагается. 4 он ставит когда есть что-то действительно…
Пришёл к интересной мысли: мне нужен
Такое ощущение что это не решается без рантайм проверок/с текущей системой типов. Но это не точно, надо ещё подумать.
&mut доступ к данным ненадолго, а потом & доступ к данным надолго. Т.е. что-то вроде:fn init(data: &mut u32) -> Data {
*data -= 42;
Data { inner: &*data }
}
В таком варианте data будет эксклюзивно одолжена Data, не смотря на то, что Data может одалживать не эксклюзивно.Такое ощущение что это не решается без рантайм проверок/с текущей системой типов. Но это не точно, надо ещё подумать.