На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (37) « Первая ... 19 20 [21] 22 23 ...  36 37  ( Перейти к последнему сообщению )  
> C vs C++ , Не опять а снова
    Цитата Flex Ferrum @
    Ээээ... А тут точно про C++ vs C? :)

    Иди-иди в свой свиттер! :tong:
      Цитата Qraizer @
      Другое дело, когда ошибка связана с моими некорректными действиями. Там у тебя C-код, там адресная арифметика, там отсутствуют гарантии языка, в частности завязанные на пары конструктор/деструктор, итп.

      Да при чем тут язык? Если программист напишит кривой код, тебя никакой автоматический вызов деструктора не спасет.

      Цитата
      Там многое делается руками. У меня же нет сырых указателей, у меня контейнеры, адресная арифметика на итераторах, и я всецело использую потенциал гарантий языка. Уже давно, причём, не менее 15-лет. Примерно столько же времени я не сталкиваюсь с подобного рода багами в своих продуктах

      У меня примерно так же. Тут спорить не с чем. Кроме того, что не в языке дело.

      Цитата
      которые до сих пор волнуют Сшников, которые всё продолжают и продолжают искать утечки памяти и двойные очистки.

      Во-первых, это голословное обвинение. Баги такие находят как в системах на Си, так и в системах на С++ :) Потому что дело в людях, а не в языке(в данном случае).
      Во-вторых, есть инструменты для поиска этих самых утечек, как и других проблем. От статических анализаторов до средств времени исполнения.

      Цитата
      У меня проблем не было, не будет их и в дальнейшем, пока я пишу на Плюсах, а не в Сях. Так что да, что-то меняется принципиально.

      У сишником так же вполне себе может не быть таких проблем :-?

      Цитата
      Цитата D_KEY @
      А пример я привел для иллюстрации того, что выбор C++ был плохим решением для той команды (поскольку ухудшил результат).
      Тебе который раз, третий?, указать, что выбор никто не осуждает?

      Возможно, что ты и не осуждаешь. А вот другие участники вполне себе это делают.

      Добавлено
      Цитата Qraizer @
      D_KEY, а почему должно смущать сознательное использование фичи, сознательное введённое в язык?

      Знаешь, не стоит забывать про такую штуку, как здравый смысл :)
      Так вот, подобные "фичи" с точки зрения этого самого здравого смысла, вызывают лишь недоумение. Причем даже у C++ разработчиков.
      Да, все можно объяснить, порывшись в стандарте и т.п. Но это ведь только ухудшает ситуацию с языком, если подумать.

      Добавлено
      Цитата Саттер
      ExpandedWrap disabled
        widget w;                   // (a)

      This code declares a variable named w, of type widget. For most types, it is initialized using the default constructor widget::widget().

      Note that w is not initialized and contains garbage values if widget happens to be a built-in type like int, or a simple “int-like” class type with what’s called a “trivial” default constructor—a type that relies on the compiler-generated default constructor, has no virtual functions or virtual base classes or data member initializers, and all its bases and members satisfy the same restrictions.

      ...

      ExpandedWrap disabled
        widget w();                 // (b)

      This is a pre-modern C++ pitfall: At first glance, it may look like just another variable declaration calling a default constructor widget::widget(); in reality, thanks to a grammar ambiguity, it’s a function declaration for a function named w that takes no parameters and returns a widget object by value.

      ...

      Rather, C++11 solves this by providing a syntax that supersedes case (b) in nearly all cases, so that we don’t need to ever fall into this pit anymore:
      © is non-vexing and clear.

      ExpandedWrap disabled
        widget w{};                 // (c)


      Here we have the first reason to prefer { } to ( ): For any class type widget, line © does the “best parts” of (a) and (b)—it always initializes the variable, and is never ambiguous with a function declaration. No vex, no fuss, no muss.

      ... this really is just as simple as it looks ...

      Да-да.

      А потом начинается...

      Добавлено
      ExpandedWrap disabled
        struct A {
          A() { std::cout << "A::A()" << std::endl; }
        };
         
        A a{}; // ok

      Выведет A::A()

      Теперь удаляем:
      ExpandedWrap disabled
        struct A {
          A() = delete;
        };
         
        A a{}; // ok


      А если добавить еще конструктор?
      ExpandedWrap disabled
        struct A {
          A() = delete;
          A(int) {}
        };
         
        A a{}; // fail

      Ой :D

      А если так:
      ExpandedWrap disabled
        struct A {
          explicit A() = delete;
        };
         
        A a{}; // fail


      А так:
      ExpandedWrap disabled
        struct Base {};
         
        struct A : Base {
          A() = delete;
        };
         
        A a{}; // fail

      :)

      Добавлено
      Так вот некоторые люди предпочитают не задрачиваться на "особенности" языка, не талмуды по языку бесконечно читать, а решать конкретные разработчиские задачи, которые перед ними стоят. И многим людям(сам я к ним не отношусь, надо заметить) проще взять обычный Си и решить на нем задачу, чем постоянно насиловать себе мозг проблемами языка(на их взгляд).
      Сообщение отредактировано: D_KEY -
        Цитата D_KEY @
        Так вот некоторые люди предпочитают не задрачиваться на "особенности" языка, не талмуды по языку бесконечно читать, а решать конкретные разработчиские задачи,

        Давай будем честными: на такие вот особенности языка ты имеешь довольно небольшие шансы напороться. Но вот, скажем, довольно простая задачка: реализовать программируемый калькулятор с регистровой памятью и вычислениями в обратной польской нотации (на стеке). Коорче, старый добрый МК-61/МК-52. Как её реализация будет выглядеть на С? На С++14 (чистом, без сторонних библиотек) - вот так. Довольно компактно.
          Цитата JoeUser @
          Вот как-то я писал код на Перл 5 для теста многопоточной записи в БД PostgreSQL.
          ммм. я б постыдился такой код показывать :(
            Скрытый текст
            Цитата negram @
            ммм. я б постыдился такой код показывать :(

            Он делает ровно то, что должен делать. И ничего лишнего. Но стыдиться или нет - дело твое.
              Цитата Flex Ferrum @
              Давай будем честными: на такие вот особенности языка ты имеешь довольно небольшие шансы напороться.

              Ну конкретно этот пример просто под руку подвернулся, да. Но на всякие мелочи натыкаешься постоянно. Особенно заметно это становится, когда какое-то время пишешь на других языках, а потом возвращаешься на C++.
                Цитата JoeUser @
                Он делает ровно то, что должен делать. И ничего лишнего

                Вообще-то не делает, и я уже сказал почему так. Но ты можешь думать, что этот замер дал тебе какую-то достоверную информацию, это само-собой.
                  Цитата Flex Ferrum @
                  Но вот, скажем, довольно простая задачка: реализовать программируемый калькулятор с регистровой памятью и вычислениями в обратной польской нотации (на стеке). Коорче, старый добрый МК-61/МК-52. Как её реализация будет выглядеть на С? На С++14 (чистом, без сторонних библиотек) - вот так. Довольно компактно.

                  D_KEY, ну так как? :)
                    Цитата Flex Ferrum @
                    Цитата Flex Ferrum @
                    Но вот, скажем, довольно простая задачка: реализовать программируемый калькулятор с регистровой памятью и вычислениями в обратной польской нотации (на стеке). Коорче, старый добрый МК-61/МК-52. Как её реализация будет выглядеть на С? На С++14 (чистом, без сторонних библиотек) - вот так. Довольно компактно.

                    D_KEY, ну так как? :)

                    Я что, по-твоему, пишу на Си? :D

                    Добавлено
                    Описание-то есть? Какие конкретно операции и т.п.
                      Цитата D_KEY @
                      Описание-то есть? Какие конкретно операции и т.п.

                      Так имплементация же есть (по ссылке). На плюсах, правда.
                        Цитата D_KEY @
                        Ты считаешь, что можно замолчать проблему. Я думаю, что это не во всех случаях правильно.
                        D_KEY, там была аргументация, почему именно так, причём условная. Ты сознательно скипнул условие, написав при этом то же самое, и считаешь это спором?
                        Цитата D_KEY @
                        Когда ты пишешь нечто того же nginx, у тебя нет никакого представления о том, кто, как и где тебя будет запускать Выдвигать слишком сильные требования к окружению в данном случае бессмысленно.
                        ...
                        Они тебя должны волновать с точки зрения информации. Хотя бы залогировать это дело тебе во многих случаях нужно.
                        Ну во-первых, это тоже может оказаться не задачей nginx-а. В конце-концов так можно доспориться до необходимости на всех уровнях защищаться от пожаров или атаки стаи бешеных котов. И во-вторых, оглянись. Так никто не делает. Ударение на втором слове, а не последнем. Всегда для наблюдением за окружением используются независимые внешние средства. Предложения перекладывать эту задачу на пользователей этого окружения или дублировать ими эту деятельность я комментировать не буду. Это анахронизм прошлого тысячелетия. И это не слишком высокие требования. Это нормальные требования к окружению, не удовлетворяющие которым просто остаются без заказов и клиентов.
                        Цитата D_KEY @
                        И да, если у тебя есть некоторый протокол обмена, например, то "закрытие" может подразумевать и обмен данными с внешней средой.
                        Это не вопрос протокола, это вопрос его реализации в коде. Программист тем и отличается от кодера, что творчески подходит к своему ремеслу.
                        Цитата D_KEY @
                        Да при чем тут язык? Если программист напишит кривой код, тебя никакой автоматический вызов деструктора не спасет.
                        ...
                        Тут спорить не с чем. Кроме того, что не в языке дело. ...
                        Вот именно. Программист. Он и на Плюсах может написать криво. Только ты упускаешь такую деталь, что Плюсы предлагают возможности избежать подобных багов, беря на себя многие рутинные задачи, а C нет. Воспользуется ли программер этим или нет, зависит от него, однако поэтому я сравнивал не программистов, а языки.
                        Так что в данном случае язык очень даже причём. Ты рассчитываешь на случай "а вдруг нам в C++ попадётся хреновый программер", я же рассматриваю "в C даже хороший программер не застрахован".
                        Цитата D_KEY @
                        У сишником так же вполне себе может не быть таких проблем
                        В продолжение. Может и не быть, но не застрахован же. И я-таки не написал "все Сишники" и "всегда", хотя и подразумевал, что это статистически частые случаи, если сравнить с конкретно своим Плюсовым опытом.
                        Цитата D_KEY @
                        Знаешь, не стоит забывать про такую штуку, как здравый смысл
                        ...
                        Здорово. И что? Ты же не ответил.

                        Добавлено
                        Т.к. и примеров ты привёл много вместо одного, соответственно я могу и вопросов позадать поболе. Почему вообще был deleteчен единственный конструктор, почему этот код сравнивается с кодом, где этот конструктор не единственный итп. В любом случае основной посыл остаётся в силе: зачем приводить в пример код, который написан сознательно для демонстрации сознательно введённых в язык фич? Ответив на все "зачем", ты и сам сможешь прийти к выводу, что все эти примеры демонстрируют только одно: случайно напороться на несоответствия маловероятно, зато ты имеешь возможность написать такой код сознательно, если вдруг приспичит.
                        Сообщение отредактировано: Qraizer -
                          Цитата Qraizer @
                          Может и не быть, но не застрахован же.

                          Что-то я потерялся, как так получается, что линухи на сишных ядрах, писатели которых ни от чего не застрахованы, выдают аптайм годами, а всякие плюсовые софтины, программисты которых как бы застрахованы, валятся в кору, бывает, просто с ничего :-?
                            Потому что, как я и не только я выше писали, дело не только в языке, но и в программерах. Не "программисты застрахованы", а язык предлагает им для этого средства. И не "писатели ... не застрахованы", а все баги выловлены.
                            Другой вопрос: стоимость достигнутого. Я пользуюсь предлагаемыми средствами Плюсов, они же выловили все Сишные баги. Кто-то другой не пользуется и тем самым нивелирует своё потенциальное преимущество, кто-то другой из них пока ещё не всё отладил.
                              Цитата Астарот @
                              Что-то я потерялся, как так получается, что линухи на сишных ядрах, писатели которых ни от чего не застрахованы, выдают аптайм годами
                              А потом, хоп-на-на-най, heartbleed.
                                Цитата Flex Ferrum @
                                Цитата D_KEY @
                                Описание-то есть? Какие конкретно операции и т.п.

                                Так имплементация же есть (по ссылке). На плюсах, правда.

                                Ну по имплементации не очень удобно восстанавливать исходную задачу :)
                                Тем более, что код может и компактный, но мне не нравится=)

                                Добавлено
                                Особенно прекрасен макрос VISIT_COMMAND(ID)

                                Добавлено
                                Qraizer, тяжеловато :D На основное отвечу завтра.

                                Добавлено
                                Цитата Qraizer @
                                Я пользуюсь предлагаемыми средствами Плюсов, они же выловили все Сишные баги. Кто-то другой не пользуется и тем самым нивелирует своё потенциальное преимущество, кто-то другой из них пока ещё не всё отладил.

                                Во. Согласен :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (37) « Первая ... 19 20 [21] 22 23 ...  36 37


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0676 ]   [ 16 queries used ]   [ Generated: 19.04.24, 22:22 GMT ]