Блог*
#prog #rust #rustlib #serde #amazingopensource Хозяйке на заметку Подборка библиотек для работы с serde от замечательного Толяна dtolnay. erased-serde — трейты из serde со стёртыми типами. Позволяют сделать из (де)сериализаторов трейт-объекты. Обычно это…
#prog #rust #rustlib #serde
serde-diff
"A small helper that can
1. Serialize the fields that differ between two values of the same type
2. Apply previously serialized field differences to other values of the same type."
serde-diff
"A small helper that can
1. Serialize the fields that differ between two values of the same type
2. Apply previously serialized field differences to other values of the same type."
GitHub
GitHub - amethyst/serde-diff: Utility for comparing two structs and re-applying the differences to other structs
Utility for comparing two structs and re-applying the differences to other structs - GitHub - amethyst/serde-diff: Utility for comparing two structs and re-applying the differences to other structs
Хочешь зарабатывать много денег? Мечтаешь войти в высшую лигу разработки? Хочешь войти в IT, но не знаешь, как начать?
Сочувствую.
Сочувствую.
🔥1
Читаю тут, почему строки в Java и C# иммутабельные. Фактически, ответ — потому что языки г... Недостаточно мощные и не могут гарантировать ни thread safety, ни иммутабельный доступ к объектам. А вы говорите, что borrow checker не нужен.
👍1
Блог*
Читаю тут, почему строки в Java и C# иммутабельные. Фактически, ответ — потому что языки г... Недостаточно мощные и не могут гарантировать ни thread safety, ни иммутабельный доступ к объектам. А вы говорите, что borrow checker не нужен.
Кстати, в Java 7 поменяли семантику метода substring: раньше новая строка переиспользовала хранилище оригинальной строки, а после этой версии делает новую строку в хипе. Оба варианта так себе: первый использует слишком много памяти, если подстрока берётся от очень большой строки (старая-то никуда не девается, новая ссылка не даёт сборщику мусора собрать старую строку) — собственно, это и было причиной для внесения изменений, а новый вариант потребляет излишнюю память, если программа оперирует большим количеством подстрок одной и той же строки (скажем, в программе какой-то свой парсер).
Новый вариант, кстати, строго хуже: в старом варианте можно было форсировать выделение в куче при помощи костыля вида
Новый вариант, кстати, строго хуже: в старом варианте можно было форсировать выделение в куче при помощи костыля вида
string sub = original.substring(from, to) + "";
, а при помощи нового варианта получить поведение, как в старом варианте, нельзя.Programcreek
The substring() Method in JDK 6 and JDK 7
How substring(int beginIndex, int endIndex) method works in JDK 6 and JDK 7 are different. This article use a diagram to illustrate their difference. Knowing
Блог*
Читаю тут, почему строки в Java и C# иммутабельные. Фактически, ответ — потому что языки г... Недостаточно мощные и не могут гарантировать ни thread safety, ни иммутабельный доступ к объектам. А вы говорите, что borrow checker не нужен.
А вот ещё пример из Go. Мутабельных строк там нет (есть лишь string.Builder). Строка в рантайме — это структура с двумя полями: адрес и длина, а слайс — структура с тремя полями: адрес, длина и ёмкость. Технически ничто не мешает преобразовать слайс байт в строку, просто отбросив поле
Cap
(что, собственно говоря, и происходит в strings.Builder.String), но в общем случае это некорректная операция, потому что слайс мутабельный (всегда, иммутабельной версии слайса просто не существует), а строка — нет. Как результат, каст слайса байт в строку выделяет память в куче и копирует данные. Это лишняя работа, особенно если используемая строка почти сразу отбрасывается — например, если строка используется как ключ для map
. В какой-то момент в компилятор Go запилили peephole-оптимизацию, которая распознавала паттерн someMap[string(bytesSlice)]
и переписывала на реальный каст на фейковый, который просто копирует указатель и длину из слайса.pkg.go.dev
strings package - strings - Go Packages
Package strings implements simple functions to manipulate UTF-8 encoded strings.
🤣2
Forwarded from rusta::mann
У меня новый фаворит среди изменений, предложенных ревьювером.
Code Review might not make your code better, but it definitely will make it doper.
#codereview
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
Библиотека (и плагин для cargo), которая позволяет найти минимальную версию Rust, с которой проект собирается. Использует, увы, линейный поиск вместо бинарного.
https://github.com/foresterre/cargo-msrv
GitHub
GitHub - foresterre/cargo-msrv: 🦀 Find the minimum supported Rust version (MSRV) for your project
🦀 Find the minimum supported Rust version (MSRV) for your project - foresterre/cargo-msrv
Forwarded from Zero Dereference
A simple and well-documented microkernel operating system released under public domain.
https://resea.org/
https://resea.org/
👍1
Блог*
#prog Переписал по работе одну утилиту для анализа логов. Раньше для разбора строк использовались регулярные выражения, а я заменил на наколенный лексер. В результате утилита, которая почти 23 гигабайта перемалывает за чуть больше, чем за 5 минут, стала на…
В утилите (после моих изменений) используется массив строковых значений, с которыми строчки логов должны обрабатываться отдельно. Для более быстрого поиска этот массив упорядочен, а значение ищется бинарным поиском. На код-ревью коллега мне совершенно справедливо указал, что отсортированность нужно как-то поддерживать. Не вопрос: пишем
К сожалению, сравнение строк в const fn пока использовать нельзя, так что константную функцию сравнения строк пришлось писать самому 😠
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 пока использовать нельзя, так что константную функцию сравнения строк пришлось писать самому 😠
Linker Unsafe
Мой новый рисунок компилятором по консоли
Впрочем, ничего нового. Типичный дизель.
Forwarded from Loskir's
🙄 Как уже написали @localhost_ru и @bpblog, сегодня начался Hacktoberfest. Это цифровой ивент, проводимый компанией DigitalOcean.
В чём суть? Цель ивента — поддержка OpenSource комьюнити. Если сделать 4 пулл-реквеста в любые публичные репозитории в течение октября, можно получить бесплатную футболку (или попросить посадить дерево вместо неё).
И несмотря на то, что в правилах явно сказано "если мейнтейнер пожалуется на спам или нарушение code of conduct, тебя отстранят от участия", начался сущий кошмар.
Пользователи стали создавать десятки, если не сотни тысяч новых мелких правок для галочки, бесполезных, а иногда и вовсе фактически неверных. Жизнь мейнтейнеров превратилась в ад. В твиттере даже появился аккаунт shitoberfest, где собирают скриншоты таких пулл-реквестов. Осторожно, не пробейте лоб.
Что я об этом думаю? Конечно, стоит поддерживать опен-сурс комьюнити и привлекать новых разработчиков к участию в нём. Но выдавать бонусы за количество, а не за качество — не лучшее решение. Перекладывать борьбу со спамом на мейнтейнеров крупных проектов — тоже очень стремный ход. Конечно, стоит винить не организатора, а участников, но уровень организации хромает
В общем, участвуйте на здоровье, но не позорьтесь, пожалуйста🥺
В чём суть? Цель ивента — поддержка OpenSource комьюнити. Если сделать 4 пулл-реквеста в любые публичные репозитории в течение октября, можно получить бесплатную футболку (или попросить посадить дерево вместо неё).
И несмотря на то, что в правилах явно сказано "если мейнтейнер пожалуется на спам или нарушение code of conduct, тебя отстранят от участия", начался сущий кошмар.
Пользователи стали создавать десятки, если не сотни тысяч новых мелких правок для галочки, бесполезных, а иногда и вовсе фактически неверных. Жизнь мейнтейнеров превратилась в ад. В твиттере даже появился аккаунт shitoberfest, где собирают скриншоты таких пулл-реквестов. Осторожно, не пробейте лоб.
Что я об этом думаю? Конечно, стоит поддерживать опен-сурс комьюнити и привлекать новых разработчиков к участию в нём. Но выдавать бонусы за количество, а не за качество — не лучшее решение. Перекладывать борьбу со спамом на мейнтейнеров крупных проектов — тоже очень стремный ход. Конечно, стоит винить не организатора, а участников, но уровень организации хромает
В общем, участвуйте на здоровье, но не позорьтесь, пожалуйста🥺
Hacktoberfest
Hacktoberfest 2025
Hacktoberfest: a month-long celebration of open-source projects, their maintainers, and the entire community of contributors.
❤1