<html>
   <head>
      <meta http-equiv="content-type" content: text/html; charset=UTF-8>
   </head>
<body>
I had some fears concerning idea development of "Dynamic packages" in
FreePascal and possible performance penalties of programs from these
changes. This why i start this discussion and try wrote some of my ideas
or/and proposal that, as i think, can help make FreePascal better.<br>
<br>
At first I would like to designate a circle of tasks which in principle can
effectively decide by means of system of dynamic packets. Lets remember for
what DLL`s and SO`s was be created. It was for memory saving (by sharing
code and static conts parts from many applications in memory). Now there is
so many memory even on phones, that this almoust have no sence (its still
work for things like LibC, ZLib and so.). But this kind of libraries better
make with C-style interface (or use COM/CORBA interfaces like in DirectX if
it`s realy needed). Yes, sometimes someone make libraries for C++ only, but
it because of a dominant position of this language. Pascal didn`t have it.
So, as i think, dynamic packages can be usefull only for something like
plugin system in editors like 3Ds Max, Photoshop and etc. But Sven Bart
wrote that "Package libraries can however only be used by a binary compiled
with the same compiler as they rely on quite a bit of compiler magic.", so
they be usefull only for projects that target to have plugins writed in
pascal only. I try to say, that there is not so many situations that we
realy need this system. I dont say that we dont need it at all, no. But
disadvantages from this system must no effect on all other projects. This
why i have some propositions.<br>
<br>
Во время моего общения с Sven Barth он писал "With dynamic packages you can
share classes, strings, memory, etc. between the modules (the main binary
and the different package libraries)". Let's look at the most widespread
operating systems. This will be Windows and Unix-family. In Windows every
application starts from ntdll.dll and walk via kernel32.dll and only after
that go to "main"-function in EXE file. So kernel32.dll always loaded. And
its already have not bad memory manager (Process heap functions group). Why
dont use it? It allow share memory with C code too (and strings with pascal
code). Its already exist in application memory. In Linux if application use
shared libraries it use libdl.so witch need libc.so. So we already have
libc heap. As i know in FreeBSD and Solaris situation same.<br>
<br>
And the second of my proposal it make dynamic packages like 2nd way in
compiler (like it maked in MSVS where we can select link CRT staticaly or
dunamicaly). Add some switch to compiler (and have 2 compiler variants of
RTL, now we have this in RTL source with {$IFDEF FPC_3_0_0} macro) that
will allow generate or not generate compiler magic for dynamic packages.
They need in not so many cases, but all this indirect memory accesses make
all applications slow (memory, first of all memory latency, in bottleneck
of all today computers).<br>
<br>
Regards,<br>
Roman<br>
<br>
<div id="Signature"><div id="Text"></div></div>
</body>
</html>