Немного моего фона: Я разрабатываю некоторые архитектуры процессоров в университете, и теперь я реализую компилятор. Язык будет иметь некоторые специфические характеристики, но в целом он похож на любой другой язык: функции/методы, если они есть, переменные и т. Д.Преимущества и недостатки внедрения include/import/use в компиляторе?
Теперь, что я видел на многих языках, является использование include/импорт/использование конструкций. На моем языке существует только глобальное пространство имен, и я подумал: действительно ли мне нужно реализовать какую-то конструкцию include на моем языке? Не могу ли я просто позволить компилятору быть достаточно умным и выяснить, где находятся определения?
Например, если я компилирую мой код с
./mycompiler file1 file2 file3
И пусть file1 использует что-то определенное в file3. У компилятора достаточно информации, чтобы выяснить, какие потребности file1 были найдены в файле3 (мой компилятор - это компилятор с несколькими проходами). Затем я спрашиваю вас: если мой компилятор достаточно умен, чтобы выяснить, где находятся определения, есть ли какое-то преимущество в явном вводе оператора include/import/use?
благодарим вас за ответ! Идея заключалась не в том, чтобы указать, где находятся все файлы, но чтобы компилятор автоматически определял все зависимости. Для программ с нетривиальным размером выполнение будет чем-то вроде ./compiler file1 file2 ... fileN -llib1 -llib2 ... -llibN. Не нужно перечислять все файлы каждой библиотеки, и компилятор должен определить зависимости, непосредственно считывающие код объекта. Сам язык можно рассматривать как модифицированную версию C с поддержкой вывода типа и перегрузки функций. – hdhzero