Единица перевода - это термин из языкового стандарта.Например, это из C (c99 iso draft)
5.1 Концептуальные модели;5.1.1 среда перевода;5.1.1.1 Структура программы
Программу переменного тока необязательно переводить одновременно.Текст программы хранится в единицах, называемых исходными файлами (или файлами предварительной обработки) в настоящем международном стандарте.Исходный файл вместе со всеми заголовками и исходными файлами, включенными в директиву предварительной обработки #include, называется модулем преобразования предварительной обработки.После предварительной обработки единица перевода предварительной обработки называется единицей перевода .
Таким образом, единица перевода - это единственный исходный файл (file.c
) после предварительной обработки (все #include
d).Создано *.h
файлов, все макросы раскрыты, все комментарии пропущены, и файл готов к токенизации).
Единица перевода - это единица компиляции, поскольку она не зависела от какого-либо внешнего ресурса до шага связывания.Все заголовки находятся в пределах TU.
Термин module не определен в стандарте языка, но AFAIK относится к translation unit
на более глубоких этапах перевода.
LLVM описывает это как: http://llvm.org/docs/ProgrammersManual.html
Класс Module представляет структуру верхнего уровня, присутствующую в программах LLVM.Модуль LLVM фактически является либо единицей перевода исходной программы, либо комбинацией нескольких единиц перевода, объединенных компоновщиком.
Класс Module отслеживает список функций, список GlobalVariables и SymbolTable.Кроме того, он содержит несколько полезных функций-членов, которые пытаются упростить общие операции.
Об этой части вашего вопроса:
Мне также интересно узнать, какая частькода вызывается, когда модуль преобразования запускается и завершает кодирование отладочной информации?
Это зависит от того, как используется LLVM.Сам LLVM является библиотекой и может использоваться различными способами.
Для clang / LLVM (компилятор C / C ++ построен на libclang и LLVM) модуль перевода создается после этапа предварительной обработки.Он будет проанализирован в AST, затем в сборку LLVM и сохранен в модуле.
В качестве учебного примера приведено создание модулей http://llvm.org/releases/2.6/docs/tutorial/JITTutorial1.html