На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++

Страницы: (117) « Первая ... 17 18 [19] 20 21 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Цитата Nich @
    Profi, а не помнишь, в голосованиях тема была похожая, мы там тоже спорили чуть ли не до драки? :D Не помню, как называлась... вроде про среды программирования что-то.

    Угу, помню. :D

    Цитата Nich @
    ExpandedWrap disabled
      template<class _InIt, class _Ty>
          inline _InIt _Find(_InIt _First, _InIt _Last, const _Ty& _Val)
          {   // find first matching _Val
       
              for (; _First != _Last; ++_First)
                  if (*_First == _Val)
                      break;
              return (_First);
          }

    Шаблон типа, говоришь!
      Nich, да никак. Плодятся TIntList, TStringList и т. д. ;)
        Nich? можно для незнающих С, построчно разжевать? :rolleyes:
          Цитата Shaggy @
          Nich? можно для незнающих С, построчно разжевать? :rolleyes:

          Ну, у меня вопросы вызвала только первая строка. Я знаю, что template - это шаблон типа. Переписать функцию _Find, ясное дело, не проблема, но вот как template обыграть, пока не знаю, но то, что решение есть - точно. Хоты бы вот.

          Добавлено
          Ах, да! _Find:
          ExpandedWrap disabled
            Function _Find(_First,Last:_InIt; const _Val:^_Ty):_InIt; inline;
            Begin
             Repeat
              Inc(_First);
              if @_First=_Val then
               Break;
             Until _First=_Last;
             Result:=_First;
            end;

          Вроде так!

          Добавлено
          И вот! Сделать можно? Можно! На С++ проще? Проще! Пока мой прогноз работает!
          Сообщение отредактировано: Profi -
            Цитата Shaggy @
            Nich? можно для незнающих С, построчно разжевать? :rolleyes:

            Это простой шаблон функции, выполняющей поиск заданного значения в интервале, заданном двумя итераторами. В общем, эту функцию можно использовать для поиска значений произвольных типов (для которых определена операция ==) в различных контейнерах.
              Цитата Profi @
              Хоты бы вот.

              Какие жизненные строчки тут есть: :)
              Цитата
              Конечно, я уже слышал о Delphi, но относился к ней как к забавной зверушке. Поскольку работать с инструментами от Microsoft мне было невмоготу, то я решил попробовать Delphi. Надо сказать, что процесс освоения нового языка и новой среды оказался чрезвычайно легким и гладким, так что я изредка говорил про себя - аx, Borland, Borland! Уже после короткого времени работы с новой средой я был настолько очарован легкостью и элегантностью разработки визуальной части программ, что не заметил, как … попал в ловушку.

              Сидя на дне этой ловушки, я начал размышлять, что произошло. А произошло вот что - я практически перестал заниматься архитектурной частью проектов. Легкость, с которой в Delphi можно собрать прототип проекта и превратить его в работающий проект, сыграла со мной злую шутку. Работая на C++, я детально продумывал структуры данных, разделение программы на Документ и Вид, организацию удобной для сопровождения иерархии классов, алгоритмы работы с данными. Большую часть средств для этого предоставляла библиотека STL (Standard Template Library), без учета ее алгоритмов и контейнеров я и не представлял разработку проекта. Относительная трудоемкость реализации визуальной части программы прямо таки заставляла больше времени уделять сути программы, как более интересной и творческой. Но все смешалось в доме Облонских, когда визуальную часть стало разрабатывать не просто интересно, а очень интересно, таская по форме разные красивые компоненты. Причем это перешло даже в патологию - мне уже не казалось дикостью использование TTreeView в качестве контейнера, когда в программе требовалась структура данных в виде дерева.
              ....
                Штирлиц, т. е. Nich сказал раз. Я говорю два:
                ExpandedWrap disabled
                  // Объявляем событие
                  boost::signal<void ()> s_TestSignal;
                   
                  void Handler1()
                  {
                     std::cout << "Handler 1 called" << std::endl;
                  }
                   
                  void Handler2(const std::string& str)
                  {
                     std::cout << "Handler 2 called. Passed string: " << str << std::endl;
                  }
                   
                  void Handler3(int a, int b)
                  {
                     std::cout << "Handler 3 called. Sum of arguments: " << a + b << std::endl;
                  }
                   
                  int main()
                  {
                     // Цепляем к событию делегаты
                     s_TestSignal.connect(boost::bind(Handler1));
                     s_TestSignal.connect(boost::bind(Handler2, "Test string 1"));
                     s_TestSignal.connect(boost::bind(Handler2, "Test string 2"));
                     s_TestSignal.connect(boost::bind(Handler3, 10, 20));
                     s_TestSignal.connect(boost::bind(Handler3, 20, 30));
                   
                     // Дергаем событие.
                     s_TestSignal();
                  }


                Получаем вполне ожидаемые:
                ExpandedWrap disabled
                  Handler 1 called
                  Handler 2 called. Passed string: Test string 1
                  Handler 2 called. Passed string: Test string 2
                  Handler 3 called. Sum of arguments: 30
                  Handler 3 called. Sum of arguments: 50


                Как такое же получить на дельфи?
                  Цитата Profi @
                  Есть предложение! Один человек пишет код, скажем на C++, выкладывает его здесь, и его переводят в Delphi. Потом наоборот. Писать можно (и даже нужно!) использую особую специфику языка, чтобы было сложнее переводить.
                  Мой прогноз:
                  Любую реализацию на одном языке переведут в другой.
                  Программа, написанная на этом языке с использованием его особых специфик для ускорения, будет с 99% вероятностью работать быстрее, чем её перевод.
                  Проверим?

                  Ну для примера:
                  ExpandedWrap disabled
                    #include <complex>
                    typedef std :: complex<signed long int> complex;
                     
                    complex f (const complex * a, const complex * b,  int size)
                       {
                      complex r (0);
                      for (;size--;)
                           r += *a++ *  std :: conj (* b++);
                       return r;
                       }

                  Гоу!
                  Сообщение отредактировано: antigen -
                    antigen - а что оно делает? а то зохавать можно в дельфу через ICC6, однак незачёт коду- почемуто в три регистра не уложилось (в формате борланд _fastcall). Кстати что он делает (код этот)?
                    ExpandedWrap disabled
                      ; parameter 1: eax
                      ; parameter 2: edx
                      ; parameter 3: ecx
                      ; parameter 4: 44 + esp
                              PUBLIC   ?f@@YI?AV?$complex@J@std@@PBV12@0H@Z
                      ?f@@YI?AV?$complex@J@std@@PBV12@0H@Z    PROC NEAR
                      .B1.1:                          ; Preds .B1.0
                              push      edi
                              push      esi
                              push      ebp
                              push      ebx
                              sub       esp, 24
                              mov       ebp, DWORD PTR [esp+44]
                              xor       ebx, ebx
                              xor       edi, edi
                              xor       esi, esi
                              mov       DWORD PTR [eax], edi
                              test      ebp, ebp
                              mov       DWORD PTR [eax+4], edi
                              lea       edi, DWORD PTR [ebp-1]
                              je        .B1.5         ; Prob 2%
                                                      
                      ; LOE eax edx ecx ebx esi edi
                      ; cut...


                    Работа Intel'а понравилось абсолютной автономностью, а м$явочный сделал ряд левых вызовов, во внешние костыли...
                      Цитата Profi @
                      Вроде так!
                      А _InIt что такое? И ты уверен, что написал то же самое? В C/C++ унарный оператор * выполняет разыменование(в паскале это _First^ ), а у тебя паскалевский оператор @ - получение адреса переменной(обратное действие). И сравниваешь ты соответственно не значения, а адреса.

                      Добавлено
                      P.S. n0p в очередной раз зажигает. :D Так у тебя Delphi или ассемблер? :D Ты темой не ошибся? :)
                      Сообщение отредактировано: trainer -
                        хм.. вот один раз я так какойто мп3 распаковщик заюзал. С++ код через ML7 провернул, в OMF формате. И в тегах {$L mp3dec.obj} и заимел. в модуль. Работало даже. А так - заманаешся переводить. Даже по чуть чуть. Монстры ведь делали.. иех..
                        Сообщение отредактировано: n0p -
                          Цитата Profi @
                          И вот!
                          Ну дык понятно, что единственный способ сделать в ObjectPascal что-то подобное шаблонам C++ - использовать классы или условную компиляцию. Об этом ранее уже здесь вроде говорили. А как быть с простыми типами? А засунуть в одно выражение? И не надо забывать, что шаблон может быть развернут компилятором в простое выражение еще на этапе компиляции. Яркий пример - вычисление факториала в одной из тем. Или вот: Скорость кода (сообщение #853618) попытка вычисления функции аккермана во время компиляции.
                          Сообщение отредактировано: trainer -
                            Ну ясен пень что в компилятор Delphi среднего класса оптимизации, столько труда и бабок не вложено, сколько в профессиональные, учитывающие все x86/x86_64/ARM_XSCale архитектурные нюансы, компиляторы Inel®, и.. весьма тормозные.. :) ну а оптимизация в BDS2006, продвинулась очень незначительно, по сравнению с Delphi2.. Что не мешает ему до сих пор оставаться самым быстрым компилятором во вселенной. Даже с большим кол-вом подключеных модулей... и вообще оснавная цель Delphi - делать шустро и не парить себе моск.

                            Добавлено
                            Хотя конечно - если мне надо будет рассчетов, например атомов каких нибудь или молекул, химических соединений... посчитать на х86 недокалькуляторе.. а то и сэмулировать в 3D да еще в реальном времени. Посмотреть там, на цепную реакцию какого нибудь цезия137 (критическую массу).. как это сделали америкашки на секретном ламповом суперкомпьютере Эниак.. и затестили в реале в 45-ом. то да.. засяду за плюсы.. авось к 2045-ому, прога будет готова.
                              Цитата Nich @
                              Profi, а не помнишь, в голосованиях тема была похожая, мы там тоже спорили чуть ли не до драки? :D Не помню, как называлась... вроде про среды программирования что-то.

                              VB и си сравнивали :)

                              Добавлено
                              Цитата Hryak @
                              Какие жизненные строчки тут есть

                              А целиком можно? :)
                                Цитата antigen @
                                Гоу!

                                Ну а что тут принципиально нового? Просто функция посложнее, и на Делфи это будет ещё больше кода.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 17 18 [19] 20 21 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1166 ]   [ 15 queries used ]   [ Generated: 16.08.25, 02:53 GMT ]