мне не нравится реальность
506 subscribers
1.33K photos
57 videos
56 files
1.02K links
Мне не нравится реальность
N.B. waffle is unhinged

- кормить назад: @meowaffle
- кормить вперёд: github.com/sponsors/WaffleLapkin
- чят: https://xn--r1a.website/+5Dtuan4dVE5kYTcy
- блог: blog.ihatereality.space
Download Telegram
Мне такая интересно-ебанутая идея пришла в голову ночью на счёт всех этих строк...
Играюсь с огнём unsafe чувствую себя сишником 🤡
2020-05-30 #ph
Сегодня весь день писал один хитрый вариант строк 👀 Устал, но доволен что оно работает и меня не забрали в ад. (Подробности позже)
Forwarded from The After Times
А в расте есть способ округлить к большему лучше, чем (n / d) + ((n % d > 0) as usize)?
Подписчик подсказал что можно сделать (n + d - 1) / d

Потом я додумал что можно загуглить "ceiling div", на стаке пишут ещё такой интересный вариант:
1 + ((n - 1) / d)
(спасает от переполнения в n+d)
...но требует n != 0 , что-то я сразу не заметил, ugh
мне не нравится реальность
Сегодня весь день писал один хитрый вариант строк 👀 Устал, но доволен что оно работает и меня не забрали в ад. (Подробности позже)
Обещал подробности, вот они.

Ещё позавчера ночь мне пришла идея о том, что можно сделать хитрую структуру, которая будет как 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 боксят нативные мьютексы.
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from <илья as Человек> (ilya sheprut)
В моей первой программе на расте щас вылезло 104 warning'а 🙂
У меня подписчиков, как у Ильи варнингов
Для извращений со строками мне нужно аллоцировать [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