]]> ]]>

Free Pascal 2.2.0

Версия реализации Free Pascal языка программирования Pascal

На момент написания статьи версия 2.2.0 — последняя стабильная.

Основные изменения относительно версии FPC 2.0.4:

Платформы:

  • Новая платформа: Win64. FPC — первый open source-компилятор для операционной системы Windows 64-бит
  • Новая архитектура процессора: 64-bit PowerPC
  • Подержка PowerPC/64 на Linux
  • Теперь поддерживается Mac OS X на Intel (i386)
  • Новая платформа: Windows CE (Windows Mobile)
  • Новая платформа: Nintendo Game Boy Advance
  • Новая платформа: Nintendo DS
  • Нативная поддержка для платформы ARM
  • Обновлена поддержка платформы GO32V2 DOS

Компилятор:

  • Внутренний компоновщик для win32, win64 и wince
  • Generic (экспериментально)
  • Поддержка нескольких файлов ресурсов
  • pointer[low..high]-синтаксис для передачи указателей в стиле C в процедуры
  • Делегирование интерфейсов
  • Реализация safecall
  • Widestring под Windows COM/OLE-совместимы
  • Оптимизирована скорость выполнения программ
  • Полная поддержка компилятором путей более 255 символов длиной
  • Отладка: поддержка Dwarf
  • Уменьшено использование памяти при компиляции
  • Множество мелких исправлений, в том числе по совместимости

RTL:

  • Куча использует меньше памяти
  • Улучшенная поддержка variant
  • Улучшенная поддержка currency
  • Обработка исключений может быть использована без модуля SysUtils
  • Множество мелких исправлений, в том числе по совместимости

FCL:

  • Улучшенная поддержка баз данных
  • Удалены устаревшие модули sqlitedataset, interbase, fpodbc, ddg, mysqldb3 и mysqldb4
  • Множество мелких исправлений, в том числе по совместимости

Пакеты:

  • Добавлен новый менеджер пакетов fppkg
  • Улучшенная поддержка баз данных
  • Добавлен совместимый с Delphi модуль RichEdit
  • Множество мелких исправлений, в том числе по совместимости

Free Vision:

  • Теперь использует resourcestring

Интегрированная среда разработки:

  • Evaluate window
  • Улучшенный рендеринг HTML
  • Улучшенная поддержка xterm
  • Небольшие исправления ошибок

Другое:

  • Улучшенная документация
  • Улучшенная поддержка кросс-компиляции

Изменения, которые могут влиять на работоспособность кода программ:

Для всех платформ:

  • Изменения типа string в режиме Delphi. В версии 2.2.0 по умолчанию используется директива компилятора {$h+} вместо {$h-}. Это означает, что string рассматривается теперь как ansistring по умолчанию. Данное изменение может привести к неработоспособности кода, ориентированного на работу с shortstring. Решение данной проблемы возможно либо путем адаптации кода для работы с ansistring либо принудительного указания директивы компилятора {$h-}.
  • Изменения работы с константами-числами с плавающей точкой. В прежних реализациях FPC использовалась максимальная точность, допустимая на платформе, теперь же используются минимальная точность, которая не вызывает потерю данных. В результате этого нововведения некоторые конструкции могут давать точность меньшую, чем в прошлом. Если требуется большая точность вычисления, то рекомендуется использовать типы с большей точностью вычисления, например, extended.
  • Изменение типа System.Exitcode для совместимости с Delphi и ОС, поддерживающими 4-х байтовый код завершения. Во всех реализациях вплоть до 2.0.4 переменная System.Exitcode была объявлена как word, теперь она объявлена как longint. В результате этого изменения не все ассемблерные вставки могут работать корректно с Exitcode.
  • Удален RTLEventStartWait. Прежде необходимо было вызывать RTLEventStartWait перед запросом RTLEventWaitFor из-за особенностей реализации в UNIX-системах. В результате этого изменения код, использующий вызов RTLEventStartWait, будет неработоспособен, необходимо удалить вызовы RTLEventStartWait, т.к. в них больше нет необходимости.
  • Изменение работы операции in. В прежних реализациях левый операнд преобразовывался в тип byte, подобно Turbo Pascal. Теперь же размер операнда сохраняется, но до конца еще не реализована поддержка чисел больше 256.
  • Прежде было допустимо приведение неявным образом к 32-х разрядному целочисленному типу некоторых строк. Теперь конструкции типа dword1:='ab'; будут запрещены, но строки длинной в 4 символа могут быть неявно преобразованы к 32-х разрядному целочисленному типу.
  • Режим GPC отключен. {$mode gpc} и -mgpc теперь не работают.
  • TFPHashtable переименован в TFPDataHashTable из-за введения нового класса TFPCustomHashTable.

Изменения для платформы UNIX:

  • Постоянство RTLEvent. Многократные вызовы RTLEventSetEvent теперь не теряются и скапливаются в очереди. Сделано для совместимости с поведением под Windows.

Изменения для платформы PowerPC:

  • Изменение вычислений с плавающей точкой. Теперь вычисления будут выполняться не с двойной точностью как было ранее по умолчанию. Сделано для увеличения быстродействия.

Изменения для 64 разрядных платформ:

  • Теперь Variant-массивы используют 32-битные, а не 64-битные индексы. Введено для совместимости со стандартными подпрограммами Windows и программами, написанными на других языках.

Примеры:

Факториал:

Используется рекурсивное определение факториала.

Этот пример работает как в Turbo Pascal, так и в Free Pascal, но с несколько разным результатом. В обеих реализациях возникает арифметическое переполнение при вычислении факториалов 13-16, но Free Pascal сообщает об ошибке:

13! = Runtime error 215 at $004013C7
$004013C7
$00401449
$004063E0

в то время как Turbo Pascal не обнаруживает ошибку и просто выводит неправильные значения:

13! = 1932053504
14! = 1278945280
15! = 2004310016
16! = 2004189184

Следует отметить, что в версиях Turbo Pascal 3.0 и младше этот пример не работает из-за отсутствия типа данных longint.

program factorial;

function fact(n: integer): longint;
begin
    if (n = 0) then
        fact := 1
    else
        fact := n * fact(n - 1);
end;

var
    n: integer;

begin
    for n := 0 to 16 do
        writeln(n, '! = ', fact(n));
end.

В закладки: ]]> Пиктограмма del.icio.us Пиктограмма БобрДобр.ru Пиктограмма Memori.ru Пиктограмма МоёМесто.ru ]]>