Only Delphi 7 and Delphi 2007 patches exists till now, since I need the original source files, in order to create the patches (by design).
In order to install them, you MUST have a true Delphi 7/2007 installation in your PC, then launch the SynopseRTL.EXE file. This file will check for the Delphi source files and ask for a destination folder. Keep the destination Directory name short(aka D:\Dev\Lib) for easy maintenability. Then launch syscomp.bat to compile the enhanced special System.dcu and SysInit.dcu files.The original source files are needed: this installation package only contains the diffs made to these files.
In order to check which version you must download, go to the source folder of your distribution (go to you distribution CD and browse the folders into the program files\Borland\Delphi7\Source\Rtl\Sys\ folder, or the corresponding directory on your running installation), and check the System.pas file date.
If the System.pas file month and year are 08/2002, download SynopseRTL082002.exe
If the System.pas file month and year are 09/2002, download SynopseRTL092002.exe
If the System.pas file month and year are 04/2004, you should have already applied the 7.1 update: try to download SynopseRTL042004.exe
You can download the compiled System.dcu and SysInit.dcu (for Delphi 7) from SynopseRTLdcu.zip.
The patcher for Delphi 2007 System.pas and SysInit.pas is SynopseRTL2007.exe.
These updated System.pas and SysInit.pas files should work with every version of the Delphi compiler, from 3 to 2007 (not Delphi 2009/2010, since the Unicode changed a lot the way these files did exist). I've only checked Delphi 7 and Delphi 2007. So if you were able to use them with other Delphi compiler versions, send me some feed back, please!
Comments and questions are welcome on our forum, as usual (comments below have been closed due to spamming).
12 reactions
1 From Dig - 20/01/2010, 10:41
I have downloaded SynopseRTLdcu.zip. When I click Install button the error: "SysInit.pas: CRC error 6 (begin source)" occurs.
2 From A. Bouchez - 20/01/2010, 10:52
In the SynopseRTLdcu.zip file, you don't have any install button: these are two dcu files.
Which version of Delphi do you use? What are the time and date of your source files? Read above to select the exact patch you need.
3 From Dig - 20/01/2010, 15:28
Sorry, the file is SynopseRTL042004.exe. Delphi 7.1
4 From Claudio - 21/01/2010, 00:09
Enhanced runtime dont work in my delphi 7 installation, diferent date source files exist and any of tree instalation files abort with "xxx.pas CRC error" (diferent file.pas on each one).
I understand that install chech source file and try to merge source file with dif file, may be abort ocurr here.
Can you tellme the merge command to try manual merge?
My delphi ver is 7.0 (build 8.01) from about menu and 7.0.8.1 from delphi32.exe.
Basic install plus delphi 7.1 update.
5 From A. Bouchez - 21/01/2010, 07:00
Some of you have problems with patches from Delphi 7.1 version. The most simple is to get the source files from the installation CD itself, before any update to 7.1. There seems to be differences between CDs distributed in diverse languages... Sorry!
You can email me arnaudATbouchezDOTinfo the version which is not recognized by any patcher.
6 From A. Bouchez - 13/02/2010, 14:45
I've modified the patches for the 09/2002 version.
There was a problem with the ComCtrls.pas unit from which the patch was made.
No CRC error should be triggered now from the official Delphi 7 source CD.
Don't hesitate to email me if your version is not recognized by any patcher!
7 From d.carstensen - 21/03/2010, 11:01
The patcher doesn't work neither for my german D7 nor for D2007.
I've sent you the system.pas and sysinit.pas files. Do you received them? Is there a diff file to do patching manualy?
Thanks & Best regards
Dirk Carstensen
8 From A. Bouchez - 21/03/2010, 11:32
I replied to your email the same day I received it.
I think my IP address is blacklisted in some databases, because my ISP gave me an IP which was previously used by another infected computer... I don't think this blacklisting procedure a good idea for dynamic IP addresses...
I'll send back this email to you via Webmail....
9 From Vu Thuong - 15/05/2010, 09:13
Interesting and look so promising that I tried to figure out how much faster the new system units actual are. I write a small program as below:
----
start:=GetTickCount();
l:=1000000;
SetLength(list,l);
for i:=0 to l-1 do
begin
j:=1+Random(500);
SetLength(s,j);
list[i]:=s;
end;
for i :=0 to l-1 do
begin
Delete(list[i],1,Length(list[i])-1);
end;
stop:=GetTickCount();
writeln('Time elapsed for ',l,' elements = ',(stop-start),' ms');
readln;
{Result:
- Borland System unit (2006) <700 ms for 1 million elements
- "Enhanced" System unit ~ 2400 ms!
}
----
The result really surprised me. The new system units slow down the operation significantly! How it could be?
(here is no mix-match possible because I remove the new System units path from the Lib Path than rebuild the program)
One strange thing of my Delphi 7 system is that the system unit is of 04/23/2004 but its source is of 2006; maybe the result of some second fix for the Delphi 7 update 1.
Any ideas?
10 From A. Bouchez - 15/05/2010, 10:20
What you tested above was the speed of the memory manager.
{$define HEAPMEMMANAGER}
// memory manager is Windows Heap*() by befault
// - a special 'slim' version of FastMM4 is used if HEAPMEMMANAGER if undefined
// - Windows Heap*() is a lot slower but produces smaller exe
// - prefered way is to use Heap*() by default, and explicitely call FastMM4
As stated in the beginning of the getmem.inc file (see this code), our RTL uses the Windows heap manager instead of the borland Delphi manager. The Windows heap manager is a lot slower. But it allows your programs to be some KB smaller, which is useful e.g. with our LVCL framework to produce tiny programs.
In a real program, you have to add the FastMM4 memory manager http://sourceforge.net/projects/fas... as your first unit in your .dpr source file.
Another possibility is to undefine HEAPMEMMANAGER at the beginning of the getmem.inc file: it will embed a "slim" FastMM4 into your program, which will faster than the delfaut memory manager.
Note that since Delphi 2006, FastMM4 is used as default the memory manager. So our RTL can allow the same with Delphi 7.
When you switch back to FastMM4, you'll see that our RTL is a bit faster than default RTL. In your sample code, most of the time is spent in the memory manager, so you won't see any big speed gain with our RTL with such a code.
11 From Vu Thuong - 15/05/2010, 11:58
That is true
When complied with FastMM4 the execution time is reduced to 500 ms (1 million record) but if combined with the new System unit, it reduced once again to just 390 ms. Really impressive!
The second speed gain is supposedly due to the string delete routine. Good job!
Thanks.
12 From A. Bouchez - 15/05/2010, 13:56
Since your test program is not multi-threaded, our RTL allows faster string reference counting (it avoids slow asm LOCK) - assign or SetLength() are therefore faster.
Thanks for your interest!