FPC 2.6.0

Mitteilungen und Ankündigungen
Antworten
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

FPC 2.6.0

Beitrag von monta »

Hello,

first, FPC core wants to wish a happy 2012!

To start the new year with a bang, a new major release
of Free Pascal, version 2.6.0, was uploaded to our FTP servers.

Changes that may break backwards compatibility are documented at:
http://wiki.freepascal.org/User_Changes_2.6.0

For Downloads, please use the FTP server at

ftp://freepascal.stack.nl/pub/fpc/dist/2.6.0/

and sourceforge

https://sourceforge.net/projects/freepascal/files/

as much possible.

Enjoy!

The Free Pascal Compiler Team


Free Pascal Compiler

Version 2.6.0

******************************************************************************
What's New in 2.6.0
******************************************************************************

Free Pascal 2.6.0 is a new major version of the Free Pascal compiler.

Please also see http://wiki.freepascal.org/User_Changes_2.6.0 for a list
of changes that may affect the behaviour of previously working code, and
how to cope with these changes.

Some highlights are:

Platforms:
* iPhoneSimulator target

Compiler:
* Many new language features:
* Objective-Pascal dialect, supported on all Mac OS X and iOS targets
* constref parameter modifier for "const by reference"
* Pascal boolean types with multiple sizes (boolean16/32/64)
* ISO 7185 language mode (except for I/O). Features amongst others:
* nested procedure variables
* non-local goto's
* Mac Pascal mode improvements
* nested procedure variables
* univ modifier
* Intrinsics
* sar (shift arithmetic right)
* bsf/bsr (bitscan forward/reverse)
* Delphi compatibility mode improvements
* Nested types, class variables and class local constants
* Advanced records syntax (no constructors yet)
* (for..in) Enumerators in records
* Class and record helpers
* Generic records, arrays and procedural types
* Delphi-compatibility of generics improved
* Scoped enumerations
* Custom messages for "deprecated" directive
* Ability to use "&" for escaping keywords
* New ARM code generator features
* ARM VFPv2 and VFPv3 floating point unit support
* Thumb-2 support

Packages:
* Many improvements to the rtl
* Many improvements to the database units (fcl-db)
* Objective-Pascal interfaces to Foundation, AppKit, CoreData and WebCore
* OpenGL headers updated to OpenGL 4.0

Details about these new features can be found at
http://wiki.freepascal.org/FPC_New_Features_2.6.0

See http://bugs.freepascal.org/changelog_page.php for the list of reported
bugs that have been fixed in this release.
Johannes

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: FPC 2.6.0

Beitrag von carli »

Ich bin diesmal nicht so von der Feature-Matrix überzeugt.

Ich bräuchte so langsam mal ordentliche Code-Optimierung, insbesondere für Mengen. Und wenn das FPC-Team das nicht hinbekommt, weil es zu viel Arbeit ist, dann sollen die endlich mal ein LLVM-Backend bauen, mit dem ich die nötige Performance herausbekomme. Selbst bei der String-Performance, der Stärke von FPC, ist FPC 2x langsamer als optimierter Java-Code und 4x langsamer als C++.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: FPC 2.6.0

Beitrag von mse »

carli hat geschrieben:Selbst bei der String-Performance, der Stärke von FPC, ist FPC 2x langsamer als optimierter Java-Code und 4x langsamer als C++.

Das interessiert mich sehr, kannst du den Testcode zeigen?

Martin

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: FPC 2.6.0

Beitrag von carli »

mse hat geschrieben:
carli hat geschrieben:Selbst bei der String-Performance, der Stärke von FPC, ist FPC 2x langsamer als optimierter Java-Code und 4x langsamer als C++.

Das interessiert mich sehr, kannst du den Testcode zeigen?

Martin


Ich bin momentan nicht zu Hause, aber du kannst dir den Code selbst zusammenreimen, es ist eine Art Escaper:
Ein konstanter String wird Zeichen für Zeichen durchgegangen und gewisse "verbotene" Zeichen durch eine Ziel-Zeichenfolge ersetzt.

Die FPC-Version schien am Anfang wirklich die Nase vorn zu haben, wenn man bei den Strings einfach += macht. Allerdings war in Java und C++ empfohlen, den StringBuilder (Java) bzw. den Stringstream (C++) zu benutzen, wodurch die gute Performance dann zustande kam.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: FPC 2.6.0

Beitrag von mschnell »

carli hat geschrieben:wenn man bei den Strings einfach += macht.

Das kann auch keine gute Performace bringen, weil der String ja immer wieder verlängert werden mus und ein re-allocate oft ein Kopieren erfordert.

Besser erzeugst Du mit SetLength gleich einen String mit ausreichender Länge und trägst die Zeichen einzeln ein (ich gehe davon aus, das Du keine Unicode-Strings verwendest, sonst wird das sowieso furchtbar). Am Ende wird der String mit SetLength wieder auf die richtige Länge gekürzt.

-Michael

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: FPC 2.6.0

Beitrag von mse »

carli hat geschrieben:Ich bin momentan nicht zu Hause, aber du kannst dir den Code selbst zusammenreimen, es ist eine Art Escaper:
Ein konstanter String wird Zeichen für Zeichen durchgegangen und gewisse "verbotene" Zeichen durch eine Ziel-Zeichenfolge ersetzt.

So:

Code: Alles auswählen

ansistringvar[n1based]:= 'C';

? Da muss bei jeder Zuweisung auf uniquestring geprüft werden.
Probiere mal

Code: Alles auswählen

pansichar(pointer(ansisstringvar))[n0based]:= 'C';

Dabei musst du aber selbst sicherstellen, dass ansisstringvar einen referencecount von 1 hat, beispielsweise mit dem eventuell sowieso benötigten setlength().
Zuletzt geändert von mse am Fr 3. Feb 2012, 16:25, insgesamt 1-mal geändert.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: FPC 2.6.0

Beitrag von mse »

mschnell hat geschrieben:ich gehe davon aus, das Du keine Unicode-Strings verwendest, sonst wird das sowieso furchtbar).


Warum denn? Die oben geschilderte Methode funktioniert auch mit UnicodeString und PUnicodeChar.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: FPC 2.6.0

Beitrag von theo »

mse hat geschrieben:
mschnell hat geschrieben:ich gehe davon aus, das Du keine Unicode-Strings verwendest, sonst wird das sowieso furchtbar).


Warum denn? Die oben geschilderte Methode funktioniert auch mit UnicodeString und PUnicodeChar.


mschnell fand schon immer und grundsätzlich alles furchtbar, was mit Unicode zusammenhängt.
Da spielen irgendwelche Details gar keine Rolle. Das ist eher ein Art Phobie. :lol:

Antworten