Является ли выражение «Uses» в Pascal эквивалентным #include в C ++ или import в Java - PullRequest
1 голос
/ 27 июля 2011

Из того, что я знаю, в приложениях C ++, если вы включаете файл заголовка - содержимое файла заголовка вставляется в код.

С другой стороны, в Java - когда вы импортируете библиотеку java - параметры передаются в библиотеку в JVM (надеюсь, я прав в этом).

ЧтоЯ хочу знать, каково поведение пункта использования в программах на Паскале.

1 Ответ

4 голосов
/ 28 июля 2011

Все три имеют отношение к тому, как построить программу из нескольких исходных файлов.

C / C ++ имеет минимальный уровень, все необходимые объявления должны быть включены в компилятор и снова скомпилированы для каждого фрагментаисточник (.c, .cpp), как если бы это был один большой источник.

Pascal также поддерживает это (у него есть директива $ INCLUDE), но он используется гораздо реже (и даже больше в системном программировании, и вряд ли вообще в прикладном программировании).Использование этого наследует все проблемы, которые есть у C / C ++, но, поскольку использование меньше величин, это менее заметно.

Это потому, что в системе Uses / units Pascal имеет лучшую систему, которая может безопасно и автоматически импортировать другие фрагменты.без перекомпиляции их.Также возможно встроить функции, не объявляя их в заголовке.

Java в принципе делает то же самое, но его реализация совершенно другая (основанная на иерархических вложенных пространствах имен вместо пространств имен, которые всегда имеют формуunitname.identifiername [.fieldnames] как Pascal)

И Java, и Pascal выигрывают, хотя компилятор может компилировать программу, только передавая основной файл и несколько путей.Компилятор сам исследует, что компилировать, а что нет.Она также позволяет им автоматически построить компоновщик линию из найденных частей источника.

1012 * Это делает потребность в сложные внешние buildsystems (как делает) и вручную поддержание администрирования (Makefiles) этого для основного строительного тоо.

Итак, в общем, все они примерно одинаковы (взаимодействие между несколькими исходными файлами), но системы Pascal и Java основаны на этом для простоты использования и для обеспечения большего контроля над компилятором

Добавлено позже : Основной принцип модульных систем состоит в том, чтобы жестко связать один заголовок с каждым файлом основного кода (который связан только соглашением в C) и вносить изменения в препроцессор, локальный только дляэтот файл (и $ INCLUDE'd, но не USES'd / импортированные файлы. Поэтому состояние препроцессора в начале модуля зависит только от состояния запуска компилятора. (читай: внутренний компилятор и командная строка / среда). Обратите внимание, чтоэто означает, что невозможно импортировать макросы через USES, так как они являются предварительнымисостояние сор.

...