На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 280 281 [282] 283 284 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата Radagast @
    в авионике аллокаторы С++ выделяют и освобождают память за строго определенное время?
    Считай, что их там нет вообще. Алгоритмы авионики не работают с данными неизвестного заранее размера по той же самой причине, а значит динамическая память не нужна, все размеры просчитываются в статике. Вот неизвестное заранее количество данных фиксированного размера - пожалуйства, но это легко раскидывается по тайм-слайсам, и опять же в статике всё считается.
    Если же вдруг оказывается, что всё-таки нужна, потому что так проще, делается свой простой менеджер и натравливается на пул статичного размера. Обычно такой менеджер работает с fixed-size блоками и не ворочает большыми объёмами. Его несложно оценить по верхней границе затрат ресурсов процессорного времени, и работает он фактически за констанстное время. Но реально я с необходимостью такого нигде не сталкивался. Просто обходятся без динамики.

    Добавлено
    А, ну amk вот уже сказал про крайний случай.
    Сообщение отредактировано: Qraizer -
      Цитата D_KEY @
      Никакого кода между вызовом и самим конструктором нет.

      Уверен? Даже мало-мальского? А автоматический вызов конструктора предка из производного класса?

      Цитата D_KEY @
      Аналог твоего говнокода будет делаться не через фабрики.

      ОМГ, какой страшный говнокод! :lool:
      ExpandedWrap disabled
        begin
          if A = B then
            Exit(0);
         
          if A.InheritsFrom(B) then
            Exit(-1);
         
          if B.InheritsFrom(A) then
            Exit(1);
         
          raise Exception.Create('');
        end;

      Ну приведи аналог только этой части.
        DesweR, это в compile-time делается. А в run-time будет так же.
          Цитата Qraizer @
          DesweR, это в compile-time делается.

          Это как раз неизвестно в compile-time.

          Цитата Qraizer @
          А в run-time будет так же.

          Как?
            Как раз-таки в compile-time уже всё известно. Или в Дельфи можно деревья классов иерархировать прям на лету?
            Цитата DesweR @
            Как?
            Та так же:
            ExpandedWrap disabled
              {
                if (isSame   <A, B>::value) return  0;
                if (isDerived<A, B>::value) return -1;
                if (isDerived<B, A>::value) return  1;
                throw std::logic_error("");
              }
            Тока вот объясни, на кой тут исключение? Или с иерархиями типа
            ExpandedWrap disabled
              class    Base{};
              class A: Base{};
              class B: Base{};
            никто не работает?
            Сообщение отредактировано: Qraizer -
              Цитата Qraizer @
              Как раз-таки в compile-time уже всё известно.

              не совсем, в его коде A и B -- классовые переменные, значения которых изменяются в рантайме

              Добавлено
              Цитата Qraizer @
              Та так же:
              ExpandedWrap disabled
                {
                  if (isSame   <A, B>::value) return  0;
                  if (isDerived<A, B>::value) return -1;
                  if (isDerived<B, A>::value) return  1;
                  throw std::logic_error("");
                }

              хотелось бы увидеть определение isSame или isDerived
                Цитата korvin @

                не совсем, в его коде A и B -- классовые переменные, значения которых изменяются в рантайме

                В дельфи из-за отсутствия шаблонов в compile-time ничего и не делается. Им по-видимому процессора конечного пользователя не жалко :)
                  korvin, как там с классовыми переменными, мне неведомо. Думаю, дело не в этом, дело в том, дженерики у них такие. Ну так я за Дельфи ничего не говорил. Я за Плюсы говорил. У нас все типы известны на момент компиляции. Я ж говорил, что отсортирую список типов компилятором. Что удивительного в этом утверджении?
                  Цитата korvin @
                  хотелось бы увидеть определение isSame или isDerived
                  Не испугаешься?
                  ExpandedWrap disabled
                    template <typename X, typename Y> struct isSame       { enum { value = false; }; };
                    template <typename T>             struct isSame<T, T> { enum { value = true;  }; };
                     
                    template <typename D, typename B>
                    class isDerived
                    {
                      typedef char (&small_type)[1];
                      typedef char (&big_type)  [2];
                     
                      template <typename T>
                      static small_type check(const volatile D&, T);
                      static big_type   check(const volatile B&, int);
                     
                      struct Proxy
                      {
                       operator const volatile B&() const;
                       operator const volatile D&();
                      };
                     
                    public:
                      enum { value = sizeof(check(Proxy(), 0)) == 1 };
                    };
                  Да, isDerived<> страшен, но это пока его не объяснят тому, кто впервые с таким сталкивается. И isSame<> несколько неполон, ибо не учитывает const/volatile модификаторов и ссылок. Но не факт, что это всегда будет требоваться от isSame<>, поэтому грамотнее const/volatile и ссылочность учитывать отдельно.
                    Цитата Qraizer @
                    Да, isDerived<> страшен, но это пока его не объяснят тому, кто впервые с таким сталкивается. И isSame<> несколько неполон, ибо не учитывает const/volatile модификаторов и ссылок. Но не факт, что это всегда будет требоваться от isSame<>, поэтому грамотнее const/volatile и ссылочность учитывать отдельно.

                    мда... имхо он в любом случае страшен, много (видимо необходимого в плюсах) мусора =/

                    а дженерики там не при чем
                    Сообщение отредактировано: korvin -
                      Цитата Qraizer @
                      Да, isDerived<> страшен
                      Ну так и написан он не для того, чтобы на него любовались. Главное задачу свою решает. Проверяет, что первый тип унаследован от второго.
                        korvin, а что сложного-то? Тут практически везде работают аналоги паттерн матчинга. Считай просто функции времени компиляции.
                          Цитата D_KEY @
                          korvin, а что сложного-то? Тут практически везде работают аналоги паттерн матчинга. Считай просто функции времени компиляции.

                          сложности тут в наличии большого количества мусора. мне также не понятно, какова роль этих сущностей:
                          ExpandedWrap disabled
                              template <typename T>
                              static small_type check(const volatile D&, T);
                              static big_type   check(const volatile B&, int);
                             
                              struct Proxy
                              {
                               operator const volatile B&() const;
                               operator const volatile D&();
                              };

                          и что представляет из себя check
                            korvin, check() ничего не представляет. Ты видишь полный текст метафункции isDerived<>. А роль тех сущностей в определении взамоотношений D и B между собой и правил перегрузки.
                              А зачем в операторе proxy нужен volatile?
                                Цитата Qraizer @
                                korvin, check() ничего не представляет. Ты видишь полный текст метафункции isDerived<>. А роль тех сущностей в определении взамоотношений D и B между собой и правил перегрузки.

                                вот я и не понимаю, как определяется отношение, зачем нужен Proxy, и что означает check(Proxy(), 0), т.к. из определения check мне вообще непонятно, что это
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 280 281 [282] 283 284 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.4063 ]   [ 15 queries used ]   [ Generated: 1.08.26, 12:47 GMT ]