Hacker News Digest

Тег: #c++

Постов: 22

Lore – Open source version control system designed for scalability (lore.org) 🔥 Горячее 💬 Длинная дискуссия

Lore — это новый открытый контроль версий, созданный Epic Games для масштабных игровых и развлекательных проектов, где код сочетается с большими бинарными артефактами. Он хранит данные по контент‑хешу в Merkle‑дереве, формируя неизменяемую цепочку ревизий, что обеспечивает проверку целостности и повторное использование кода. Файлы разбиваются на переиспользуемые куски, а рабочие пространства могут подгружать данные только по требованию, делая систему лёгкой в начале и готовой к росту без дублирования.

Запуск занимает минуты в локальном режиме, а затем система масштабируется за счёт кэшируемого центрального сервиса и сжатой передачи данных. Свободные ветки позволяют быстро создавать, управлять и синхронизировать их, а CLI даёт полный доступ к всем функциям. Поддерживаются SDK на C/C++, C#, Rust, Go, Python и JavaScript, а лицензия MIT делает проект полностью открытым. Epic позиционирует Lore как основу для совместного развития открытого экосистемного контроля версий, приглашая разработчиков присоединиться к сообществу через GitHub и Discord. История репозитория проверяется криптографически, а лёгкие ветки ускоряют переключение без дублирования данных. Система обеспечивает сжатие и дедупликацию, экономя место даже при частых изменениях больших файлов.

by regnerba • 17 июня 2026 г. в 14:30 • 1276 points

ОригиналHN

#c##c++#discord#epic-games#github#javascript#lore#python#rust#version-control-system

Комментарии (680)

  • Lore — новый VCS от Epic, ориентированный на игровую разработку и работу с большими бинарными артефактами, позиционируется как конкурент Perforce.
  • Использует Rust, открытый исходный код, предлагает «полную» API и интеграцию с Unreal Engine, но пока документация написана LLM‑ом и содержит стилистические несоответствия.
  • Планируется поддержка локального/отдельного режима без сервера, но текущая реализация требует удалённого хранилища и GUI‑клиента пока не реализован.
  • Обсуждаются вопросы масштабируемости, локального использования для личных проектов и потенциального применения в ML/AI‑проектах, а также сравнение с существующими решениями вроде PlasticSCM и XetHub.

A Fast 64-Bit Date Algorithm (30–40% faster by counting dates backwards) (benjoffe.com) 🔥 Горячее

Новый алгоритм преобразования дней с эпохи 1970-01-01 в дату (год, месяц, день) для 64-бит UNIX-времени работает на 30–40% быстрее предыдущего лидера (Neri-Schneider 2021) и в 2.4 раза быстрее Boost (2012). Он охватывает ±1.89 трлн лет, использует всего 4 умножения (вместо 7+), и оптимизирован для x64/ARM. Бенчмарки на Intel x64 и Apple M4 Pro: ~27 циклов (4M + 15B) против 40 и 51 у предшественников.

Ключевые идеи: подсчёт лет назад (rev = D_SHIFT - days) убирает промежуточные шаги; пропуск day-of-year с year-modulus-bitshift (yrs % 4 * 512 + shift - ypt) вместо деления; Julian Map (cen = (rev * C1) >> 64; jul = rev + cen - cen/4) ускоряет правила високосных 100/400 лет, экономя 2 умножения. Псевдокод: корректировка эпохи, 4 красных умножения (C1/C2/C3/782432), зелёные "бесплатные" на x64 (shift/LEA), выход day/month/year с bump для янв/фев. Код на C++ — open source (BSL-1.0).

by benjoffe • 23 ноября 2025 г. в 02:27 • 367 points

ОригиналHN

#arm#boost#c++#clickhouse#gregorian#unix#x64

Комментарии (86)

  • Новый алгоритм конвертации дат в григорианский календарь даёт 30–40% прирост скорости за счёт обратного подсчёта лет и снижения умножений (4 вместо 7+).
  • Сравнения с ClickHouse (таблицы поиска), Windows-эпохой (1601) и Unix-временем (без учёта високосных секунд); упоминания исторических календарей с 1 марта как началом года.
  • Обсуждение оптимизаций (128-битные числа, constexpr, asm), долгосрочной точности (±1,89 трлн лет) и влияния приливного трения на будущие расчёты.
  • Похвалы за подробный write-up, literate programming и open-source C++ код; предложения для наносекунд и микроконтроллеров.

Giving C a superpower: custom header file (safe_c.h) (hwisnu.bearblog.dev) 🔥 Горячее 💬 Длинная дискуссия

Автор создал заголовочный файл safe_c.h (600 строк), добавляющий в C современные средства безопасности из C++ и Rust, сохраняя при этом производительность и простоту языка. Этот файл используется для создания высокопроизводительного grep-клона cgrep, демонстрируя, как можно обуздать "опасные возможности" C. safe_c.h предоставляет семантику RAII через атрибуты [[cleanup]] с обратной совместимостью для старых компиляторов, а также умные указатели UniquePtr и SharedPtr для автоматического управления памятью.

Заголовочный файл включает макросы LIKELY/UNLIKELY для оптимизации ветвления и гарантирует очистку ресурсов даже при раннем возврате или goto. UniquePtr автоматически освобождает память при выходе из области видимости, устраняя утечки, а SharedPtr реализует автоматический подсчёт ссылок. Автор утверждает, что с помощью таких инструментов C остаётся языком свободы и гибкости, позволяющим писать безопасный код без потери производительности.

by mithcs • 17 ноября 2025 г. в 10:40 • 252 points

ОригиналHN

#c#c++#memory-management#performance-optimization#raii#rust#smart-pointers

Комментарии (218)

  • Обсуждение показало, что безопасность в C требует компромисов: либо платить за счёт производительности (POSIX-мьютексы), либо отказаться от переносимости кода.
  • Участники спорят, стоит ли вообще пытаться эмулировать современные примитивы безопасности в C, или лучше просто использовать C++ там, где это возможно.
  • Поднимается вопрос, что макросы и обёртки в C ведут к созданию "мини-языка" внутри проекта, что затрудняет понимание кода для новых участников команды.
  • Обсуждается, что C++ уже реализовал всё, что пытаются эмулировать в C, и что это не избежно ведёт к "переизобретению велосипеда".
  • Участники обсуждают, что встроенные в компилятор возможности C++ вроде std::unique_ptr и std::shared_ptr не только более безопасны, но и более производительны, чем попытки их эмулировать в C.

A modern 35mm film scanner for home (soke.engineering) 💬 Длинная дискуссия

Knokke представляет собой новый высокоскоростной сканер 35 мм пленки, который позиционируется как "новая эра сканирования". Устройство предлагает впечатляющие характеристики: разрешение 4064 DPI, динамический диапазон 120 дБ и глубину цвета 48 бит, при этом способно отсканировать всю катушку всего за несколько минут. Сканирование происходит с помощью кастомной оптики и современного сенсора, что обеспечивает высочайшее качество при доступной цене.

Сканер работает на собственном программном обеспечении Korova — легком приложении на C++, нативном для Linux, macOS и Windows. Это позволяет отказаться от устаревших ПК и использовать современный plug-and-workflow. Каждому кадру можно задать индивидуальные настройки, которые повторяются при последующих сканированиях для консистентных результатов. Цена запуска составит €999, включая и сканер, и программное обеспечение.

by QiuChuck • 11 ноября 2025 г. в 19:48 • 232 points

ОригиналHN

#c++#linux#macos#windows

Комментарии (176)

  • Стоимость сканера Knokke составляет €999, что вызывает сравнение с ценой на подержанные DSLR-установки и вызывает обсуждение ценообразования.
  • Отсутствие примеров сканов и отсутствие ИК-сенсора для удаления пыли и царапин вызывает критику.
  • Обсуждается, что цена может быть оправдана для энтузиастов, которые ценят дизайн и удобство использования.
  • Некоторые участники обсуждения выражают сожаление, что сканер не поддерживает 120 формат, а также отсутствие автоподатчика.
  • Участники также обсуждают, что стоимость может быть оправдана для тех, кто ищет высокое качество сканирования и готов заплатить за него.

Why is Zig so cool? (nilostolte.github.io) 🔥 Горячее 💬 Длинная дискуссия

Zig - это не просто замена C или C++, а совершенно новый подход к программированию, который удивил автора с 45-летним опытом. Самые впечатляющие особенности языка - встроенная возможность компилировать C-код и кросс-компиляция "из коробки", что уже оказывает значительное влияние на индустрию.

Установка компилятора Zig проста и доступна для различных платформ и архитектур на официальном сайте. Автор подчеркивает, что эти функции сами по себе уникальны, но сосредоточен на том, как программировать на Zig и почему стоит выбрать его вместо других языков.

by vitalnodo • 07 ноября 2025 г. в 23:04 • 528 points

ОригиналHN

#ada#c#c++#comptime#cross-compilation#rust#zig

Комментарии (467)

  • Статья преувеличивает инновативность Zig, не подкрепляя заявления о "революционности" реальными уникальными фичами.
  • Пользователи отмечают практические преимущества: простота установки (через PyPI), кросс-компиляция, явный синтаксис и компиляция C-кода.
  • Критика включает отсутствие безопасности памяти, спорные решения (политика идентификаторов, отсутствие данных в ошибках) и сравнение с Rust/Ada как более зрелых альтернатив.
  • Отдельные хвалят метапрограммирование (comptime), простоту навигации по коду и удобство для низкоуровневого программирования.
  • Обсуждение подчеркивает субъективность восприятия: для одних Zig "меняет подход к программированию", для других — лишь "улучшенный C" без уникального позиционирования.

The state of SIMD in Rust in 2025 (shnatsel.medium.com)

В 2025 году SIMD в Rust продолжает развиваться, предлагая значительный прирост производительности до 64x для операций с u8 на современных процессорах. Основная проблема - фрагментация наборов инструкций: ARM использует обязательный NEON (128 бит), WebAssembly - 128-bit packed SIMD, а x86 имеет сложную иерархию от SSE2 до AVX-512 (512 бит). Для x86 разработчики выбирают между указанием target-cpu (например, x86-64-v3) и использованием function multiversioning для поддержки различных процессоров.

В Rust существует четыре подхода к SIMD: автоматическая векторизация (самый простой), продвинутые итераторы, портируемые абстракции и сырые интринсики. В то время как ARM стандартизировал NEON, а WebAssembly требует компиляции двух бинарных файлов, x86 остается самой сложной платформой из-за множества расширений и необходимости обеспечения обратной совместимости.

by ashvardanian • 05 ноября 2025 г. в 18:45 • 217 points

ОригиналHN

#arm#c##c++#medium#neon#rust#simd#wasm#x86

Комментарии (128)

  • Обсуждение показало, что Rust пока не может предложить стабильный и удобный способ работы с SIMD, в отличие от C# и C++.
  • Основная причина — std::simd всё ещё в nightly, а стабильная альтернатива отсутствует.
  • Участники также отметили, что даже в ночной ветке API нестабилен и может измениться, что делает его использование в production-окружениях проблематичным.
  • Некоторые участники выразили обеспокоенность тем, что отсутствие стабильной SIMD-поддержки может отпугнуть потенциальных пользователей Rust, особенно в областях, где эффективное использование SIMD критично.
  • В то же время, другие участники подчеркнули, что Rust всё ещё молодой язык и что сообщество может в конце концов решить эту проблему, как это было с другими функциями в прошлом.

How I turned Zig into my favorite language to write network programs in (lalinsky.com) 🔥 Горячее

Автор изначально не интересовался Zig, считая его нишевым языком для аудиопрограмм, но решил переписать индекс AcoustID на Zig как возможность изучить новый язык. Результат превзошёл ожидания — новая версия оказалась быстрее и масштабируемее, чем предыдущая на C++. Однако при добавлении серверного интерфейса возникли сложности с сетевыми возможностями Zig, что привело автора к созданию библиотеки Zio — асинхронной I/O и библиотеки для конкурентности в стиле Go.

Zio реализует стековые корутины с фиксированным размером стека, поддерживает асинхронную сетевую и файловую I/O, примитивы синхронизации и каналы в стиле Go. Главная особенность — контекстный переключение практически бесплатен, сравним с вызовом функции. В однопоточном режиме Zio обгоняет все протестированные фреймворки, включая Go и Rust Tokio. Интересно, что благодаря стандартным интерфейсам reader/writer, внешние библиотеки могут использоваться без модификаций, даже не зная, что работают внутри Zio.

by 0x1997 • 27 октября 2025 г. в 00:01 • 300 points

ОригиналHN

#asyncio#c++#concurrency#go#network-programming#rust#tokio#zig#zio

Комментарии (116)

  • Обсуждение показало, что Zig не имеет встроенной поддержки async/await, а вместо этого используется библиотечный код, что вызывает вопросы о том, как это скажется на производительности и удобстве использования.
  • Участники обсуждения также отметили, что в отличии от Go, где стек горутин растет по мере необходимости, в Zig фиксированный размер стека может ограничить количество одновременно работающих сопрограмм.
  • Участники обсуждения также отметили, что в отличии от Go, где стек горутин растет по мере необходимости, в Zig фиксированный размер стека может ограничить количество одновременно работающих сопрограмм.
  • Участники обсуждения также отметили, что в отличии от Go, где стек горутин растет по мере необходимости, в Zig фиксированный размер стека может ограничить количество одновременно работающих сопрограмм.
  • Участники обсуждения также отметили, что в отличии от Go, где стек горутин растет по мере необходимости, в Zig фиксированный размер стека может ограничить количество одновременно работающих сопрограмм.

Computer science courses that don't exist, but should (2015) (prog21.dadgum.com) 🔥 Горячее 💬 Длинная дискуссия

Статья представляет собой воображаемый список курсов компьютерных наук, которых не существует, но должны. Автор предлагает такие курсы, как "Отказ от объектно-ориентированного программирования", где студенты изучат переменные вне иерархии объектов и "функции", а также "Классические исследования программного обеспечения", посвященные исторически значимым продуктам вроде VisiCalc и Zork. Особый интерес представляет курс "Написание быстрого кода на медленных языках", где учат писать на Python, который по производительности может превзойти C++, и "Пользовательский опыт командной строки", анализирующий принципы UX для консольных программ.

Автор Джеймс Хейг, бывший программист, проектирующий видеоигры с 1980-х, подчеркивает, что программирование — это не технология ради самой технологии, а возможность реализации идей. Он также предлагает курс "Одобрения программистского ума", изучающий навязчивые темы, которыми часто увлекаются разработчики: форматирование кода, таксономия, системы типов и чрезмерное дробление проектов.

by wonger_ • 24 октября 2025 г. в 02:22 • 266 points

ОригиналHN

#c++#ci-cd#object-oriented-programming#python#system-administration#ux

Комментарии (195)

  • Обсуждение показало, что академическая программа CS часто не охватывает такие темы, как история ПО, философия вычислений, практика командной работы и даже базовые навыки работы в консоли.
  • Участники подчеркнули, что курсы вроде "Unlearning OOP" и "Classical Software Studies" должны быть обязательной частью образования, но их нет.
  • Обсуждение подняло вопрос о том, что не хватает курсов по фундаментальным навыкам, таким как CI/CD, системное администрирование и работа с консолью.
  • Было отмечено, что студенты часто не получают практических навыков, необходимых для работы в отрасли, и что курсы по таким темам как "как писать быстрый код на медленных языках" или "как не страдать от внутренних конфликтов в команде" отсутствуют.
  • В конце концов, обсуждение подтолкнуло к тому, что вместо того, чтобы учить студентов тому, как создавать и поддерживать сложные системы, которые уже работают, они вместо этого вынуждены изучать фреймворки, которые могут исчезнуть через 5 лет.

Upcoming Rust language features for kernel development (lwn.net) 🔥 Горячее 💬 Длинная дискуссия

Rust продолжает развиваться, и новые языковые функции, такие как проекции полей, инициализация на месте и произвольные типы self, становятся важными для разработки ядра Linux. Эти функции упрощают работу с указателями, позволяют избежать двойной инициализации и делают код более выразительным. Рядом с этими изменениями, Rust for Linux активно работает над стабилизацией существующих функций и разработкой новых, чтобы код ядра был не только безопасным, но и элегантным. Разработчики подчеркивают, что сообщество, включая участников Rust for Linux, играет ключевую роль в определении приоритетов разработки языка.

by pykello • 16 октября 2025 г. в 06:12 • 305 points

ОригиналHN

#c++#kernel#linux#rust

Комментарии (202)

  • Обсуждение охватывает вопросы от безопасного доступа к полям структур до сложных вопросов владения памятью в Rust, а также влияние этих обсуждений на разработку ядра Linux и взаимодействие с другими языками программирования.
  • Участники обсуждали, что сложность Rust может быть препятствием для новых разработчиков, но также отметили, что сложность C++ может быть еще более запутанной.
  • Обсуждались вопросы о том, как влияет на разработку ядра Linux внедрение Rust, и были высказаны мнения, что это может быть экспериментом, который следует проводить в другом месте.
  • Также обсуждались вопросы о том, какие функции Rust могут быть полезны для разработки ядра Linux и какие функции Rust могут быть полезны для разработки ядра Linux.
  • В конце обсуждение перешло к вопросу о том, какие функции Rust могут быть полезны для разработки ядра Linux и какие функции Rust могут быть полезны для разработки ядра Linux.

Modern Linux tools (ikrima.dev)

Проект Gamedev Guide обновил раздел о современных инструментах Linux для разработчиков. Основное внимание уделено оптимизации рабочего процесса: авторы рекомендуют использовать Docker для изоляции окружений, что ускоряет сборку и тестирование. Особо отмечена интеграция с Windows Subsystem for Linux (WSL2) для кросс-платформенной разработки, а также инструменты вроде Ninja для ускоренной компиляции C++ проектов. В статье приводятся примеры настройки CI/CD пайплайнов под Linux, что особенно полезно для крупных команд. Авторы подчеркивают, что современный Linux уже не уступает в инструментах для разработки под Windows, а в чём-то даже превосходит.

by randomint64 • 13 октября 2025 г. в 09:44 • 151 points

ОригиналHN

#awk#c++#ci-cd#docker#grep#linux#ninja#wsl2

Комментарии (123)

  • Обсуждение в основном вращается вокруг того, что «современные» инструменты не всегда объективно лучше, а скорее улучшают UX и визуально оформляют вывод, и что важнее уметь пользоваться базовыми утилитами, чем полагаться на специфические инструменты, которые могут не оказаться в других окружениях.
  • Участники обсуждают, что важно знать и уметь использовать базовые инструменты, такие как find, grep, sed, awk, vi, ed, less, tail, head, tar, ls, cat, dd, top, ps, kill, df, du, free, uptime, w, who, last, ls, df, mount, umount, fdisk, lsblk, blkid, lsusb, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsomod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsmod, lsomod, lsmod, lsmod, lsmod, lsmod, lsomod, lsmod, lsmod, lsmod, lsmod, lsomod, lsmod, lsmod, lsomod, lsmod, lsmod, lsomod, lsmod, lsomod, lsmod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, lsomod, `

KDE Connect: Enabling communication between all your devices (community.kde.org) 🔥 Горячее 💬 Длинная дискуссия

KDE Connect — это проект, обеспечивающий интеграцию между настольными компьютерами KDE и мобильными устройствами. Позволяет передавать файлы, SMS, уведомления и управлять устройствами через безопасное соединение. Поддерживается на Linux, Windows, Android, iOS и macOS, что делает его универсальным решением для кроссплатформенной интеграции.

Проект включает в себя как C++ приложение для десктопа, так и мобильные приложения. Для разработки доступны исходные коды, а также инструменты для создания плазмоидов и мобильных QML-приложений. Поддерживается выпуск через различные магазины приложений, включая Google Play, Apple App Store, Windows Store и F-Droid.

Разработчики могут настроить среду для работы с исходным кодом, включая использование эмуляторов для тестирования. Процесс сборки и выпуска хорошо документирован, что упрощает внесение вклада в проект и распространение готовых сборок.

by snthd • 12 октября 2025 г. в 12:04 • 452 points

ОригиналHN

#android#apple-app-store#c++#google-play#ios#kde-connect#linux#macos#qml#windows

Комментарии (181)

  • KDE Connect и его аналоги (GSConnect, GSConnect) обеспечивают бесшовную связь между устройствами, но сталкиваются с проблемами, такими как несовместимость с различными сетевыми конфигурациями и отсутствие официальной поддержки для iOS.
  • Пользователи отмечают, что KDE Connect может быть установлен на различных ОС, включая Linux, Windows и Android, но не на iOS.
  • Некоторые пользователи сообщают о проблемах с обнаружением устройств в сети, что может быть связано с настройками фаервола или маршрутизатора.
  • Обсуждается, что KDE Connect может быть использован для передачи файлов, управления мультимедиа и других функций, но иногда эти функции могут не работать из-за проблем с подключением.
  • Пользователи также обсуждают, что KDE Connect может быть использован для обмена буфером обмена между устройствами, но иногда это может не работать из-за проблем с подключением.

Valorant's 128-Tick Servers (2020) (technology.riotgames.com)

VALORANT изначально требовал серверы с частотой 128 тиков для минимизации преимущества атакующего и обеспечения честного геймплея, где защитники успевают реагировать. Это означало обработку кадра каждые 7,8125 мс, но изначально сервер тратил 50 мс на кадр, что делало задачу масштабирования неподъёмной из-за высоких затрат на CPU.

Команда разбила проблему на категории: репликация, сеть, анимация, движение и другие, внедрив систему ValSubsystemTelemetry для точного измерения времени выполнения кода. Используя внутреннюю аналитическую платформу Riot, инженеры визуализировали данные и последовательно оптимизировали код, железо и настройки ОС, достигнув цели в 2,34 мс на кадр и обеспечив бесплатные 128-тиковые серверы для всех игроков.

by nairadithya • 06 октября 2025 г. в 20:47 • 201 points

ОригиналHN

#c++#elixir#erlang#game-development#intel-xeon#matchmaking#networking#riotgames#servers#valorant

Комментарии (107)

  • Обсуждается высокая частота обновления (128 тиков/секунда) серверов Valorant в сравнении с другими играми (Factorio 60, Minecraft 20, CS:GO 64, Fortnite 30).
  • Поднимается вопрос архитектурных решений и оптимизаций для достижения низкой задержки (<35 мс), включая выбор процессоров Intel Xeon и отключение анимации в фазе покупки.
  • Критикуется система "sub-tick" в CS2 как менее эффективная по сравнению с классическим высоким тикрейтом, а также современный matchmaking, не учитывающий пинг.
  • Упоминается, что для некоторых жанров (например, Runescape) достаточно низкого тикрейта (0.6 в секунду), и это определяет геймплей.
  • Обсуждаются технические сложности реализации высокопроизводительных серверов на языках с GC (Erlang, Elixir) и предпочтение C++ для симуляции игры.

OpenZL: An open source format-aware compression framework (engineering.fb.com) 🔥 Горячее

OpenZL — это новый фреймворк для сжатия структурированных данных с открытым исходным кодом, разработанный Meta. Он обеспечивает сжатие без потерь, достигая производительности специализированных компрессоров, но при этом использует единый универсальный декомпрессор. Ключевая идея в том, что данные имеют предсказуемую структуру — колоночную, перечисления, повторяющиеся поля — и OpenZL явно использует это знание, применяя конфигурируемую последовательность преобразований для выявления скрытых закономерностей.

Фреймворк устраняет компромисс между эффективностью формато-специфичных решений и простотой поддержки общего инструмента. В отличие от универсальных методов, которые тратят ресурсы на угадывание структуры, OpenZL заранее знает тип данных и фокусируется только на релевантных трансформациях. Это позволяет экономить вычислительные циклы и улучшать соотношение скорости к степени сжатия. Практический вывод: один бинарный инструмент может заменить множество кастомных компрессоров без потери производительности.

by terrelln • 06 октября 2025 г. в 16:01 • 374 points

ОригиналHN

#c++#compression#csv#lossless-compression#openzl#parquet#python#sddl#xz#zstd

Комментарии (84)

  • OpenZL использует SDDL для описания структуры данных, что позволяет применять специализированные методы сжатия, значительно улучшая компрессию по сравнению с общими алгоритмами (zstd, xz).
  • Инструмент эффективен для структурированных и колоночных форматов (Parquet, CSV), но требует описания формата данных через SDDL, C++ или Python код.
  • Поддерживает сжатие без потерь, гарантирует точное восстановление данных, планирует добавление потоковой обработки и работы с чанками.
  • Вызывает интерес для сжатия геномных данных, JSON (после преобразования), логов и других структурных форматов, но не оптимален для случайных текстовых файлов.
  • Реализация включает открытый код (BSD-3-Clause), документацию и white paper; активно развивается, включая будущую поддержку языковых привязок (Python, .NET).

Is Fortran better than Python for teaching basics of numerical linear algebra? (loiseaujc.github.io)

Современный Fortran может быть предпочтительнее Python для обучения основам численной линейной алгебры из-за строгой типизации и явного управления памятью, что помогает студентам лучше понять внутреннюю работу алгоритмов. В Python студенты часто полагаются на готовые функции вроде np.linalg.solve, что скрывает детали реализации и приводит к ошибкам, связанным с динамической типизацией и неправильной индексацией массивов. Например, путаница между списками и массивами NumPy или неявное приведение типов могут затруднить отладку.

Fortran, напротив, требует чёткого объявления переменных и размеров массивов, что снижает риски ошибок и заставляет студентов продумывать структуру данных. Это особенно важно для таких задач, как метод Гаусса-Зейделя или метод наименьших квадратов, где понимание циклов и операций с матрицами критично. Хотя Python с его экосистемой удобен для сложных проектов, Fortran обеспечивает более прозрачный переход от математических формул к коду, укрепляя фундаментальные навыки.

by Bostonian • 23 сентября 2025 г. в 19:29 • 94 points

ОригиналHN

#c++#fortran#julia#matlab#numerical-linear-algebra#numpy#octave#python

Комментарии (102)

  • Обсуждается выбор языка для преподавания численных методов и линейной алгебры (Python, Fortran, Julia, C++ и др.), где Fortran хвалят за производительность и удобство для математики, а Python — за распространённость и простоту.
  • Критикуется чрезмерно объектно-ориентированный подход в C++ для научных вычислений, а также сложности и "бородатость" некоторых языков (например, Fortran) для новичков.
  • Поднимается вопрос о важности баланса между теоретической "чистотой" языка и его практической полезностью для будущей работы студентов.
  • Отмечаются преимущества Julia и MATLAB/Octave для обучения благодаря близости их синтаксиса к математической нотации и удобным инструментам.
  • Упоминаются проблемы с ошибками в Python (например, типизация и сообщения об ошибках), а также сложности отладки в сравнении с другими языками.

Cloudflare is sponsoring Ladybird and Omarchy (blog.cloudflare.com) 🔥 Горячее 💬 Длинная дискуссия

Cloudflare объявляет о спонсорской поддержке двух независимых open-source проектов — браузера Ladybird и дистрибутива Omarchy на базе Arch Linux для разработчиков. Это часть стратегии по укреплению открытого интернета через разнообразие инструментов. Ladybird — амбициозная попытка создать браузер с нуля, включая собственные движки рендеринга (LibWeb) и JavaScript (LibJS), что контрастирует с доминированием Chromium, используемого 65% пользователей. Такой подход стимулирует инновации в безопасности и производительности, а также выявляет недочёты в веб-стандартах.

Omarchy предлагает продуманную среду для разработчиков, упрощая настройку и повышая продуктивность. Оба проекта демонстрируют важность альтернативных решений в условиях консолидации рынка. Cloudflare видит в этом вклад в экосистему, где независимые инициативы помогают сохранять интернет открытым и конкурентоспособным.

by jgrahamc • 22 сентября 2025 г. в 13:03 • 673 points

ОригиналHN

#arch-linux#c++#chromium#cloudflare#javascript#ladybird#libjs#libweb#omarchy

Комментарии (417)

  • Обсуждение спонсорства Cloudflare проектов Ladybird и Omarchy с акцентом на возможные скрытые мотивы компании, включая движение к вебу только для одобренных браузеров.
  • Скептицизм относительно практической ценности Omarchy как ещё одного дистрибутива Linux и его сравнение с другими установщиками и системами, такими как Nix или Alpine.
  • Вопросы о целесообразности создания нового браузерного движка (Ladybird) на C++ вместо более безопасных языков и сомнения в его способности конкурировать с существующими гигантами.
  • Обсуждение личности DHH (создателя Omarchy) и его спорных высказываний, а также того, должно ли это влиять на поддержку его проектов.
  • Поднята тема стратегического интереса Cloudflare к децентрализации веба и уменьшения зависимости от Google, аналогичного стратегии Valve с Proton.

In Defense of C++ (dayvster.com) 💬 Длинная дискуссия

В защиту C++

Почему C++ остаётся мощным и актуальным языком программирования в современном технологическом ландшафте.

Репутация C++

C++ часто критикуют за сложность, крутую кривую обучения и способность позволить разработчикам не просто выстрелить себе в ногу, но и оторвать всю ногу. Но выдерживают ли эти критики проверку?

В этом посте я постараюсь разобрать некоторые распространённые критические замечания и представить сбалансированный взгляд на сильные и слабые стороны языка.

C++ «сложен»

C++ действительно сложный язык с огромным набором возможностей. Для любой задачи есть дюжина способов её решения, каждый со своими компромиссами. Но нужно ли глубокое понимание языка, чтобы выбрать правильный подход?

Не совсем. Преждевременная оптимизация — корень всех зол. В C++ можно писать прекрасный код, не беспокоясь о сложных функциях языка. Можно создавать простой, читаемый и поддерживаемый код без шаблонов, перегрузки операторов и других продвинутых возможностей.

Не стоит зацикливаться на «лучшем» подходе — лучше сосредоточьтесь на написании понятного кода. Если он читаем, всё будет в порядке.

C++ «устарел»

C++ очень стар — он вышел в 1985 году. Но означает ли это, что он устарел?

Ни в коем случае. C++ активно развивается уже более 40 лет. Последняя версия стандарта, C++20, добавила множество новых функций, а C++23 расширил возможности стандартной библиотеки, концепций, диапазонов и сопрограмм, делая язык более мощным и выразительным.

C++ остаётся одним из самых widely используемых языков с огромной экосистемой библиотек и инструментов. Он применяется в играх, высокопроизводительных вычислениях и embedded-системах. Многие популярные приложения написаны на C++.

Язык не устарел — чтобы утверждать обратное, придётся сильно извратить определение «устаревшего».

C++ «небезопасен»

А вот и главный аргумент. Да, я сравню с Rust, поскольку его часто называют «безопасным» языком, который должен заменить C++.

Переписывание кодовых баз C++ на Rust всегда даёт более безопасные результаты.

Многие компании сообщают об улучшении безопасности и уменьшении количества ошибок после перехода на Rust.

Но связано ли это именно с Rust? Отчасти да. Однако главный фактор в том, что любое переписывание существующей кодовой базы даст лучшие результаты, чем оригинал.

При переписывании вы можете переосмыслить архитектуру, исправить ошибки и улучшить качество кода. Вы используете уроки, извлечённые из предыдущей реализации, и исправляете проблемы, которые было сложно решить в старом коде.

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

by todsacerdoti • 16 сентября 2025 г. в 19:40 • 140 points

ОригиналHN

#c++#embedded#high-performance#rust

Комментарии (261)

  • C++ и C полагаются на навыки и дисциплину разработчиков вместо автоматических проверок безопасности, что часто приводит к уязвимостям в больших проектах.
  • Сложность C++ считается чрезмерной и архаичной, многие функции языка (шаблоны, перегрузка операторов) сложны для понимания и неизбежны в реальных проектах.
  • Безопасность памяти в C++ проблематична даже для опытных разработчиков, в отличие от языков с автоматической проверкой, таких как Rust.
  • Идиоматичный C++ сильно отличается от C, и попытки писать на C++ «как на C» противоречат современным практикам и стандартам.
  • Переписывание кода с C++ на Rust часто повышает безопасность и удобство сопровождения, но обратный процесс сложнее и рискованнее.
  • C++ останется важным языком из-за его распространённости в legacy-системах и критичных к производительности областях.
  • Инструменты и экосистема C++ (пакетные менеджеры, форматтеры) часто считаются устаревшими по сравнению с современными языками.

Safe C++ proposal is not being continued (sibellavia.lol)

Safe C++ больше не развивается.
Год назад появился черновик, обещавший «ржавую» безопасность без ломки старого кода: память, типы, потоки — всё через явный safe-контекст. Комитету идея не зашла: модель Rust назвали чуждой, голоса отдали Profiles — набору ограничений на уже существующий C++, которые на этапе компиляции блокируют UAF, data-race, deadlock, утечки.

Profiles не добавляют синтаксиса, только запрещают опасные паттерны; включаются опцией, обратно совместимы. Safe C++ требовал новых квалификаторов и заимствовал проверки времени жизни — слишком радикально.

Автор Safe C++, Шон Бакстер, признал:

Дальнейшая работа бесполезна; все силы — в Profiles.

Вывод: Profiles слабее, но реалистичнее; ждём их в C++26.

by charles_irl • 13 сентября 2025 г. в 19:00 • 159 points

ОригиналHN

#c++#data-race#deadlock#lifetimes#memory-safety#profiles#rust#safe-c++

Комментарии (140)

  • Комитет C++ фактически отверг Safe C++ и ограничился «Profiles» — набором флагов, запрещающих часть небезопасных конструкций.
  • Участники сходятся: главная проблема не техническая, а культурная — сообщество не хочет ограничений, считая «если код работает — значит, он безопасен».
  • Profiles критикуют за примитивность: они не решают temporal safety, не выражают лифтаймы и не требуют изменения синтаксиса, поэтому дают лишь иллюзию защиты.
  • Большинство считает, что без полного отказа от C-подобного подмножества и без внедрения lifetimes C++ никогда не станет «безопасным»; проще перейти на Rust.
  • Практический вывод: крупные проекты продолжат игнорировать Profiles, а новые кодовые базы будут выбирать Rust либо двухъязычный подход «C++26 + внешние анализаторы».

Fil's Unbelievable Garbage Collector (fil-c.org) 🔥 Горячее 💬 Длинная дискуссия

Fil-C — это C/C++-совместимый язык с безопасной памятью и современным инструментарием. Его сердце — FUGC, параллельный, конкурентный, точный, неперемещающий сборщик мусора.

Ключевые черты FUGC

  • Параллельность: маркировка и очистка выполняются на всех ядрах.
  • Конкурентность: потоки-мутаторы не останавливаются; блокировки только на медленных путях аллокации.
  • On-the-fly: нет глобальной паузы; «мягкие рукопожатия» просят потоки асинхронно сканировать стек.
  • Grey-stack: повторное сканирование стеков до фикс-поинта; барьер только при записи, быстрая сходимость.
  • Dijkstra-barrier: при записи указателя объект помечается CAS-relaxed.
  • Точность: LLVM-плагин FilPizlonator точно знает, где все указатели.
  • Неперемещаемость: объекты не двигаются; освобождённые блоки «перенаправляются» через InvisiCap.

Safepoint-механизм

  • Компилятор вставляет pollcheck: быстрая проверка или колбэк для GC.
  • «Мягкое рукопожатие» запускает колбэк на всех потоках.
  • Состояния enter/exit позволяют блокироваться в syscall без pollcheck’ов; GC сам выполняет колбэк для «exited» потоков.
  • Safepoint защищает от гонок: загруженный указатель будет жив до следующего safepoint’а.

По желанию можно включить полный stop-the-world (FUGC_STW=1) для fork(2) или отладки.

by pizlonator • 05 сентября 2025 г. в 00:55 • 550 points

ОригиналHN

#c#c++#capability-based-security#compiler#concurrency#garbage-collection#llvm#memory-management#parallel-computing

Комментарии (247)

  • Fil-C — это С-компилятор с точным параллельным GC (FUGC) и capability-указателями, позволяющий запускать «как есть» CPython, SQLite, OpenSSH и др., теряя в худшем случае 4× производительности.
  • Вместо ручного free и UB-оптимизаций LLVM код живёт под барьером Дейкстры и soft-handshake safepoint’ами; указатели превращаются в «InvisiCap» (base+offset), теряющие силу при приведении к integer.
  • Проект исследовательский, но уже промышленно полезен: нет сборок под 32-бит, Windows и embedded без MMU, нет пока поколенческого GC и ARM/RISC-V.
  • Споры: «lock-and-key» предсказуемее RAM, но требует атомиков; GC = «мусор потом» vs compile-time проверки; можно ли дождаться AI-стат-анализа вместо Rust-переписей.

What to do with C++ modules? (nibblestew.blogspot.com) 💬 Длинная дискуссия

Краткий обзор проблемы C++ модулей

  1. Главное требование
    Если модули не ускоряют сборку минимум в 5 раз (желательно 10×) на реальных проектах, их нужно удалить из стандарта. Все остальные плюсы не стоят вложенных ресурсов.

  2. Что обещали vs. что получили

    • Изначально: «уберём O(N²) из-за заголовков, компиляция станет мгновенной».
    • Сейчас: упор сместился на «изоляцию сборки» (макросы, пространства имён). Это полезно, но редко встречается и не решает главную боль — медленную сборку каждый день.
  3. Почему всё так плохо

    • Модули приняли в C++20, несмотря на предупреждения о невозможности реализации.
    • Реализация заняла >5 лет и всё ещё не готова.
    • Стандарт не описывает, как именно компилятор и сборочная система должны взаимодействовать: имена файлов, каталоги, зависимости — всё на совести разработчиков.
    • Компиляторные команды отказываются «превращаться в систему сборки» и блокируют любые предложения.
  4. Итог
    Проект превратился в «интеграционный ад». Пока нет массовых 5-10-кратных ускорений, дальнейшие инвестиции — просто затягивание «затратной ямы».

by ingve • 31 августа 2025 г. в 19:22 • 201 points

ОригиналHN

#build-systems#c++#c++20#compilation#precompiled-headers#rust

Комментарии (165)

  • Участники сетуют: вместо простого «import = include без утечек контекста» получили громоздкий механизм, который мало кто использует.
  • Старые пре-компил-хедеры 90-х и сторонние решения вроде zapcc уже давали 5× ускорение, но были проигнорированы стандартом.
  • Модули обещали избавить от forward-declaration и макро-ifdef, но на практике вызывают лавину пересборок и несовместимы с большим объёмом существующего кода.
  • Многие считают, что модули заточены под «большой тех» с кэшированными билдами, а малый бизнес и хобби-проекты «попали в пролёт».
  • Итоговое настроение: «убейте модули, C++ всё сломали», «мир ушёл в Rust», но «на C++ всё ещё держится пол-мира, так что просто так не выкинешь».

Grok Code Fast 1 (x.ai) 🔥 Горячее 💬 Длинная дискуссия

grok-code-fast-1 — новая модель xAI для агентного кодинга: быстрая, дешевая, заточена под ежедневную работу.

  • Скорость: архитектура с нуля, оптимизация инференса, кеш >90 %. Десятки вызовов инструментов до того, как вы прочтёте первую строку мыслей.
  • Цена: 0,20 $/1 M входных, 1,50 $/1 M выходных, 0,02 $/1 M кешированных токенов.
  • Языки: TypeScript, Python, Java, Rust, C++, Go.
  • Инструменты: grep, терминал, редактирование файлов — «родная» работа в IDE.
  • Партнёры: временно бесплатно в Cursor, GitHub Copilot, Cline, Roo Code, Kilo Code, opencode, Windsurf.

Производительность

  • 190 токенов/сек, SWE-Bench-Verified 70,8 %.
  • Оценки реальными разработчиками: быстро и надёжно для рутинных задач.

by Terretta • 29 августа 2025 г. в 13:01 • 484 points

ОригиналHN

#c++#cursor#github-copilot#go#ide#java#python#rust#typescript

Комментарии (462)

  • Кто-то хвалит grok-code-fast-1 за скорость и качество, сравнивая с gpt-5-mini, другие считают «быстро, но тупо».
  • Основная критика: упор на скорость вместо качества, неточные или вредные изменения кода, сомнительные внутренние бенчмарки.
  • Несколько человек жалуются, что модель случайно удаляет код и скрывает кнопки «стоп».
  • Подняты этические и экологические вопросы: нелегальные газовые турбины и «обученный нацистский бот».
  • Часть пользователей просто рада быстрой бесплатной модели в Cursor/VS Code для простых задач.

Without the futex, it's futile (h4x0r.org) 🔥 Горячее

Без futex всё тленно

Книга The Art of Multiprocessor Programming (2-е изд., 2021) считается канонической, но она обходит стороной futex — ключевой примитив современной многопоточности. Это упущение делает пособие бесполезным для практиков.

Futex ≠ mutex
Название происходит от «fast userspace mutex», но futex — это не мьютекс, а основа для всех высокоэффективных примитивов синхронизации. До него всё строилось на громоздких System V IPC, которые не масштабировались: при 1000 потоков futex в 2002-м оказался в 20–120 раз быстрее sysv-блокировок. Windows и macOS добавили аналоги только в 2012 и 2016 гг.

Суть futex
Он разделяет блокировку и ожидание/пробуждение:

  • В user-space проверяем состояние; если свободно — захватываем без системного вызова.
  • При конфликте вызываем futex_wait(addr, expected), засыпаем в ядре на конкретном адресе.
  • Пробуждение — futex_wake(addr, n), где n обычно 1 или «все».

Передаваемое в wait значение защищает от «просыпания» после уже случившегося события: если память изменилась, системный вызов мгновенно возвращает ошибку.

Такой подход убирает лишние системные вызовы и позволяет строить быстрые мьютексы, rw-lock’и, семафоры и пр. без поллинга и экспоненциальных бэкоффов.

Итог
Любая современная библиотека (pthreads, C++ std::mutex, Rust std::sync) опирается на futex. Учебник, игнорирующий этот примитив, не готовит к реальной разработке.

by eatonphil • 19 августа 2025 г. в 13:53 • 284 points

ОригиналHN

#c++#futex#io-uring#linux#multithreading#numa#pthreads#rust#synchronization#system-v

Комментарии (138)

  • Futex — это быстрый примитив синхронизации, который экономит системные вызовы при отсутствии конфликтов и не требует выделения ядром объектов.
  • В отличие от Benaphore и старых SysV-механизмов, futex не требует предварительной инициализации в ядре и исчезает, когда нет ожидающих.
  • Обсуждение подчёркивает, что современные учебники по многопроцессорному программированию обязаны упоминать futex, но «The Art of Multiprocessor Programming» этому не уделяет внимания.
  • Улучшения futex2 (Linux ≥5.16) добавили NUMA-поддержку и аналог Windows WaitForMultipleObjects, а io_uring теперь умеет работать с futex.
  • Для надёжности при падении потока существуют robust-locks и списки futex, которые ядро автоматически разблокирует.

I made a real-time C/C++/Rust build visualizer (danielchasehooper.com) 🔥 Горячее

Я написал What the Fork — кроссплатформенный визуализатор сборки C/C++ (и не только).
Запуск: wtf make, wtf cargo build, wtf gradle build, wtf -x для Xcode и т.д.

Инструмент показывает все процессы, включая скрытые вызовы ld, и ищет типичные проблемы:

  • отсутствие -j у make,
  • однопоточная компиляция,
  • повторяющиеся cmake/make-шаги,
  • непараллельные CI-сборки.

Как работает
Сборка = дерево команд. Чтобы увидеть всё, ловим системные вызовы fork/exec/exit:

  • macOS — Endpoint Security API,
  • Linux — ptrace,
  • Windows — Event Tracing (самое мерзкое API).

Что уже нашли

  • cargo собирал зависимость одним потоком вместо 10× ускорения.
  • ninja при сборке LLVM держит 12 задач на 10 ядрах — почти идеал.
  • CMake 85 раз подряд вызывает xcode-select, sw_vers, cmake/make → clang, не используя параллелизм.

Инструмент открыт для тестов — попробуйте на своём проекте.

by dhooper • 14 августа 2025 г. в 16:06 • 389 points

ОригиналHN

#c#c++#cargo#cmake#linux#llvm#macos#make#ninja#rust

Комментарии (82)

  • Пользователи восторженно реагируют на новый визуализатор сборки, особенно те, кто застрял на CMake/GCC/Make без clang/ninja и не может понять, почему сборка тормозит.
  • Просят сразу показать GIF-демонстрацию под заголовком статьи и спрашивают, будет ли macOS-версия и открытый код.
  • Некоторые делятся опытом: strace/dtruss, ninjatracing, vcperf, cargo --timings, Instruments и другие инструменты уже решали похожие задачи.
  • Предложения расширить функциональность: добавить flame-графы процессов, поддержку fork(), интеграцию с Bazel Build Event Protocol, оценку «осталось времени» по историческим данным.
  • Отдельные комментарии касаются маркетинга (сменить название), сравнения с VS/Xcode, а также шуток про TEEP/OEE завода и «LLVM, завари кофе».