Size: a a a

2020 September 28
Блог*
Хочешь зарабатывать много денег? Мечтаешь войти в высшую лигу разработки? Хочешь войти в IT, но не знаешь, как начать?

Сочувствую.
источник
2020 September 29
Блог*
— %внутренний компонент% — это %внутренний компонент%, а это — это это.

#quotes #трудовыебудни
источник
Блог*
#prog #prog #c #rust

Опус о переписывании с C на Rust библиотеки для удаления шума из аудио.
источник
2020 September 30
Блог*
источник
Блог*
Читаю тут, почему строки в Java и C# иммутабельные. Фактически, ответ — потому что языки г... Недостаточно мощные и не могут гарантировать ни thread safety, ни иммутабельный доступ к объектам. А вы говорите, что borrow checker не нужен.
источник
Блог*
dereference_pointer_there
Читаю тут, почему строки в Java и C# иммутабельные. Фактически, ответ — потому что языки г... Недостаточно мощные и не могут гарантировать ни thread safety, ни иммутабельный доступ к объектам. А вы говорите, что borrow checker не нужен.
Кстати, в Java 7 поменяли семантику метода substring: раньше новая строка переиспользовала хранилище оригинальной строки, а после этой версии делает новую строку в хипе. Оба варианта так себе: первый использует слишком много памяти, если подстрока берётся от очень большой строки (старая-то никуда не девается, новая ссылка не даёт сборщику мусора собрать старую строку) — собственно, это и было причиной для внесения изменений, а новый вариант потребляет излишнюю память, если программа оперирует большим количеством подстрок одной и той же строки (скажем, в программе какой-то свой парсер).

Новый вариант, кстати, строго хуже: в старом варианте можно было форсировать выделение в куче при помощи костыля вида string sub = original.substring(from, to) + "";, а при помощи нового варианта получить поведение, как в старом варианте, нельзя.
источник
Блог*
dereference_pointer_there
Читаю тут, почему строки в Java и C# иммутабельные. Фактически, ответ — потому что языки г... Недостаточно мощные и не могут гарантировать ни thread safety, ни иммутабельный доступ к объектам. А вы говорите, что borrow checker не нужен.
А вот ещё пример из Go. Мутабельных строк там нет (есть лишь string.Builder). Строка в рантайме — это структура с двумя полями: адрес и длина, а слайс — структура с тремя полями: адрес, длина и ёмкость. Технически ничто не мешает преобразовать слайс байт в строку, просто отбросив поле Cap (что, собственно говоря, и происходит в strings.Builder.String), но в общем случае это некорректная операция, потому что слайс мутабельный (всегда, иммутабельной версии слайса просто не существует), а строка — нет. Как результат, каст слайса байт в строку выделяет память в куче и копирует данные. Это лишняя работа, особенно если используемая строка почти сразу отбрасывается — например, если строка используется как ключ для map. В какой-то момент в компилятор Go запилили peephole-оптимизацию, которая распознавала паттерн someMap[string(bytesSlice)] и переписывала на реальный каст на фейковый, который просто копирует указатель и длину из слайса.
источник
Блог*
У меня новый фаворит среди изменений, предложенных ревьювером.

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

#codereview
источник
Блог*
#prog #rust

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

https://github.com/foresterre/cargo-msrv
источник
Блог*
#prog #amazingopensource
источник
Блог*
A simple and well-documented microkernel operating system released under public domain.

https://resea.org/
источник
Блог*
dereference_pointer_there
#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 пока использовать нельзя, так что константную функцию сравнения строк пришлось писать самому 😠
источник
Блог*
Мой новый рисунок компилятором по консоли
источник
Блог*
dereference_pointer_there
Мой новый рисунок компилятором по консоли
Впрочем, ничего нового. Типичный дизель.
источник
Блог*
Пока среда не закончилась
источник
Блог*
by Duke Mort
источник
2020 October 01
Блог*
источник
Блог*
Немного контекста (и нытья, за ссылку спасибо @sv9t_channel)
источник
Блог*
🙄 Как уже написали @localhost_ru и @bpblog, сегодня начался Hacktoberfest. Это цифровой ивент, проводимый компанией DigitalOcean.

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

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

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

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

В общем, участвуйте на здоровье, но не позорьтесь, пожалуйста🥺
источник
2020 October 02
Блог*
Немного токсичности на хабре
источник