7.2.1. Вещи, которые не работают

На верх  Назад  Вперёд

Здесь перечислен список элементов, которые определены/предоставляются Turbo Pascal, но не поддерживаются Free Pascal. Если возможно, то указаны причины этого.

1.Дубликаты меток позволяются в Turbo Pascal, но не в Free Pascal. Это ошибка Turbo Pascal, поэтому поддерживать её нет смысла.

2.В Turbo Pascal список параметров предварительно объявленных функций и процедур не обязательно должен соответствовать точно. В Free Pascal это обязательно, так как может влиять на работу механизма перегружаемых функций Free Pascal. Однако с помощью опции –М (см. раздел «5.1.5. Параметры для исходных кодов (опции языка)») можно преодолеть это ограничение.

3.В Turbo Pascal переменные MEM, MEMW, MEML и PORT для работы с памятью и доступа к портам недоступны в системном модуле. Это делает программу зависимой от операционной системы. Под DOS в модуле GO32 находятся конструкции МЕМ. Под LINUX модуль ports предоставляет такие конструкции для переменной Ports.

4.Turbo Pascal позволяет создавать процедуры и переменные с именами, которые запрещается использовать в Free Pascal, так как они являются ключевыми. То есть эти слова зарезервированы в Free Pascal и Delphi, но не являются зарезервированными в Turbo Pascal, например PROTECTED, PUBLIC, PUBLISHED, TRY, FINALLY, EXCEPT, RAISE. Для решения этой проблемы используйте параметр –Mtp, если требуется откомпилировать код Turbo Pascal, содержащий эти слова. См. также приложение ПРИЛОЖЕНИЕ В Алфавитный список зарезервированных слов (список зарезервированных слов).

5.Зарезервированные слова Turbo Pascal FAR и NEAR игнорируются. Это связано с тем, что данные слова использовались из-за ограничений 16-битной среды окружения., а Free Pascal – это 32/64-битный компилятор.

6.Директива INTERRUPT будет работать в Free Pascal только для целевой платформы DOS. Другие операционные системы не позволяют обрабатывать прерывания в пользовательских программах.

7.По умолчанию Free Pascal использует синтаксис ассемблера AT&T. В основном из-за того, что Free Pascal использует GNU as. Однако доступны и другие формы ассемблера. Подробности см. в «Руководстве программиста».

8.Turbo Vision для Turbo Pascal имеет аналог для Free Pascal, который называется Free Vision и на 100% совместим с Turbo Vision.

9.Модуль overlay от Turbo Pascal недоступен. Это также связано с тем, что Free Pascal 32/64-битный компилятор, поэтому размер программы не должен вызывать проблем.

10.Параметры командной строки компилятора отличаются.

11.Опции и директивы компилятора по большей части совместимы, но их несколько больше.

12.Бинарные файлы модулей несовместимы. Это значит, что в проекте Free Pascal вы не сможете использовать файлы откомпилированных в Turbo Pascal модулей с расширением .TPU.

13.В Free Pascal структура TextRec (для внутреннего описания файлов) не является бинарно совместимой с TP или Delphi.

14.В Free Pascal множества по умолчанию являются 4-байтными. Это значит, что некоторые множества, которые возможны в Turbo Pascal, не допустимы в Free Pascal. Однако, эту проблему можно решить установкой размера множества (см. «Руководство программиста»).

15.Файл открыт только для вывода (используя fmOutput), если он открыт процедурой Rewrite. Чтобы иметь возможность чтения файла, он должен быть открыт процедурой Reset.

16.Деструкторы Turbo Pascal позволяют иметь параметры. Это не выполняется в Free Pascal: по умолчанию деструкторы в Free Pascal не имеют параметров. Это ограничение может быть снято опцией –So.

17.Turbo Pascal допускает более одного деструктора на объект. В Free Pascal может быть только один деструктор. Это ограничение может быть также снято опцией –So.

18.Порядок вычисления выражений не всегда одинаков в Turbo Pascal и в Free Pascal. В следующем выражении:
a := g(2) + f(3);
не гарантируется, что g(2) будет вычислено раньше, чем f(3).

19.В Free Pascal необходимо использовать оператор адреса @ при определении процедурных переменных.