Hi there,
after doing a bit more profiling, I am beginning to realize just *how*
inefficient some of the central C++ code in TeXmacs is:
a) For the central data types (string, tree, etc), nearly all routines
should be defined as "inline" in the header files. The cleanest and
simplest solution that I see would be to introduce additional files like
string.inc.hpp that contain many of the routines that are currently
defined in string.cpp and include this at the end of string.hpp. That
way, the header file would not become cluttered, but the compiler could
still do heavy inlining on these routines.
b) Profiling indicates that the program spends a tremendous amount of
time on reference counting and deallocation. Moving to a garbage
collector would significantly simplify the code and should result in
quite some speedup. Especially for interactive programs, garbage
collection is the fastest memory management strategy available since all
the collecting is simply happening in idle time and the time critical
code does not need to worry about deallocation at all.
c) The string class is a significant bottleneck. Every time a (char*) is
converted, the data is copied to a newly allocated location. In most
cases, this could be avoided by simply copying a pointer. This would
mean that the string_rep class would need to carry a flag on whether the
space is "owned" (and should be deallocated) or just "borrowed". I
certainly is a non-trivial task to sort this out, but I believe it would
be the single-most-rewarding detail in optimizing for performance.
... just my analysis for the moment. I know that it would mean
significant work to work on any of this...
Greetings,
Norbert
_______________________________________________
Texmacs-dev mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/texmacs-dev