Well,
About the automotive industry, the Qt website itself presents some use
cases:
https://resources.qt.io/customer-stories-automotive
On the old bugs, I've come across this one while writing some code:
https://bugreports.qt.io/browse/QTBUG-6864
P2 importance! And 11 years old...
If the TQtC decided to spend 18 months doing nothing else than cleaning
up the bugreports backlog, I'd 100% support it!
About threading techniques, I don't have much to say, I think it's one
of those historical things...
Rui
Em 18/04/2021 13:50, Roland Hughes escreveu:
On 4/18/21 5:00 AM, Rui Oliveira wrote:
If you want to talk about "like" QQC... Do electron apps count? I do use
VSCode a lot. But I guess those are a league of their own.
No, Electron doesn't count. Electron is what replaces Qt in many many
former Qt environments. There are a lot of text editors and other
desktop apps written under Electron.
https://atom.io/
Actually quite a few text editors taking either Electron or pure
JavaScript approach, assuming Wikipedia could be trusted
https://en.wikipedia.org/wiki/Comparison_of_JavaScript-based_source_code_editors
I've also been monitoring:
https://bugreports.qt.io/browse/QTBUG-78634
https://bugreports.qt.io/browse/QTBUG-74407
Well, client of mine that using a commercial license that tipped the
scales north of $600K emailed me off-list to rag about this decade old
bug.
https://bugreports.qt.io/browse/QTBUG-12055
They lost half a staff day on this. Not one person lost half a day,
the project team. I think they have north of twenty people on the
project still. You can't have a medical device with random crashes so
when one turns up, it's all hands on deck.
See this line -
https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/serialization/qtextstream_p.h#n72
<https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/serialization/qtextstream_p.h#n72>
=====
Issue is that it doesn't properly unregister the signal from QFile
when you tell it to, so you think it would be done with it but nope,
signal fires when QFile is closed and now you have a race if you
continue to use that QFile object. You can see in the code they
_thought_ they were, but actually they were removing all connections
to QTextStream private class signals... Of which there are none.
Probably works "fine" if you are largely single threaded, but not for
multiple threads. As pointed out in that report, a mutex should have
been ok for synchronization, save for this bug.
=====
The fix has been known for a long time. Almost as long as the bug has
been in the database.
I guess QML is more present in embedded? Or maybe some entreprise stuff
we don't know about...
Just phones and John Deere. I haven't spoken with anyone working on
Ford projects in a while but last I heard QML was on its way out there
too.
QML was a bad idea trying to get around a legacy problem without
actually fixing the legacy problem. The legacy problem is the single
thread-i-ness of Qt. Back when Intel was selling 486 chips with a
manufacturing defect as SX
https://en.wikipedia.org/wiki/Intel_80486SX
We didn't have high end graphics. We were lucky to have 33Mhz and
threading libraries were not robust. Many would only yield the single
core when an I/O operation happened. That thread calculating Pi to
2000 decimal places locked up your machine. Keep in mind that an 80
MEG hard drive was just massive. Corporate desktops still tended to
have 20 MEG drives and managers who didn't really need it had 40 MEG.
Most people pull down stupid cat videos larger than that today. You
need to understand that so you understand just how little I/O was
really happening. There was nothing you could cobble together in the
little computer world to store a Terabyte. You couldn't even really
get to a Gig on a network of shared drives.
Single thread-i-ness design decisions weren't horrible then.
* You can only paint in the main event loop
* Data models used by Widgets have to exist in the main event loop
* Not everything is tested across threads (see above bug)
These short sighted decisions weren't unique to Qt. Poke around in
Google books for PC Magazine and other programming magazine articles
of the day and you will find things written about the 1,000 line
switch statements that were the center of most every Windows program.
Zinc and every other GUI library had a similar problem. Zinc didn't
even have a hook in their event loop so you could give time to things
like serial communications or other devices. You had to roll your own
event loop to do that.
The world of JavaScript has done a lot of work solving "You can only
paint in the main event loop".
https://stackoverflow.com/questions/36942555/does-the-electron-framework-allow-multi-threading-through-web-workers
https://mozillagfx.wordpress.com/2017/12/05/off-main-thread-painting/
I haven't kept up on the whole "worker" thing JavaScript and browsers
have going on. I just know that is why you see themes and syntax
highlighting in things like VSCodium, Atom, etc. that look great and
are really fast. If you try to do them in the C++/Qt world you pay a
heavy coding price or you watch machines grind to a halt when you open
a 5000 line source file. That's one bad trait that made it over to
CopperSpice too.
The dude coding FeatherPad seems to be slowly learning the reality as
well.
https://github.com/tsujan/FeatherPad
"Refactored the code of syntax highlighting 15 days ago "
The QPlainTextEdit and use of regular expressions all having to run in
the main event loop to implement syntax highlighting, brace matching,
etc. duth take a toll. Signals out from other threads to tell the
Widget to paint something tend to not work well either.
It's been a while since I looked at the KATE code base to see how they
are handling syntax highlighting.
https://github.com/KDE/kate/tree/master/kate
The developers of Juffed punted and used Scintilla_qt. You will find
many many editors using one of the Scintilla libraries under the hood
because they mostly solved this problem. I think they even solved the
problem of only highlighting the visible lines plus a few on either
side as well. This dramatically improves performance because you are
only highlighting 80-100 lines instead of all 10,000 when you load a
huge source file.
All of this is why I'm so excited to read about the Vulkan stuff going
on with the CsPaint library and the Vulkan links I sent you earlier.
On the surface it seems like someone talked to people who write
software on big computers before work started. Need to dig deeper to
be really certain, but you communicate with a "loader" that can
support many revs of the API.
Hopefully they did it under the hood like big computers.
Small API to negotiate common API version.
Identify a series of shared memory regions used for communication.
Your program builds things per the agreed upon API version in the
shared/accessible region then swats the loader with a "load that"
command.
If they did that, we can paint from anywhere. Instead of low level
manipulation of the screen(s) the screens become a service.
Applications just communicate with the service.
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest