На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (32) « Первая ... 21 22 [23] 24 25 ...  31 32  ( Перейти к последнему сообщению )  
> goto vs break & continue , Кроха-сын пришел к отцу и спросила кроха: "goto - это хорошо?"
    Цитата JoeUser @
    Может. Ибо разрабы в QObject встроили звездолет, и для этого придумали свой дополнительный инструментарий - moc. Вот он-то и занимается тем, что на основе метаинформации начинает творить "чудеса".

    И тем не менее, если написать new от класса-не потомка QObject - автоматического удаления не будет, ибо moc это не обрабатывает. Это по твоему примеру:

    Поэтому и не знаешь что такое RAII и лепишь вские goto куда не попадя. А если кто то напишет у себя что то типа typedef unsigned int QUintPrimitive - то и утечку поиметь не долго.


    Цитата JoeUser @
    Тут правильно пишут. Ибо если я напишу вот так:

    Вообще огонь. Зачем такую путаницу вводить - совершенно не понятно. По мне так проще QUnique_ptr/QShared_ptr/QWeak_ptr нарисовать и не вводить людей в заблуждение. Может это маркетинговый ход такой? Типа был нормальный С++сник, с годика два пописал на QT, и на С++ уже программировать не может, только на QT и остается писать, какой то свой изолированный от реальности мир этот ваш QT. Там поди и не все фишки новых стандартов нормально юзнешь?
      Цитата Wound @
      Зачем такую путаницу вводить - совершенно не понятно.

      Первый релиз Qt состоялся с 1996 году, какие нахрен shared_ptr тогда? Тогда код писали на ламповых мониторах! :lol:

      Добавлено
      Цитата Wound @
      Там поди и не все фишки новых стандартов нормально юзнешь?

      Все, что касается производных от QObject - с опаской. За использование исключений - расстрел сразу! Но тут я ни разу не парюсь, вон Rust тоже не парится.
        Вот поэтому я и выкинул Qt на головы. На кой хрен ещё один managed с++ по-над ещё одним дотНетом? Отказоустойчивости нет, обобщённости нет, населена велосипедами.

        Добавлено
        Цитата applegame @
        Как хорошо в D, в котором есть scope(exit). И не нужно ни goto ни бестолковых классов.
        Ой-ой-ой, а правильный скоп влеплять каждый раз никто не забывает, ага.
          Цитата Qraizer @
          Вот поэтому я и выкинул Qt на головы.

          Ну а я на свою голову освоил, надо было GUI под FreeBSD+кеды когда-то лепить. Но никогда не был этой либой доволен - любой продукт на ней истекает жЫром. Вот поэтому я и обратил свой взор на nana. 2 меговый хелоуворлд меня устраивает, пострипанный Qt-шны 27 меговый - бесит.
            На, вот. Отрыл-таки в Клубе энтот твой scope. Без Поиска, он не работает. Скопипасчу, не жалко.
            ExpandedWrap disabled
              namespace ScopeD
              {
               
              class SuccessCase {} success;
              class FailureCase {} failure;
              class DoneCase    {} done;
               
              class scope
              {
                std::function<void(void)> fn1, fn2;
               
              public:
                template <typename T> scope(SuccessCase, T&& cl) try : fn1(std::move(cl)), fn2([](){})        {} catch (...) {       throw; }
                template <typename T> scope(FailureCase, T&& cl) try : fn1([](){}),        fn2(std::move(cl)) {} catch (...) { cl(); throw; }
                template <typename T> scope(DoneCase,    T&& cl) try : fn1(std::move(cl)), fn2(fn1)           {} catch (...) { cl(); throw; }
               
                ~scope() { if (std::uncaught_exceptions() != 0) fn2(); else fn1(); }
              };
               
              }
            И использование последнего примера отсюда тоже
            ExpandedWrap disabled
              using namespace ScopeD;
               
                struct Foo
                {
                  Foo(std::string s) { std::cout << s;   }
                  ~Foo()             { std::cout << "1"; }
                };
               
               
                try
                {
                  scope guard1(done,    [](){ std::cout << "2"; });
                  scope guard2(success, [](){ std::cout << "3"; });
               
                  Foo f("0");
               
                  scope guard3(failure, [](){ std::cout << "4"; });
                  throw std::runtime_error("runtime");
                  scope guard4(done,    [](){ std::cout << "5"; });
                  scope guard5(success, [](){ std::cout << "6"; });
                  scope guard6(failure, [](){ std::cout << "7"; });
                }
                catch (const std::exception& e)
                {
                  std::cout << "Exception: " << e.what();
                }
               
                std::cout << std::endl;
              Цитата Wound @
              Зачем такую путаницу вводить - совершенно не понятно. По мне так проще QUnique_ptr/QShared_ptr/QWeak_ptr нарисовать и не вводить людей в заблуждение.

              Это пошло ещё с самого зарождения Qt, тогда программировали по другому и всё, что тут писалось выше, ещё толком не было широко распространено. Ну и да, ты прав, по духу Qt это скорей "си с классами" библиотека, нежели плюсовая, и многие прожженые плюсовики её недолюбливают. Я сам ругаюсь на неё местами. И время от времени слышу, что "кутешник" это почти что ругательство в среде плюсовиков :D

              Цитата Wound @
              Там поди и не все фишки новых стандартов нормально юзнешь?

              Да какой там новых. Там даже move конструкторов для тамошних смартпоинтеров не предусмотрено :D Так что если мне нужно сделать смартпоинтер, который вызывает deleteLater (это qt-way способ безопасно удалить QObject из любого потока), то я предпочитаю написать unique_ptr с кастомным deleter-ом, чем юзать QScopedPtr даже несмотря на то, что последний умеет удалять указатели на qobject посредством deleteLater из коробки.
                Цитата Qraizer @
                На, вот. Отрыл-таки в Клубе энтот твой scope. Без Поиска, он не работает. Скопипасчу, не жалко.
                Спасибо, что лишний раз подтвердил убогость и уродство плюсов. :lol:
                  Цитата JoeUser @
                  Первый релиз Qt состоялся с 1996 году, какие нахрен shared_ptr тогда? Тогда код писали на ламповых мониторах!

                  И чего? Первый релиз плюсов состоялся в 1983 году, только где тот С++ и сегодняшний, это уже два совершенно разных языка. Переписать такие вещи раз плюнуть. Сначала пишешь нормальные RAII обертки, затем пишешь например дополнительный базовый тип, который лишен такого странного поведения, анонсируешь все это, помечаешь как deprecated старую логику. А потом потихонечко от нее избавляешься.
                  Это все реализуемо, было бы желание. А так мы имеем недоязык, недофреймворк, который подсаживает людей на себя, вангую после длительной, плотной работы на нем - ты уже не сможешь нормально писать на С++. Да ладно бы это был отдельный язык, куда не шло, а это же еще и юзает С++.


                  Цитата JoeUser @
                  Все, что касается производных от QObject - с опаской. За использование исключений - расстрел сразу! Но тут я ни разу не парюсь, вон Rust тоже не парится.

                  :wacko: А причем тут Rust ? Rust - это отдельный язык программирования со своим синтаксисом и остальным. А QT - это что такое ?
                    Цитата Wound @
                    Переписать такие вещи раз плюнуть.

                    У Qt тож есть своя команда аналитиков - видимо что-то для посчитали не выгодным.

                    Цитата Wound @
                    было бы желание

                    Не-не-не - был бы профит в дополнительной прибыли, думаю и желание бы появилось.

                    Цитата Wound @
                    А причем тут Rust ?

                    При том, что нет там месту исключениям и их обработке, они так решили.
                      Цитата OpenGL @
                      Это пошло ещё с самого зарождения Qt, тогда программировали по другому и всё, что тут писалось выше, ещё толком не было широко распространено. Ну и да, ты прав, по духу Qt это скорей "си с классами" библиотека, нежели плюсовая, и многие прожженые плюсовики её недолюбливают. Я сам ругаюсь на неё местами. И время от времени слышу, что "кутешник" это почти что ругательство в среде плюсовиков

                      Ну я пару раз пробовал за него садиться, и все разы я не понимал как на нем что то сделать нормальное, плевался и бросал. Но вот конкретно до таких вещей я не доходил, так бы и не садился за него вовсе.

                      Цитата OpenGL @
                      Да какой там новых. Там даже move конструкторов для тамошних смартпоинтеров не предусмотрено :D Так что если мне нужно сделать смартпоинтер, который вызывает deleteLater (это qt-way способ безопасно удалить QObject из любого потока), то я предпочитаю написать unique_ptr с кастомным deleter-ом, чем юзать QScopedPtr даже несмотря на то, что последний умеет удалять указатели на qobject посредством deleteLater из коробки.

                      Мда... Так они бы уже не парились и написали для него свой ЯП, чем переписывать и уродовать С++ :-?

                      Добавлено
                      Цитата JoeUser @
                      У Qt тож есть своя команда аналитиков - видимо что-то для посчитали не выгодным.

                      Я думаю это маркетинговый ход такой. Сначало подсадить людей на QT, потом спустя время человек кроме QT в тех же плюсах уже профнепригоден, вуаля, когда человек поймет это - для него уже станет поздно. И вот развивают свою экосистему QT.

                      Цитата JoeUser @
                      Не-не-не - был бы профит в дополнительной прибыли, думаю и желание бы появилось.

                      Я думаю если бы QT не занимался вот этим вот, а вел себя как некий фреймворк использующий С++ по правилам С++, а не изменяющий его правила, то у него была бы в разы больше аудитория.

                      Цитата JoeUser @
                      При том, что нет там месту исключениям и их обработке, они так решили.

                      И чего? Ты не путай волчий хрен и колбасу. Rust - это язык программирования. В Ассемблере тоже нет исключений, и чего? В Prolog тоже нет исключений. Дело то не в том есть исключения или нет, дело в том - что они есть в языке, а фреймворк тебе их запрещает юзать, вернее тебе разрабы запрещают юзать. QT - это язык программирования? ЕМНИП он компилятор С++ юзает. Это обычный фреймворк, только я не слышал больше фреймворков, которые берут изменяют логику работы языка который используют.
                      Сообщение отредактировано: Wound -
                        Цитата Wound @
                        а фреймворк тебе их запрещает юзать, вернее тебе разрабы запрещают юзать.

                        Ну там вообще немного не так. Запрет касается только одной ситуации, ЕМНИП, нельзя генерировать исключения в обработчике событий Qt. Что-то типа нельзя:

                        ExpandedWrap disabled
                          try {
                            connect(thread, &MyThread::started, this, &Element::count);  // слот count() может бросать исключения
                          }
                          catch(const X& e) {}


                        Но если тебе это нужно прямо очень, что кушать не можешь, можно обойти так:

                        ExpandedWrap disabled
                          class BadCounter {
                              Q_OBJECT
                            public slots:
                              void count() { throw std::runtime_error("хана, исключение!"); }
                          };
                           
                          class BadCounterAdaptor {
                            Q_OBJECT
                              BadCounter* counter;
                            public:
                              BadCounterAdaptor(BadCounter* iCounter):counter(iCounter) {}
                            public slots:
                              void count() {
                                try {
                                  counter->count();
                                } catch (const std::runtime_error& e) {
                                  std::cerr << e.what() << std::endl;
                                } cstch (...) {
                                  std::cerr << "Случилось страшное!" << std::endl;
                                }
                              }
                          };
                           
                          int main() {
                            BadCounter Counter;
                            BadCounterAdaptor Adaptor(&Counter);
                            QThread* Thread = new QThread();
                            connect(Thread,&QThread::started,&Adaptor,&BadCounterAdaptor::count);
                            Thread.start();
                            ...
                            delete Thread;
                          }

                        В остальных случаях - вполне можно пользоваться исключениями нативно. Поэтому тут скорее не запрет на все - а предложение "мол мы вот так либу запроектировали, не будьте калдырями - поддерживайте нашу идеологию, ну или валите на MFC нафик!" :)

                        Добавлено
                        Цитата Wound @
                        ело в том - что они есть в языке, а фреймворк тебе их запрещает юзать

                        Мы живем в несправедливом мире! Часто за все нужно платить :'(
                          Цитата JoeUser @
                          "мол мы вот так либу запроектировали, не будьте калдырями - поддерживайте нашу идеологию, ну или валите на MFC нафик!"

                          Ааа, QTшники живут еще в 2008 году наверное :D MFC - уже много лет как умер, он уже не разрабатывается, и не поддерживается даже мелкомягкими. А че по поводу нового стандарта они говорят? Пишите вот так как мы напроектировали или валите на свой С++17 или какой там уже? С++20?
                          Они сами себе яму то и копают. Когда профит от языка превысит профит от QT его просто не будут использовать. Я не знаю какой сейчас профит от QT? Единственное что я вижу - это GUI под Linux, и то, это потому что я не знаю какие там фреймворки для Linux'ов есть сейчас.
                          Потому что в остальном его обходит тот же .net core/C++, для мобильных платформ Java со всякими Unity.

                          Добавлено
                          Цитата JoeUser @
                          Мы живем в несправедливом мире! Часто за все нужно платить

                          А профит от него какой? С++ с новый стандартом уже становится кросплатформенным в плане работы с системными API(потоки там всякие, файловая система, и т.д.), туда добавляют новые примочки каждый год.
                          Сообщение отредактировано: Wound -
                            Цитата Wound @
                            А профит от него какой?

                            Ну начинался он GUI конечно. К тому времени у него основные конкуренты были GTK и wxWindows (ныне wxWidgets). Сейчас Qt сильно разросся во что только можно. Под спойлером либы, по названию поймешь, чем щя рулит Qt:

                            Скрытый текст
                            Qt5Bluetooth.dll
                            Qt5Charts.dll
                            Qt5Concurrent.dll
                            Qt5Core.dll
                            Qt5DBus.dll
                            Qt5Designer.dll
                            Qt5DesignerComponents.dll
                            Qt5Gamepad.dll
                            Qt5Gui.dll
                            Qt5Help.dll
                            Qt5Location.dll
                            Qt5Multimedia.dll
                            Qt5MultimediaQuick.dll
                            Qt5MultimediaWidgets.dll
                            Qt5Network.dll
                            Qt5NetworkAuth.dll
                            Qt5Nfc.dll
                            Qt5OpenGL.dll
                            Qt5Positioning.dll
                            Qt5PositioningQuick.dll
                            Qt5PrintSupport.dll
                            Qt5Qml.dll
                            Qt5QmlModels.dll
                            Qt5QmlWorkerScript.dll
                            Qt5Quick.dll
                            Qt5QuickControls2.dll
                            Qt5QuickParticles.dll
                            Qt5QuickShapes.dll
                            Qt5QuickTemplates2.dll
                            Qt5QuickTest.dll
                            Qt5QuickWidgets.dll
                            Qt5RemoteObjects.dll
                            Qt5Script.dll
                            Qt5ScriptTools.dll
                            Qt5Scxml.dll
                            Qt5Sensors.dll
                            Qt5SerialBus.dll
                            Qt5SerialPort.dll
                            Qt5Sql.dll
                            Qt5Svg.dll
                            Qt5Test.dll
                            Qt5TextToSpeech.dll
                            Qt5WebChannel.dll
                            Qt5WebSockets.dll
                            Qt5Widgets.dll
                            Qt5WinExtras.dll
                            Qt5Xml.dll
                            Qt5XmlPatterns.dll
                            Qt53DAnimation.dll
                            Qt53DCore.dll
                            Qt53DExtras.dll
                            Qt53DInput.dll
                            Qt53DLogic.dll
                            Qt53DQuick.dll
                            Qt53DQuickAnimation.dll
                            Qt53DQuickExtras.dll
                            Qt53DQuickInput.dll
                            Qt53DQuickRender.dll
                            Qt53DQuickScene2D.dll
                            Qt53DRender.dll
                              Цитата JoeUser @
                              Сейчас Qt сильно разросся во что только можно. Под спойлером либы, по названию поймешь, чем щя рулит Qt:

                              Ну я тут вижу только GUI. Графику на нем я бы не стал писать, есть куча фреймворков и движков куда круче с полной поддержкой языка. Остальное либо мелочи, либо устаревшее что то, либо просто как с боку бантик.
                              Для каких то небольших проектов возможно и сойдет, но небольшие проекты сейчас все больше разрабатывают для мобильных платформ, они там более востребованы. :-?
                                Цитата applegame @
                                Цитата Qraizer @
                                На, вот. Отрыл-таки в Клубе энтот твой scope. Без Поиска, он не работает. Скопипасчу, не жалко.
                                Спасибо, что лишний раз подтвердил убогость и уродство плюсов. :lol:

                                И в чем же такая принципиальная разница между:
                                ExpandedWrap disabled
                                  scope(exit) foo(1, 2, 3);


                                и

                                ExpandedWrap disabled
                                  scope guard(exit, []{foo(1, 2, 3);});


                                ?
                                Сообщение отредактировано: D_KEY -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (32) « Первая ... 21 22 [23] 24 25 ...  31 32


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0785 ]   [ 16 queries used ]   [ Generated: 25.04.24, 11:39 GMT ]