Transducer: Composition, abstraction, performance (2018)
В функциональном программировании высшие функции вроде map, filter и fold можно определить через reduce, показывая что "всё сворачивается". Эти функции зависят от коллекций лишь через операцию conj, что открывает путь к абстракции. В Clojure это реализуется через трансдьюсеры — функции, принимающие шаг обработки и возвращающие его модифицированную версию.
Трансдьюсеры позволяют создавать переиспользуемые преобразования данных, работающие с различными структурами, от списков до потоков. Их ключевое преимущество — композиция: несколько трансдьюсеров могут объединяться без потери производительности. Реализация поддерживает разные арности (0, 1 или 2 аргумента), что делает их универсальными для различных сценариев обработки данных. Такой подход обеспечивает как переиспользование кода, так и высокую производительность за счет meaningful абстракции.
Комментарии (5)
- Обсуждение началось с предложения рассмотреть альтернативное, более мягкое введение в трансдюсеры как функции
a -> List<b>, подчеркивая их полиморфизм и простоту. - Участники поделились опытом, что новички в Clojure часто переоценивают
reduceи пытаются заменить им циклы, что приводит к запутанному коду, в то время как трансдюсеры предлагают более чистый и декларативный подход. - Сообщество единодушно подтвердило, что трансдюсеры действительно делают код более выразительным и устойчивым к ошибкам, особенно когда дело касается обработки коллекций.
- В итоге обсуждение сошлось на том, что хотя трансдюсеры и требуют некоторого переосмысления привычных паттернов, их преимущества в выразительности и надежности делают их ценным инструментом для Clojure разработчика.
Комментарии (34)
- Обсуждение охватывает широкий спектр тем: от исторических примечаний к фильтрам Блума до их практического применения в индустрии и академических исследованиях.
- Участники обсуждали различные аспекты фильтров Блума, включая их эффективность, ограничения и альтернативы, такие как Cuckoo и Ribbon фильтры.
- Были упомянуты конкретные примеры использования фильтров Блума в таких системах, как Splunk и Bing.
- Обсуждались также вопросы, связанные с оптимизацией производительности и использованием фильтров Блума в различных контекстах, включая поиск редких событий и обработка больших объемов данных.
An overengineered solution to `sort | uniq -c` with 25x throughput (hist)
Проект hist-rs представляет собой высокопроизводительный утилиту для подсчета уникальных строк, написанную на Rust. Его ключевое преимущество — скорость работы, которая в 25 раз превышает производительность классической команды sort | uniq -c в Unix-системах. Это делает его идеальным инструментом для анализа больших лог-файлов и наборов данных, где важна скорость обработки.
Проект реализует эффективный алгоритм подсчета, минимизируя потребление памяти и процессорного времени. Он особенно полезен для разработчиков и системных администраторов, работающих с большими объемами текстовых данных. Код проекта открыт и доступен на GitHub, что позволяет сообществу вносить вклад в его развитие и адаптацию под различные задачи обработки текста.
Комментарии (62)
- Обсуждение началось с вопроса о производительности различных инструментов для подсчёта уникальных строк в файле, где был упомянут
clickhouse-localкак самый быстрый способ. - Участники обсуждали различные инструменты, включая
sort,uniq,awk,uniq -c,sort | uniq -c | sort -n,tsvиcsv, а также их производительность и использование памяти. - Были упомянуты такие инструменты как
tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort,tsort, `tsor
The death of thread per core
В асинхронных рантаймах, таких как async Rust, задачи могут приостанавливаться и порождать новую работу, что приводит к двум основным подходам: thread-per-core и work-stealing. При work-stealing потоки могут "воровать" задачи друг у друга, обеспечивая лучшую балансировку нагрузки, хотя это требует возможности перемещения задач между потоками (что вызывает сложности в Rust с требованием Send) и может нарушать локальность данных. В обработке данных долгое время доминировал подход thread-per-core, так как он минимизирует перемещение данных между ядрами и упрощает реализацию, особенно при случайных ключах.
Однако в последние годы наблюдается сдвиг в сторону динамического перераспределения работы на уровне обработки данных. Растущее количество ядер делает неравномерное распределение данных более болезненным, а улучшение производительности ввода-вывода снижает значимость старых ограничений. Подход Morsel-Driven Parallelism предлагает, что системы обработки данных могут быть лучшим местом для динамического перераспределения работы. Это подкрепляется культурными факторами: при масштабировании и мультиарендности проблемы неравномерной нагрузки становятся сложнее для решения на верхних уровнях, требуя встроенной гибкости в самих системах.
Комментарии (50)
- Обсуждение вращается вокруг вопроса, что межъядерная коммуникация может быть настолько дорогой, что даже при наличии 255 ядер лучше всего использовать только одно ядро.
- Участники обсуждают, что важно не только количество ядер, но и то, как они используются, и что важнее всего - это архитектура приложения и то, насколько оно может быть распараллелено.
- Также обсуждается, что важно учитывать, что не все задачи одинаково подходят для параллельной обработки, и что важно правильно оценивать, когда стоит распараллеливать задачу, а когда нет.
- Участники также обсуждают, что важно иметь в виду, что современные языки программирования и среды разработки предоставляют инструменты, которые могут помочь в управлении потоками и задачами, и что важно использовать их правильно.
Комментарии (56)
- В обсуждении фигурируют три «игры» с условиями: отказ от T&C в браузере, отказ от обработки данных в Apple Health и отказ от согласия на отслеживание в Toyota.
- Участники обсуждают, что отказ от T&C в браузере — это просто игра, и никаких последствий не будет.
- Обсуждается, что Apple Health и Toyota не предоставляют выбора, кроме как отказаться от обработки данных, и это вызывает тревогу.
- Участники также обсуждают, что отказ от обработки данных в Apple Health и отказ от согласия на отслеживание в Toyota не влияет на функциональность, но вызывает тревогу.
Show HN: ut – Rust based CLI utilities for devs and IT
Написанная на Rust утилита ut предлагает разработчикам набор инструментов для повседневных задач, вдохновляясь функциональностью it-tools.tech. Она включает конвертеры, генераторы хешей, кодировщики и другие инструменты для работы с данными, кодом и системами. Проект стремится объединить распространённые утилиты в одном месте, упрощая доступ без переключения между сервисами.
Использование Rust обеспечивает высокую производительность и безопасность, а модульная архитектура позволяет легко расширять функционал. Это решение особенно полезно для команд, ценящих локальные инструменты без зависимости от облачных сервисов.
Комментарии (39)
- Предложения по распространению: упаковать как Python и NPM модули для удобного запуска через
uvxилиnpx, использоватьcargo-distдля автоматизации. - Критика архитектуры: обсуждается целесообразность единого бинарника (по аналогии с BusyBox) против множества отдельных утилит в духе UNIX-философии "делай одно дело хорошо".
- Вопросы к функционалу: предостережения против включения слишком большого количества функций (например, HTTP), предложения добавить конкретные команды (uuidv7, retry).
- Замечания по реализации: критика требований к вводу (только UTF-8, чтение stdin до EOF), отсутствие тестов для кода, созданного с помощью ИИ.
- Общая оценка: инструмент воспринят как удобный "швейцарский нож" с продуманными умолчаниями, но вызвал дискуссию о разумных пределах его роста.
F3: Open-source data file format for the future [pdf] 🔥 Горячее
Современные колоночные форматы данных, такие как Parquet и ORC, созданные более десяти лет назад, не справляются с требованиями современных аналитических систем: они неэффективны для широких таблиц с тысячами столбцов, векторными эмбеддингами и большими бинарными объектами, а также не оптимизированы для случайного доступа или обновлений. Их ограниченная расширяемость и проблемы совместимости между версиями библиотек затрудняют внедрение новых методов сжатия, индексации и фильтрации.
Представлен формат F3, разработанный для обеспечения интероперабельности, расширяемости и эффективности. Ключевая инновация — встраивание декодеров в виде компактных WebAssembly-бинарников прямо в файл, что гарантирует совместимость на любой платформе без зависимостей от внешних библиотек. Это позволяет легко добавлять новые схемы кодирования через универсальный API, избегая необходимости переписывать формат при изменениях в обработке данных. Тесты показывают преимущества F3 в организации хранения и декодировании через Wasm по сравнению с существующими решениями.
Комментарии (117)
- Обсуждение формата F3 сосредоточено на его использовании WebAssembly для встраивания декодеров в файлы, что обеспечивает будущую совместимость, но вызывает споры о производительности (10-30% замедление) и безопасности (риск вредоносных payload).
- Участники обсуждают преимущества и недостатки колоночного хранения данных по сравнению с другими подходами, а также сложности внедрения нового формата из-за инерции существующих экосистем (Parquet, ORC).
- Поднимаются вопросы о практичности формата, включая зависимость от WASM, увеличение сложности и потенциальные проблемы с обратной совместимостью интерфейсов для WASM-модулей.
- Отмечается участие известных экспертов (Уэс МакКинни, Энди Павло) как фактор доверия к проекту, но также выражается скептицизм по поводу его жизнеспособности и оптимизации.
- Обсуждаются альтернативы и похожие проекты (Vortex, Anyblox, Arrow), а также необходимость поддержки сообщества, коннекторов и интеграции с популярными инструментами для успеха F3.
Show HN: Toolbrew – Free little tools without signups or ads
Библиотека toolbrew предлагает набор чистых и полезных инструментов для разработчиков, фокусируясь на удобстве использования и минималистичном дизайне. Включает утилиты для работы с текстом, данными, кодом и веб-разработкой, такие как конвертеры, генераторы и анализаторы. Все инструменты открыты для модификации и интеграции в проекты.
Особенность — отсутствие лишних зависимостей и простота внедрения, что ускоряет рабочий процесс. Например, можно быстро форматировать JSON, шифровать строки или проверять валидность кода. Практический вывод: снижает потребность в поиске разрозненных сервисов, экономя время.
Комментарии (53)
- Пользователи обсуждают полезные онлайн-инструменты (CyberChef, easyinvoicepdf, cobalt.tools, simonwillison.net) и делятся своими проектами.
- Поднимаются вопросы безопасности и доверия к сторонним инструментам, а также желание видеть больше информации об их надежности.
- Предлагаются идеи для новых функций: улучшение мобильного интерфейса, добавление поиска, агрегатора инструментов, генератора QR-кодов без трекеров.
- Обсуждаются конкретные технические нужды: мерж PDF, проверка ссылок, генерация SSH-ключей, сетевые утилиты.
- Отмечается проблема с YouTube-загрузчиком и predatory-моделями монетизации некоторых сервисов (например, QR-кодов).
Chrome's New AI Features
Google Chrome обновляется с помощью новейших технологий искусственного интеллекта, чтобы сделать его безопаснее, умнее и полезнее. Эти функции включают умную организацию вкладок, настройку тем и помощь в написании текстов. Они доступны на Mac и ПК в США, начиная с этой недели.
Умная организация вкладок автоматически группирует похожие вкладки, упрощая навигацию. Генератор тем позволяет создавать персонализированные темы на основе ваших предпочтений. Помощник в написании помогает формулировать мысли в текстовых полях, от отзывов до запросов.
Эти инструменты используют локальные модели машинного обучения Google для обеспечения конфиденциальности. Chrome продолжит внедрять ИИ, чтобы улучшить работу в интернете.
Комментарии (104)
- Пользователи выражают обеспокоенность по поводу конфиденциальности и безопасности из-за интеграции ИИ в браузер, которая подразумевает сбор и анализ всего содержимого вкладок.
- Многие сравнивают новые функции Chrome с функцией Recall от Microsoft, видя в них схожие угрозы приватности и потенциальные инструменты слежки.
- Высказывается сильное желание иметь возможность полностью отключить все ИИ-функции, сделать их строго опциональными (opt-in), а не включенными по умолчанию.
- Некоторые пользователи видят потенциальную пользу новых функций (например, поиск по истории на естественном языке, помощь в задачах), но лишь при условии локальной обработки данных.
- Обсуждается, что объявление Google игнорирует ключевые вопросы безопасности (например, prompt injection) и конфиденциальности, в отличие от похожих анонсов других компаний.
- Есть мнение, что это шаг по использованию доминирующего положения Chrome на рынке для продвижения собственной экосистемы ИИ и сбора большего количества данных.
- Некоторые пользователи рассматривают переход на альтернативные браузеры (Firefox, Chromium, Ladybird) как способ избежать нежелательных ИИ-функций.