Stacking workflow
#kod #git
Так получается, что последнее время я работаю в командах, где принято испольщовать или GitFlow, или TBD. И они все немного ебловаты. Точнее, они сконцентрированы на том как релизить, а не как разработчикам разрабатывать.
Я уже давно присматриваюсь к stacking workflow - это как раз больше про то, как команде правильно доносить код до мастера. И, вы не поверите, но GitHub решили напилить и поддержать такой подход у себя. Видимо, надо внедрять
https://kodikapusta.ru/news/973-stacking-workflow
Поддержать проект на boosty: https://boosty.to/kodikapusta
#kod #git
Так получается, что последнее время я работаю в командах, где принято испольщовать или GitFlow, или TBD. И они все немного ебловаты. Точнее, они сконцентрированы на том как релизить, а не как разработчикам разрабатывать.
Я уже давно присматриваюсь к stacking workflow - это как раз больше про то, как команде правильно доносить код до мастера. И, вы не поверите, но GitHub решили напилить и поддержать такой подход у себя. Видимо, надо внедрять
https://kodikapusta.ru/news/973-stacking-workflow
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤1
Атомики
#golang
Автор рассказывает про атомарные операции в Go как более производительная альтернатива мьютексам для lock-free программирования.
В статье объясняется аппаратная основа атомарных операций - инструкции CPU уровня LOCK XADD. Автор показывает как работать с типизированным API, появившемся в Go 1.19, те самые atomic.Int64, atomic.Pointer[T] и тд, и предупреждает о ловушке atomic.Value, который фиксирует тип при первом сохранении.
На практических примерах показаны CAS-циклы для рейт лимитинга и атомарная замена конфигурации на лету без блокировок.
В целом, мьютексы стоит использовать при работе с несколькими взаимозависимыми переменными, а атомарные операции - для изолированных значений
https://kodikapusta.ru/news/974-atomiki
Поддержать проект на boosty: https://boosty.to/kodikapusta
#golang
Автор рассказывает про атомарные операции в Go как более производительная альтернатива мьютексам для lock-free программирования.
В статье объясняется аппаратная основа атомарных операций - инструкции CPU уровня LOCK XADD. Автор показывает как работать с типизированным API, появившемся в Go 1.19, те самые atomic.Int64, atomic.Pointer[T] и тд, и предупреждает о ловушке atomic.Value, который фиксирует тип при первом сохранении.
На практических примерах показаны CAS-циклы для рейт лимитинга и атомарная замена конфигурации на лету без блокировок.
В целом, мьютексы стоит использовать при работе с несколькими взаимозависимыми переменными, а атомарные операции - для изолированных значений
https://kodikapusta.ru/news/974-atomiki
Поддержать проект на boosty: https://boosty.to/kodikapusta
👍3❤1
Учимся на примере uv
#rust
Один из лучих способо учиться прогать - это разбирать хорошие программы с откртытыми исходниками.
В статье подробно разбирается внутреннее устройство uv - чрезвычайно быстрого менеджера пакетов для Python, написанного на Rust. Автор последовательно описывает архитектуру проекта, состоящую из 68 специализированных крейтов, и прослеживает выполнение основных команд.
Особое внимание уделяется двухпоточной архитектуре резолвера, где синхронный поток выполняет алгоритм PubGrub, а асинхронный, с Tokio под капотом, занимается параллельной загрузкой метаданных. Объясняются механизмы глобального кэша на основе content-addressed хэшей, жёсткие ссылки для мгновенной "установки" пакетов, универсальный lockfile, работающий на всех платформах, а еще оптимизации вроде пакетной предвыборки версий.
В заключение автор рассказывает, почему выбор Rust критически важен для такой скоростной архитектуры
https://kodikapusta.ru/news/975-uchimsia-na-primere-uv
Поддержать проект на boosty: https://boosty.to/kodikapusta
#rust
Один из лучих способо учиться прогать - это разбирать хорошие программы с откртытыми исходниками.
В статье подробно разбирается внутреннее устройство uv - чрезвычайно быстрого менеджера пакетов для Python, написанного на Rust. Автор последовательно описывает архитектуру проекта, состоящую из 68 специализированных крейтов, и прослеживает выполнение основных команд.
Особое внимание уделяется двухпоточной архитектуре резолвера, где синхронный поток выполняет алгоритм PubGrub, а асинхронный, с Tokio под капотом, занимается параллельной загрузкой метаданных. Объясняются механизмы глобального кэша на основе content-addressed хэшей, жёсткие ссылки для мгновенной "установки" пакетов, универсальный lockfile, работающий на всех платформах, а еще оптимизации вроде пакетной предвыборки версий.
В заключение автор рассказывает, почему выбор Rust критически важен для такой скоростной архитектуры
https://kodikapusta.ru/news/975-uchimsia-na-primere-uv
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤1
Analogue Pocket
#fun
Я сегодня покажу вам одну крутую штуку - Analogue Pocket
Это такая портативная консоль, под которую можно колбасить свои ядра. Она совместима с библиотекой из более чем 2780 картриджей для Game Boy, Game Boy Color и Game Boy Advance. Можно сказать, что это Game Boy на максималках, под который еще и прогать можно на Verilog
Кажется, это будет моя следующая железка
https://kodikapusta.ru/news/984-https-analogue-pocket
Поддержать проект на boosty: https://boosty.to/kodikapusta
#fun
Я сегодня покажу вам одну крутую штуку - Analogue Pocket
Это такая портативная консоль, под которую можно колбасить свои ядра. Она совместима с библиотекой из более чем 2780 картриджей для Game Boy, Game Boy Color и Game Boy Advance. Можно сказать, что это Game Boy на максималках, под который еще и прогать можно на Verilog
Кажется, это будет моя следующая железка
https://kodikapusta.ru/news/984-https-analogue-pocket
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤2
Нетполлер
#golang
Еще одна из цикла про устройство рантайма Go
В этой статье разбирается, как устроен сетевой поллер (netpoller) в Go - та самая магия, которая позволяет писать простой блокирующий код вроде conn.Read(), а под капотом использовать epoll, kqueue и IOCP без блокировки потоков ОС.
Автор объясняет проблему дороговизны потоков и решение через дешевые горутины, которые засыпают и просыпаются по событиям готовности сокетов, используя официантскую аналогию: вы делаете заказ и отдыхаете, а когда кухня позвонит в колокольчик, вам принесут еду. Детально показан путь блокирующего чтения, хитрая трёхшаговая парковка горутин, работа с дедлайнами через рантаймовые таймеры, защита от устаревших событий с помощью счетчика поколений и взаимодействие с планировщиком. В итоге все это позволяет держать миллион соединений на горстке потоков
https://kodikapusta.ru/news/976-netpoller
Поддержать проект на boosty: https://boosty.to/kodikapusta
#golang
Еще одна из цикла про устройство рантайма Go
В этой статье разбирается, как устроен сетевой поллер (netpoller) в Go - та самая магия, которая позволяет писать простой блокирующий код вроде conn.Read(), а под капотом использовать epoll, kqueue и IOCP без блокировки потоков ОС.
Автор объясняет проблему дороговизны потоков и решение через дешевые горутины, которые засыпают и просыпаются по событиям готовности сокетов, используя официантскую аналогию: вы делаете заказ и отдыхаете, а когда кухня позвонит в колокольчик, вам принесут еду. Детально показан путь блокирующего чтения, хитрая трёхшаговая парковка горутин, работа с дедлайнами через рантаймовые таймеры, защита от устаревших событий с помощью счетчика поколений и взаимодействие с планировщиком. В итоге все это позволяет держать миллион соединений на горстке потоков
https://kodikapusta.ru/news/976-netpoller
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤3
Как полюбить лайфтамы
#rust
Cтатья о том, как в Rust сделать zero-copy страницы для базы данных, чтобы не гонять туда-сюда данные и не грузить процессор лишними копированиями, особенно при высоких нагрузках.
Автор объясняет, что сначала они убрали копирование между диском и буферным пулом с помощью Direct IO (флаг O_DIRECT), а затем принялись за копирования внутри самого движка. Тут началось самое интересное - пришлось плотно работать с понятием lifetimes в Rust, чтобы создавать не копии страниц, а их заимствованные представления.
В итоге сделали отдельные структуры для читателей и писателей, где буферный пул владеет данными, а все что выше - просто "смотрит" на них через займы. Да, код стал сложнее с кучей аннотаций времен жизни, зато компилятор гарантирует безопасность и нет лишних memcpy, что для высоконагруженных движков - самый кайф
https://kodikapusta.ru/news/981-kak-poliubit-laiftamy
Поддержать проект на boosty: https://boosty.to/kodikapusta
#rust
Cтатья о том, как в Rust сделать zero-copy страницы для базы данных, чтобы не гонять туда-сюда данные и не грузить процессор лишними копированиями, особенно при высоких нагрузках.
Автор объясняет, что сначала они убрали копирование между диском и буферным пулом с помощью Direct IO (флаг O_DIRECT), а затем принялись за копирования внутри самого движка. Тут началось самое интересное - пришлось плотно работать с понятием lifetimes в Rust, чтобы создавать не копии страниц, а их заимствованные представления.
В итоге сделали отдельные структуры для читателей и писателей, где буферный пул владеет данными, а все что выше - просто "смотрит" на них через займы. Да, код стал сложнее с кучей аннотаций времен жизни, зато компилятор гарантирует безопасность и нет лишних memcpy, что для высоконагруженных движков - самый кайф
https://kodikapusta.ru/news/981-kak-poliubit-laiftamy
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤1👍1
Устройство QR-кодов
#fun
В наши дни QR-коды повсюду: на меню в ресторанах, упаковке товаров, надгробиях и даже татуировках. Это разновидность двумерных штрихкодов, изобретённая в Японии в 1990-х годах и выпущенная без патентных ограничений, то есть любой человек может свободно их создавать и использовать.
Но как они работают? Каким образом хранят информацию? Почему они так надёжны?
https://kodikapusta.ru/news/987-ustroistvo-qr-kodov
Поддержать проект на boosty: https://boosty.to/kodikapusta
#fun
В наши дни QR-коды повсюду: на меню в ресторанах, упаковке товаров, надгробиях и даже татуировках. Это разновидность двумерных штрихкодов, изобретённая в Японии в 1990-х годах и выпущенная без патентных ограничений, то есть любой человек может свободно их создавать и использовать.
Но как они работают? Каким образом хранят информацию? Почему они так надёжны?
https://kodikapusta.ru/news/987-ustroistvo-qr-kodov
Поддержать проект на boosty: https://boosty.to/kodikapusta
🔥3❤2
Процент покрытия
#golang
Ребята из DoltHub решили наконец-то задуматься о покрытии кода тестами в своем проекте на Go, хотя до этого восемь лет жили без этого и норм.
В Go с версии 1.20 появилась возможность собирать данные о покрытии не только для юнит-тестов, но и для интеграционных - когда ты гоняешь уже собранный бинарник. Они быстро настроили инструменты, сгенерировали красивый HTML-отчет, увидели, что среднее покрытие по базе 49%, и… никому это не зашло. Команда просто забила, потому что база огромная, много мёртвого кода и специфичных ошибок, которые трудно покрыть, а главное - у них и так все работает и куча других проверок корректности. Так что эксперимент признали интересным, но автоматизировать использование отчетов не стали, чтобы не плодить ложные срабатывания, хотя и не исключают, что в будущем натравят на эту задачу ИИ-агентов
Тем не менее, в статье много практических советов по настройке отчетов покрытия и в целом интересно посмотреть на чужой опыт
https://kodikapusta.ru/news/977-protsent-pokrytiia
Поддержать проект на boosty: https://boosty.to/kodikapusta
#golang
Ребята из DoltHub решили наконец-то задуматься о покрытии кода тестами в своем проекте на Go, хотя до этого восемь лет жили без этого и норм.
В Go с версии 1.20 появилась возможность собирать данные о покрытии не только для юнит-тестов, но и для интеграционных - когда ты гоняешь уже собранный бинарник. Они быстро настроили инструменты, сгенерировали красивый HTML-отчет, увидели, что среднее покрытие по базе 49%, и… никому это не зашло. Команда просто забила, потому что база огромная, много мёртвого кода и специфичных ошибок, которые трудно покрыть, а главное - у них и так все работает и куча других проверок корректности. Так что эксперимент признали интересным, но автоматизировать использование отчетов не стали, чтобы не плодить ложные срабатывания, хотя и не исключают, что в будущем натравят на эту задачу ИИ-агентов
Тем не менее, в статье много практических советов по настройке отчетов покрытия и в целом интересно посмотреть на чужой опыт
https://kodikapusta.ru/news/977-protsent-pokrytiia
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤3
Rust коаны
#rust
Отличный сайт с невероятной мудростью по Rust. Я обожаю thecodelesscode.com, а теперь еще в похожем стиле и коаны про Rust.
Кароч, набирайтесь мудрости
https://kodikapusta.ru/news/982-rust-koans
Поддержать проект на boosty: https://boosty.to/kodikapusta
#rust
Отличный сайт с невероятной мудростью по Rust. Я обожаю thecodelesscode.com, а теперь еще в похожем стиле и коаны про Rust.
Кароч, набирайтесь мудрости
https://kodikapusta.ru/news/982-rust-koans
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤1🔥1
Как работает shazam
#fun
Вы в кофейне. Звучит песня. Она вертится у вас на языке. Вы достаёте телефон, нажимаете на кнопку - и через несколько секунд приложение говорит вам, что это за песня.
Как телефон записывает всего несколько секунд музыки в шумном помещении и мгновенно сравнивает её с миллионами песен?
Первое, что приходит в голову: телефон распознает мелодию или разбирает слова. Но это не так. На самом деле все работает гораздо умнее
https://kodikapusta.ru/news/988-kak-rabotaet-shazam
Поддержать проект на boosty: https://boosty.to/kodikapusta
#fun
Вы в кофейне. Звучит песня. Она вертится у вас на языке. Вы достаёте телефон, нажимаете на кнопку - и через несколько секунд приложение говорит вам, что это за песня.
Как телефон записывает всего несколько секунд музыки в шумном помещении и мгновенно сравнивает её с миллионами песен?
Первое, что приходит в голову: телефон распознает мелодию или разбирает слова. Но это не так. На самом деле все работает гораздо умнее
https://kodikapusta.ru/news/988-kak-rabotaet-shazam
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤2👍2
Контейнеры
#golang
Статья толково объясняет, как работают контейнеры
Автор рассказывает, что Docker - это не магия, а просто удобная обертка над стандартными механизмами Linux: namespaces, чтобы процесс видел только свое "личное пространство" и cgroups, чтобы ограничить ресурсы типа памяти и CPU. Показывает на реальном коде на Go, как самому сварганить подобие контейнера и запустить изолированный bash со своим hostname и PID, который думает, что он главный процесс в системе. Проверяет, что изоляция реально работает, и обещает во второй части добавить ограничения по ресурсам и отрезать контейнер от файловой системы хоста.
Кстати, вторая часть уже у автора на сайте
https://kodikapusta.ru/news/978-konteinery
Поддержать проект на boosty: https://boosty.to/kodikapusta
#golang
Статья толково объясняет, как работают контейнеры
Автор рассказывает, что Docker - это не магия, а просто удобная обертка над стандартными механизмами Linux: namespaces, чтобы процесс видел только свое "личное пространство" и cgroups, чтобы ограничить ресурсы типа памяти и CPU. Показывает на реальном коде на Go, как самому сварганить подобие контейнера и запустить изолированный bash со своим hostname и PID, который думает, что он главный процесс в системе. Проверяет, что изоляция реально работает, и обещает во второй части добавить ограничения по ресурсам и отрезать контейнер от файловой системы хоста.
Кстати, вторая часть уже у автора на сайте
https://kodikapusta.ru/news/978-konteinery
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤1
Media is too big
VIEW IN TELEGRAM
Кусочек разработки клиента для gopher протокола под playdate
Playdate - супер кайфовая современная ретро-консоль с монохромным экранчиком. Кодить под нее на гошке - одно удовольствие
Playdate - супер кайфовая современная ретро-консоль с монохромным экранчиком. Кодить под нее на гошке - одно удовольствие
1🔥3🤩1
Сложно но без unsafe
#rust
В Rust ужасно сложно делать циклические ссылки, потому что он требует четкого владения памятью.
Но если очень хочется, то можно выкрутиться: например, хранить все в Vec и использовать индексы вместо указателей - это работает, но проверки в рантайме.
А если заморочиться с хитрыми дженериками и трейтами вроде for<'a>, то можно сделать индексы, которые проверяются ещё на этапе компиляции. В итоге получается свой мини-сборщик мусора с трейсингом, который безопасен и позволяет хранить циклические структуры. Правда, выглядит код при этом так, будто ты перемудрил с архитектурой, но зато без unsafe
https://kodikapusta.ru/news/983-slozhno-no-bez-unsafe
Поддержать проект на boosty: https://boosty.to/kodikapusta
#rust
В Rust ужасно сложно делать циклические ссылки, потому что он требует четкого владения памятью.
Но если очень хочется, то можно выкрутиться: например, хранить все в Vec и использовать индексы вместо указателей - это работает, но проверки в рантайме.
А если заморочиться с хитрыми дженериками и трейтами вроде for<'a>, то можно сделать индексы, которые проверяются ещё на этапе компиляции. В итоге получается свой мини-сборщик мусора с трейсингом, который безопасен и позволяет хранить циклические структуры. Правда, выглядит код при этом так, будто ты перемудрил с архитектурой, но зато без unsafe
https://kodikapusta.ru/news/983-slozhno-no-bez-unsafe
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤1
Glyph
#fun
Протокол Glyph предлагает способ для терминальных эмуляторов отображать насыщенную качественную графику и интерактивные элементы интерфейса путем передачи данных через стандартные escape-последовательности.
Цель протокола - заменить фрагментированные устаревшие "костыли" единым стандартом, который даст возможность CLI-инструментам отображать все что душе угодно, от сложных векторных иконок до полноэкранных минтерфейсов без потери производительности.
Уходит эпока кривых терминалов, получается?
https://kodikapusta.ru/news/989-glyph
Поддержать проект на boosty: https://boosty.to/kodikapusta
#fun
Протокол Glyph предлагает способ для терминальных эмуляторов отображать насыщенную качественную графику и интерактивные элементы интерфейса путем передачи данных через стандартные escape-последовательности.
Цель протокола - заменить фрагментированные устаревшие "костыли" единым стандартом, который даст возможность CLI-инструментам отображать все что душе угодно, от сложных векторных иконок до полноэкранных минтерфейсов без потери производительности.
Уходит эпока кривых терминалов, получается?
https://kodikapusta.ru/news/989-glyph
Поддержать проект на boosty: https://boosty.to/kodikapusta
👍2❤1
Выбираем логер
#golang
На протяжении долгого времени в Go выбор библиотеки логирования был выбором между Logrus, zap, zerolog и несколькими другими, каждая из которых предлагала свой собственный интерфейс, идиомы и представления о том, как должно работать структурированное логирование.
Эта эпоха осталась в прошлом. Уже с версии Go 1.21, пакет log/slog предоставляет стандартный интерфейс, вокруг которого сформировалось единое мнение в экосистеме. Этот сдвиг упрощает выбор но не отменяетего полностью.
Это руководство учитывает современные реалии и освещает, какие библиотеки по-прежнему актуальны, какая у них производительность, чем они отличаются и когда одного лишь slog будет достаточно
https://kodikapusta.ru/news/979-vybiraem-logger
Поддержать проект на boosty: https://boosty.to/kodikapusta
#golang
На протяжении долгого времени в Go выбор библиотеки логирования был выбором между Logrus, zap, zerolog и несколькими другими, каждая из которых предлагала свой собственный интерфейс, идиомы и представления о том, как должно работать структурированное логирование.
Эта эпоха осталась в прошлом. Уже с версии Go 1.21, пакет log/slog предоставляет стандартный интерфейс, вокруг которого сформировалось единое мнение в экосистеме. Этот сдвиг упрощает выбор но не отменяетего полностью.
Это руководство учитывает современные реалии и освещает, какие библиотеки по-прежнему актуальны, какая у них производительность, чем они отличаются и когда одного лишь slog будет достаточно
https://kodikapusta.ru/news/979-vybiraem-logger
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤1
Сокращатель ссылок
#rust
Небольшая, но практическая статья
Ребята запилили свой сервис для сокращения ссылок на Rust, потому что TinyURL стал жадным до денег, а у автора болтался свободный K3s-кластер.
Все устроено максимально просто: прилетает запрос - проверяем быстрый кэш в памяти, если нет - лезем в Postgres. А статистику по кликам не пишем сразу в базу, а копим в памяти и раз в несколько секунд отправляем пачкой. Никакого Redis, очередей и аналитики, просто бинарник на Rust, Postgres и два пода в кластере. Редирект обрабатывается одной крошечной функцией, где основная магия - что ничего лишнего на горячем пути не происходит. В общем, работает быстро, дешево и без лишних телодвижений.
Читаем, учимся писать свои сервисы
https://kodikapusta.ru/news/986-sokrashchatel-ssylok
Поддержать проект на boosty: https://boosty.to/kodikapusta
#rust
Небольшая, но практическая статья
Ребята запилили свой сервис для сокращения ссылок на Rust, потому что TinyURL стал жадным до денег, а у автора болтался свободный K3s-кластер.
Все устроено максимально просто: прилетает запрос - проверяем быстрый кэш в памяти, если нет - лезем в Postgres. А статистику по кликам не пишем сразу в базу, а копим в памяти и раз в несколько секунд отправляем пачкой. Никакого Redis, очередей и аналитики, просто бинарник на Rust, Postgres и два пода в кластере. Редирект обрабатывается одной крошечной функцией, где основная магия - что ничего лишнего на горячем пути не происходит. В общем, работает быстро, дешево и без лишних телодвижений.
Читаем, учимся писать свои сервисы
https://kodikapusta.ru/news/986-sokrashchatel-ssylok
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤3👍2
Вишенки
#lang
Пятница и новый язык программирования.
Сегодня у меня для вас - Черри. Это язык программирования для создания Siri Shortcuts, который компилируется напрямую в Shortcut, который затем можно запускать на ваших устройствах Apple.
Зачем? Да хрен знает
https://kodikapusta.ru/news/953-vishenki
Поддержать проект на boosty: https://boosty.to/kodikapusta
#lang
Пятница и новый язык программирования.
Сегодня у меня для вас - Черри. Это язык программирования для создания Siri Shortcuts, который компилируется напрямую в Shortcut, который затем можно запускать на ваших устройствах Apple.
Зачем? Да хрен знает
https://kodikapusta.ru/news/953-vishenki
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤1😁1
go tool task
#golang
Я очень люблю Taskfile и в своих петпроектах не пользуюсь Makefile. Это реально супер удобная замена уродского Makefile, но у старичка есть преймущество - make есть везде.
Но! Теперь для CI стало значительно удобнее использовать Taskfile через go tool task. В статье автор рассказывает как это работает
https://kodikapusta.ru/news/980-go-tool-task
Поддержать проект на boosty: https://boosty.to/kodikapusta
#golang
Я очень люблю Taskfile и в своих петпроектах не пользуюсь Makefile. Это реально супер удобная замена уродского Makefile, но у старичка есть преймущество - make есть везде.
Но! Теперь для CI стало значительно удобнее использовать Taskfile через go tool task. В статье автор рассказывает как это работает
https://kodikapusta.ru/news/980-go-tool-task
Поддержать проект на boosty: https://boosty.to/kodikapusta
👍4❤1
Rust заимствования в Haskell
#rust #haskell
Теперь в Linear Haskell можно делать штуки в стиле Rust: безопасные мутабельные и разделяемые заимствования прямо в чистом коде, без утечек и с поддержкой конкурентности.
Все это работает через специальный линейный монад BO, который позволяет временно делиться доступом на чтение, что-то там делать с данными, а потом возвращать всё обратно - как в ST, но чище и мощнее.
Авторы даже квиксорт на этом написали, который пашет параллельно без страха и упрека
https://kodikapusta.ru/news/985-rust-zaimstvovaniia-v-haskell
Поддержать проект на boosty: https://boosty.to/kodikapusta
#rust #haskell
Теперь в Linear Haskell можно делать штуки в стиле Rust: безопасные мутабельные и разделяемые заимствования прямо в чистом коде, без утечек и с поддержкой конкурентности.
Все это работает через специальный линейный монад BO, который позволяет временно делиться доступом на чтение, что-то там делать с данными, а потом возвращать всё обратно - как в ST, но чище и мощнее.
Авторы даже квиксорт на этом написали, который пашет параллельно без страха и упрека
https://kodikapusta.ru/news/985-rust-zaimstvovaniia-v-haskell
Поддержать проект на boosty: https://boosty.to/kodikapusta
❤1
Простое профилирование кучи
#golang
Статья от ребят из Coroot. Эти ребята знают толк в профилировании и вьювабилити.
Тут они рассказывают, как вместо подключения pprof к Go-сервисам, чтобы посмотреть, что там с памятью, начали использовать встроенные возможности рантайма. Go сам постоянно собирает профиль аллокаций, просто он либо отключен линкером, если никто не дергает runtime.MemProfile, либо данные есть, но доступа к ним извне нет.
Агент Coroot теперь просто лезет через /proc/<pid>/mem, читает внутреннюю переменную runtime.mbuckets прямо из памяти процесса - и если профилирование выключено, может даже включить его на лету одной записью в память.
Pprof хорош, но для его использования нужно менять приложение. В подходе Coroot ничего не нужно передеплоивать, переконфигурировать, никаких эндпоинтов
https://kodikapusta.ru/news/990-prostoe-profilirovanie-kuchi
Поддержать проект на boosty: https://boosty.to/kodikapusta
#golang
Статья от ребят из Coroot. Эти ребята знают толк в профилировании и вьювабилити.
Тут они рассказывают, как вместо подключения pprof к Go-сервисам, чтобы посмотреть, что там с памятью, начали использовать встроенные возможности рантайма. Go сам постоянно собирает профиль аллокаций, просто он либо отключен линкером, если никто не дергает runtime.MemProfile, либо данные есть, но доступа к ним извне нет.
Агент Coroot теперь просто лезет через /proc/<pid>/mem, читает внутреннюю переменную runtime.mbuckets прямо из памяти процесса - и если профилирование выключено, может даже включить его на лету одной записью в память.
Pprof хорош, но для его использования нужно менять приложение. В подходе Coroot ничего не нужно передеплоивать, переконфигурировать, никаких эндпоинтов
https://kodikapusta.ru/news/990-prostoe-profilirovanie-kuchi
Поддержать проект на boosty: https://boosty.to/kodikapusta
🔥1
Bevy и сеть
#rust #gamedev
Цикл статей по разработке игр на Rust и Bevy все еще продолжается. Я уже писал про этот цикл статей, но ребята продолжают выпускать годноту. Правада, несколько статей платные, но остальное тоже хороши
В этот раз интересная статья про работу с сетью в играх на Rust. И еще про использование SpacetimeDB - базы, про которую я уже как-то писал. Эта база отлично пододит для игр и не только
Учим Rust через написание игр
https://kodikapusta.ru/news/996-bevy-i-set
Поддержать проект на boosty: https://boosty.to/kodikapusta
#rust #gamedev
Цикл статей по разработке игр на Rust и Bevy все еще продолжается. Я уже писал про этот цикл статей, но ребята продолжают выпускать годноту. Правада, несколько статей платные, но остальное тоже хороши
В этот раз интересная статья про работу с сетью в играх на Rust. И еще про использование SpacetimeDB - базы, про которую я уже как-то писал. Эта база отлично пододит для игр и не только
Учим Rust через написание игр
https://kodikapusta.ru/news/996-bevy-i-set
Поддержать проект на boosty: https://boosty.to/kodikapusta
🔥3❤1😢1