← На главную

На OceanSprint обсудят Rust-мост на ABI Fil-C: C безопасен, Rust быстр

13.08.2026 17:32 · hackernews

У Rust и C сложные отношения: FFI даёт доступ к десятилетиям полезного кода, но сделка выходит однобокой. Rust доказывает memory safety на этапе компиляции, а затем пересекает unsafe-границу и доверяет C-библиотеке соблюдать контракт, который не может проверить ни один язык. Переписывать легаси дорого, поэтому старый код остаётся дешёвым путём.

Проект Fil-C предлагает другой размен. Он перекомпилирует C и C++ с capabilities, рантайм-проверками и конкурентным сборщиком мусора. Нарушения memory safety превращаются в panic, а не в эксплойты. Часто исходный код менять почти не нужно, но безопасность оплачивается на рантайме. Автор хочет Rust FFI, который говорит на ABI от Fil-C. Первая версия могла бы быть намеренно узкой: скаляры, скопированные строки и слайсы, непрозрачные хендлы. Она генерировала бы безопасные Rust-обёртки, компилировала весь C-граф зависимостей с Fil-C и не оставляла бы лазейки обратно в обычный unsafe C. Разделяемую память можно добавить позже, когда мост научится давать Fil-C capability, который Rust сможет отзывать.

Это не очередная опция для bindgen. Fil-C source-compatible с C, но намеренно не ABI-compatible. Обычный extern "C" в Rust говорит на ABI, который Fil-C называет Yolo-C. Чтобы построить мост, нужно научить Rust, Fil-C или пару сгенерированных стабов обмениваться значениями, не теряя гарантий Fil-C. Будь это просто — уже существовало бы.

Часть инфраструктуры уже появляется. filnix упаковывает Fil-C как Nix-платформу для кросс-компиляции и содержит порты более 100 пакетов из nixpkgs. Если относиться к Fil-C как к платформе, Nix пересобирает транзитивные зависимости под ABI Fil-C и не подмешивает обычный C. filnix — ещё не Rust-мост, но это воспроизводимый тулчейн, вселенная пакетов и полигон, где такой мост можно построить.

Zig заходит с другой стороны. Эндрю Келли предложил опциональный fil ABI, вдохновлённый Fil-C. Это независимая реализация в компиляторе и стандартной библиотеке Zig, которая компилирует программу и всё её C/C++-дерево с рантайм-памятью безопасно. Это очень близко к миру, в который попал бы Rust-мост.

Результат дал бы правильные стимулы. Rust даёт compile-time safety, но за использование C приходится платить производительностью. Легаси-библиотека остаётся memory-safe, но каждая операция с указателем проверяется, а память участвует в GC. Переписываешь горячий путь на Rust — и проверки становятся статическими, налог исчезает. C становится безопасным совместимым путём, а не вечным быстрым путём.

«100% безопасно» здесь означает memory-safe на всей поддерживаемой границе, а не отсутствие логических багов, дедлоков и плохих API. Граница — самое сложное. Fil-C требует, чтобы вся программа и зависимости использовали его ABI, а совместимость с обычным C считает нецелью. Rust-мост должен сохранять эту гарантию «целого мира», а не пробивать в ней дыру в форме Yolo-C.

Автор хочет extern "fil-c": Rust на быстром пути, старый C на безопасном пути и перформанс-причину закончить миграцию. Ещё он хочет коллаборацию вместо нескольких почти совместимых островов. У Fil-C есть модель capabilities и рабочий рантайм, у Rust — compile-time safety, Zig исследует вдохновлённый Fil-C ABI, а Nix и filnix умеют пересобирать и тестировать полные графы зависимостей. Поэтому приглашение: приезжайте на OceanSprint в следующем году на Лансароте и стройте это вместе. Микаэль Брокман, автор filnix, уже согласился. Кто ещё присоединится?

Читать оригинал →