Andre Poenitz wrote:
On Tue, Oct 02, 2007 at 08:11:47AM +0200, Abdelrazak Younes wrote:
Andre Poenitz wrote:
The attached patch replaces the signal/slot connections between Buffer
and BufferView to LyXView by ordinary delegates.
There has always been only (at most) a single connection of each type
with known endpoints, so full-blown signal/slot was overkill anyway -
I am sorry but that's not true for Buffer. With multi-workarea and
multi-view there can be more than one connection to the
Buffer::changed() signal.
The signal was only attached to the LyXView, not to the workarea.
Wrong, in WorkArea.h:
/// buffer changed signal connection
boost::signals::connection bufferChangedConnection_;
/// buffer closing signal connection
boost::signals::connection bufferClosingConnection_;
I did not change the structure of the code.
You did a bit I'm afraid.
at least given the price of boost's signal/slot:
As boost/signal pulls in roughly 50 kLOC into both Buffer.h and
BufferView.h which in turn heavily used throughout the code.
So the change reduces "TLOCC" from 24.6M to 22.5M, i.e. by more than 9%!
There might be a few simplifications possible after that, but I wanted
to keep the patch small.
Please wait with that until we understand the full repercussion of that
change. I really sympathize with your compil time reduction goal but I
don't think this is the right solution:
* For one, you are working around a compiler that do not implement pch
efficiently. I am pretty sure MSVC will not be affected much by your patch.
But I am not compiling with MSVC, and if MSVC is "not (adversely)
affected" that's completely sufficient. [Apart from that: also MSVC
will benefit a bit by not having certain stuff to compile into pch,
and finally by not having to compile boost/signal at all]
As I said, I agree with that goal but your solution is rather radical.
* Second, did you tried a more recent version of gcc? Gcc 4.2 seems good
on the paper.
No, I haven't. But I don't think I will. We have been promised "good
gcc" for 15 years or so. I don't believe that anymore.
I can't help you here :-)
* Third, I don't know if you remember but I worked an awful lot to get
rid of the WorkArea and LyXView dependency in the core. You are
basically putting them back :-(
Heck, no. As I said: I did not change the structure of the code. All
dependencies that are in the code now have been there before.
And also note that I did use separate interfaces for the delegates (_even_
if only LyXView implements them) exactly for that reason.
I understand that (except for Buffer::changed() and closing()) and
that's actually what I said just here:
On the third point, I understand this is not exactly the same thing. The
problem with boost signals is that they need full visibility of the
objects so we cannot put them in a private implementation. OK, so let's
focus on the signal solution itself:
- BufferView: I think that most if not all the signal could go with some
more cleanup. This is the right way forward IMO.
- Buffer: only the changed() signal is important. One solution would be
to have a centralized Buffer manager that will track the WorkAreas
connected to it and update them if need be. This will avoid the need for
this signal in particular. All other signals could and should be removed.
I hope you are not too upset with my reaction.
I am not. I read that that I am 80% going in the right direction, and
the remaining bit (multiple buffers) would need a new implementation
anyway as we are currently connecting via (a single!) LyXView to the
current WorkArea only.
Wrong, see above. You can have two WorkAreas sharing the same Buffer in
the same LyXView. I'd really like this to stay.
The idea of having a BufferManager (which I agree
with) is not affected with that patch.
OK.
Abdel.