Hacker News Digest

Тег: #llvm

Постов: 3

Zig builds are getting faster (mitchellh.com) 🔥 Горячее 💬 Длинная дискуссия

Компиляция Zig становится значительно быстрее благодаря многолетней работе над оптимизацией компилятора. Например, сборка скрипта build.zig в версии 0.15 заняла всего 1,7 секунды против 7,2 секунд в версии 0.14. Полная сборка проекта Ghostty без кеша сократилась с 41 до 32 секунд, даже с использованием LLVM.

Особенно впечатляет скорость инкрементных сборок: пересборка библиотеки libghostty-vt после изменения одной строки теперь занимает менее секунды (975 мс против 2,9 секунд ранее). Это уже ощутимо ускоряет рабочий процесс, а в будущем, с отказом от LLVM и внедрением инкрементной компиляции, результаты станут ещё лучше — ожидаются миллисекундные задержки.

by emschwartz • 03 октября 2025 г. в 22:45 • 402 points

ОригиналHN

#bazel#cranelift#go#julia#kqueue#llvm#openbsd#tcc#vlang#zig

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

  • LLVM рассматривается как ловушка из-за сложности тонкой настройки финальных оптимизаций и линковки, несмотря на преимущества в скорости начальной разработки и поддержке платформ. Cranelift и другие бэкенды могут стать альтернативой.
  • Zig фокусируется на скорости компиляции для разработки, используя собственный бэкенд для debug-сборок (x86_64) и LLVM для релизов. Есть баги, но инструментарий ценится за простую кросс-компиляцию и статическую линковку.
  • Быстрая компиляция (TCC, Go, Vlang) важна для итеративной разработки, но trade-off с оптимизацией кода неизбежен. Интерпретаторы или JIT-компиляция (Julia) предлагают альтернативы для интерактивности.
  • Интеграция Zig с системами сборки (Bazel) возможна через правила, но Turing-полные скрипты сборки могут усложнить кеширование. Библиотеки часто обходятся без кастомных скриптов.
  • Поддержка платформ (OpenBSD) требует доработки низкоуровневого IO (kqueue). Статическая линковка зависимостей в Zig упрощает деплой, но динамические библиотеки (libc, GUI) остаются.

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-переписей.

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, завари кофе».