Вы знаете, я со своей Lumia 920 тоже ждал, когда выйдет новый телефон, но так и не дождался. Хотя терпеть не могу iOS и Android, я всё же купил себе новую Nokia и скажу только одно: Excel и Skype на Android гораздо лучше тех Excel и Skype, которые были у меня на Windows Phone. Чтобы MS не говорило, и как бы она не сетовала на слабую популярность их ОС у разработчиков, они сами плюнули на собственную ОС. Поэтому, я полагаю, ждать от них больше ничего не стоит. По крайней мере с текущим руководителем.
О чём я Вас и прошу: процитируйте стандарт и докажите, что пример в статье содержит UB. Я утверждаю, что он его не содержит (по крайней мере для C++11, 03 под рукой нет), и ваш анализатор ошибся. Мне кажется, это в интересах компании найти ошибку, или нет?
P.S. Документация к диагностике V567 устарела и содержит примеры UB, которые больше им не являются (X[i]=++i и т.д.). Собственно там документация говорит о точках следования, которых уже 6 лет как нет.
1. Не находите ли Вы, что в 2017 году ошибка вида «The 'p' variable is modified while being used twice between sequence points» несколько устарела? Не лучше ли использовать что-то типа «The multiple modifications of the 'p' variable are unsequenced» (тоже мне не нравится, но смысл должен быть ясен).
2. Я считаю, что PVS нашёл UB там, где его нет. Этот код, насколько я понимаю, является корректным, а предупреждение PVS — нет. Можете доказать обратное?
Всё верно, bool-переменная может иметь только два значения: true, false. Никакого третьего значения там быть не может. Undefined behavior, по определению, означает, что программа может вести себя как угодно, и никакую логику к ней применить уже нельзя.
Поэтому ИИ будет давить обычных игроков, у pro-уровня нет проблем с одновременным слежением за экономикой и боями. Кроме того, противник должен знать, что клепать, а для этого нужна разведка. Можно кучу всяких обманных тактик напридумывать и прочего. Я к чему это: это может казаться простым тестом для ИИ, но, на деле, если ИИ будет поставлен в те же рамки, что и игрок(не будет видеть сквозь туман и прочее), то неизвестно чем может закончиться матч с хорошим игроком.
Я не спорю, wxWidgets используется, но, как Вы сами понимаете, гораздо в меньшей степени, чем Qt. Когда я говорил, про никому не известные фреймворки, я, скорее, говорил о том фреймворке, на который Вы привели ссылку(что там код красивее)
Что касается примера с потоком: как минимум странно использовать std::thread вместе с Qt, ну да ладно. Ваша задача решается одной строчкой:
QMetaObject::invoke(my_widget, "my_slot");
(по памяти, поэтому где-то может быть ошибка, но суть должна быть ясна)
Я сравнивал Qt и MFC середины нулевых, а не сейчас. Что там было раньше, я не в курсе.
Очень даже знают. На том же wxWidgets написаны например KiCad, Code::Blocks, TrueCrypt, Password Safe, EventGhost, клиенты для Dropbox и Google Drive, интерфейсы для Maxima и CMake
Ага, наверное из-за wxWidgets в папке dropbox лежат dll от Qt5, а в исходниках CMake папка QtDialog, посмотрел что за библиотеки загружает TrueCrypt — видимо он средствами среды пользуется(WinAPI). Дальше проверять не стал, всё и так понятно.
А это всё и не нужно. Попытки принести динамическую интроспекцию в язык типа C++, ориентированный на быстродействия, крайне сомнительны
Нужно, не нужно — это не Вам решать. Это удобно. Если удастся сделать всё то же самое, то можно и статической обойтись. В целом, я понимаю, что динамической в C++ не будет и не уверен, что она нужна. Но вот в Qt это даёт просто потрясающие возможности связи с QML.
Очереди и потоки не имеют никакого отношения к системам типа сигнал/слот — это вообще разные вопросы
В Qt это часть одной системы, неразделимой. Очень удобной. К хорошему быстро привыкаешь, поэтому не надо рассказывать про «разные вопросы». Проброс событий/сигналов очень часто нужен и, в отличии от того же C#/WPF, в Qt это реализовано из коробки и очень элегантно.
Множество != весь, не находите? Trolltech писали библиотеку и жили на продажи её, значит было кому продавать, не так ли? Да и кроссплатформенность не всегда заставляет выбирать Qt. Вы на MFC писали? Если ответ «да» и Вы не понимаете, почему кто-то бы выбрал Qt вместо него только для Windows, то продолжать разговор больше не имеет смысла.
В остальном, я не хочу с Вами спорить, т.к. мне совершенно не интересно в чём то Вас убеждать. Оставлю Вам только несколько вопросов, на которые не нужно отвечать, они для Вас — повод для размышлений.
Почему, если есть такие классные фреймворки, которые не используют MOC и код на них красивее чем у Qt, о них никто(очень мало кто) знает?
Зачем в Qt так много QMetaObject? Что такое property, invokable и прочее и как оно реализовано? Как работает QML?
Если сигналы/слоты так легко реализовать, то сможете ли Вы найти реализацию, в которой сигнал не занимает места в объекте и может быть поставлен в очередь любого потока?
Это заблуждение. Кроссплатформенность всегда была актуальна, это только в России она не была. В Штатах, как минимум, OSX + Windows очень часто идут рука об руку.
На самом деле язык C++ не позволяет, в нынешнем виде, создать нормальную GUI библиотеку, потому что для очень многих вещей нужна интроспекция и/или поддержка паттерна observer в самом языке.
Qt был самым популярным GUI-фреймворком, когда Android не было и в проекте. И это именно за счёт расширения языка. Сигналы в Qt удобнее чем родные event в C#, что уже говорить о поделках других библиотек для C++? Вообще, это, конечно, чистая вкусовщина, но Qt объективно более популярен и это началось не вчера и, на мой взгляд, это как раз из-за удобства его использования, львиную долю которого даёт QObject и MOC.
Более того, современный C++ вообще позволяет решать такие вопросы намного красивее и эффективнее.
Каким образом?
P.S. Я не говорю, что Qt идеален, в нём проблем выше крыши, вот только в альтернативах их ещё больше.
Дело в том, что boost это библиотека по умолчанию для всех C++ проектов, поэтому тащить ничего не приходится, boost это де-факто стандарт в C++ мире, и его неиспользование в проекте может вызвать только вопросы.
Ага, «конкурирующих». Много они наконкурировали с Qt? Где Qt и где всё остальное? Сейчас есть ответвление Qt(copperspice), в котором нет MOC, но выглядит уж очень спорно и это при том, что они используют современные возможности C++, которых не было и в помине, когда MOC писался.
P.S. boost.signals2 это ужасное порождение, ничего общего с простой системой сигналов/слотов не имеющая. И я не говорю уже о интроспекции и прочих вещах, которые на MOC опираются.
Я бы тоже. Мне вообще не понятно, кому он нужен в том виде, в котором его собираются выпустить, и как это согласуется с major/minor чередованием. C++17, в этом виде, это не более чем minor, а minor уже был.
Так бывает, просто нет смысла писать статьи будучи знакомым с большим инструментом всего 2 недели. Проще спросить на SO, к примеру, чем городить свои огороды раньше времени.
Почему не подходят? Как минимум это довольно нейтральное название, по крайней мере у меня и у тех, у кого я спрашивал, это не вызывает ассоциации с детским садом. Это вполне может быть названием банды.
P.S. Документация к диагностике V567 устарела и содержит примеры UB, которые больше им не являются (X[i]=++i и т.д.). Собственно там документация говорит о точках следования, которых уже 6 лет как нет.
1. Не находите ли Вы, что в 2017 году ошибка вида «The 'p' variable is modified while being used twice between sequence points» несколько устарела? Не лучше ли использовать что-то типа «The multiple modifications of the 'p' variable are unsequenced» (тоже мне не нравится, но смысл должен быть ясен).
2. Я считаю, что PVS нашёл UB там, где его нет. Этот код, насколько я понимаю, является корректным, а предупреждение PVS — нет. Можете доказать обратное?
Что касается примера с потоком: как минимум странно использовать std::thread вместе с Qt, ну да ладно. Ваша задача решается одной строчкой:
(по памяти, поэтому где-то может быть ошибка, но суть должна быть ясна)
Ага, наверное из-за wxWidgets в папке dropbox лежат dll от Qt5, а в исходниках CMake папка QtDialog, посмотрел что за библиотеки загружает TrueCrypt — видимо он средствами среды пользуется(WinAPI). Дальше проверять не стал, всё и так понятно.
Нужно, не нужно — это не Вам решать. Это удобно. Если удастся сделать всё то же самое, то можно и статической обойтись. В целом, я понимаю, что динамической в C++ не будет и не уверен, что она нужна. Но вот в Qt это даёт просто потрясающие возможности связи с QML.
В Qt это часть одной системы, неразделимой. Очень удобной. К хорошему быстро привыкаешь, поэтому не надо рассказывать про «разные вопросы». Проброс событий/сигналов очень часто нужен и, в отличии от того же C#/WPF, в Qt это реализовано из коробки и очень элегантно.
В остальном, я не хочу с Вами спорить, т.к. мне совершенно не интересно в чём то Вас убеждать. Оставлю Вам только несколько вопросов, на которые не нужно отвечать, они для Вас — повод для размышлений.
Почему, если есть такие классные фреймворки, которые не используют MOC и код на них красивее чем у Qt, о них никто(очень мало кто) знает?
Зачем в Qt так много QMetaObject? Что такое property, invokable и прочее и как оно реализовано? Как работает QML?
Если сигналы/слоты так легко реализовать, то сможете ли Вы найти реализацию, в которой сигнал не занимает места в объекте и может быть поставлен в очередь любого потока?
На самом деле язык C++ не позволяет, в нынешнем виде, создать нормальную GUI библиотеку, потому что для очень многих вещей нужна интроспекция и/или поддержка паттерна observer в самом языке.
Каким образом?
P.S. Я не говорю, что Qt идеален, в нём проблем выше крыши, вот только в альтернативах их ещё больше.
P.S. boost.signals2 это ужасное порождение, ничего общего с простой системой сигналов/слотов не имеющая. И я не говорю уже о интроспекции и прочих вещах, которые на MOC опираются.
P.S. Ваше использование (sic!) в тексте совершенно неуместно, в нём нет ни одной цитаты.