На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (56) « Первая ... 15 16 [17] 18 19 ...  55 56  ( Перейти к последнему сообщению )  
> D vs C++ , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
    Цитата applegame @
    Зачем там нужен этот дурацкий decltype непонятно.
    Затем:
    ExpandedWrap disabled
      template<typename A, typename B>
      auto hellSum(A a, B b) -> decltype(a + b);
    Очень информативно увидеть в интерфейсе просто auto без информации о реализации.
    Сообщение отредактировано: Qraizer -
      ExpandedWrap disabled
        #include <iostream>
        using namespace std;
         
        class C {
        };
         
        class D: public C {
        };
         
        class B {
        };
         
        class A {
            bool var;
        public:
            A(bool var) : var(var) {}
            C operator*(const B& b) { return C(); }
            D operator+(const B& b) { return D(); }
            
            bool get_var() { return var; }
          
        };
         
        template<typename A, typename B>
        auto hellArithmetics(A a, B b) -> decltype(a * b) { /* auto - C or D */
              if(a.get_var()) {
                 return a * b;
              }
         
              return a + b;
        }
         
        int main() {
            A a1(true);
            A a2(false);
            B b;
            
            C c1 = hellArithmetics(a1, b);
            C c2 = hellArithmetics(a2, b);
            
            return 0;
        }
        Цитата Qraizer @
        Очень информативно увидеть в интерфейсе просто auto без информации о реализации.
        Все прекрасно. Информация дается в комментариях, а не в безумном decltype, который, кстати, может содержать трехэтажные конструкции. Эту работу, ИМХО, может и должен делать компилятор. Особенно есди учесть, что интерфейсы шаблонов функций без тела этих функций полезны в C++ чуть более, чем никогда.

        Добавлено
        Мяут-Настоящий, что это? Типа пример зачем нужен decltype? Он не нужен:
        http://dpaste.dzfl.pl/4333f7a197f7
        ExpandedWrap disabled
          class C {
          };
           
          class D: C {
          };
           
          class B {
          };
           
          class A {
              bool m_var;
              this(bool var) { m_var = var; }
              C opBinary(string op: "*")(const B b) { return new C(); }
              D opBinary(string op: "+")(const B b) { return new D(); }
              bool var() { return m_var; }
          };
           
           
          auto hellArithmetics(A, B)(A a, B b) {
              if(a.var) {
                  return a * b;
              }
              return a + b;
          }
           
          int main() {
              auto a1 = new A(true);
              auto a2 = new A(false);
              auto b = new B;
              
              C c1 = hellArithmetics(a1, b);
              C c2 = hellArithmetics(a2, b);
           
              return 0;
          }
        Сообщение отредактировано: applegame -
          Цитата applegame @
          Функция должна вернуть несколько значений, и хочется чтобы доступ к значениям был бы как к полям структуры, а не по индексу, как в обычном плюсовом кортеже.

          А почему не объявить структуру и не вернуть её из функции? Изврата захотелось? Типа
          Цитата applegame @
          Рекурсивный миксин плюс немножко статической рефлексии

          Это через какую только жопу гланды не выдирают вместо того, чтобы сделать функции, возвращающие несколько значений, как, например, в Go.
          Впрочем, хотите через жопу - получите. Гораздо лучше дишных извращений на пустом месте.
          Сообщение отредактировано: MyNameIsIgor -
            Цитата MyNameIsIgor @
            А почему не объявить структуру и не вернуть её из функции? Изврата захотелось?
            У меня таких функций вагон и маленькая тележка, извратом будет как раз объявлять вагон и маленькую тележку структур.
            Цитата MyNameIsIgor @
            Это через какую только жопу гланды не выдирают вместо того, чтобы сделать функции, возвращающие несколько значений, как, например, в Go.
            О да, это же какая жопа написать packTuple!(...) или просто tuple(...), если обычного кортежа достаточно.
            Цитата MyNameIsIgor @
            Впрочем, хотите через жопу - получите. Гораздо лучше дишных извращений на пустом месте.
            Это простите, херня, никакого отношения к сабжу не имеющая.

            Вы батенька, как всегда, пукаете в лужу. "Если C++ что-то не умеет, то это не нужно" - вот ваш девиз. Научитесь уже отвечать по существу.
            Сообщение отредактировано: applegame -
              Цитата applegame @
              У меня таких функций вагон и маленькая тележка

              И зачем?
              Цитата applegame @
              извратом будет как раз объявлять вагон и маленькую тележку структур

              Нет, это будет явная декларация.
              Цитата applegame @
              Это простите, херня

              Не прощаю. А за нецензурную брань модератор взыщет.
              Цитата applegame @
              никакого отношения к сабжу не имеющая

              Т.е. если что-то сделали иным способом, нежели ваш, то к теме это отношения не имеет? :D
              Цитата applegame @
              Вы батенька, как всегда, пукаете в лужу

              А вы продолжаете нюхать :lool:
              Цитата applegame @
              "Если C++ что-то не умеет, то это не нужно" - вот ваш девиз

              Нет, я лишь предлагаю делать по-уму. Уже посмотрели как возвращаются несколько значений в Go? Это во-первых.
              Во-вторых, вы плюсы на уровне второклашки то не осилили, откуда вам знать, что они могут?
                Цитата applegame @
                Все прекрасно. Информация дается в комментариях, а не в безумном decltype, который, кстати, может содержать трехэтажные конструкции. Эту работу, ИМХО, может и должен делать компилятор.
                Молодец! Сам упомянул компилятор. А ну-ка, покажи, как компилятор разгребёт комменты. И с чего он вообще будет это делать. В Плюсах auto с последующим decltype введены для упрощения квалификацированных идентификаторов, каковые становятся возможны только после списка параметров, а отнюдь не для автовывода типа результата. Автовывод, конечно, есть, но для частных случаев.
                Цитата applegame @
                Особенно если учесть, что интерфейсы шаблонов функций без тела этих функций полезны в C++ чуть более, чем никогда.
                Та ладно. И как давно это так? Даже без extern template это встречалось нередко. Интерфейс интерфейсом, но параметризация шаблонов отнюдь не ограничивается пользовательскими желаниями, нередко эта параметризация выбирает платформенные специализации, а в этом случае обычная раздельная компиляция вполне применима и легко реализуется.
                  Цитата applegame @
                  Вспомнил про затихший холиворчик. Продолжу продвижение D.

                  Функция должна вернуть несколько значений, и хочется чтобы доступ к значениям был бы как к полям структуры, а не по индексу, как в обычном плюсовом кортеже.
                  Вот эта маленькая магия сама объявляет структуру с полями названными как переменные переданные в параметры и заполняет ее значениями из этих же переменных. Структура объявляется внутри функции (кстати, а плюсы так умеют?), а значит не гадит в глобальную область видимости. Рекурсивный миксин плюс немножко статической рефлексии.
                  Дешево, сердито и красиво, плюсики так не умеют и вряд ли когда сумеют:

                  http://dpaste.dzfl.pl/d09ce6ded86b
                  ExpandedWrap disabled
                    template packTuple(ARGS...) {
                        template Decls(alias value, ARGS...) {
                            mixin("typeof(value)" ~ __traits(identifier, value) ~ ";");
                            static if(ARGS.length) mixin Decls!ARGS;
                        }
                        struct Tuple {
                            mixin Decls!ARGS;
                        }
                        auto packTuple() { return Tuple(ARGS); }
                    }
                     
                     
                    auto foo() {
                        int fieldInt = 10;
                        string fieldString = "test";
                        return packTuple!(fieldInt, fieldString);
                    }
                     
                    void main() {
                        auto result = foo();
                        assert(result.fieldInt == 10);
                        assert(result.fieldString == "test");
                    }

                  Не очень понял, что ты этим выиграл. Коллеги твои вряд ли будут довольны. Да и ты сам через полгодика не обрадуешься.
                    Цитата applegame @
                    Информация дается в комментариях, а не в безумном decltype

                    В комментариях? Информация о типах? В языке со статической типизацией? Мда..
                    А как же самодокументируемость? Нет, я за возможность как указания типа, так и явного decltype/typeof. Кстати, в D же это возможно, о чем ты споришь? В C++14 обязательность decltype уходит.
                      Цитата D_KEY @
                      Не очень понял, что ты этим выиграл. Коллеги твои вряд ли будут довольны. Да и ты сам через полгодика не обрадуешься.
                      Уже больше времени прошло, и никаких проблем. Удобно, всем наоборот нравится. Я же не везде его пихаю. Там где название типа действительно важно, я указываю его явно. Но в проекте много всяких хелперов, мелких вспомогательных функций и шаблонов, где в общем-то глубоко начхать на название типа. Название функции говорит само за себя, а в комментах описано, что именно она возвращает.
                      Цитата D_KEY @
                      В комментариях? Информация о типах? В языке со статической типизацией? Мда..
                      Зачем о типах? Описание возвращаемого значения и все. Тип не важен. Типы пусть знает и проверяет компилятор.
                      Одно из преимуществ D, что он при желании позволяет писать в стиле динамических языков. Автоматическое выведение типов, auto и прочие радости. Легкость работы с динамическими языками, но при этом типизация статическая, что позволяет ошибки с типами находить compile-time.
                      Можно до последнего цепляться за древний уродливый стиль с громоздкими иерархиями классов, тоннами типов объявленных явно и т.п., но это прошлый век. Даже сам C++ эволюционирует, внезапно, может и не совсем по пути D, но явно в туже сторону
                      Цитата D_KEY @
                      Кстати, в D же это возможно, о чем ты споришь? В C++14 обязательность decltype уходит.
                      Обязательность и напрягает. Представь что функция возвращает тип, который можно вывести, но только этот тип будет занимать три строчки кода. Информативность таких кракозябров (особенно в C++) - нулевая. Какая-нибудь лямбда со страшной сигнатурой. А может и не лямбда, может быть функтор, да что угодно, главное что callable. Плевать на тип, главное, что потом с этим значением можно делать.
                      Цитата D_KEY @
                      В C++14 обязательность decltype уходит.
                      Ага, я же говорю дрейфуем туда, куда D ушел уже давным давно.
                      Сообщение отредактировано: applegame -
                        Так о толку то от твоего "давным давно"? :) Эволюционное развитие - один из козырей C++. Принимается новый стандарт, я обновляю компилятор и, возможно, добавляют флажок поддержки нового стандарта в свой проект и начинаю применять новые полезные для меня фишки, ничего не переписывая и ничего не ломая.

                        Добавлено
                        Цитата applegame @
                        Цитата D_KEY @
                        В комментариях? Информация о типах? В языке со статической типизацией? Мда..
                        Зачем о типах? Описание возвращаемого значения и все. Тип не важен.

                        Имена полей - это тоже информация о типе.

                        Добавлено
                        Возможно, ты и прав, но лично я никакого профита от D не вижу... Даже от Go больше потенциальной пользы, как мне кажется. За счёт простоты. Хотя и от него я не в восторге.
                          http://habrahabr.ru/post/183488/
                          Цитата D_KEY @
                          Возможно, ты и прав, но лично я никакого профита от D не вижу... Даже от Go больше потенциальной пользы, как мне кажется. За счёт простоты. Хотя и от него я не в восторге.
                          Дело вкуса, наверное. Для меня профит прост: один и тот же код я пишу на C++ значительно медленнее, чем на D.
                          C++ гораздо "многословнее", а метапрограммирование заметно запутаннее.

                          P.S. Вот кстати статейка на хабре в тему - http://habrahabr.ru/post/183488/
                          Сообщение отредактировано: applegame -
                            Так на Питоне задачи ещё быстрее решаются ;) вопрос в том, какие возможности ты имеешь, сколько готовых(своих и сторонних) решений можешь применить, скольким людям это будет понятно и результат какого качества ты получишь.
                              Цитата D_KEY @
                              В C++14

                              Кстати, а он действительно "14" будет? Или они опять слишком оптимистичны? :)
                                Цитата OpenGL @
                                Кстати, а он действительно "14" будет? Или они опять слишком оптимистичны?

                                Ну может как раз до C++0xF дотянут. =)
                                Сообщение отредактировано: korvin -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (56) « Первая ... 15 16 [17] 18 19 ...  55 56


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1596 ]   [ 15 queries used ]   [ Generated: 19.06.25, 00:36 GMT ]