#prog #article
RocksDB: Not A Good Choice for a High-Performance Streaming Platform
TL;DR:
- Катастрофическое падение производительности при использовании из нескольких потоков;
- Создание и удаление column families является квадратичными от числа column families операциями. В проде это не было проблемой, но в тестах (со значительным использованием property-based testing) новые colum family создавались и удалялись для каждого теста. Общее время прогона тестов из-за этого увеличилось с двух минут до тридцати.
- Невозможность задействовать rkyv. rkyv — библиотека для Rust, которая позволяет переводить типы в их "архивные" версии в виде байтовых слайсов, из которых можно восстановить исходные данные с минимальными вычислительными затратами и без копирования данных. Для корректной работы rkyv накладывает некоторые ограничения на выравнивание "архивных" данных, но эти ограничения невозможно зафорсить в RocksDB — все значения имеют единичное выравнивание.
- Переусложнённая настройка — настолько, что для нахождения оптимальных конфигураций сделали отдельную машобуч-модель — которая всё равно не даёт большой возможности скорректировать настройки в сторону производительности.
RocksDB: Not A Good Choice for a High-Performance Streaming Platform
TL;DR:
- Катастрофическое падение производительности при использовании из нескольких потоков;
- Создание и удаление column families является квадратичными от числа column families операциями. В проде это не было проблемой, но в тестах (со значительным использованием property-based testing) новые colum family создавались и удалялись для каждого теста. Общее время прогона тестов из-за этого увеличилось с двух минут до тридцати.
- Невозможность задействовать rkyv. rkyv — библиотека для Rust, которая позволяет переводить типы в их "архивные" версии в виде байтовых слайсов, из которых можно восстановить исходные данные с минимальными вычислительными затратами и без копирования данных. Для корректной работы rkyv накладывает некоторые ограничения на выравнивание "архивных" данных, но эти ограничения невозможно зафорсить в RocksDB — все значения имеют единичное выравнивание.
- Переусложнённая настройка — настолько, что для нахождения оптимальных конфигураций сделали отдельную машобуч-модель — которая всё равно не даёт большой возможности скорректировать настройки в сторону производительности.
Feldera
RocksDB: Not A Good Choice for a High-Performance Streaming Platform
We go over our findings when trying to use RocksDB as our storage engine
🤔5😁1😢1
#prog #rust #article
Лодочник пишет о Pin.
Именно, в первой статье — Pin — автор объясняет, для чего нужен Pin и почему решения, предлагаемые на замену, не подходят и были в конечном счёте отброшены при дизайне async/await. В конце автор расписывает проблемы с Pin — включая эргономические.
В статье Pinned places лодочник рассказывает о возможном обратно совместимом расширении языка, которое интегрирует закрепление мест (places в терминологии Rust reference) в язык глубже. Как показывает автор, это позволяет значительно удобнее писать низкоуровневый (в стиле вызова poll) асинхронный код — без лишнего unsafe и с гораздо более прозрачным pin projection.
Лично я считаю предлагаемое расширение языка с моей дилетантской точки зрения довольно перспективным.
Лодочник пишет о Pin.
Именно, в первой статье — Pin — автор объясняет, для чего нужен Pin и почему решения, предлагаемые на замену, не подходят и были в конечном счёте отброшены при дизайне async/await. В конце автор расписывает проблемы с Pin — включая эргономические.
В статье Pinned places лодочник рассказывает о возможном обратно совместимом расширении языка, которое интегрирует закрепление мест (places в терминологии Rust reference) в язык глубже. Как показывает автор, это позволяет значительно удобнее писать низкоуровневый (в стиле вызова poll) асинхронный код — без лишнего unsafe и с гораздо более прозрачным pin projection.
Лично я считаю предлагаемое расширение языка с моей дилетантской точки зрения довольно перспективным.
👍9❤1
#music
Из сюрреалистичного шутера Post void.
karlflodin.bandcamp.com/track/post-void-single-feat-ycjy
Из сюрреалистичного шутера Post void.
karlflodin.bandcamp.com/track/post-void-single-feat-ycjy
Karl Flodin
POST VOID SINGLE (feat. YCJY), by Karl Flodin
track by Karl Flodin
#prog #article
A type system for RCL
Implementing a typechecker in Rust
Статья о некоторых деталях реализации тайпчекера разработанного автором языка конфигурации, который является ML-like расширением над JSON.
Это четвёртая статья в серии об этом языке, так что рекомендую также прочитать предыдущие.
В более ранней статье A reasonable configuration language автор рассказывает, что побудило его на разработку нового языка. В качестве неожиданного побочного эффекта он получил более удобную (для него) замену jq.
A type system for RCL
Implementing a typechecker in Rust
Статья о некоторых деталях реализации тайпчекера разработанного автором языка конфигурации, который является ML-like расширением над JSON.
Это четвёртая статья в серии об этом языке, так что рекомендую также прочитать предыдущие.
В более ранней статье A reasonable configuration language автор рассказывает, что побудило его на разработку нового языка. В качестве неожиданного побочного эффекта он получил более удобную (для него) замену jq.
Ruudvanasseldonk
A type system for RCL: Implementing a typechecker in Rust
I am adding a type system to RCL, my configuration language. In part 4, we look at how the typechecker is implemented in Rust, and at how it is able to generate good error messages.
👍1💩1
#prog #rust #article
repr(C): Clear, Simple and (Sometimes) Wrong
TL;DR:
repr(C): Clear, Simple and (Sometimes) Wrong
TL;DR:
#[repr(C)] даёт меньше гарантий, чем многие думают, и конкретные примеры показывают, как такие определения могут иметь непортабельные размер, выравнивание и смещения отдельных полейJack Sometimes Writes
`repr(C)`: Clear, Simple and (Sometimes) Wrong
Блог*
#prog Одной из самых впечатляющих разновидностей программ являются отладчики с записью и перемоткой потока состояния программы, такие, как rr. Записываешь выполнение программы один раз, сохраняешь на диск — и перезапускаешь сколько угодно раз. Благодаря тому…
#prog #article
Debugging an mruby Heap Corruption in Artichoke with Pernosco
Опыт использования этого отладчика для решения реального бага, включающего в себя порчу памяти из-за комбинации особого кода на Ruby и нескольких проходов сборщика мусора в VM.
Debugging an mruby Heap Corruption in Artichoke with Pernosco
Опыт использования этого отладчика для решения реального бага, включающего в себя порчу памяти из-за комбинации особого кода на Ruby и нескольких проходов сборщика мусора в VM.
hyperbola
hyperbola :: Debugging an mruby Heap Corruption in Artichoke with Pernosco
Pernosco is a hosted omniscient debugger that makes debugging complicated bugs tractable.
🤯5
#prog #rust #article
Avoid child modules in macros
TL;DR: модуль внутри функции не может напрямую обращаться к определениям внутри этой функции, и из-за того, что rustdoc по умолчанию добавляет main в док-комментарии, это может сломать макросы, которые выносят детали реализации во вложенный модуль (как правило, из соображений приватности).
Avoid child modules in macros
TL;DR: модуль внутри функции не может напрямую обращаться к определениям внутри этой функции, и из-за того, что rustdoc по умолчанию добавляет main в док-комментарии, это может сломать макросы, которые выносят детали реализации во вложенный модуль (как правило, из соображений приватности).
🤯4🫡1