> On Sept. 15, 2013, 10:29 a.m., Frank Reininghaus wrote:
> > Thanks for your cool work on QCollator! It will be interesting to see how 
> > much we can gain by using QCollatorSortKey for sorting large sets of 
> > QStrings :-)
> > 
> > I'm not really familiar with most of the affected code, and I couldn't test 
> > it yet (frameworks currently does not build for me, but it's most likely an 
> > issue with my system which can fixed by doing a clean build), but here are 
> > some things that I noticed:
> > 
> > (a) Is there a reason why you use a helper class to wrap the QCollator in 
> > kfile/kurlnavigatorbutton.cpp, but pass the QCollator directly to the sort 
> > function in other places?
> > 
> > (b) I'm wondering how cheap it is to initialize a QCollator. Could existing 
> > code outside of kdelibs that uses KStringHandler::naturalCompare() for 
> > sorting become slow if that happens N*log(N) times?
> > 
> > (c) Something that was not clear to me at all when I first heard about 
> > QCollator is that its behavior will depend on whether ICU headers were 
> > installed when Qt was built or not, and that things like 
> > setNumericMode(true) will simply be ignored (with a warning printed to the 
> > terminal) if ICU was not available then. Even worse: 
> > QCollator::numericMode() returns true in that case, but it does not use 
> > "numeric mode" for sorting at all!
> > 
> > I just found out about that when I tried to write a simple test program 
> > that sorts strings using QCollator. It did not work, and after some 
> > research I found out that this is because I only have the ICU libs, but not 
> > the headers installed on my system.
> > 
> > Now the Qt 5 packages that end up on our users' systems will probably be 
> > compiled with ICU support, but still, I have a very uneasy feeling about 
> > using a class that may or may not do what you expect, and that provides no 
> > good way to find out if it will do what you expect (as I said, 
> > QCollator::numericMode() from qcollator_posix.cpp always returns true). I'm 
> > already seeing the bug reports coming from people who built Qt from source 
> > and "forgot" (like me) to install the ICU headers before.
> > 
> > I don't see a good solution for that problem. Even if we made the ICU 
> > headers a hard dependency for frameworks, it could still be that Qt was 
> > built without ICU support.
> > 
> > Probably the best solution would be to try to get something like our 
> > KStringHandler::naturalCompare() function into qcollator_posix.cpp, to make 
> > sure that the fallback that is used if ICU isn't available actually uses 
> > "numeric mode" if it's told to?
> >
> 
> Aleix Pol Gonzalez wrote:
>     a) Well, I tried to minimize the number initializations, but I also tried 
> to reduce the code changes.
>     b) I don't have such data. It's a possibility, that it's slower. Either 
> way, the less we do, the faster it will work.
>     c) When you configure Qt, if ICU is found it will be used. I think it's 
> ok to assume that Dolphin on linux users will all have ICU available.
>     
>     I wouldn't hack around the posix backends, personally.
> 
> Frank Reininghaus wrote:
>     "I think it's ok to assume that Dolphin on linux users will all have ICU 
> available."
>     
>     If you build Qt from source, you have to install ICU headers manually in 
> order to "have ICU available" (at least if the ICU-devel package is not 
> installed by the distro by default). This means that it's very easy to end up 
> with a QCollator that does not support "numeric mode". Considering that many 
> people who contribute to KDE do build Qt from source, it will most likely go 
> wrong for some of them, so I tend to strongly disagree with the "it's ok to 
> assume..." statement. These people will notice that things don't work as 
> expected and either waste time analyzing the problem or file a bug report.
>     
>     I experienced this myself yesterday: I noticed that QCollator did not 
> work for me, and I was surprised about that because, according to the API 
> docs, "setNumericMode(true)" causes the sorting to be "natural", and it does 
> not mention any conditions that have to be fulfilled. At least I saw the 
> warning message in Konsole, but if a user/developer doesn't even see that 
> (e.g., because it gets lost in .xsession-errors), how is he/she supposed to 
> know what the cause of the problem is?
>     
>     This is all my personal opinion, and I don't actually maintain any of the 
> affected code, but I tend to think that using a class that may or may not do 
> what it actually pretends to do, depending on things that are out of our 
> control, might not be a good idea.
> 
> John Layt wrote:
>     The plan for Qt is in 5.3 to have ICU is a hard-ish dependency on Linux.  
> QLocale will use ICU for all localization on Linux, and only provide a simple 
> POSIX fallback for embedded platforms that don't want ICU.  Distro's will be 
> told that they should always build with ICU support enabled.  (We were going 
> to make ICU a hard dependency on all platforms in 5.2, but Windows devs 
> objected too much).
>     
>     This is not that different from needing the Cups headers installed if you 
> want to do any Qt printing under Linux, Qt will build without them, the API 
> won't change, and there's no way to query if you have Cups support built, but 
> when you try to print all you'll get is the option for PDF. 
>     
>     The problem really comes from Qt configure not giving very good feedback 
> on what's missing and the consequences there-of.  On Linux it auto-detects of 
> ICU headers are installed and then enables ICU support, but you can force it 
> on by using the -icu configure flag which will cause it to complain if they 
> are not found.  I think we will have to document in the build instructions 
> that KF5 works best with ICU support explicitly enabled with -icu.
> 
> Frank Reininghaus wrote:
>     Thanks for the info!
>     
>     I fully agree with Aurélien that this should be fixed in Qt (i.e., either 
> the build should fail without ICU, or QCollator should do what its API docs 
> say it does even if ICU is not available). However, I don't see why it is so 
> urgent to start using QCollator in frameworks now, before the problem is 
> fixed. Even if it helps with splitting, one could at least leave 
> KStringHandler::naturalCompare() as it is and only use QCollator in code 
> which should not depend on kcoreaddons any more.
>     
>     But if I'm the only one who thinks that it can be problematic to throw 
> away <150 lines of working and well-tested code in favor of something that 
> only works if some requirements that we have no control over are met, then I 
> will stop complaining now ;-) I'm not really involved in the frameworks 
> splitting anyway, but I had been added to this review request, so I thought 
> that I could share my opinion. Maybe I'm a bit overcautious because of my 
> frustration that is caused by the endless stream of incoming bug reports 
> which are mostly not really about bugs in Dolphin, but bugs in kdelibs, Qt, 
> various kioslaves, thumbnailers, context menu plugins and quite a few other 
> things (one user even reported a problem with the GTK+ file dialog as a 
> Dolphin bug). This is why I don't really like the idea of adding code which 
> makes us vulnerable to known problems in external libraries.

No, you're not the only one Frank. I would not recommend naturalCompare and let 
the two live side by side for a while so that it can be thoroughly tested. Your 
(Aleix) QCollator efforts are greatly appreciated, but removing naturalCompare 
is a NO-GO!

I personally know how extremely difficult it can be to mimic the naturalCompare 
function and i would be _very_ surprised if QCollator does it how it should be 
done right from the start. In other terms, i expect bugs in there simply 
because it is very complex.


- Mark


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/112717/#review40054
-----------------------------------------------------------


On Sept. 13, 2013, 5:55 p.m., Aleix Pol Gonzalez wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://git.reviewboard.kde.org/r/112717/
> -----------------------------------------------------------
> 
> (Updated Sept. 13, 2013, 5:55 p.m.)
> 
> 
> Review request for KDE Frameworks, Frank Reininghaus and Aurélien Gâteau.
> 
> 
> Description
> -------
> 
> Now that QCollator is public API, I wanted to give it a try, so I decided to 
> port all uses KStringHandler::naturalCompare() to QCollator.
> 
> All the porting was quite straightforward I'd say, the only weird part is 
> that I removed some tests of the KStringHandler tests. There are 2 kind of 
> tests disabled:
> - The ones that say that "A" == "a" in case of Qt::CaseInsensitive. ICU is 
> deterministic and it will decide itself which one goes in, so the test 
> doesn't make sense anymore.
> - There's a mention to the 237788 bug where in some cases our former 
> algorithm wouldn't be deterministic. This doesn't apply anymore, but also now 
> ICU takes care about it now, so there's little point of keeping unit testing 
> it.
> I decided to leave the unit test because it might be useful eventually 
> (although note that it was not being compiled so far). In any case we 
> probably want it out.
> 
> In any case, the rest seems straightforward enough. I didn't concentrate on 
> performance though, in some cases we'll want to use the QCollatorSortKey.
> 
> 
> Diffs
> -----
> 
>   KDE5PORTING.html 1287de7 
>   kfile/kdirsortfilterproxymodel.cpp 7c7aa5f 
>   kfile/kurlnavigatorbutton.cpp d2c27fd 
>   staging/itemviews/src/CMakeLists.txt 353a413 
>   staging/itemviews/src/kcategorizedsortfilterproxymodel.h a21e7ca 
>   staging/itemviews/src/kcategorizedsortfilterproxymodel.cpp c8b652d 
>   staging/itemviews/src/kcategorizedsortfilterproxymodel_p.h eb1a67b 
>   staging/kcompletion/src/kcompletion.cpp 5f60a6c 
>   staging/xmlgui/src/kshortcutsdialog_p.h ab102bc 
>   staging/xmlgui/src/kshortcutseditoritem.cpp e89a8aa 
>   tier1/kcoreaddons/autotests/CMakeLists.txt 19227dc 
>   tier1/kcoreaddons/autotests/kstringhandlertest.cpp d12f086 
>   tier1/kcoreaddons/src/lib/text/kstringhandler.h 1b08f6f 
>   tier1/kcoreaddons/src/lib/text/kstringhandler.cpp 2f192aa 
> 
> Diff: http://git.reviewboard.kde.org/r/112717/diff/
> 
> 
> Testing
> -------
> 
> Builds, affected tests pass.
> 
> 
> Thanks,
> 
> Aleix Pol Gonzalez
> 
>

_______________________________________________
Kde-frameworks-devel mailing list
Kde-frameworks-devel@kde.org
https://mail.kde.org/mailman/listinfo/kde-frameworks-devel

Reply via email to