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

    Вообще-то в плюсах теперь, как и во всех нормальных языках для этого используются лямбды теперь. Ты вот скажи, то строковое выражение что, компилируется в рантайме? Или как оно работает?

    Цитата applegame @
    Зачем и куда копировать достижимые ресурсы? Сразу предупреждаю, я не очень большой специалист в алгоритмах работы GC.

    Это основа работы практически всех (полноценных) GC: http://en.wikipedia.org/wiki/Garbage_colle..._vs._non-moving
      Цитата applegame @
      В качестве стратегий: http://dpaste.dzfl.pl/adb455e76a45

      Ну это не стратегия, а имя стратегии. В плюсах можно использовать типы-теги, например или еще что-то такое.

      Цитата
      В качестве предикатов: http://dpaste.dzfl.pl/30cb1cd23e26

      В сложных случаях будет запутано(и вообще интуитивно мне кажется это очень странной фичей), в обычных можно сделать на шаблонах и constexpr.
        Цитата korvin @
        Или как оно работает?

        Реализацию метода find(!) покажи.
          Цитата korvin @
          Цитата applegame @
          После того как все ссылки исчезли, деструктор вызовется, когда GC соблагоизволит прибить данный объект.

          Обычно же GC копируют достижимые объекты, а не «прибивают» недостижимые, зачем тратить на это время и другие ресурсы?

          Копировать сборщик в D не умеет. Но вот вызов деструктора(если он есть) таки приходится как-то делать при любом сборщике. Это та же история(почти), что и с финализаторами в явашарпах.
          Сообщение отредактировано: D_KEY -
            Цитата korvin @
            Ты вот скажи, то строковое выражение что, компилируется в рантайме? Или как оно работает?
            Да, оно компиляется, только компиле-тайм, а не рантайм в лямбду-предикат. Эдакий синтаксический сахарок, для простеньких предикатов. Но можно пихать, естественно и функторы и лямбды.
            Сообщение отредактировано: applegame -
              Цитата applegame @
              Эдакий синтаксический сахарок, для простеньких предикатов

              korvin, как ты считаешь, нужно ли такой "сахарок", прости за выражение, сделать в CL: будем парсить sexp прямо из строки? :whistle:
                Итак, господа. Первая простейшая задача. Написать функцию-шаблон isOneOf(a, b1, b2, b3, b4, ...) возвращающую true если аргумент a равен хотя бы одному из аргументов b. Иначе false. Количество аргументов b от одного и далее. Типы аргументов могут быть разными, но подразумевается, что операция сравнения определена для a и любого из b. Два решения на D, итеративное и рекурсивное:
                ExpandedWrap disabled
                  bool isOneOf1(A, ARGS...)(A a, ARGS bb) {
                      foreach(b; bb) // это компиле-тайм foreach, не рантайм
                          if(a == b) return true;
                      return false;
                  }
                   
                  bool isOneOf2(A, ARGS...)(A a, ARGS bb) {
                      if(a == bb[0]) return true;
                      static if(bb.length > 1) return isOneOf2(a, bb[1..$]);
                      else return false;
                  }
                   
                  void main() {
                      assert(isOneOf1(1, 2, 3, 1, 5)); // ok 1 == 1
                      assert(isOneOf2(1, 2, 3, 1, 5)); // ok 1 == 1
                      assert(isOneOf1("a", "b", "c", "d", "e")); // runtime assertion
                      assert(isOneOf2("a", "b", "c", "d", "e")); // runtime assertion
                  }
                Итеративно, насколько я знаю в плюсах вообще невозможно сделать, сделайте хотя бы рекурсивно. Я бы и сам мог бы сделать, но вы же у нас гуру плюсов :)
                Сообщение отредактировано: applegame -
                  Цитата MyNameIsIgor @
                  korvin, как ты считаешь, нужно ли такой "сахарок", прости за выражение, сделать в CL: будем парсить sexp прямо из строки?

                  CL и так это умеет делать, есть же процедура read, которую можно вызывать хоть в compile-time, хоть в load-time, хоть в read-time. Да и те же reader-макросы. Вот только там это делать не за чем, да и не рекомендуется. =)

                  Цитата D_KEY @
                  В сложных случаях будет запутано(и вообще интуитивно мне кажется это очень странной фичей), в обычных можно сделать на шаблонах и constexpr.

                  Кстати да, то ли дело тот же питон например, хоть он мне и не нравится.

                  Цитата applegame @
                  Да, оно компиляется, только компиле-тайм, а не рантайм в лямбду-предикат. Эдакий синтаксический сахарок, для простеньких предикатов. Но можно пихать, естественно и функторы и лямбды.

                  Что, без макросов слишком быстро компилируется после плюсов? =) В чем проблема просто сделать удобный синтаксис для лямбд?

                  Синтаксис хаскелла конечно трудновоспринимаем для тех, кто с ним не знаком, но после знакомства все становится понятным, и не надо ломать голову, почему у тебя параметр «a» вроде как связывается с массивом foo, но обращение к нему идет как к элементу foo.
                  Сообщение отредактировано: korvin -
                    Цитата applegame @
                    Итак, господа. Первая простейшая задача. Написать функцию-шаблон isOneOf(a, b1, b2, b3, b4, ...) возвращающую true если аргумент a равен хотя бы одному из аргументов b. Иначе false. Количество аргументов b от одного и далее. Типы аргументов могут быть разными, но подразумевается, что операция сравнения определена для a и любого из b.

                    ExpandedWrap disabled
                      template<typename T, typename U>
                      bool isOneOf(T a, U b) {
                          return a == b;
                      }
                       
                      template<typename T, typename U, typename ... Args>
                      bool isOneOf(T a, U b, Args ... args) {
                          return isOneOf(a, b) || isOneOf(a, args...);
                      }

                    Оно?

                    Добавлено
                    Цитата applegame @
                    Итеративно, насколько я знаю в плюсах вообще невозможно сделать

                    А зачем?
                      Цитата applegame @
                      Два решения на D, итеративное и рекурсивное:

                      Хотелось бы посмотреть, как ты будешь строить список bb динамически, из пользовательского ввода например.
                        Цитата korvin @
                        Что, без макросов слишком медленно компилируется после плюсов?
                        Не понимаю, к чему это? DMD, кстати компилирует гораздо быстрее GCC. Одна из фишек D - быстрая компиляция.
                        Цитата korvin @
                        В чем проблема просто сделать удобный синтаксис для лямбд?
                        Он есть. Я повторяю, это просто синтаксический сахар. Не нравится - не юзай. Но сама возможность доставляет. Вот вариант с лямбдой: http://dpaste.dzfl.pl/f13179c43403
                        Кстати как в плюсиках создать подобную шаблоннуя inline-лямбду? Никак, только городить отдельный шаблонный предикат?
                        Сообщение отредактировано: applegame -
                          Цитата D_KEY @
                          А зачем?

                          D_KEY, ты и показал итеративное решение :rolleyes: И для него не нужен компилятор с поддержкой оптимизации хвостовой рекурсии.

                          Добавлено
                          Цитата korvin @
                          Вот только там это делать не за чем, да и не рекомендуется. =)

                          Что я и говорю :)
                            Цитата D_KEY @
                            Оно?
                            Оно, задача была проста. Но теперь сравниваем код, для D и для C++ и смотрим, что наглядней, легче для понимания и проще в написании. В плюсях пришлось городить отдельную вспомогательную функцию, как я и думал.
                            Сообщение отредактировано: applegame -
                              Цитата MyNameIsIgor @
                              Цитата D_KEY @
                              А зачем?

                              D_KEY, ты и показал итеративное решение :rolleyes: И для него не нужен компилятор с поддержкой оптимизации хвостовой рекурсии.

                              Это как посмотреть :) Определение-то рекурсивное. То, что рекурсивного вызова в рантайме нет - это уже другой разговор. Мне интересно, зачем итеративное определение в такого рода вещах.
                                Цитата korvin @
                                Хотелось бы посмотреть, как ты будешь строить список bb динамически, из пользовательского ввода например.
                                Зачем? Это разве входило в условия задачи? Динамически только значения можно передавать. А длина и типы зафиксированы compile-time.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (56) « Первая ... 7 8 [9] 10 11 ...  55 56


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