Межфайловый анализ
Описание проблемы
В ранних реализациях check_files_with_diagnostics создавал независимый Compiler для каждого файла, что делало невозможным обнаружение межфайловых ссылок. Функция pub, определённая в fileA, не могла быть распознана в fileB.
Решение
Использование общего TypeEnvironment, проверка всех модулей в порядке зависимостей.
Процесс реализации
text
1. Параллельный парсинг всех .yx файлов → Vec<(PathBuf, ModuleId, AST)>
2. Построение графа зависимостей с помощью ModuleDependencyGraph::build_from_ast
3. detect_cycles() проверяет циклические зависимости → сообщение об ошибке
4. topological_sort() получает порядок компиляции
5. Проверка типов в порядке:
a. Создание общего TypeEnvironment (включая std модуль)
b. Для каждого модуля: регистрация его экспортов в общей среде → проверка типов
c. Сбор диагностической информации
6. Возврат CheckResultИзоляция пространства имён
Использование формата module_name.symbol_name для хранения экспортируемых символов позволяет избежать конфликтов между одноимёнными символами разных модулей.
Известные ограничения
traits/заглушка реализации (coherence/impl_check/object_safety/resolution) не завершенаcheck_single_moduleвсё ещё создаёт независимый Compiler для каждого модуля (передача информации о типах через общую среду ещё не полностью реализована)
Будущая работа
- T8: Сквозной тест для межфайловой проверки типов
- A4: Совместное использование trait_table и native_signatures
