On 29.01.2011 16:08, Florian Klaempfl wrote:
Am 29.01.2011 13:25, schrieb Sven Barth:
Do you (especially @Devs) think that this is a sufficient approach or
should this be done another way? (Note: I have not yet profiled
compiling the compiler once with that search enabled and once without)
Profile compiler compilation first, then we can decide what to do.
Done. Differences are dramatic (at least on my Linux PC)
Used command:
time make cycle > /dev/null
Both variants use Revision 16834 of my branch, but variant two has the
following change:
==== patch begin ====
Index: /mnt/media/subversion/fpc-classhelpers/compiler/symtable.pas
===================================================================
--- /mnt/media/subversion/fpc-classhelpers/compiler/symtable.pas
(Revision 16835)
+++ /mnt/media/subversion/fpc-classhelpers/compiler/symtable.pas
(Arbeitskopie)
@@ -2138,12 +2138,12 @@
begin
{ search for a class helper method first if this is an Object
Pascal
class }
- if is_class(classh) then
+ {if is_class(classh) then
begin
result:=search_objectpascal_class_helper(classh,contextclassh,s,srsym,srsymtable);
if result then
exit;
- end;
+ end;}
orgclass:=classh;
{ in case this is a formal objcclass, first find the real
definition }
==== patch end ====
Results Variant 1:
Run 1:
real 5m18.444s
user 3m57.075s
sys 0m4.806s
Run 2:
real 5m5.727s
user 3m53.811s
sys 0m4.426s
Run 3:
real 5m5.094s
user 3m54.475s
sys 0m4.676s
Results Variant 2:
Run 1:
real 1m7.982s
user 0m46.024s
sys 0m4.390s
Run 2:
real 1m8.619s
user 0m46.104s
sys 0m4.513s
Run 3:
real 1m10.078s
user 0m46.290s
sys 0m4.333s
It seems rather obvious that my search algorithm isn't a good idea ^^
Perhaps searching for class helpers should be made dependent on a
modeswitch? E.g. "useclasshelpers"
That might lead to the potentially confusing behavior that a class
helper is not even found in its own unit though, although I think that
this would be a consequent behavior (the switch needs to be documented
good enough though ^^).
I think this is too dangerous.
Would you please explain why you think so?
What is the difference between the "Message*" and "CGMessage*"
procedures? Or asked differently: when should I use which?
During code generation, use CGMessage*
I hope to notice when I'm in code generation then ^^
Regards,
Sven
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel