Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ FPC 2.4.2

Автор: volvo 16.11.2010 13:24

12 ноября 2010 вышла новая версия FPC: http://freepascal.org/download.var

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

type
T = class
Abstract: Integer;
end;

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

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

3. Заявлено наличие давно обсуждаемого цикла http://freepascal.org/docs-html/ref/refsu50.html#x121-13100010.2.5 , посмотрим, работает ли он на самом деле.

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

Об основных изменениях можно прочесть здесь (англ): http://wiki.freepascal.org/User_Changes_2.4.2#Abstract_and_Sealed_class_modifiers


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


Update:
Вот результаты того же самого теста http://math.nist.gov/scimark2/about.html
(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 16.11.2010 20:12

Теперь - результаты еще одного теста. Когда-то мы с его помощью тестировали быстродействие разных компиляторов Паскаля друг относительно друга, сейчас мне просто интересно как 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 19.11.2010 20:11

Цитата(volvo @ 16.11.2010 16:12) *

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


Ну, за язык никто не тянул. Так что ждем вас с результатами тестов. smile.gif

Автор: Гость 19.11.2010 21:23

Какая версия дельфи, и почему трёхкратный слив по строкам? Даже если бы дельфа делала юникод, а ФПЦ нет, был бы лишь 2кратный слив.

Автор: volvo 19.11.2010 21:42

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

Автор: Гость 19.11.2010 22:01

А, понял.
Тогда почему 2.4.2 втрое делает 2.2.0 почти на всех тестах? И вообще, каковы результаты для всех отключённых проверок, при максимальной оптимизации? А то сравнивать с проверками некорректно, может, 2.2.0 из-за них сливает.

Автор: volvo 19.11.2010 22:10

Цитата
Тогда почему 2.4.2 втрое делает 2.2.0 почти на всех тестах?
Может, потому что новая версия и должна быть как минимум не медленнее старой? Вот 2.4.2 и быстрее чем 2.2.0, причем намного. Перепроверить с отключенными проверками не смогу, я уже снес 2.2.0, и 2.4.0, две версии вместе не уживаются.

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

Автор: Гость 19.11.2010 22:14

> Может, потому что новая версия и должна быть как минимум не медленнее старой?

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

Автор: Гость 19.11.2010 22:27

> В общем, передумал я делать новые тесты. Все равно найдутся те, кто будет утверждать, что это все подтасовка

Красиво ушёл...

Автор: volvo 20.11.2010 4:40

Значит, вот результаты тестов четырех компиляторов (чтоб не было разговоров о том, что я пообещал и не сделал) :

  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 20.11.2010 12:15

Особенно впечатлил результаты теста "Floating point".
Двукратный отрыв Virtual Pascal от FPC и огроменное отставание Delphi.

Автор: volvo 20.11.2010 15:29

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

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

Автор: TarasBer 20.11.2010 16:40

Про вещественные числа интересно.
У всех, кроме Дельфи, куча незаинлайненных процедур из одной команды? Или Дельфи научилась использовать всю глубину стека сопроцессора и ССЕ?

Автор: Polinom2686 21.11.2010 2:14

Цитата(volvo @ 20.11.2010 11:29) *

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

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


Теперь понятно. А я уж думал, что FPC настолько крут, что даже Delphi рвет на лоскуты. lol.gif

Автор: volvo 21.11.2010 4:21

Кстати, в режиме оптимизации -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 28.11.2010 1:35

Интересные данные!
Немного жаль, что в последней таблице нет каких-либо из старых версий Free Pascal blink.gif

Автор: volvo 29.11.2010 1:48

Aelita, какие компиляторы и какие их параметры тебя интересуют?

Прогнал на том же тесте FPC 1.0.10, результаты прикрепляю:



Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Aelita 30.11.2010 7:35

Гран мерси! good.gif
Меня как раз интересовал Free Pascal 1.0.10, а также другая вершина его истории -- 2.2.4.

Автор: Игорь 11.12.2010 0:55

Случайно мышкой изменил размер окна FPC и теперь не могу изменить его в настройках. Когда пытаюсь это сделать появляется сообщение, что произошла какая-то ошибка. Что делать?

Автор: volvo 11.12.2010 1:23

Цитата
Когда пытаюсь это сделать появляется сообщение, что произошла какая-то ошибка. Что делать?
Ну, раз какая-то ошибка - то что-то делать... Будет информация об ошибке конкретнее - будет конкретный ответ.

Автор: Игорь 11.12.2010 1:29

Options-Environment-Preferences...

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

Program generated a signal 291.
Save your sources and restart the IDE.

Автор: volvo 11.12.2010 1:54

А зачем тебе ТАМ менять размеры, если ты ТУДА не заходя, изменил размер мышью? Закрой FPC, зайди в свойства ярлыка, которым он запускается, и на вкладке Layout установи нужные размеры экранного буфера и самого окна:
Прикрепленное изображение

Жми Ok и запускай заново FPC...

Автор: Гость 11.12.2010 16:44

Спасибо. Даже не знал, что там такое есть.