Оглавление Отличия Free Pascal от Турбо7 и Делфи7. Перенос исходников Турбо, Делфи во Free Pascal


Рекомендации по компиляции проектов Делфи7 в FPC см. здесь.
--- Конструкции Turbo 7, не поддерживаемые FPC: ---

0.Duplicate case labels are not allowed. This is a bug in Turbo Pascal and will not be 
changed.

1. Список параметров процедур/функций FPC должен точно соответствовать предварительному 
   определению. Чтобы снять это ограничение, используйте директиву компилятора  -M 

2. Переменные MEM, MEMW, MEML и PORT Турбо ПАскаля для прямого доступа к памяти и портам
   - отсутствуют в FPC

3. В список зарезервированных слов FPC добавлены (относительно Турбо): PROTECTED, PUBLIC,
   PUBLISHED, TRY, FINALLY, EXCEPT, RAISE, т е нельзя использовать в качестве идентификаторов.
   Чтобы избавиться от этого - ключ -Mtp 

4. Зарезервированные слова FAR, NEAR (Турбо7) игнорируются , устарели.
 
5. INTERRUPT будет работать только в программах, предназначенных  для работы в DOS. 

6. По умолчанию, компилятор FPC использует синтаксис AT and T, однако другие ассемблерные 
   формы тоже доступны. Подробнее см руководство программиста.  

7. Turbo Vision доступен под именем FreeVision который должен иметь почти 100% 
   совместимость с Turbo Vision.

8. Не доступен модуль Overlay 

9. FPC имеет больше зарезервированных слов.

10. При запуске из командной строки параметры FPC отличаются от Турбо7

11. Ключи и директивы компиляторов FPC и Турбо7 в основном совпадают, но есть отличия.

12. Компилированные модули (в бинарном виде) FPC и Турбо7 не совместимы


13. Структура TextRec (в бинарном виде) FPC и Турбо7 не совместима. 

14. Множества Free Pascal всегда занимают 4 байта, поэтому некоторые преобразования типов, 
    возможные в Турбо7 недоступны в FPC.

15. Файлы, открытые Rewrite, в FPC доступны ТОЛЬКО для записи. Чтобы из них читать, 
    используйте Reset

16. Деструкторы не могут иметь параметров. Это ограничение можно преодолеть, 
    используя ключ -So

17. Порядок операций при вычислении выражений - иной. Например, не гарантируется, 
    что в выражении a:= g(2) + f(3); g(2) будет вычислено прежде чем f(3).


 ---- Что возможно в Free Pascal, но не возможно в Турбо7: ----

1. Функции могут возвращать результаты структурированных типов, например записи массивы.

2. Можно использовать имя функции в теле функции (например, так):
function a : longint;
begin
  a:=12;
  while a>4 do
    begin
      {...}
    end;
end;

 В этом примере нет рекурсии. Чтобы вызвать функцию во Free Pascal рекурсивно, используйте 
  скобки (), например: 

function a : longint;
begin
  a:=12;
  while a()>4 do
    begin
      {...}
    end;
end;

3. Free Pascal частично поддерживает Делфи-конструкции (см руководство программиста)

4. Вызов exit для функций допускает возврат значений, например:
function a : longint;
begin
  a:=12;
  if a>4 then
    begin
      exit(a*67); {Возвращает a*67 }
    end;
end;

5. Free Pascal поддерживает перегрузку функций, т е можно определить несколько функций 
 с одним именем, но различным списком параметров. Напримеsр: 
procedure DoSomething (a : longint);
begin
{...}
end;

procedure DoSomething (a : real);
begin
{...}
end;

Чтобы не было перегрузки при использовании директивы forward, оба заголовка должны быть 
полностью идентичны !

6.  Free Pascal поддерживает перегрузку операций, например, можно определить + для матриц. 

7. Free Pascal поддерживает длинные имена файлов в FAT16 и FAT32.


----------- Перенос исходников Delphi7 -------------

1. Чтобы максимально приблизить FPC к Delphi7, используйте -Mdelphi в командной строке 
или вставляйте в исходники (перед Unit и Program ) такой код:
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF FPC}

2. Конструкции, добавленные в Делфи после версии 7, не поддерживаются FPC.

3. FPC компилирует бОльшую часть FreeCLX и Widget.  

4. Версия 2.0.4 FPC не поддерживает следующие конструкции Д7:

  - интерфейс Dispinterface,
  - делегирование интерфейсов,
  - динамические методы идентичны виртуальным,
  - Reintroduce,
  - параметры процедур, объявленные как Const, не обязательно передаются посредством ссылок.
  - Packages
5. Не поддерживаются некоторые конструкции ассемблера

6. Отметим, что -Mobjfpc ключ вводит ограничения более строгие, чем Делфи, а именно:
  - Имена параметров и локальных переменных методов не должны совпадать с именами
    свойств (этого) класса.
  - для присваивания значений переменным процедурного типа и обработчикам событий 
    необходим адресный оператор (@)
  - AnsiString и String не тождественны по умолчанию.

7. По умолчанию FPC создает консольное приложение. Если требуется создать приложение 
   с графическим интерфейсом (GUI) - нужно вставить директиву 
{$APPTYPE GUI}

8. Модуль Windows обеспечивает интерфейс к большинству функций Win32 API. 
Однако в списке параметров вызова возможна замена параметра-переменной на указатель.

9. Управление Widestrings не автоматизировано в Free Pascal. FPC поддерживает Widestrings, 
   однако может использовать кодировку, отличную от принятой в Windows.

10. Потоки: (в смысле - нити). В настоящей версии (2.0.4) Free Pascal не предлагает 
    собственной поддержки потоков: В Unix требуется связь с библиотекой С для поддержки
    потоков в приложениях FPC. То есть нужно подключить модуль cthreads для использования 
    потоков. 

11. Вызов SetLastOSError не поддерживается (и не будет никогда)

12. Free Pascal обеспечивает регистронезависимость имен файлов поиском версии файла 
    в нижнем регистре (строчные буквы)

13. RTTI хранится иначе, чем в Делфи. Формат в основном совместимый, но может отличаться.
    Это не должно быть проблемой, если используется модуль TypeInfo и нет попыток 
    прямого доступа к информации RTTI.

14. Размер множеств иной, чем в Делфи.

15. Размер перечисляемых типов иной, чем в Делфи.

16. Внутренняя структура структурированных данных (записи, объекты, классы) не 
    документируется. Не рекомендуется делать предположения о структуре.

17. Это справедливо и для основных типов. Так, расположение старшего и младшего байтов 
    слова для различных процессоров может отличаться. 

18. Для устранения противоречий Делфи-FPC рекомендуется вместо использования директив 
    IFDEF создавать специальные модули, которые используются только при компиляции в FPC 
Rambler's Top100
Hosted by uCoz