На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (32) « Первая ... 25 26 [27] 28 29 ...  31 32  ( Перейти к последнему сообщению )  
> Развейте мои сомнения: упростится ли программирование при переходе от C к C++?
    Цитата Олег М @
    Речь вроде было о том, что программа на C++ требует подключения большего количества библиотек, чем аналогичная на Си.
    Только в двух случаях: используется плюсовые аналоги вместо исходных ламповых; если вместо плюсовых аналогов в исходных ламповых изначально были написаны костыли.

    Добавлено
    Цитата Олег М @
    Речь вроде было о том, что программа на C++ требует подключения большего количества библиотек, чем аналогичная на Си.
    Только в двух случаях: используется плюсовые аналоги вместо исходных ламповых; если вместо плюсовых аналогов в исходных ламповых изначально были написаны костыли.
    Цитата Flex Ferrum @
    Это проблемы не языка, а средств разработки. Язык подобного не требует, нулевая стоимость как-никак.
      Цитата Qraizer @
      Язык подобного не требует, нулевая стоимость как-никак.

      Раздел language support в стандарте. Возможно, что игрой с опциями компиляции можно полностью выпилить и RTTI, и исключения, и менеджмент памяти.
        Цитата applegame @
        Идеальный сферический язык (и компилятор) не должен требовать никаких линтеров и анализаторов.
        Тю, сферический... Ада.

        Добавлено
        Цитата JoeUser @
        А SFINAE вообще вершина маразма.
        Маразм был его отсутствие.
        ExpandedWrap disabled
          void f(int);
          void f(char*);
           
          /* ... */
           
          f(123);
        Тут должна быть ошибка компиляции со ссылкой на вторую функцию... ой, не, не должно... не должно же? А почему? Ведь 123 не кастуется к char*. JoeUser, SFINAE – логическое продолжение этого поведения, только не для параметров функций, а для параметров шаблонов.

        Добавлено
        Цитата Flex Ferrum @
        Я тоже сначала так подумал. Потом посмотрел на код вызова (последняя строчка). Тут что-то близкое к UB.
        Да, если говорим о гарантиях Стандарта, нет, если вменяемую среду разработки. Но в целом, подобные вещи легко нивелируются интерфейсами, которые проектируются правильно, а не представляют собой винегрет из легаси и мейнстрима.

        Добавлено
        Цитата Flex Ferrum @
        Возможно, что игрой с опциями компиляции можно полностью выпилить и RTTI, и исключения, и менеджмент памяти.
        Не обязательно. Вообще же, я даже могу намекнуть на hosted и freestanding.
        Сообщение отредактировано: Qraizer -
          Цитата Астарот @
          А некоторые таковыми и остаются Sad, but...
          ... but it's too early to put an end on it so far :rolleyes:
            Цитата Qraizer @
            Но в целом, подобные вещи легко нивелируются интерфейсами, которые проектируются правильно, а не представляют собой винегрет из легаси и мейнстрима.

            Допустим. Как разрулить конкретный пример интерфейсами, которые спроектированы правильно? Особенно учитывая, что подобное запросто может встретиться при их реализации.
            Цитата Flex Ferrum @
            Если после push_back в пятой строчке произойдёт реаллокация - то наступит жопа.

            Я, кстати, так и не понял - является ли формально UB первый push_back, или нет. Но все проверенные компиляторы его выполняют нормально.
              Цитата Flex Ferrum @
              Я тоже сначала так подумал. Потом посмотрел на код вызова (последняя строчка). Тут что-то близкое к UB. Если после push_back в пятой строчке произойдёт реаллокация - то наступит жопа.

              По-моему, жопа там наступит уже в первом push_back. Разве не сначала выделяется память, а потом вызывается конструктор, в данном случае копирования?
                Цитата Астарот @
                Ну, перепутал чувак с Dart'ом, ну с кем не бывает? Rust, dart... Адна мадна.

                Правда. Перепутал с дартом.
                Прошу понять. И простить. :rose:
                  Цитата Олег М @
                  По-моему, жопа там наступит уже в первом push_back. Разве не сначала выделяется память, а потом вызывается конструктор, в данном случае копирования?

                  Выделяется память, создаётся элемент в нужном месте, перемещаются или копируются элементы из старого массива, вызываются деструкторы, освобождается память. Как-то так.
                    Цитата OpenGL @
                    является ли формально UB первый push_back, или нет
                    Зависит от состояния вектора. Надо заполнить вектор до вместимости, а потом выполнить вызов. Желательно, чтобы у элемента был конструктор перемещения или реально разрушающий объект деструктор. Это для того, чтобы разрушенный объект не мог изобразить из себя рабочий.
                      Цитата OpenGL @
                      Допустим. Как разрулить конкретный пример интерфейсами, которые спроектированы правильно? Особенно учитывая, что подобное запросто может встретиться при их реализации.
                      Очень простой, но для некоторых очень неожиданный ответ: функция push_twice() хоть с каким интерфейсом вообще не должна существовать в её нынешней реализации. Обоснование: она не удовлетворяет строгой гарантии отказоустойчивости. Если эту её проблему решить, интерфейс внезапно перестанет быть важным фактором.
                      Сообщение отредактировано: Qraizer -
                        Цитата Qraizer @
                        Очень простой, но для некоторых очень неожиданный ответ: функция push_twice() хоть с каким интерфейсом вообще не должна существовать в её нынешней реализации. Обоснование: она не удовлетворяет строгой гарантии отказоустойчивости.

                        Пф. Тогда бы уж сразу сказал "неправильный код не должен писаться" - этот подход избавляет не только от описанной мной, а вообще от любых ошибок :D Да и с чего бы не должна существовать? std::sort с компаратором по такой логике тоже существовать не должна - поскольку программист в ней может порушить нафиг сортируемый вектор, она не удовлетворяет строгой гарантии отказоустойчивости. Выпиливаем её из С++17? :crazy:
                          Цитата OpenGL @
                          Тогда бы уж сразу сказал "неправильный код не должен писаться" - этот подход избавляет не только от описанной мной, а вообще от любых ошибок
                          Прости, я как-то не догадался сказать очевидное. ;) std::sort<>() вообще-то гарантирует строго, push_twice() же предоставляет лишь базовую гарантию, а вызывающая сторона, можно сказать, нарушает даже Стандарт C. О чём тут вообще говорить? К слову, подобные ошибки на ура должны обнаруживаться даже анализаторами, и я не удивлюсь, если и компиляторы такие найдутся.
                            Цитата Qraizer @
                            std::sort<>() вообще-то гарантирует строго

                            Эм? :unsure: Что именно она гарантирует? В процессе сортировки итераторы не должны инвалидироваться, и на этот счёт у std::sort нет и не может быть никаких гарантий - она полагается на то, что программист не сделает это случайно. Это по большому счёту ничем не отличается от требований push_twice.
                            Цитата Qraizer @
                            К слову, подобные ошибки на ура должны обнаруживаться даже анализаторами, и я не удивлюсь, если и компиляторы такие найдутся.

                            Собственно, анализаторы нужны как раз для того, чтобы отлавливать ошибки, вероятность которых средствами языка ликвидировать не получается.
                              Цитата Qraizer @
                              SFINAE – логическое продолжение этого поведения, только не для параметров функций, а для параметров шаблонов.

                              Я в курсе. И, тем не менее, помогать компилятору помогать тебе контролировать тебе свои типы - нехорошая черта (типизированного) языка. ИМХО.
                                Цитата OpenGL @
                                В процессе сортировки итераторы не должны инвалидироваться, и на этот счёт у std::sort нет и не может быть никаких гарантий - она полагается на то, что программист не сделает это случайно. Это по большому счёту ничем не отличается от требований push_twice.
                                Но по крайней мере std::sort сама итераторы не портит.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (32) « Первая ... 25 26 [27] 28 29 ...  31 32


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0599 ]   [ 14 queries used ]   [ Generated: 11.05.24, 08:03 GMT ]