Сравнение FPC и Delphi 5

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Сообщение Иван Шихалев » 17.05.2006 07:52:40

bara-igor писал(а):Согласно документации FPC, это аналог Pascal7.0 и Delphi7.0.


Это где в документации такое?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Сообщение Sphinx » 17.05.2006 17:01:20

Free Pascal :
Users’ manual for Free Pascal, version 2.0.2
Document version 2.0
November 2005

7.2 Porting Delphi Code
Porting Delphi code should be quite painless. The Delphi mode of the compiler tries to mimic
Delphi as closely as possible. This mode can be enabled using the -Mdelphi command line switch,
or by inserting the following code in the sources before the unit or program clause
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF FPC}
This ensures that the code will still compile with both Delphi and FPC.
Nevertheless, there are some things that will not work. Delphi compatibility is relatively complete
up to Delphi 7. New constructs in higher versions of Delphi (notably, the versions that work with
.NET) are not supported.

7.2.1 Missing language constructs
At the level of language compatibility, FPC is very compatible with Delphi: it can compile most of
FreeCLX, the free Widget library that was shipped with Delphi 6,7 and Kylix.
Currently, the only missing language constructs are
1. The Dispinterface interface.
2. Delegation of interfaces is not supported.
3. Dynamic methods are actually the same as virtual.
4. Reintroduce is not supported.
5. Const for a parameter to a procedure does not necessarily mean that the variable or value is
passed by reference.
6. Packages are not supported.
There are some inline assembler constructs which are not supported, but since Free Pascal is designed
to be platform independent, it is quite unlikely that these constructs will be supported in the future.
Note that the -Mobjfpc mode switch is to a large degree Delphi compatible, but is more strict than
Delphi. The most notable differences are:
1. Parameters or local variables of methods cannot have the same names as properties of the class
in which they are implemented.
2. The address operator is needed when assigning procedural variables (or event handlers).
3. AnsiStrings are not switched on by default.
7.2.2 Missing calls/API incompatibilities
Delphi is heavily bound to Windows. Because of this, it has introduces a lot of Windows-isms in the
API (e.g. file searching and opening, loading libraries).
Free Pascal was designed to be portable, so things that are very Windows specific are missing, although
the Free Pascal team tries to minimize this. The following are the main points that should be
considered:
• By default, Free Pascal generates console applications. This means that you must explicitly
enable the GUI application type for windows:
{$APPTYPE GUI}
• The Windows unit provides access to most of the core Win32 API. Some calls may have different
parameter lists: instead of declaring a parameter as passed by reference (var), a pointer
is used (as in C). For most cases, Free Pascal provides overloaded versions of such calls.
• Widestrings. Widestring management is not automatic in Free Pascal, since various platforms
have different ways of dealing with widestring encodings and Multi-Byte Character Sets. FPC
supports Widestrings, but may not use the same encoding as on Windows.
• Threads: At this moment, Free Pascal does not offer native thread management on all platforms;
on Unix, linking to the C library is needed to provide thread management in an FPC
application. This means that a cthreads unit must be included to enable threads.
• a much-quoted example is the SetLastOSError call. This is not supported, and will never
be supported.
• Filename Case sensitivity: Pascal is a case-insensitive language, so the uses clause should
also be case insensitive. Free Pascal ensures case insensitive filenames by also searching for
a lowercase version of the file. Kylix does not do this, so this could create problems if 2
differently cased versions of the same filename are in the path.
• RTTI is NOT stored in the same way as for Delphi. The format is mostly compatible, but may
differ. This should not be a problem if the API of the TypeInfo unit is used and no direct access
to the RTTI information is attempted.
• Sets are of different size than in Delphi.
• Enumerateds are of different size than in Delphi.
• In general, one should not make assumptions about the internal structure of complex types
such as records, objects, classes and their associated structure: For example the VMT table
layout is different, the alignment of fields in a record may be different, etc.
• The same is true for basic types: on other processors the high and low bytes of a word or
integer may not be on the same location as on an Intel processor (the endianness is different).
7.2.3 Best practices for porting
When encountering differences in Delphi/FPC calls, the best thing to do is not to insert IFDEF
statements whenever a difference is encountered, but to create a separate unit which is only used
when compiling with FPC. The missing/incompatible calls can then be implemented in that unit.
This will keep the code more readable and easier to maintain.
If a language construct difference is found, then the Free Pascal team should be contacted and a bug
should be reported.
Sphinx
новенький
 
Сообщения: 33
Зарегистрирован: 27.09.2005 21:52:09

Сообщение Replicator » 17.05.2006 18:56:08

Зачем столько текста? Там же еще в первых строках (там, где выделил) написано, что это в режиме совместимости с Delphi. И касется это синтаксиса и типов данных, а не производительности и пр.
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

Сообщение Romtek » 18.05.2006 17:01:07

http://forum.sources.ru/index.php?showtopic=102322&hl=%CF%D0%CE%C8%C7%C2%CE%C4%C8%D2%C5%CB%DC%CD%CE%D1%D2%DC
- Производительность компиляторов. Тесты для Delphi/FPC/TMT/VP/GPC.
Аватара пользователя
Romtek
постоялец
 
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган

Сообщение bara-igor » 27.05.2006 08:04:06

Иван Шихалев писал(а): Есть предложение: обсудить и составить набор тестов, который затрагивал бы большинство аспектов работы.
Я примерно тем же самым вынужден заниматься для Lazarus.
Можно объединить усилия. У меня другой вопрос: может ли дать, что -
то связка Lazarus + FPC? Или чучше воспользоваться встроенной возможностью в Lazarus подключить C++?
bara-igor
новенький
 
Сообщения: 63
Зарегистрирован: 04.03.2006 10:09:54

Сообщение Sniper » 27.05.2006 15:18:33

Romtek старовато конечно, ща уже компиляторы другие малясь... надо бы перепроверить если у тя есть возможность, то хотелось бы увидеть BDS 2006...

У меня его купить негде.. у меня есть только BDS 2005, FPC 2.0.2.

p.s если не трудно намыль мне те тесты с форума( ogldelphi@mail.ru ), а то регаться совсем влом %)
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Sphinx » 28.05.2006 09:01:49

Sniper писал(а):Romtek старовато конечно, ща уже компиляторы другие малясь... надо бы перепроверить если у тя есть возможность, то хотелось бы увидеть BDS 2006...
Результаты тестов из первого поста привожу ниже.
Параметры компиляции и исходные тексты программ не менялись...

[Header]
Compiler=Free Pascal Compiler Version 2.0.2
Test=Bubble Sort (integer type)
[Platform]
OS name=Windows XP
OS vers.=Type=2; Ver=5.1; build=2600; SP=Service Pack 2
CPU name=
CPU model=x86 Family 6 Model 8 Stepping 6
Frequency=1005 MHz
RAM=Phys=447 Mb; Avail=146 Mb
[Parameters]
Cycle=16000
Repeat=11
[Time]
Time0=4467
Time1=4216
Time2=4206
Time3=4136
Time4=2794
Time5=2784
Time6=2744
Time7=2644
Time8=2614
Time9=2603
Time10=2504
Median time=2784
[Results]
[0]=-2147297542
[N 7999]=-1697931
[N-1]=2147482156


[Header]
Compiler=Delphi 10 - BDS2006
Test=Bubble Sort (integer type)
[Platform]
OS name=Windows XP
OS vers.=Type=2; Ver=5.1; build=2600; SP=Service Pack 2
CPU name=
CPU model=x86 Family 6 Model 8 Stepping 6
Frequency=1005 MHz
RAM=Phys=447 Mb; Avail=151 Mb
[Parameters]
Cycle=16000
Repeat=11
[Time]
Time0=1613
Time1=1603
Time2=1602
Time3=1602
Time4=1582
Time5=1582
Time6=1582
Time7=1482
Time8=1452
Time9=1372
Time10=1362
Median time=1582
[Results]
[0]=-2147403371
[N 7999]=-13510382
[N-1]=2147359694


[Header]
Compiler=Free Pascal Compiler Version 2.0.2
Test=Bubble Sort (int64 type)
[Platform]
OS name=Windows XP
OS vers.=Type=2; Ver=5.1; build=2600; SP=Service Pack 2
CPU name=
CPU model=x86 Family 6 Model 8 Stepping 6
Frequency=1005 MHz
RAM=Phys=447 Mb; Avail=150 Mb
[Parameters]
Cycle=14000
Repeat=11
[Time]
Time0=4116
Time1=3726
Time2=3194
Time3=2524
Time4=2423
Time5=2304
Time6=2283
Time7=2274
Time8=2263
Time9=2253
Time10=2233
Median time=2304
[Results]
[0]=-2147295768
[N 6999]=24100969
[N-1]=2147473612


[Header]
Compiler=Delphi 10 - BDS2006
Test=Bubble Sort (int64 type)
[Platform]
OS name=Windows XP
OS vers.=Type=2; Ver=5.1; build=2600; SP=Service Pack 2
CPU name=
CPU model=x86 Family 6 Model 8 Stepping 6
Frequency=1005 MHz
RAM=Phys=447 Mb; Avail=149 Mb
[Parameters]
Cycle=14000
Repeat=11
[Time]
Time0=2423
Time1=2244
Time2=2173
Time3=2153
Time4=2153
Time5=2143
Time6=2143
Time7=2133
Time8=1973
Time9=1892
Time10=1883
Median time=2143
[Results]
[0]=-2146208140
[N 6999]=-1762647
[N-1]=2146352316


[Header]
Compiler=Free Pascal Compiler Version 2.0.2
Test=Bubble Sort (double type)
[Platform]
OS name=Windows XP
OS vers.=Type=2; Ver=5.1; build=2600; SP=Service Pack 2
CPU name=
CPU model=x86 Family 6 Model 8 Stepping 6
Frequency=1005 MHz
RAM=Phys=447 Mb; Avail=153 Mb
[Parameters]
Cycle=9000
Repeat=11
[Time]
Time0=931
Time1=922
Time2=921
Time3=892
Time4=891
Time5=871
Time6=842
Time7=811
Time8=811
Time9=801
Time10=791
Median time=871
[Results]
[0]=0,000245
[N 4499]=1
[N-1]=1


[Header]
Compiler=Delphi 10 - BDS2006
Test=Bubble Sort (double type)
[Platform]
OS name=Windows XP
OS vers.=Type=2; Ver=5.1; build=2600; SP=Service Pack 2
CPU name=
CPU model=x86 Family 6 Model 8 Stepping 6
Frequency=1005 MHz
RAM=Phys=447 Mb; Avail=153 Mb
[Parameters]
Cycle=9000
Repeat=11
[Time]
Time0=892
Time1=891
Time2=881
Time3=861
Time4=861
Time5=772
Time6=771
Time7=771
Time8=761
Time9=751
Time10=751
Median time=772
[Results]
[0]=0,000200
[N 4499]=0,499043
[N-1]=0,999857


[Header]
Compiler=Free Pascal Compiler Version 2.0.2
Test=Bubble Sort (AnsiString type)
[Platform]
OS name=Windows XP
OS vers.=Type=2; Ver=5.1; build=2600; SP=Service Pack 2
CPU name=
CPU model=x86 Family 6 Model 8 Stepping 6
Frequency=1005 MHz
RAM=Phys=447 Mb; Avail=151 Mb
[Parameters]
Cycle=1800
Repeat=11
[Time]
Time0=2493
Time1=2293
Time2=2203
Time3=2183
Time4=2174
Time5=2173
Time6=2163
Time7=2163
Time8=2053
Time9=1923
Time10=1863
Median time=2173
[Results]
[0]=AADGTBIOXOFASDOW
[899]=MOPCRUNHSYGYLRAT
[N-1]=YYUDOVCTCMBTDTPP


[Header]
Compiler=Delphi 10 - BDS2006
Test=Bubble Sort (AnsiString type)
[Platform]
OS name=Windows XP
OS vers.=Type=2; Ver=5.1; build=2600; SP=Service Pack 2
CPU name=
CPU model=x86 Family 6 Model 8 Stepping 6
Frequency=1005 MHz
RAM=Phys=447 Mb; Avail=152 Mb
[Parameters]
Cycle=1800
Repeat=11
[Time]
Time0=2283
Time1=2063
Time2=2053
Time3=2053
Time4=2043
Time5=2043
Time6=2033
Time7=2023
Time8=1853
Time9=1843
Time10=1752
Median time=2043
[Results]
[0]=AAQIDIEXOTDLGTWY
[899]=LXPAPOOJILJFPBHL
[N-1]=YYNMSMDJUTTHMWSB


продолжение позже...
Sphinx
новенький
 
Сообщения: 33
Зарегистрирован: 27.09.2005 21:52:09

Сообщение haword » 29.05.2006 08:43:54

Делфя рвет фрипаскаль :)
haword
постоялец
 
Сообщения: 301
Зарегистрирован: 02.03.2006 11:34:40

Сообщение Replicator » 29.05.2006 16:43:03

Не удивительно. Им же не надо думать о переносимости, часто в ущерб производительности.

Только вот толку. Кому сейчас интересно, что такая-то программа работает на пол секунды дольше? Зато очень даже приятно, когда одна и таже программа есть в любой ОС. Очень приятно, что мне не нужно писать одну и туже программу два и более раза - для каждой ОС - и каждый раз по другому.
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

Сообщение Sniper » 29.05.2006 18:04:10

Replicator писал(а):Кому сейчас интересно, что такая-то программа работает на пол секунды дольше?

Мне. Игры, очень много считают математики... разношёрстной и тем более не целочисленную, а с плавающей точкой. Да, конечно, она оптимайзится под инструкции, инлайнится хорошо, но хочется большего...

Не не надо мне говорить, чтобы я переходил на C++ и ICC компилятор...
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Replicator » 30.05.2006 13:06:24

И не буду :D Только вот для игр применяются специальные движки, написанные с использованием разных языков. И там, где надо с асмом, там, где надо - с С, там где можно, чем-нибудь еще. А для несложных игр и fpc достаточно.
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

Сообщение Mirage » 02.06.2006 09:37:22

В играх главное акселератор нагрузить правильно, и следить чтобы не простаивал GPU или CPU. А выигрыш в два раза (малореально даже для C++ vs Delphi) в остальном - даст 2-5 фпс прироста. А если у тебя серьезный проект, то вообще все время на вызовы DIP'ов уйдет...
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Сообщение Иван Шихалев » 02.06.2006 15:44:22

bara-igor писал(а):Или чучше воспользоваться встроенной возможностью в Lazarus подключить C++?

Правда? Что-то я об этом не слышал.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Сообщение Sergei I. Gorelkin » 12.06.2006 22:57:47

Иван Шихалев писал(а):
bara-igor писал(а):Или чучше воспользоваться встроенной возможностью в Lazarus подключить C++?

Правда? Что-то я об этом не слышал.


Наверное речь идет о линковке внешних .obj файлов. Тут у FPC дела обстоят существенно лучше, чем у Дельфи, хотя напрямую с C++ это не связано. Так или иначе придется сооружать переходник.

... А я вот занимаюсь вполне прозаической задачей - XML компонентами для FCL (часть результатов уже лежит в svn, ежели кто решит поискать там баги - добро пожаловать :) ) Соответственно с целью тестирования загружаю XML файлик побольше и потом его записываю обратно. Ну и замерил быстродействие этого процесса. Получилось, что при чтении FPC несколько уступает Дельфе, но на записи оказался в 2 (!!) раза быстрее. Я попытался было подключить профайлер, но что-то в этом деле не преуспел (профайлер не нашел общего языка с системой и повесил ее наглухо... не каждый день это случается...). Потом попробовал FastMM, с ним Дельфи заработала шустрее, но все равно не смогла догнать FPC (осталась разница где-то 15%). Мораль? Мораль в том, что код ужасно кривой, раз настолько зависит от менеджера памяти... Но направление дальнейшей деятельности намечено.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Пред.

Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru