Является ли выражение "Uses" в Pascal эквивалентным #include в C++ или import в Java
Из того, что я знаю, в приложениях C++, если вы включаете файл заголовка - содержимое файла заголовка вставляется в код.
С другой стороны, в Java - когда вы импортируете библиотеку Java - параметры передаются в библиотеку в JVM (надеюсь, я прав в этом).
То, что я хочу знать, каково поведение пункта использования в программах на Паскале.
1 ответ
Все три связаны с тем, как создать программу из нескольких исходных файлов.
C/C++ имеет минимальный уровень, все необходимые объявления, которые необходимо включить и скомпилировать компилятором для каждого фрагмента исходного кода (.c,.cpp), как если бы это был один большой источник.
Pascal также поддерживает это (у него есть директива $INCLUDE), но он используется гораздо реже (и даже больше в системном программировании, и вряд ли вообще в прикладном программировании). Использование этого наследует все проблемы, которые есть у C/C++, но поскольку использование меньше величин, это менее заметно.
Это связано с тем, что с системой Uses/unit Pascal имеет лучшую систему, которая может безопасно и автоматически импортировать другие части без их перекомпиляции. Также возможно встроить функции без объявления их в заголовке.
Java в принципе делает то же самое, но его реализация полностью отличается (основанная на иерархических вложенных пространствах имен вместо пространств имен, которые всегда имеют форму unitname.identifiername[.fieldnames], как Pascal)
И Java, и Pascal выигрывают, хотя компилятор может скомпилировать программу, передав только основной файл и несколько путей. Компилятор сам исследует, что компилировать, а что нет. Это также позволяет им автоматически создавать линию компоновщика из найденных фрагментов источника.
Это создает необходимость в сложных внешних сборочных системах (например, make) и в ручном ведении администрирования (make-файлов) для базовых сборок.
Итак, в общем, все они примерно одинаковы (взаимодействие между несколькими исходными файлами), но системы Pascal и Java основаны на этом для простоты использования и для предоставления большего контроля над компилятором.
Добавлено позже: Основной принцип модульных систем состоит в том, чтобы жестко связать один заголовок с каждым основным файлом кода (который связан только соглашением в C) и внести изменения в препроцессор, локальный только для этого файла (и $INCLUDE'd, но не импортированные / используемые файлы. Таким образом, состояние препроцессора в начале модуля зависит только от состояния запуска компилятора (читай: внутренний компилятор и командная строка / среда). Обратите внимание, что это означает, что невозможно импортировать макросы через ИСПОЛЬЗОВАНИЕ, так как они находятся в состоянии препроцессора.