Об этом проекте
LAMINARIA (Rust Nim Unified Toolchain) — это научно-исследовательский проект, изучающий унифицированную вычислительную модель и инструментарий для Rust и Nim. Вместо того чтобы рассматривать Cargo, rustc, Nimble, Nim, LLVM, LTO, линковщики и инструменты WebAssembly как непрозрачные команды, склеенные внешним скриптом сборки, проект разлагает путь от исходного кода к исполняемому файлу в явный граф действий:
Граф исходного кода → Конвейер компилятора → Унифицированный граф программы → Граф вариантов / артефактов → Граф конвейера бэкенда → Граф действий → Ядро планирования Nim → Планировщик среды выполнения Rust
Проект изучает этапы компилятора Rust, такие как HIR, MIR, мономорфизация, единицы генерации кода, rustc_codegen_ssa, бэкенды LLVM, Cranelift и GCC, LTO, генерацию объектов и линковку, наряду с фронтендом Nim, семантической обработкой, генерацией кода бэкенда, нативной компиляцией и линковкой. LLVM рассматривается как один из нескольких выбираемых маршрутов генерации кода, а не как фиксированный фундамент, а WebAssembly моделируется как целевой конвейер (генерация кода, wasm-ld, пост-линк оптимизация, WIT/адаптеры, компонентизация), а не как значение бэкенда.
Версия компилятора обрабатывается как полноценное измерение графа. Дизайн направлен на поддержку нескольких точных инструментальных цепочек Rust, а также Nim 2 и Nim 3/Nimony, разрешая ограничения пакетов и рабочих пространств до выбранного инструментария, сохраняя при этом идентификатор компилятора-создателя при принятии решений о запуске, действиях, артефактах, кэше и совместимости. Поскольку внутреннее пространство вариантов может быть обширным, проект делает упор на подтвержденные профили инструментария (Validated Toolchain Profiles), такие как рекомендуемый, последний проверенный, долгосрочный и предварительный, где псевдонимы профилей разрешаются в неизменяемые точные ревизии пакетов, дополненные пресетами намерений и экспертными ограничениями графа.
Удобство использования инструментов также заявлено как цель проекта: предполагаемый стандартный путь начинается с разрешения ограничений и прунинга, за которым следует небольшой ранжированный набор подтвержденных жизнеспособных планов и затем выполнение, при этом известные несовместимости хранятся как структурированные отрицательные знания, чтобы аналогичные сбои не приходилось обнаруживать повторно. Широкое исследование методом перебора должно оставаться явным исследовательским режимом, а не опытом по умолчанию.
Архитектурно разделение происходит по ответственности, а не по языку: Ядро планирования Nim (Nim Planning Kernel) отвечает за нормализацию графа, решение ограничений, комбинаторное разрешение, распространение спроса на артефакты, прунинг и анализ критического пути, в то время как Планировщик среды выполнения Rust (Rust Runtime Scheduler) управляет CLI, обнаружением инструментария, взаимодействием с ОС, выполнением процессов, учетом ресурсов, кэшем/CAS, демонизированными службами, измерениями, трассировкой и планированием.
В репозитории на данный момент представлен слой среды и идентификации инструментария. Многоинструментальный лок-файл репозитория (toolchains.lock.toml) разрешается командой doctor в точные записи EnvironmentFingerprint и ToolchainFingerprint:
scripts/bootstrap.sh сообщает об отсутствующих инструментах относительно лок-файла; флаг --install также устанавливает их (macOS/Homebrew плюс rustup). Скрипт bootstrap отдает предпочтение точным источникам, не зависящим от системного менеджера пакетов, где это возможно (инструментарии rustup с llvm-tools, choosenim для точных версий Nim, cargo install --version для CLI-инструментов на чистом Rust), прибегая к системному менеджеру пакетов только для инструментов без таких альтернатив, таких как clang/llvm-config и wasm-opt от Binaryen.
Команда cargo run -p laminaria-cli -- doctor выводит человекочитаемый отчет о среде, а --json — машиночитаемые отпечатки. Файл docker/bootstrap.Dockerfile запускает тот же стек в контейнере для воспроизводимых проверок bootstrap; согласно документации по измерениям, это предназначено только для воспроизведения корректности, и doctor записывает environment_class = "container", чтобы запуски в контейнере не сравнивались незаметно с нативными базовыми показателями.
Документация предоставляется на английском и японском языках и охватывает UX инструментария, ориентированный на агентов, ограниченное планирование, подтвержденные профили инструментария и прогрессивную конфигурацию, политику многоверсионности Rust/Nim, основу измерений и стратегию среды/трассировки, «белый ящик» конвейера бэкенда, исследовательские основы, программу исследований и политику доказательств, нативную линковку Rust–Nim, политику исследований с приоритетом метрик, план задач и предложение по проекту.
Лицензирование двойное: Apache License 2.0 или MIT, по выбору пользователя, при этом сторонние компоненты остаются под своими лицензиями. В README работа представлена как исследовательская программа, создающая основу для измерений перед оптимизацией, поэтому заявления о возможностях здесь отражают намерения проектирования и текущий инструментарий идентификации среды, а не проверенную производительность сборки.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.