Помощь - Поиск - Пользователи - Календарь
Полная версия: FPC 2.4.2
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Free Pascal, Pascal ABC и другие
volvo
12 ноября 2010 вышла новая версия FPC: 2.4.2

Немного об изменениях:
1. Введены ключевые слова Abstract и Sealed для классов, то есть, теперь конструкции "class abstract" и "class sealed" распознаются как спецификатор класса, и невозможно уже иметь в классах переменные с подобными именами:

type
T = class
Abstract: Integer;
end;

, хотя 2.4.0 это компилировал.

2. В класс TObject введены методы UnitName, Equals, GetHashCode, ToString для большей совместимости с Дельфи (в Дельфи эти методы существуют, начиная с 2009 версии)

3. Заявлено наличие давно обсуждаемого цикла for ... in , посмотрим, работает ли он на самом деле.

Есть также изменения в расположении некоторых модулей (Daemonapp, MacOSAll и DOM, а также модуля Sockets)...

Об основных изменениях можно прочесть здесь (англ): User Changes 2.4.2


Чуть позже погоняю этот компилятор на тестах, и посмотрю, как у него с исправлениями старых ошибок.


Update:
Вот результаты того же самого теста SciMark2
(Intel Core2 CPU 4400 @2GHz + 1024 Mb RAM, WinXP SP3. Настройки компиляторов: режим совместимости - Delphi, Range Checking (-), Stack Checking (+), I/O Checking (-), Integer Overflow Checking (+), генерировался быстрый код (generate faster code) для процессора Pentium4, Level 1 Optimization)

Без ключа -Large (Показать/Скрыть)

С ключом -Large (Показать/Скрыть)

И опять - довольно ощутимое увеличение быстродействия по сравнению с 2.4.0...
volvo
Теперь - результаты еще одного теста. Когда-то мы с его помощью тестировали быстродействие разных компиляторов Паскаля друг относительно друга, сейчас мне просто интересно как FPC ведет себя от версии к версии, что ускоряется, в что замедляется.. Итак, тест вычисляет скорости следующих операций (сравнивались компиляторы 2.2.0 и 2.4.2) :
  1. Доступ к члену класса (109 итераций).
  2. Вызов пустого статического метода (109 итераций).
  3. Вызов пустого динамического метода (109 итераций).
  4. Быстрая сортировка массива (Quick Sort, 108 байт).
  5. Пузырьковая сортировка массива(Bubble Sort, 150000 байт)
  6. "Древесная" сортировка массива (Tree Sort, 106 байт).
  7. Вычисление 4500 цифр числа Пи.
  8. Скорость конкатенации строк (106 итераций).
  9. Тесты скорости вещественных вычислений (109 итераций).
(тестировалось на Intel Core2 CPU 4400 @2GHz + 1024 Mb RAM, WinXP SP3. Настройки компиляторов: Range Checking (+), Stack Checking (+), I/O Checking (-), Integer Overflow Checking (+), генерировался быстрый код (generate faster code) для процессора Pentium4, Level 1 Optimization, режимы совместимости - ObjFPC и Delphi соосветственно)

Результаты:

FPC 2.2.0
(совместимость)		Delphi	FPC
Member access 11500 11500
Method call 53547 53547
Virtual method call 58062 58031
Quick sort 2375 2375
Bubble sort 45734 45719
Tree sort 313 312
PI computation 343 344
String concat. 328 94
Floating point 30016 30016
Strange attr. 6781 6203


FPC 2.4.2
(совместимость)		Delphi	FPC
Member access 4508 5015
Method call 4516 4500
Virtual method call 12109 12078
Quick sort 906 906
Bubble sort 11922 11890
Tree sort 219 203
PI computation 328 328
String concat. 344 110
Floating point 18531 18515
Strange attr. 2140 2141



Если интересно, могу этот же тест прогнать с другими компиляторами (Дельфи, Virtual Pascal, GPC)
Polinom2686
Цитата(volvo @ 16.11.2010 16:12) *

Если интересно, могу этот же тест прогнать с другими компиляторами (Дельфи, Virtual Pascal, GPC)


Ну, за язык никто не тянул. Так что ждем вас с результатами тестов. smile.gif
Гость
Какая версия дельфи, и почему трёхкратный слив по строкам? Даже если бы дельфа делала юникод, а ФПЦ нет, был бы лишь 2кратный слив.
volvo
TarasBer, ты читать умеешь? Там русским языком написано СОВМЕСТИМОСТЬ!!! Программа компилировалась в режимах {$MODE DELPHI} и {$MODE ObjFPC}, режим совместимости Дельфи сливает родному FPC-шному. Но когда я выложу результаты для Дельфи, ты еще больше удивишься. Слив действительно трехкратный (Дельфи 2009, проект НЕюникодный)
Гость
А, понял.
Тогда почему 2.4.2 втрое делает 2.2.0 почти на всех тестах? И вообще, каковы результаты для всех отключённых проверок, при максимальной оптимизации? А то сравнивать с проверками некорректно, может, 2.2.0 из-за них сливает.
volvo
Цитата
Тогда почему 2.4.2 втрое делает 2.2.0 почти на всех тестах?
Может, потому что новая версия и должна быть как минимум не медленнее старой? Вот 2.4.2 и быстрее чем 2.2.0, причем намного. Перепроверить с отключенными проверками не смогу, я уже снес 2.2.0, и 2.4.0, две версии вместе не уживаются.

Добавлено через 3 мин.
В общем, передумал я делать новые тесты. Все равно найдутся те, кто будет утверждать, что это все подтасовка, и что специально была выбрана именно эта оптимизация, чтоб показать преимущество FPC, и что тесты были взяты именно эти ,потому что на всех других Дельфи самая крутая (что ДАЛЕКО не так), и что... Ну, в общем, понятно, что причин не доверять тестам может быть много. Кому нужно - делает пусть тесты самостоятельно, или сидит на старье дальше.
Гость
> Может, потому что новая версия и должна быть как минимум не медленнее старой?

Ну это понятно, но не настолько же!
Тем более, раз ты уже 2.2.0 снёс и проверить, как компилировались екзешники, что осталисть от него, уже нельзя.
Думаю, дело в опциях компилятора.
Гость
> В общем, передумал я делать новые тесты. Все равно найдутся те, кто будет утверждать, что это все подтасовка

Красиво ушёл...
volvo
Значит, вот результаты тестов четырех компиляторов (чтоб не было разговоров о том, что я пообещал и не сделал) :
  1. GPC 3.4
  2. FPC 2.4.2 (тестировалось в режимах Delphi и ObjFPC)
  3. Virtual Pascal 2.1 (build 279)
  4. Delphi 2009

Нажмите для просмотра прикрепленного файла

Тестирование проводилось на одной и той же машине (параметры указаны выше) для сборки Release, все проверки отключены, выставлена оптимизация по скорости для процессора Pentium4, за исключением выделенного теста. Этот проводился на Debug-сборке, Range Checking (+), Stack Checking (+), I/O Checking (-), Integer Overflow Checking (+), галочка "Generate smaller code" снята, для генерации наиболее быстрого кода....

Немного изменен также формат выводимых значений. Чтобы программа собиралась всеми вышеупомянутыми компиляторами, я замерял количество тиков процессора и выводил мега-тики: число тиков, прошедших от начала теста до его завершения, разделенное на 220 (по аналогии байты/мегабайты), чтоб в нулях не запутаться.

P.S. С тестом SciMark придется немного подождать, мне пока не удалось его откомпилировать в GPC. Как только удастся - сразу опубликую результаты.
Polinom2686
Особенно впечатлил результаты теста "Floating point".
Двукратный отрыв Virtual Pascal от FPC и огроменное отставание Delphi.
volvo
Мне кажется, ты неправильно интерпретируешь результаты. Это - не производительность тестов (в МегаФлопсах), как у SciMark2. Это - время выполнения операций в тиках. Так что на Floating Point Test как раз не VP обгоняет FPC, а наоборот, FPC в два раза быстрее. А Дельфи - вообще рвет всех на куски.

Вот со строками - да, FPC быстрее (в родном, ObjFPC режиме) всех остальных.
TarasBer
Про вещественные числа интересно.
У всех, кроме Дельфи, куча незаинлайненных процедур из одной команды? Или Дельфи научилась использовать всю глубину стека сопроцессора и ССЕ?
Polinom2686
Цитата(volvo @ 20.11.2010 11:29) *

Мне кажется, ты неправильно интерпретируешь результаты. Это - не производительность тестов (в МегаФлопсах), как у SciMark2. Это - время выполнения операций в тиках. Так что на Floating Point Test как раз не VP обгоняет FPC, а наоборот, FPC в два раза быстрее. А Дельфи - вообще рвет всех на куски.

Вот со строками - да, FPC быстрее (в родном, ObjFPC режиме) всех остальных.


Теперь понятно. А я уж думал, что FPC настолько крут, что даже Delphi рвет на лоскуты. lol.gif
volvo
Кстати, в режиме оптимизации -O3 FreePascal научился-таки оптимизировать хвостовую рекурсию, сводя ее к итерации. Тестировалось на функции Аккермана:

function Ack(n, m: LongWord): LongWord;
begin
if n = 0 then Result := m + 1
else
if m = 0 then
Result := Ack(n - 1, 1)
else
Result := Ack(n - 1, Ack(n, m - 1))
end;

// ...
Value := Ack(3, 12);

FPC 2.4.2, Release-сборка с оптимизацией Level1 выполняется за 15475 МегаТиков, проигрывая Дельфи (Дельфийская Release сборка, максимально оптимизированная, выполняется за 10915 МегаТиков).

В то время как FPC в режиме оптимизации Level1 + Level3 выполняется в 3 раза быстрее первоначального времени, за 5284 МегаТика.
Aelita
Интересные данные!
Немного жаль, что в последней таблице нет каких-либо из старых версий Free Pascal blink.gif
volvo
Aelita, какие компиляторы и какие их параметры тебя интересуют?

Прогнал на том же тесте FPC 1.0.10, результаты прикрепляю:
Aelita
Гран мерси! good.gif
Меня как раз интересовал Free Pascal 1.0.10, а также другая вершина его истории -- 2.2.4.
Игорь
Случайно мышкой изменил размер окна FPC и теперь не могу изменить его в настройках. Когда пытаюсь это сделать появляется сообщение, что произошла какая-то ошибка. Что делать?
volvo
Цитата
Когда пытаюсь это сделать появляется сообщение, что произошла какая-то ошибка. Что делать?
Ну, раз какая-то ошибка - то что-то делать... Будет информация об ошибке конкретнее - будет конкретный ответ.
Игорь
Options-Environment-Preferences...

Вот это сообщение:

Program generated a signal 291.
Save your sources and restart the IDE.
volvo
А зачем тебе ТАМ менять размеры, если ты ТУДА не заходя, изменил размер мышью? Закрой FPC, зайди в свойства ярлыка, которым он запускается, и на вкладке Layout установи нужные размеры экранного буфера и самого окна:
Нажмите для просмотра прикрепленного файла

Жми Ok и запускай заново FPC...
Гость
Спасибо. Даже не знал, что там такое есть.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.