{"id":7442,"date":"2025-07-04T13:11:09","date_gmt":"2025-07-04T18:11:09","guid":{"rendered":"https:\/\/www.logikalsolutions.com\/wordpress\/?p=7442"},"modified":"2025-07-04T13:25:05","modified_gmt":"2025-07-04T18:25:05","slug":"16-minutes-to-build-a-qlist","status":"publish","type":"post","link":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/","title":{"rendered":"16 Minutes to Build a QList"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">It took <a href=\"https:\/\/www.copperspice.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">CopperSpice<\/a> almost 16 minutes to build the same QList Qt built in under a second. I have spent more than a day creating the test case and running the test data. It is currently 6:24pm local time. I started my callgrind test of this at about a quarter to 2pm. It&#8217;s still running.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"710\" height=\"436\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/listPopulationTest-callgrind-start.png\" alt=\"\" class=\"wp-image-4647\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/listPopulationTest-callgrind-start.png 710w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/listPopulationTest-callgrind-start-300x184.png 300w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><figcaption class=\"wp-element-caption\">Callgrind start time<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Here are the current stats.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#0F111A\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>roland@roland-HP-EliteDesk-800-G2-SFF:~\/sf_projects\/ListTest_debug$ callgrind_control -e -b\n PID 81466: .\/listtest\n sending command status internal to pid 81466\n Totals:               Ir \n    Th 1  2,138,722,737,075 \n    Th 2         38,724,327 \n Frame:                Ir Backtrace for Thread 1\n    &#091; 0&#093;    180,647,087,012 __gnu_cxx::__normal_iterator > >::base() const (25806726717 x)\n    &#091; 1&#093;    903,232,403,521 bool __gnu_cxx::operator!= > >(__gnu_cxx::__normal_iterator > > const&amp;, __gnu_cxx::__normal_iterator > > const&amp;) (25806640101 x)\n    &#091; 2&#093;  1,935,503,204,513 long CsString::utf8::distance&lt;__gnu_cxx::__normal_iterator > > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >) (86616 x)\n    &#091; 3&#093;  1,935,515,065,506 CsString::CsBasicString >::size() const (86605 x)\n    &#091; 4&#093;  1,935,493,582,772 QString8::size() const (86604 x)\n    &#091; 5&#093;  2,137,931,512,290 MainWindow::tokenize(QString8) (1 x)\n    &#091; 6&#093;  2,138,197,350,792 MainWindow::startTest() (1 x)\n    &#091; 7&#093;  2,138,197,350,814 void CsSignal::Internal::cs_unpack_method_args_internal(MainWindow&lt;em>, void (MainWindow::&lt;\/em>)(), std::tuple&lt;> const&amp;, std::integer_sequence) (1 x)\n    &#091; 8&#093;  2,138,197,350,832 CsSignal::Internal::CSVoidReturn CsSignal::Internal::cs_unpack_method_args(MainWindow&lt;em>, void (MainWindow::&lt;\/em>)(), std::tuple&lt;> const&amp;) (1 x)\n    &#091; 9&#093;  2,138,197,351,622 CsSignal::Internal::Bento::invoke(CsSignal::SlotBase&lt;em>, CsSignal::Internal::TeaCupAbstract const&lt;\/em>) const (1 x)\n    &#091;10&#093;  2,138,197,353,213 void CsSignal::activate(QAbstractButton&amp;, void (QAbstractButton::&lt;em>)(bool), bool&amp;) (1 x)    &#091;11&#093;  2,138,197,354,342 _dl_runtime_resolve_xsave (1 x)    &#091;12&#093;  2,138,197,354,349 0x00000000052764c0 (1 x)    &#091;13&#093;  2,138,197,354,436 QAbstractButtonPrivate::emitClicked() (1 x)    &#091;14&#093;  2,138,197,355,289 _dl_runtime_resolve_xsave (1 x)    &#091;15&#093;  2,138,197,355,296 0x000000000528e210 (1 x)    &#091;16&#093;  2,138,197,639,154 QAbstractButtonPrivate::click() (1 x)    &#091;17&#093;  2,138,197,639,951 _dl_runtime_resolve_xsave (1 x)    &#091;18&#093;  2,138,197,639,958 0x0000000005294760 (1 x)    &#091;19&#093;  2,138,197,640,057 QAbstractButton::mouseReleaseEvent(QMouseEvent&lt;\/em>) (1 x)\n    &#091;20&#093;  2,138,208,742,219 QWidget::event(QEvent&lt;em>) (320 x)    &#091;21&#093;  2,138,198,960,804 0x000000000525e110 (64 x)    &#091;22&#093;  2,138,200,447,252 QAbstractButton::event(QEvent&lt;\/em>) (64 x)\n    &#091;23&#093;  2,138,200,446,077 0x000000000526ef20 (60 x)\n    &#091;24&#093;  2,138,200,431,643 QPushButton::event(QEvent&lt;em>) (52 x)    &#091;25&#093;  2,138,213,997,253 QApplicationPrivate::notify_helper(QObject&lt;\/em>, QEvent&lt;em>) (187 x)    &#091;26&#093;  2,138,198,174,253 0x000000000528fb40 (2 x)    &#091;27&#093;  2,138,214,176,491 QApplication::notify(QObject&lt;\/em>, QEvent&lt;em>) (144 x)    &#091;28&#093;  2,138,210,280,964 QCoreApplication::notifyInternal(QObject&lt;\/em>, QEvent&lt;em>) (115 x)    &#091;29&#093;  2,138,198,412,550 0x00000000052940b0 (46 x)    &#091;30&#093;  2,138,198,439,141 QApplicationPrivate::sendMouseEvent(QWidget&lt;\/em>, QMouseEvent&lt;em>, QWidget&lt;\/em>, QWidget&lt;em>, QWidget, QPointer&amp;, bool) (45 x)    &#091;31&#093;  2,138,198,453,527 0x000000000528ece0 (46 x)    &#091;32&#093;  2,138,198,628,219 QWidgetWindow::handleMouseEvent(QMouseEvent&lt;\/em>) (45 x)\n    &#091;33&#093;  2,138,198,654,192 0x00000000052574a0 (46 x)\n    &#091;34&#093;  2,138,206,007,189 QWidgetWindow::event(QEvent&lt;em>) (59 x)    &#091;35&#093;  2,138,215,800,987 QApplicationPrivate::notify_helper(QObject&lt;\/em>, QEvent&lt;em>) (424 x)    &#091;36&#093;  2,138,215,810,580 0x000000000528fb40 (425 x)    &#091;37&#093;  2,138,215,920,651 QApplication::notify(QObject&lt;\/em>, QEvent&lt;em>) (425 x)    &#091;38&#093;  2,138,209,267,733 QCoreApplication::notifyInternal(QObject&lt;\/em>, QEvent&lt;em>) (294 x)    &#091;39&#093;  2,138,198,682,215 0x00000000052940b0 (46 x)    &#091;40&#093;  2,138,198,681,680 QApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent&lt;\/em>) (46 x)\n    &#091;41&#093;  2,138,198,713,456 0x000000000525ce00 (47 x)\n    &#091;42&#093;  2,138,207,133,489 QApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) (54 x)\n    &#091;43&#093;  2,138,207,149,986 0x000000000527f9e0 (55 x)\n    &#091;44&#093;  2,138,198,758,614 QWindowSystemInterface::sendWindowSystemEvents(QFlags) (98 x)\n    &#091;45&#093;  2,138,207,170,943 0x0000000009387590 (99 x)\n    &#091;46&#093;  2,138,214,384,853 QUnixEventDispatcher::processEvents(QFlags) (99 x)\n    &#091;47&#093;  2,138,202,168,869 QEventLoop::processEvents(QFlags) (98 x)\n    &#091;48&#093;  2,138,214,389,585 0x0000000007d8a820 (99 x)\n    &#091;49&#093;  2,138,214,393,930 QEventLoop::exec(QFlags) (1 x)\n    &#091;50&#093;  2,138,214,394,913 _dl_runtime_resolve_xsave (1 x)\n    &#091;51&#093;  2,138,214,394,920 0x0000000007d89e50 (1 x)\n    &#091;52&#093;  2,138,214,398,749 QCoreApplication::exec() (1 x)\n    &#091;53&#093;  2,138,214,399,613 _dl_runtime_resolve_xsave (1 x)\n    &#091;54&#093;  2,138,214,399,620 0x0000000005274480 (1 x)\n    &#091;55&#093;  2,138,214,400,492 QApplication::exec() (1 x)\n    &#091;56&#093;  2,138,214,400,494 0x0000000000112c80 (1 x)\n    &#091;57&#093;  2,138,652,121,489 main (1 x)\n    &#091;58&#093;  2,138,652,305,048 (below main) (1 x)\n    &#091;59&#093;  2,138,652,305,060 _start (1 x)\n    &#091;60&#093;                  . 0x0000000000001100\n Frame:                Ir Backtrace for Thread 2\n    &#091; 0&#093;            154,047 poll (3218 x)\n    &#091; 1&#093;            161,333 0x00000000094b1560 (3219 x)\n    &#091; 2&#093;          7,224,790 0x000000000000bb80 (3027 x)\n    &#091; 3&#093;          7,750,239 xcb_wait_for_event (2874 x)\n    &#091; 4&#093;          7,953,840 0x0000000009385040 (2875 x)\n    &#091; 5&#093;         38,695,270 QXcbEventReader::run() (1 x)\n    &#091; 6&#093;         38,722,486 QThreadPrivate::start(void*) (1 x)\n    &#091; 7&#093;         38,724,320 start_thread (1 x)\n    &#091; 8&#093;                  . clone<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-ocean\" style=\"background-color: #0F111A\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FFCB6B\">roland@roland-HP-EliteDesk-800-G2-SFF:~\/sf_projects\/ListTest_debug$<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">callgrind_control<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">-e<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">-b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">PID<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">81466<\/span><span style=\"color: #C3E88D\">:<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">.\/listtest<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">sending<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">command<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">status<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">internal<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">to<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">pid<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">81466<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">Totals:<\/span><span style=\"color: #BABED8\">               <\/span><span style=\"color: #C3E88D\">Ir<\/span><span style=\"color: #BABED8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #FFCB6B\">Th<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">1<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #F78C6C\">2<\/span><span style=\"color: #C3E88D\">,138,722,737,075<\/span><span style=\"color: #BABED8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #FFCB6B\">Th<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">2<\/span><span style=\"color: #BABED8\">         <\/span><span style=\"color: #F78C6C\">38<\/span><span style=\"color: #C3E88D\">,724,327<\/span><span style=\"color: #BABED8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">Frame:<\/span><span style=\"color: #BABED8\">                <\/span><span style=\"color: #C3E88D\">Ir<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">Backtrace<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">for<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">Thread<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #FFCB6B\">180,647,087,012<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">__gnu_cxx::__normal_iterator<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\">::base<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">const<\/span><span style=\"color: #BABED8\"> (25806726717 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">1<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #FFCB6B\">903,232,403,521<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">bool<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">__gnu_cxx::operator!=<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;(<\/span><span style=\"color: #FFCB6B\">__gnu_cxx::__normal_iterator<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> const<\/span><span style=\"color: #89DDFF\">&amp;<\/span><span style=\"color: #FFCB6B\">,<\/span><span style=\"color: #C3E88D\"> __gnu_cxx::__normal_iterator <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> const<\/span><span style=\"color: #89DDFF\">&amp;)<\/span><span style=\"color: #BABED8\"> (25806640101 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">2<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">1,935,503,204,513<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">long<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsString::utf8::distance<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">__gnu_cxx::__normal_iterator<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;(<\/span><span style=\"color: #FFCB6B\">__gnu_cxx::__normal_iterator<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\">, __gnu_cxx::__normal_iterator <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;)<\/span><span style=\"color: #BABED8\"> (86616 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">3<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">1,935,515,065,506<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsString::CsBasicString<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\">::size<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">const<\/span><span style=\"color: #BABED8\"> (86605 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">4<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">1,935,493,582,772<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QString8::size<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">const<\/span><span style=\"color: #BABED8\"> (86604 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">5<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,137,931,512,290<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">MainWindow::tokenize<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QString8<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">6<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,197,350,792<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">MainWindow::startTest<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">7<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,197,350,814<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">void<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsSignal::Internal::cs_unpack_method_args_internal<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">MainWindow&lt;em&gt;,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">void<\/span><span style=\"color: #BABED8\"> (MainWindow::&lt;\/em&gt;<\/span><span style=\"color: #89DDFF\">)()<\/span><span style=\"color: #C3E88D\">,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">std::tuple<\/span><span style=\"color: #89DDFF\">&lt;&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">const<\/span><span style=\"color: #89DDFF\">&amp;<\/span><span style=\"color: #FFCB6B\">,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">std::integer_sequence<\/span><span style=\"color: #BABED8\">) <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">1<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">8<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,197,350,832<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsSignal::Internal::CSVoidReturn<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsSignal::Internal::cs_unpack_method_args<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">MainWindow&lt;em&gt;,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">void<\/span><span style=\"color: #BABED8\"> (MainWindow::&lt;\/em&gt;<\/span><span style=\"color: #89DDFF\">)()<\/span><span style=\"color: #C3E88D\">,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">std::tuple<\/span><span style=\"color: #89DDFF\">&lt;&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">const<\/span><span style=\"color: #89DDFF\">&amp;<\/span><span style=\"color: #BABED8\">) (1 x)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">9<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,197,351,622<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsSignal::Internal::Bento::invoke<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">CsSignal::SlotBase&lt;em&gt;,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsSignal::Internal::TeaCupAbstract<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">const<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">\/e<\/span><span style=\"color: #BABED8\">m<\/span><span style=\"color: #89DDFF\">&gt;)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">const<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">10<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,197,353,213<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">void<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsSignal::activate<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QAbstractButton<\/span><span style=\"color: #89DDFF\">&amp;<\/span><span style=\"color: #FFCB6B\">,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">void<\/span><span style=\"color: #BABED8\"> (QAbstractButton::&lt;em&gt;<\/span><span style=\"color: #89DDFF\">)(<\/span><span style=\"color: #FFCB6B\">bool<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #C3E88D\">,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">bool<\/span><span style=\"color: #89DDFF\">&amp;<\/span><span style=\"color: #BABED8\">) (1 x)    &#091;11&#093;  2,138,197,354,342 _dl_runtime_resolve_xsave (1 x)    &#091;12&#093;  2,138,197,354,349 0x00000000052764c0 (1 x)    &#091;13&#093;  2,138,197,354,436 QAbstractButtonPrivate::emitClicked() (1 x)    &#091;14&#093;  2,138,197,355,289 _dl_runtime_resolve_xsave (1 x)    &#091;15&#093;  2,138,197,355,296 0x000000000528e210 (1 x)    &#091;16&#093;  2,138,197,639,154 QAbstractButtonPrivate::click() (1 x)    &#091;17&#093;  2,138,197,639,951 _dl_runtime_resolve_xsave (1 x)    &#091;18&#093;  2,138,197,639,958 0x0000000005294760 (1 x)    &#091;19&#093;  2,138,197,640,057 QAbstractButton::mouseReleaseEvent(QMouseEvent&lt;\/em&gt;) (1 x)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">20<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,208,742,219<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QWidget::event<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QEvent&lt;em&gt;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> (320 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">21<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,198,960,804 0x000000000525e110 <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">64<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">22<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,200,447,252 QAbstractButton::event<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QEvent&lt;\/em&gt;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">64<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">23<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,200,446,077<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x000000000526ef20<\/span><span style=\"color: #BABED8\"> (60 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">24<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,200,431,643<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QPushButton::event<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QEvent&lt;em&gt;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> (52 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">25<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,213,997,253 QApplicationPrivate::notify_helper<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QObject&lt;\/em&gt;,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QEvent<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">e<\/span><span style=\"color: #BABED8\">m<\/span><span style=\"color: #89DDFF\">&gt;)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">187<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">26<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,198,174,253 0x000000000528fb40 <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">2<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">27<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,214,176,491 QApplication::notify<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QObject&lt;\/em&gt;,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QEvent<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">e<\/span><span style=\"color: #BABED8\">m<\/span><span style=\"color: #89DDFF\">&gt;)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">144<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">28<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,210,280,964 QCoreApplication::notifyInternal<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QObject&lt;\/em&gt;,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QEvent<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">e<\/span><span style=\"color: #BABED8\">m<\/span><span style=\"color: #89DDFF\">&gt;)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">115<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">29<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,198,412,550 0x00000000052940b0 <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">46<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">30<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,198,439,141 QApplicationPrivate::sendMouseEvent<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QWidget&lt;\/em&gt;,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QMouseEvent<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">e<\/span><span style=\"color: #BABED8\">m<\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\">,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QWidget<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">\/e<\/span><span style=\"color: #BABED8\">m<\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\">,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QWidget<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">e<\/span><span style=\"color: #BABED8\">m<\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\">,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QWidget,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QPointer<\/span><span style=\"color: #89DDFF\">&amp;<\/span><span style=\"color: #FFCB6B\">,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">bool<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">45<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">31<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,198,453,527 0x000000000528ece0 <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">46<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">32<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,198,628,219 QWidgetWindow::handleMouseEvent<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QMouseEvent&lt;\/em&gt;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">45<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">33<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,198,654,192<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x00000000052574a0<\/span><span style=\"color: #BABED8\"> (46 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">34<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,206,007,189<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QWidgetWindow::event<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QEvent&lt;em&gt;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> (59 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">35<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,215,800,987 QApplicationPrivate::notify_helper<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QObject&lt;\/em&gt;,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QEvent<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">e<\/span><span style=\"color: #BABED8\">m<\/span><span style=\"color: #89DDFF\">&gt;)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">424<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">36<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,215,810,580 0x000000000528fb40 <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">425<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">37<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,215,920,651 QApplication::notify<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QObject&lt;\/em&gt;,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QEvent<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">e<\/span><span style=\"color: #BABED8\">m<\/span><span style=\"color: #89DDFF\">&gt;)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">425<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">38<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,209,267,733 QCoreApplication::notifyInternal<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QObject&lt;\/em&gt;,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QEvent<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">e<\/span><span style=\"color: #BABED8\">m<\/span><span style=\"color: #89DDFF\">&gt;)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">294<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">39<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,198,682,215 0x00000000052940b0 <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">46<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">40<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  2,138,198,681,680 QApplicationPrivate::processMouseEvent<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QWindowSystemInterfacePrivate::MouseEvent&lt;\/em&gt;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">46<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">41<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,198,713,456<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x000000000525ce00<\/span><span style=\"color: #BABED8\"> (47 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">42<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,207,133,489<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QApplicationPrivate::processWindowSystemEvent<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QWindowSystemInterfacePrivate::WindowSystemEvent*<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> (54 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">43<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,207,149,986<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x000000000527f9e0<\/span><span style=\"color: #BABED8\"> (55 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">44<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,198,758,614<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QWindowSystemInterface::sendWindowSystemEvents<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QFlags<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> (98 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">45<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,207,170,943<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x0000000009387590<\/span><span style=\"color: #BABED8\"> (99 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">46<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,214,384,853<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QUnixEventDispatcher::processEvents<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QFlags<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> (99 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">47<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,202,168,869<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QEventLoop::processEvents<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QFlags<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> (98 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">48<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,214,389,585<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x0000000007d8a820<\/span><span style=\"color: #BABED8\"> (99 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">49<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,214,393,930<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QEventLoop::exec<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">QFlags<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">50<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,214,394,913<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">_dl_runtime_resolve_xsave<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">51<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,214,394,920<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x0000000007d89e50<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">52<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,214,398,749<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QCoreApplication::exec<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">53<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,214,399,613<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">_dl_runtime_resolve_xsave<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">54<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,214,399,620<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x0000000005274480<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">55<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,214,400,492<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QApplication::exec<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">56<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,214,400,494<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x0000000000112c80<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">57<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,652,121,489<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">main<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">58<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,652,305,048<\/span><span style=\"color: #BABED8\"> (below <\/span><span style=\"color: #C3E88D\">main<\/span><span style=\"color: #BABED8\">) <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">1<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">59<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">2,138,652,305,060<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">_start<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #F78C6C\">60<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">                  <\/span><span style=\"color: #82AAFF\">.<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x0000000000001100<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">Frame:<\/span><span style=\"color: #BABED8\">                <\/span><span style=\"color: #C3E88D\">Ir<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">Backtrace<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">for<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">Thread<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">            <\/span><span style=\"color: #FFCB6B\">154,047<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">poll<\/span><span style=\"color: #BABED8\"> (3218 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">1<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">            <\/span><span style=\"color: #FFCB6B\">161,333<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x00000000094b1560<\/span><span style=\"color: #BABED8\"> (3219 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">2<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">          <\/span><span style=\"color: #FFCB6B\">7,224,790<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x000000000000bb80<\/span><span style=\"color: #BABED8\"> (3027 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">3<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">          <\/span><span style=\"color: #FFCB6B\">7,750,239<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">xcb_wait_for_event<\/span><span style=\"color: #BABED8\"> (2874 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">4<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">          <\/span><span style=\"color: #FFCB6B\">7,953,840<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0x0000000009385040<\/span><span style=\"color: #BABED8\"> (2875 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">5<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">         <\/span><span style=\"color: #FFCB6B\">38,695,270<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QXcbEventReader::run<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">6<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">         <\/span><span style=\"color: #FFCB6B\">38,722,486<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QThreadPrivate::start<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">void*<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">7<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">         <\/span><span style=\"color: #FFCB6B\">38,724,320<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">start_thread<\/span><span style=\"color: #BABED8\"> (1 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">8<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">                  <\/span><span style=\"color: #82AAFF\">.<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">clone<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Here is the code:<\/h2>\n\n\n<div class=\"sdm_download_button_box_default\"><div class=\"sdm_download_link\"><a href=\"https:\/\/www.logikalsolutions.com\/wordpress\/?sdm_process_download=1&download_id=4644\" class=\"sdm_download green\" title=\"Qt List Test\" >Qt ListTest<\/a><\/div><\/div>\n\n\n<div class=\"sdm_download_button_box_default\"><div class=\"sdm_download_link\"><a href=\"https:\/\/www.logikalsolutions.com\/wordpress\/?sdm_process_download=1&download_id=4642\" class=\"sdm_download green\" title=\"CopperSpice List Test\" >CopperSpice version<\/a><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The Qt version is a CMake project. I developed this on Ubuntu 20.04 LTS using Qt version from the repo. My CopperSpice build was current as about a week or so ago.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Under Qt I got what I expected. Sub-second list build time.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"710\" height=\"436\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/listPopulationTest-Qt.png\" alt=\"\" class=\"wp-image-4649\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/listPopulationTest-Qt.png 710w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/listPopulationTest-Qt-300x184.png 300w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><figcaption class=\"wp-element-caption\">Qt test run<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Under CopperSpice, not so much.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"710\" height=\"436\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/listPopulationTest-CopperSpice.png\" alt=\"\" class=\"wp-image-4650\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/listPopulationTest-CopperSpice.png 710w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/listPopulationTest-CopperSpice-300x184.png 300w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><figcaption class=\"wp-element-caption\">CopperSpice Test Run<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Okay, so it was only 15 minutes and change, not 16 minutes. Are you going to quibble about that last minute when an application has already hung for more than 10?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This isn&#8217;t a random bogus test. I was porting the Gede debugger to CopperSpice and the text file included in the source directory for use in testing contains a gdb response. (Test application looks for text file in $HOME.)<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#0F111A\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>(gdb) \n -file-list-exec-source-files<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-ocean\" style=\"background-color: #0F111A\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">gdb<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">-file-list-exec-source-files<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">In one giant formatted string gdb sends back all of the source files relevant for this debug session. Not the files themselves, but the full path and name. Any front end needs to be aware of what is in play. Gede (and I imagine most gdb front ends) tokenize this stuff so they can deal with it. You will see the tokenize() routine is basically the same. The CopperSpice version has some additional qDebug() calls so I could actually see something.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There appears to be something horribly inefficient in either QString8 or QList.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#0F111A\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#091; 0&#093;    180,647,087,012 __gnu_cxx::__normal_iterator > >::base() const (25806726717 x)\n    &#091; 1&#093;    903,232,403,521 bool __gnu_cxx::operator!= > >(__gnu_cxx::__normal_iterator > > const&amp;, __gnu_cxx::__normal_iterator > > const&amp;) (25806640101 x)\n    &#091; 2&#093;  1,935,503,204,513 long CsString::utf8::distance&lt;__gnu_cxx::__normal_iterator > > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >) (86616 x)\n    &#091; 3&#093;  1,935,515,065,506 CsString::CsBasicString >::size() const (86605 x)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-ocean\" style=\"background-color: #0F111A\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">    180,647,087,012 __gnu_cxx::__normal_iterator <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #82AAFF\">&gt;::base<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #BABED8\"> const <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">25806726717<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">1<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">    <\/span><span style=\"color: #FFCB6B\">903,232,403,521<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">bool<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">__gnu_cxx::operator!=<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;(<\/span><span style=\"color: #FFCB6B\">__gnu_cxx::__normal_iterator<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> const<\/span><span style=\"color: #89DDFF\">&amp;<\/span><span style=\"color: #FFCB6B\">,<\/span><span style=\"color: #C3E88D\"> __gnu_cxx::__normal_iterator <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> const<\/span><span style=\"color: #89DDFF\">&amp;)<\/span><span style=\"color: #BABED8\"> (25806640101 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">2<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">1,935,503,204,513<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">long<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsString::utf8::distance<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">__gnu_cxx::__normal_iterator<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;(<\/span><span style=\"color: #FFCB6B\">__gnu_cxx::__normal_iterator<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\">, __gnu_cxx::__normal_iterator <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;)<\/span><span style=\"color: #BABED8\"> (86616 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">3<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">1,935,515,065,506<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsString::CsBasicString<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\">::size<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">const<\/span><span style=\"color: #BABED8\"> (86605 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">I haven&#8217;t noticed a huge problem with QString8 so I&#8217;m assuming the issue is in the QList code. When working on my Diamond port I noticed really sluggish behavior with syntax highlighting that was using lists of regular expressions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hopefully this somewhat compact example will help the team track it down. I will try to update this post tomorrow with the completion screen shot. Assuming it completes overnight. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can read more about my CopperSpice experiments in <a href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/copperspice-and-diamond\/\">this post thread<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Edit &#8211; 2021-02-24 &#8211; 4:30am<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I love Callgrind and Valgrind. You run something under them and days later it gets done. As of 4:30am this morning this appears to be no closer to completion. I do have newer stats at the top to share.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#0F111A\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>roland@roland-HP-EliteDesk-800-G2-SFF:~\/sf_projects\/ListTest_debug$ callgrind_control -e -b\n PID 81466: .\/listtest\n sending command status internal to pid 81466\n Totals:               Ir \n    Th 1  5,208,933,012,211 \n    Th 2         47,402,648 \n Frame:                Ir Backtrace for Thread 1\n    &#091; 0&#093;  1,977,743,839,393 bool __gnu_cxx::operator!= > >(__gnu_cxx::__normal_iterator > > const&amp;, __gnu_cxx::__normal_iterator > > const&amp;) (56506966840 x)\n    &#091; 1&#093;  4,238,033,891,625 long CsString::utf8::distance&lt;__gnu_cxx::__normal_iterator > > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >) (189644 x)\n    &#091; 2&#093;  4,238,059,867,454 CsString::CsBasicString >::size() const (189633 x)\n    &#091; 3&#093;  4,238,039,415,000 QString8::size() const (189632 x)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-ocean\" style=\"background-color: #0F111A\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FFCB6B\">roland@roland-HP-EliteDesk-800-G2-SFF:~\/sf_projects\/ListTest_debug$<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">callgrind_control<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">-e<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">-b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">PID<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">81466<\/span><span style=\"color: #C3E88D\">:<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">.\/listtest<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">sending<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">command<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">status<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">internal<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">to<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">pid<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">81466<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">Totals:<\/span><span style=\"color: #BABED8\">               <\/span><span style=\"color: #C3E88D\">Ir<\/span><span style=\"color: #BABED8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #FFCB6B\">Th<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">1<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #F78C6C\">5<\/span><span style=\"color: #C3E88D\">,208,933,012,211<\/span><span style=\"color: #BABED8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #FFCB6B\">Th<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">2<\/span><span style=\"color: #BABED8\">         <\/span><span style=\"color: #F78C6C\">47<\/span><span style=\"color: #C3E88D\">,402,648<\/span><span style=\"color: #BABED8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">Frame:<\/span><span style=\"color: #BABED8\">                <\/span><span style=\"color: #C3E88D\">Ir<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">Backtrace<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">for<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">Thread<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">0<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">1,977,743,839,393<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">bool<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">__gnu_cxx::operator!=<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;(<\/span><span style=\"color: #FFCB6B\">__gnu_cxx::__normal_iterator<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> const<\/span><span style=\"color: #89DDFF\">&amp;<\/span><span style=\"color: #FFCB6B\">,<\/span><span style=\"color: #C3E88D\"> __gnu_cxx::__normal_iterator <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> const<\/span><span style=\"color: #89DDFF\">&amp;)<\/span><span style=\"color: #BABED8\"> (56506966840 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">1<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">4,238,033,891,625<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">long<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsString::utf8::distance<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C3E88D\">__gnu_cxx::__normal_iterator<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;(<\/span><span style=\"color: #FFCB6B\">__gnu_cxx::__normal_iterator<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\">, __gnu_cxx::__normal_iterator <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\"> <\/span><span style=\"color: #89DDFF\">&gt;)<\/span><span style=\"color: #BABED8\"> (189644 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">2<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">4,238,059,867,454<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">CsString::CsBasicString<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #C3E88D\">::size<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">const<\/span><span style=\"color: #BABED8\"> (189633 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">    <\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">3<\/span><span style=\"color: #89DDFF\">&#093;<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">4,238,039,415,000<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">QString8::size<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">const<\/span><span style=\"color: #BABED8\"> (189632 <\/span><span style=\"color: #C3E88D\">x<\/span><span style=\"color: #BABED8\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Copy on Write<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">While I&#8217;m holding out hope this is just a horrible bug in QList, my gut tells me this is really do to a fundamental change between Qt and CopperSpice.  Qt has a &#8220;copy on write&#8221; policy implemented under the hood for QObject based things. I haven&#8217;t looked at the actual code in quite some time but here is the gist of it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you assign QObject based entity A to entity B there is just some reference magic manipulated under the hood. There is no need to actually copy the values until something alters entity A or B. This makes things very fast. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can also take a big hit if there happens to be 100+ things referring to this particular value instance when it needs to change. Think a working\/scratch object you load a &#8220;default&#8221; value into from some external source then use to initialize a hundred element list. Not an integer, but a substantial object like a page of text or a QPixmap image. Later on in the code your working QPixmap needs to load a different image. <em>That image pays the price<\/em>. A hundred copies now have to be made before the first image change can happen. The second image change pays no such price so it is very fast. Beginners chase their tail trying to figure out why the first one takes so long. This is why.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Improve Battery Life<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This minimal use of dynamic memory is incredibly important today in battery operated embedded systems. Many of them have lower powered slower everything inside them because they are trying to add minutes or hours to battery life. You have only two options when it comes to extending battery life.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Use less juice<\/li>\n\n\n\n<li>Buy a bigger battery.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Option one is cheaper and doesn&#8217;t add pounds to the device. That&#8217;s the route most device manufacturers try to go first. The result of this is you can be using the exact same Linux kernel and exact same compiler for your target device and dynamic memory allocation will suck.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The XML Trap<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A former coworker who became manager didn&#8217;t believe me when I said this. All of his embedded systems work had been gambling machines connected to grid power. Manufacturers spared no expense in speeding those devices up and they didn&#8217;t give a hoot about how much juice it took. The manager who would be retiring was just nodding his head in agreement with me as I spoke this. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We had to preload our images on that device. Multiple images for one screen came in a single SVG file and you loaded them via their tag. SVG is really XML so it isn&#8217;t such a big deal. What was a big deal was someone deciding that code needed to be re-ordered so it loaded images alphabetically instead of a screen at a time. I think the power-on boot time climbed to something like 45 minutes. You didn&#8217;t power off unless you had to.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Re-ordering to load all images from a single file before moving on to the next trimmed our boot time down to three minutes. We obviously still had a ways to go, but it was now obvious where to look. Remove all needless dynamic memory allocation. Every time we opened an SVG file a plethora of XML class objects had to be dynamically created and fully populated. When we closed the file these all had to be reclaimed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dynamic memory allocation in most\/many battery operated embedded systems sucks. Know this. Plan for it. Your life will be happier.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Desktops Used to Suck<\/h2>\n\n\n<div class=\"wp-block-image is-resized\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/i.pinimg.com\/originals\/d5\/47\/8d\/d5478ddae888b78fbfc5859e0eda9ef6.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">NCR PC4<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The NCR PC4 was the first computer I ever purchased for myself. A starving college kid, but I saved up the $1700+ to buy one. A whopping 4.77 MHZ and dual floppy disk drives with a ghosting green phosphorus monitor. Tipping the scales around 50 pounds if memory serves.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I didn&#8217;t play with Qt until Qt3 was out and then it was near the end of Qt3 waiting for Qt4. I&#8217;m telling you this so you can understand why copy on write was implemented.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Intel released the Celeron 533 MHz with a 66 MHz bus processor on January 4, 2000.<\/li>\n\n\n\n<li>AMD first released the Duron processor on June 19, 2000, with speeds of 600 MHz to 1.8 GHz and bus speeds of 200 MHz to 266 MHz. The Duron was built on the same K7 architecture as the Athlon processor.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">None of you would consider buying one of these computers today, but they were smoking fast when they were released. All kinds of hardware and OS level techniques were developed over the years to avoid actually having to transfer significant amounts of memory because we had limited abilities.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Don&#8217;t try and tell me that isn&#8217;t how things are now.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/media.istockphoto.com\/photos\/remote-controls-picture-id187150374?k=6&amp;m=187150374&amp;s=612x612&amp;w=0&amp;h=iDAxSqtDfXiiyDgsQR4O0BslOoyYNy10Wqw-Zd8sCyw=\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Remote controls<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Just how much processor and RAM do you think is in one of these? How often do you have to change the 2-3 AA or AAA batteries powering them?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You see, production programmers used to control the various language specifications. They were interested in solving real world problems not pursuing pie-in-the-sky-once-in-a-blue-moon topics.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Enter the Academics<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/external-content.duckduckgo.com\/iu\/?u=https%3A%2F%2Fi.dailymail.co.uk%2F1s%2F2020%2F04%2F05%2F04%2F26820788-8188441-Gisele_Bundchen_urged_her_social_media_followers_to_join_in_on_a-m-4_1586055891705.jpg&amp;f=1&amp;nofb=1\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">More and more production coders had to devote more time to production coding. Academics wriggled into the controlling positions of language standards. I always picture them dressed in a white robe of some kind, sitting cross legged, palms skyward, head tilted back, chanting &#8220;Oooooohhhhhhhmmmmmm&#8221; as they try to become one with the object. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While some good things came out of this initially, lots of bad is the most recent contribution. You can read the discussion about MVVM in <a href=\"https:\/\/www.theminimumyouneedtoknow.com\/agile_book.html\" target=\"_blank\" rel=\"noreferrer noopener\">my latest book<\/a> to understand one of the more recent tragedies. At some point the academics took it upon themselves to declare copy-on-write a violation of the C++ standard and forbid it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Under the hood CopperSpice (per the documentation and Web site) adheres to the C++ standard. My gut tells me this is the root of the beyond sucky performance our test application exhibits. Under a second for Qt and 15+minutes for CopperSpice.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Let&#8217;s Look at a Few Things<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#0F111A\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>QList&lt;Token *> MainWindow::tokenize( QString str )<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-ocean\" style=\"background-color: #0F111A\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FFCB6B\">QList<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #FFCB6B\">Token<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">*&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">MainWindow<\/span><span style=\"color: #89DDFF\">::<\/span><span style=\"color: #82AAFF\">tokenize<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">QString<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #BABED8; font-style: italic\">str<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Officially, assuming my memory is accurate, this statement requires both the parameter and return value to be <strong>passed by value<\/strong>. I don&#8217;t read the standard on a daily basis, I&#8217;ve been working with Qt a long time. Anyone who has will have a large base of code looking much like this. If you are thinking of porting this is going to be a major issue.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"763\" height=\"201\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-size-1.png\" alt=\"\" class=\"wp-image-4653\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-size-1.png 763w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-size-1-300x79.png 300w\" sizes=\"(max-width: 763px) 100vw, 763px\" \/><figcaption class=\"wp-element-caption\">input file size<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">According to the ls command, the size of the input txt file is 291K. That&#8217;s in raw UTF-8. Things are in QChar32 under the hood in CopperSpice so we can agree that it is more than 300k in memory.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#0F111A\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly> QChar c = str&#091;i&#093;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-ocean\" style=\"background-color: #0F111A\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #BABED8\"> QChar c <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #BABED8\"> str<\/span><span style=\"color: #89DDFF\">&#091;<\/span><span style=\"color: #BABED8\">i<\/span><span style=\"color: #89DDFF\">&#093;;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Every time we do this we have to make a copy of the character. (The alternative would be dereferencing each and every place you find c being used in the code and hoping the compiler could optimize.)<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#0F111A\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly> cur->m_text += c;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-ocean\" style=\"background-color: #0F111A\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #BABED8\"> cur<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #BABED8\">m_text <\/span><span style=\"color: #89DDFF\">+=<\/span><span style=\"color: #BABED8\"> c<\/span><span style=\"color: #89DDFF\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Every one of those statements is going to cause some reallocation. I can&#8217;t find it now, but I swear to God I remember reading about a compile\/build option when building Qt from source where you could set the default initial allocation of all QString objects. It would be like you called reserve() every time you declared a QString. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I can&#8217;t find the parameter\/option now. I ran into it on one embedded system project. Really sucky dynamic memory allocation had us looking for solutions. We knew that 15 characters would handle about 80% of the strings in the system. We had the RAM, it was the allocation price that was killing us. Forcing a reserve(15) into every string under the hood breathed new life into the application.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Due to C++&#8217;s type system and the fact that QString is <a href=\"https:\/\/doc.qt.io\/qt-5\/implicit-sharing.html\">implicitly shared<\/a>, QStrings may be treated like <code>int<\/code>s or other basic types. For example:<\/p>\n<cite>https:\/\/doc.qt.io\/qt-5\/qstring.html<\/cite><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;m going to steal this example from that doc as well.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#0F111A\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>QString Widget::boolToString(bool b)\n {\n     QString result;\n     if (b)\n         result = \"True\";\n     else\n         result = \"False\";\n     return result;\n }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-ocean\" style=\"background-color: #0F111A\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FFCB6B\">QString<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #FFCB6B\">Widget<\/span><span style=\"color: #89DDFF\">::<\/span><span style=\"color: #82AAFF\">boolToString<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">bool<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #BABED8; font-style: italic\">b<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">     QString result<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">     <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #BABED8\">b<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">         result <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">True<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">     <\/span><span style=\"color: #89DDFF; font-style: italic\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">         result <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">False<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">     <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #BABED8\"> result<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The <code>result<\/code> variable, is a normal variable allocated on the stack. When <code>return<\/code> is called, and because we&#8217;re returning by value, the copy constructor is called and a copy of the string is returned. No actual copying takes place thanks to the implicit sharing.<\/p>\n<cite>https:\/\/doc.qt.io\/qt-5\/qstring.html<\/cite><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, you can find raving discussions against CoW (Copy on Write as they use it) on places like <a href=\"https:\/\/stackoverflow.com\/questions\/14716053\/do-stl-containers-use-implicit-sharing\" target=\"_blank\" rel=\"noreferrer noopener\">StackOverflow<\/a>. But there is now nearly 30 years of code treating objects like integers when passing things around because of the performace CoW gives us. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If you are trying to port an existing codebase to this library you are going to have to redesign.<\/strong> It may be the least painful to make compile and run, but it won&#8217;t run well with gotchas like these.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"544\" height=\"103\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/stl-containers.png\" alt=\"\" class=\"wp-image-4654\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/stl-containers.png 544w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/stl-containers-300x57.png 300w\" sizes=\"(max-width: 544px) 100vw, 544px\" \/><figcaption class=\"wp-element-caption\">From the CopperSpice Web site<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.copperspice.com\/docs\/cs_api\/group__implicit-sharing-c.html\" target=\"_blank\" rel=\"noreferrer noopener\">Implicit sharing is being purged<\/a> from CopperSpice. You will note that QString and QList aren&#8217;t in the list of classes still supporting implicit sharing if you click that link.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Killed off Callgrind<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">It was 8:50am and still not done. If I let it run 24 hours my elapsed time thing wasn&#8217;t going to work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I really wanted to get to the bottom of this. Everybody emptying their colons on the CoW way of life claimed you could solve all performance problems via reference. Just how much truth is there to such a wild claim?<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"452\" height=\"106\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/tokenize-10.png\" alt=\"\" class=\"wp-image-4655\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/tokenize-10.png 452w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/tokenize-10-300x70.png 300w\" sizes=\"(max-width: 452px) 100vw, 452px\" \/><figcaption class=\"wp-element-caption\">changed method<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">I changed the method to be void, accepting the list to be created and the string to create it from via reference. Got a clean ninja install and ran. Removing these two copies should dramatically improve the time if there is any truth to that argument.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"710\" height=\"436\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/tokenize-11.png\" alt=\"\" class=\"wp-image-4656\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/tokenize-11.png 710w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/tokenize-11-300x184.png 300w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><figcaption class=\"wp-element-caption\">After changes<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Yeah, 32 seconds slower according to that run. Next I replaced every list.push_back() call with:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#0F111A\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>list.append( cur );<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-ocean\" style=\"background-color: #0F111A\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #BABED8\">list<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">append<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #BABED8\"> cur <\/span><span style=\"color: #89DDFF\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Just in case this wasn&#8217;t as direct a replacement as the documentation says.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"710\" height=\"436\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-21.png\" alt=\"\" class=\"wp-image-4660\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-21.png 710w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-21-300x184.png 300w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><figcaption class=\"wp-element-caption\">after change to .append()<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Possibly saved 5 seconds or there was just less going on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, you are correct. I should have looked for a better profiling tool and spent days learning how to use it if I wanted to dig all the way to the bottom of this problem. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Having said that, there isn&#8217;t much going on here. If the Zen Masters are correct and this Holier more Pioused C++ way of doing things really is better, I should be able to change just one thing and see this drop down to at least under a minute, right?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next I changed all of the cur-&gt;m_text +=  statements to be:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#0F111A\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly> cur->m_text.append( c );<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-ocean\" style=\"background-color: #0F111A\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #BABED8\"> cur<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #BABED8\">m_text<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">append<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #BABED8\"> c <\/span><span style=\"color: #89DDFF\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Naturally the ones with hard coded characters kept their hard coded characters. Why take these baby steps? I want to get to the root cause without going into the CopperSpice code itself. In this case it would be going all the way into GNU if these really are wrappers on the STL. I wondered if there weren&#8217;t a few instances of bad code decisions adding to the performance issues.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"467\" height=\"106\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-22.png\" alt=\"\" class=\"wp-image-4661\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-22.png 467w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-22-300x68.png 300w\" sizes=\"(max-width: 467px) 100vw, 467px\" \/><figcaption class=\"wp-element-caption\">Overloads could have caused confusion<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"710\" height=\"436\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListView-23.png\" alt=\"\" class=\"wp-image-4662\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListView-23.png 710w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListView-23-300x184.png 300w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><figcaption class=\"wp-element-caption\">Shaved another 12 seconds<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You would be correct in believing that should not have fixed anything. Obviously the appropriate method wasn&#8217;t always being called.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next I wanted to try reserve() but that wasn&#8217;t pious and holy enough.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"870\" height=\"47\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25a.png\" alt=\"\" class=\"wp-image-4663\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25a.png 870w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25a-300x16.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25a-768x41.png 768w\" sizes=\"(max-width: 870px) 100vw, 870px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"137\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25b-1024x137.png\" alt=\"\" class=\"wp-image-4664\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25b-1024x137.png 1024w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25b-300x40.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25b-768x103.png 768w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25b.png 1164w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I really don&#8217;t know what would have been the difference to leave reserve() in and just change the meaning of the parameter from bytes to numOfChars. That appears to be what they did with resize().<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"541\" height=\"91\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25.png\" alt=\"\" class=\"wp-image-4665\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25.png 541w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-25-300x50.png 300w\" sizes=\"(max-width: 541px) 100vw, 541px\" \/><figcaption class=\"wp-element-caption\">token.h change<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Changed the Token constructor to pre-extend m_text by 50 characters. If the needle wiggles enough we can poke around looking for &#8220;magic size.&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It should be painfully obvious by now that one cannot fix this problem from the outside. Obviously resize() isn&#8217;t well implemented.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"710\" height=\"436\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-28.png\" alt=\"\" class=\"wp-image-4666\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-28.png 710w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-28-300x184.png 300w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><figcaption class=\"wp-element-caption\">After resize tweak<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So, we take the resize() code out of Token and just for grins add it here:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"363\" height=\"94\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-30.png\" alt=\"\" class=\"wp-image-4667\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-30.png 363w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-30-300x78.png 300w\" sizes=\"(max-width: 363px) 100vw, 363px\" \/><figcaption class=\"wp-element-caption\">Try pre-extending the QList<\/figcaption><\/figure>\n<\/div>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"710\" height=\"436\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-31.png\" alt=\"\" class=\"wp-image-4668\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-31.png 710w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-31-300x184.png 300w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><figcaption class=\"wp-element-caption\">No meaningful difference<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is a substantial problem. Most likely it is why I hear from so many who have tried CopperSpice that it is slow. I certainly noticed it working on my fork of Diamond.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While CoW may be considered something only the great unwashed masses use, the great unwashed masses actually get something done. When reserve() was removed from QString, QList, and wherever else, I don&#8217;t think it was really understood how those benefitted the community. Reserve allocated a bunch of empty units that append(), insert(), etc. would use until they were exhausted. This let you stall off the overhead of dynamic memory allocation for every object added. You could increase performance by knowing the size which could handle roughly 80% of your needs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Judging from the elapsed time of the tests, it is pretty obvious that resize() doesn&#8217;t create this nice big contiguous buffer you can use. While this system isn&#8217;t a blinding make-the-gamer-kids-drool machine, it&#8217;s not a slouch.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"625\" height=\"710\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-35.png\" alt=\"\" class=\"wp-image-4669\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-35.png 625w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2021\/02\/ListTest-35-264x300.png 264w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><figcaption class=\"wp-element-caption\">Test system<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">There has been talk for years about Qt just becoming a wrapper over STL containers. I&#8217;ve heard talk on the mailing list about &#8220;Why should we spend the resources to maintain that which is already there?&#8217;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>This would be the argument!<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The STL does not perform CoW. Until there is some exponential speed improvement in STL containers they are not viable solutions once you get beyond trivial accademic applications.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This wasn&#8217;t even that difficult of a task! Creating a list of tokens from a string that is probably 500K in memory. Those looking to leave Qt need to take this sample application and re-implement it with whatever cross platform framework they are thinking about using.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>It took CopperSpice almost 16 minutes to build the same QList Qt built in under a second. I have spent more than a day creating the test case and running the test data. It is currently 6:24pm local time. I started my callgrind test of this at about a quarter to 2pm. It&#8217;s still running. Here are the current stats. Here is the code: The Qt version is a CMake project. I developed this on &hellip; <a title=\"16 Minutes to Build a QList\" class=\"bnm-read-more\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/\"><span class=\"screen-reader-text\">16 Minutes to Build a QList<\/span>Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":6848,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[1923,1928,1835,1927,1924],"class_list":["post-7442","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-information-technology","tag-callgrind","tag-containers","tag-copperspice","tag-stl","tag-valgrind","bnm-entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>16 Minutes to Build a QList &#8211; Logikal Blog<\/title>\n<meta name=\"description\" content=\"QList is an integral part of most Qt widget applications. You will either use it directly or it will be used inside other widgets.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"16 Minutes to Build a QList &#8211; Logikal Blog\" \/>\n<meta property=\"og:description\" content=\"QList is an integral part of most Qt widget applications. You will either use it directly or it will be used inside other widgets.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/\" \/>\n<meta property=\"og:site_name\" content=\"Logikal Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-04T18:11:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-04T18:25:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png\" \/>\n\t<meta property=\"og:image:width\" content=\"256\" \/>\n\t<meta property=\"og:image:height\" content=\"288\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"seasoned_geek\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"seasoned_geek\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/\"},\"author\":{\"name\":\"seasoned_geek\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"headline\":\"16 Minutes to Build a QList\",\"datePublished\":\"2025-07-04T18:11:09+00:00\",\"dateModified\":\"2025-07-04T18:25:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/\"},\"wordCount\":2682,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/cpp-icon.png\",\"keywords\":[\"callgrind\",\"containers\",\"CopperSpice\",\"STL\",\"valgrind\"],\"articleSection\":[\"Information Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/\",\"name\":\"16 Minutes to Build a QList &#8211; Logikal Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/cpp-icon.png\",\"datePublished\":\"2025-07-04T18:11:09+00:00\",\"dateModified\":\"2025-07-04T18:25:05+00:00\",\"description\":\"QList is an integral part of most Qt widget applications. You will either use it directly or it will be used inside other widgets.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/cpp-icon.png\",\"contentUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/cpp-icon.png\",\"width\":256,\"height\":288,\"caption\":\"C++ image from icons-library.com\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/16-minutes-to-build-a-qlist\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"16 Minutes to Build a QList\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\",\"name\":\"Logikal Blog\",\"description\":\"No part of this site may be used by AI without first purchasing that right\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\",\"name\":\"seasoned_geek\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"caption\":\"seasoned_geek\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\"},\"description\":\"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\\\/Qt touchscreen\\\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \\\"Zinc It!\\\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \\\"The Minimum You Need to Know to Be an OpenVMS Application Developer\\\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \\\"The Minimum You Need to Know\\\" book series was born. Three years later he wrote his first novel \\\"Infinite Exposure\\\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \\\"The Earth That Was\\\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.\",\"sameAs\":[\"https:\\\/\\\/theminimumyouneedtoknow.com\"],\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/author\\\/seasoned_geek\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"16 Minutes to Build a QList &#8211; Logikal Blog","description":"QList is an integral part of most Qt widget applications. You will either use it directly or it will be used inside other widgets.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/","og_locale":"en_US","og_type":"article","og_title":"16 Minutes to Build a QList &#8211; Logikal Blog","og_description":"QList is an integral part of most Qt widget applications. You will either use it directly or it will be used inside other widgets.","og_url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/","og_site_name":"Logikal Blog","article_published_time":"2025-07-04T18:11:09+00:00","article_modified_time":"2025-07-04T18:25:05+00:00","og_image":[{"width":256,"height":288,"url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png","type":"image\/png"}],"author":"seasoned_geek","twitter_card":"summary_large_image","twitter_misc":{"Written by":"seasoned_geek","Est. reading time":"16 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/#article","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/"},"author":{"name":"seasoned_geek","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"headline":"16 Minutes to Build a QList","datePublished":"2025-07-04T18:11:09+00:00","dateModified":"2025-07-04T18:25:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/"},"wordCount":2682,"commentCount":0,"publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png","keywords":["callgrind","containers","CopperSpice","STL","valgrind"],"articleSection":["Information Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/","url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/","name":"16 Minutes to Build a QList &#8211; Logikal Blog","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/#primaryimage"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png","datePublished":"2025-07-04T18:11:09+00:00","dateModified":"2025-07-04T18:25:05+00:00","description":"QList is an integral part of most Qt widget applications. You will either use it directly or it will be used inside other widgets.","breadcrumb":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/#primaryimage","url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png","contentUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png","width":256,"height":288,"caption":"C++ image from icons-library.com"},{"@type":"BreadcrumbList","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/16-minutes-to-build-a-qlist\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.logikalsolutions.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"16 Minutes to Build a QList"}]},{"@type":"WebSite","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website","url":"https:\/\/www.logikalsolutions.com\/wordpress\/","name":"Logikal Blog","description":"No part of this site may be used by AI without first purchasing that right","publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.logikalsolutions.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842","name":"seasoned_geek","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","url":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","caption":"seasoned_geek"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r"},"description":"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\/Qt touchscreen\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \"Zinc It!\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \"The Minimum You Need to Know to Be an OpenVMS Application Developer\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \"The Minimum You Need to Know\" book series was born. Three years later he wrote his first novel \"Infinite Exposure\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \"The Earth That Was\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.","sameAs":["https:\/\/theminimumyouneedtoknow.com"],"url":"https:\/\/www.logikalsolutions.com\/wordpress\/author\/seasoned_geek\/"}]}},"_links":{"self":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/7442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/comments?post=7442"}],"version-history":[{"count":0,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/7442\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media\/6848"}],"wp:attachment":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media?parent=7442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/categories?post=7442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/tags?post=7442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}