Ответ 1
Я считаю, что .dcu обычно означает "Delphi Compiled Unit", а не файл .pas, который просто "Исходный код Pascal".
Файл .dcu - это файл, который компилятор DCC создает после компиляции файлов .pas (файлы .dfm преобразуются в двоичные ресурсы, а затем обрабатываются компоновщиком напрямую).
Это аналог файлов .o и .obj, которые создают другие компиляторы.
Файл .dcu технически не является файлом "кэша", хотя ваши сборки будут работать быстрее, если вы не удалите их и когда не нужно их перекомпилировать. Файл .dcu связан с версией компилятора, сгенерировавшей его. В этом смысле он менее переносим, чем файлы .o или .obj (хотя у них тоже есть проблемы с совместимостью)
Вот немного истории на случай, если что-нибудь добавит.
Компиляторы традиционно переводят языки исходного кода в некоторую промежуточную форму. Переводчики этого не делают - они просто интерпретируют язык и сразу же запускают приложение. Бейсик - классический пример интерпретируемого языка. "Командная строка" в DOS и Windows имеет язык, который можно записать в файлы, называемые " пакетные файлы " с расширением .bat. Но ввод данных в командной строке выполнял их напрямую. В средах * nix существует множество различных интерпретаторов командной строки (CLI), таких как sh, csh, bash, ksh и так далее. Вы можете создавать пакетные файлы из всех них - это обычно называют "языками сценариев". Но сейчас есть много других языков, которые интерпретируются и компилируются.
В любом случае Java и .Net, например, компилируются в нечто, называемое промежуточным представлением " байт-код ".
Первоначально Pascal был написан как однопроходный компилятор, а Turbo Pascal (происходящий из PolyPascal) - с различными редакциями для CP/M, CP/M-86 и DOS - непосредственно генерировал исполняемый двоичный файл (COM), который работал под управлением этих операционных систем. системы.
Первоначально Pascal был спроектирован как небольшой эффективный язык, предназначенный для поощрения хороших методов программирования с использованием структурированного программирования и структурирования данных; Turbo Pascal 1 изначально разрабатывался как IDE со встроенным очень быстрым компилятором и доступным конкурентом на рынке DOS и CP/M, несмотря на длительные циклы редактирования/компиляции/компоновки в то время. Turbo Pascal и Pascal имели те же ограничения, что и любая другая среда программирования: память и дисковое пространство измерялись в килобайтах, скорости процессора в мегагерцах.
Ссылки на исполняемый двоичный файл не позволили вам ссылаться на отдельно скомпилированные модули и библиотеки.
До Turbo Pascal существовала операционная система UCSD p-System (поддерживающая многие языки, включая Pascal. Компилятор UCSD Pascal тогда уже расширил язык Pascal модулями), скомпилированный в псевдомашинный байт-код (называемый p-code). формат, позволяющий связать несколько единиц вместе. Это было медленно, хотя,
Между тем, c развивался в средах VAX и Unix и компилировался в файлы .o, что означало "объектный код", а не "исходный код". Примечание: это совершенно не связано с тем, что мы сегодня называем " объектами ".
Turbo Pascal вплоть до включающей версии 3 непосредственно генерируемых двоичных выходных файлов .com (хотя вы можете использовать изменение этих файлов оверлеев), а с версии 4 поддерживается разделение кода на блоки, которые сначала компилируются в файлы .tpu, а затем связываются в окончательный исполняемый двоичный файл, Компилятор Turbo C генерировал файлы .obj (объектный код), а не байт-коды, а Delphi 2 ввел генерацию файлов .obj, чтобы сотрудничать с C++ Builder.
Объектные файлы используют относительную адресацию в каждом модуле и требуют того, что позже называлось "исправлениями" (или перемещением), чтобы заставить их работать. Исправления указывают на символические метки, которые, как ожидается, существуют в других объектных файлах или библиотеках.
Существует два вида "исправлений": один статически выполняется инструментом, называемым " компоновщик ". Компоновщик берет кучу объектных файлов и соединяет их во что-то, похожее на лоскутное одеяло. Затем он "исправляет" все относительные ссылки, вставляя указатели на все внешние метки.
Вторые исправления выполняются динамически, когда программа загружается для запуска. Они сделаны чем-то, что называется "загрузчик", но вы этого никогда не увидите. Когда вы вводите команду в командной строке, вызывается загрузчик для загрузки EXE файла в память, исправления оставшихся ссылок в зависимости от того, где загружен файл, а затем управление передается в точку входа приложения.
Таким образом, файлы .dcu возникли как файлы .tpu, когда Borland представил модули в Turbo Pascal, а затем изменил расширение с введением Delphi. Они сильно отличаются от файлов .obj, хотя вы можете ссылаться на файлы .obj из Turbo Pascal и Delphi.
Delphi также полностью скрыл компоновщик, так что вы просто делаете компиляцию и запускаете. Однако все параметры компоновщика все еще присутствуют в одной из панелей параметров Delphi.