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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Блог*
Читаю тут, почему строки в Java и C# иммутабельные. Фактически, ответ — потому что языки г... Недостаточно мощные и не могут гарантировать ни thread safety, ни иммутабельный доступ к объектам. А вы говорите, что borrow checker не нужен.
А вот ещё пример из Go. Мутабельных строк там нет (есть лишь string.Builder). Строка в рантайме — это структура с двумя полями: адрес и длина, а слайс — структура с тремя полями: адрес, длина и ёмкость. Технически ничто не мешает преобразовать слайс байт в строку, просто отбросив поле Cap (что, собственно говоря, и происходит в strings.Builder.String), но в общем случае это некорректная операция, потому что слайс мутабельный (всегда, иммутабельной версии слайса просто не существует), а строка — нет. Как результат, каст слайса байт в строку выделяет память в куче и копирует данные. Это лишняя работа, особенно если используемая строка почти сразу отбрасывается — например, если строка используется как ключ для map. В какой-то момент в компилятор Go запилили peephole-оптимизацию, которая распознавала паттерн someMap[string(bytesSlice)] и переписывала на реальный каст на фейковый, который просто копирует указатель и длину из слайса.
🤣2
Forwarded from rusta::mann
У меня новый фаворит среди изменений, предложенных ревьювером.

Code Review might not make your code better, but it definitely will make it doper.

#codereview
👍1
#prog #rust #rustlib

Библиотека (и плагин для cargo), которая позволяет найти минимальную версию Rust, с которой проект собирается. Использует, увы, линейный поиск вместо бинарного.

https://github.com/foresterre/cargo-msrv
Forwarded from Zero Dereference
A simple and well-documented microkernel operating system released under public domain.

https://resea.org/
👍1
Блог*
#prog Переписал по работе одну утилиту для анализа логов. Раньше для разбора строк использовались регулярные выражения, а я заменил на наколенный лексер. В результате утилита, которая почти 23 гигабайта перемалывает за чуть больше, чем за 5 минут, стала на…
В утилите (после моих изменений) используется массив строковых значений, с которыми строчки логов должны обрабатываться отдельно. Для более быстрого поиска этот массив упорядочен, а значение ищется бинарным поиском. На код-ревью коллега мне совершенно справедливо указал, что отсортированность нужно как-то поддерживать. Не вопрос: пишем const fn is_sorted(strings: &[&str]) -> bool — благо после релиза Rust 1.46.0, разрешившим циклы в const fn, это весьма легко — и пишем отдельно константу const _ASSERT_IMPORTANT_ARRAY_IS_SORTED: [(); 1] = [(); is_sorted(&IMPORTANT_ARRAY) as _]; — и теперь программа не собирается из-за несоответствия типов, если массив не отсортирован. Проблема решена.

К сожалению, сравнение строк в const fn пока использовать нельзя, так что константную функцию сравнения строк пришлось писать самому 😠
Forwarded from Linker Unsafe
Мой новый рисунок компилятором по консоли
Пока среда не закончилась
by Duke Mort
Немного контекста (и нытья, за ссылку спасибо @sv9t_channel)
Forwarded from Loskir's
🙄 Как уже написали @localhost_ru и @bpblog, сегодня начался Hacktoberfest. Это цифровой ивент, проводимый компанией DigitalOcean.

В чём суть? Цель ивента — поддержка OpenSource комьюнити. Если сделать 4 пулл-реквеста в любые публичные репозитории в течение октября, можно получить бесплатную футболку (или попросить посадить дерево вместо неё).

И несмотря на то, что в правилах явно сказано "если мейнтейнер пожалуется на спам или нарушение code of conduct, тебя отстранят от участия", начался сущий кошмар.

Пользователи стали создавать десятки, если не сотни тысяч новых мелких правок для галочки, бесполезных, а иногда и вовсе фактически неверных. Жизнь мейнтейнеров превратилась в ад. В твиттере даже появился аккаунт shitoberfest, где собирают скриншоты таких пулл-реквестов. Осторожно, не пробейте лоб.

Что я об этом думаю? Конечно, стоит поддерживать опен-сурс комьюнити и привлекать новых разработчиков к участию в нём. Но выдавать бонусы за количество, а не за качество — не лучшее решение. Перекладывать борьбу со спамом на мейнтейнеров крупных проектов — тоже очень стремный ход. Конечно, стоит винить не организатора, а участников, но уровень организации хромает

В общем, участвуйте на здоровье, но не позорьтесь, пожалуйста🥺
1
Немного токсичности на хабре
#prog

Mermaid — библиотека для создания диаграмм и графиков. В каком-то смысле альтернатива graphviz
#prog #meme (говорят, это Олег из @oleg_log)
#prog #rust #article

Статья о порядке дропа значений в Rust. Это несколько запутанно.
#prog #rust #article

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