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

Страницы: (117) « Первая ... 26 27 [28] 29 30 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Цитата Dantes @
    Я так понял, что variant автоматом преобразуется в нужный тип.
    этих автоматических преобразований конечное число и их с легкостью можно зашить в один класс... я не прав? :unsure:
    Цитата Dantes @
    ем более, в приведённых примерах было обращение к членам объекта - о таком boost::any и boost::variant могут только мечтать.
    вся эта рефлексия от лукавого, имхо... что ж, можно поднять отдельный холивар о надобности рефлексии...

    [Создана тема - Рефлексия - wind]
    Сообщение отредактировано: wind -
      Цитата Dantes @
      И если из ранееприведённых примеров я правильно оценил возможности variant в Delphi
      Это просто специальный тип, для которого реализованы специальные возможности на уровне компилятора.

      Добавлено
      Цитата Dantes @
      // как передать параметр произвольного типа виртуальной функции,
      // чтобы потом обращаться с ним как с самым обычным параметром?
      // ответ неутешителен: никак!
      Не обольщайся, в Delphi ситуация с этим не лучше, чем в C++. Чудес не бывает. Такое возможно только в языках, в которых нет примитивных типов, да еще желательно и интерпретируемых, вроде smalltalk или JavaScript.
        Цитата archimed7592 @
        про boost::any, наверное не слыхал ниче? :whistle:

        Че за костыль?
        Цитата archimed7592 @
        лесом идёт ваше многократное использование в виде T*List :tong:

        Ну я так и вижу, что каждый день нужны массивы из экзотических типов. Нафиг они там сдались, когда языком предусмотрены полноценные динамические массивы (man SetLength -- дельфисты, я не путаю?)?
          Цитата linuxfan @
          Че за костыль?
          в этот костыль точно также можно засунуть объект любого типа
          Цитата linuxfan @
          Ну я так и вижу, что каждый день нужны массивы из экзотических типов.
          кому как... тебе может и не нужны
          а map? TIntIntMap, TIntStringMap, T**Map?
          да и говорил я не про то, нужны ли такие контейнеры, а про "многократное" использование - то, что TXXXList нужно реализовывать каждый раз отдельно(ну м.б. наследуясь от малого общего ф-ционала), разве не так?
            Цитата Dantes @
            Даже любой пользовательский тип? И чего с ним потом можно делать?

            Да, любой. Даже integer -- это variant. Насчет «делать» -- дельфисты лучше знают, т. к. давно это было.
            А вот «объектно-ориентированные» плюсы все что угодно могут впихнуть только в void* :P
            Цитата archimed7592 @
            этих автоматических преобразований конечное число и их с легкостью можно зашить в один класс... я не прав?

            И когда в C++ перестанут изобретать велосипеды и признают, что сей язык нуждается в серьезной доработке?

            Добавлено
            Цитата archimed7592 @
            в этот костыль точно также можно засунуть объект любого типа

            А int туда запизнется? int же не объект :whistle:
            Цитата archimed7592 @
            да и говорил я не про то, нужны ли такие контейнеры, а про "многократное" использование - то, что TXXXList нужно реализовывать каждый раз отдельно(ну м.б. наследуясь от малого общего ф-ционала), разве не так?

            Не так. array of variant решает все проблемы хранения. Если тебе надо алгоритмы -- то да, тут засада, но, видимо, живут же как же.
              Цитата linuxfan @
              А вот «объектно-ориентированные» плюсы все что угодно могут впихнуть только в void* :P
              а что, ОО подразумевает обязательную фичу "всёвпихующий variant"? а если фичи нету, то ОО сразу идёт в кавычках? <_<
              Цитата linuxfan @
              И когда в C++ перестанут изобретать велосипеды
              велосипеды изобретают только ньюбы из-за незнания о существовании готового велосипеда(неумения найти таковой)... всё что может понадобится уже давно разработано и реализовано... бери-нехочу...
              Цитата linuxfan @
              и признают, что сей язык нуждается в серьезной доработке?
              как только ты обоснуешь реальную необходимость твоих доработок... пока это пустые слова.

              Добавлено
              Цитата linuxfan @
              А int туда запизнется? int же не объект :whistle:
              да... что душе угодно
              Цитата linuxfan @
              Не так. array of variant решает все проблемы хранения.
              в ущерб скорости :lol: давай бенчмарк, а?
              Цитата linuxfan @
              Если тебе надо алгоритмы -- то да, тут засада, но, видимо, живут же как же.
              алгоритмы как раз таки variant ваш реализовывать позволяет... достаточно предъявить некоторые требования к хранимым объектам
                Цитата trainer @
                Такое возможно только в языках, в которых нет примитивных типов, да еще желательно и интерпретируемых

                Почему? Взять например common lisp. Примитивные типы в нем есть, и компиляторы есть, а мультиметоды используются в качестве основного способа реализации методов объектов.
                Цитата linuxfan @
                Нафиг они там сдались, когда языком предусмотрены полноценные динамические массивы (man SetLength -- дельфисты, я не путаю?)?

                Кроме массивов много чего еще есть.
                Цитата linuxfan @
                А вот «объектно-ориентированные» плюсы все что угодно могут впихнуть только в void* :P

                Неправда. :)
                Цитата linuxfan @
                А int туда запизнется? int же не объект :whistle:

                int — вполне себе объект.

                Добавлено
                Цитата archimed7592 @
                алгоритмы как раз таки variant ваш реализовывать позволяет... достаточно предъявить некоторые требования к хранимым объектам

                Алгоритмы с variant — это то же самое, что и сишная quicksort с функцией сравнения двух void*
                  А вот мну тип "вареант" не рулит.. как ток заюзаешь вот ево, так сразу ексешка обрастает вызовоми в OleAut32.dll, Ole32.dll.. И как токому коду работать в открытом космосе, в кернел-спейсе, а?

                  как будт на этом типе так и написано "Variant - собственость корпорации мелкасофт, все защищено направо и налево"...
                    Цитата n0p @
                    А вот мну тип "вареант" не рулит.. как ток заюзаешь вот ево, так сразу ексешка обрастает вызовоми в OleAut32.dll, Ole32.dll.

                    Они и так автоматически подключаются. Variant тут не причем.
                      с новыми возможностями по оверлоадингу и перегрузкам в BDS2006 недотип Variant, может спокойно отправиться на свалку..

                      ну а так - нативные 32-битные типы рулят (в том числе и с плавающей точкой). ну и иногда int64 (оч редко)..

                      Цитата Smike
                      Они и так автоматически подключаются. Variant тут не причем.

                      Да.. и сия трабла существовала чуть ли ни с самого начала зарождения 32-битной версии дельфи. Как правило "доработка" RTL или использование облегченных версий от KOL, + категорическое неиспользование этого типа помогали решить данную проблему, с этими либами.
                      Сообщение отредактировано: n0p -
                        Цитата archimed7592 @
                        велосипеды изобретают только ньюбы из-за незнания о существовании готового велосипеда(неумения найти таковой)... всё что может понадобится уже давно разработано и реализовано... бери-нехочу...

                        Расскажи-ка ньюбу, может ли твой любимый boost::any работать с потоками без внушительных потерь производительности?

                        ExpandedWrap disabled
                          std::vector<boost::any> v;
                          v.push_back(1);
                          v.push_back("string");
                          // ...
                          for (i=0; i<v.size(); ++i)
                              std::cout << v[i] << std::endl; // ?

                        Моя реализация Any может.
                          Кстати, Владимир Кладов, автор данного направления в дельфи-программировании (минимализм так сказать), в своей книге о KOL писал:
                          Цитата

                          В конце концов, когда у меня появилось свободное время, я начал экспериментировать с новыми компиляторами, разработанными специально уже для новой среды (Windows 95 и Windows NT 3.5). И по совету своего хорошего знакомого Алексея Шадрина, в том числе я попробовал и Delphi 2, которая как раз только что была выпущена. И тут же был изумлен простотой работы и главное - очевидной логикой работы в среде IDE. (В том числе меня порадовала и высокая скорость компиляции кода, надо отдать должное фирме Borland - такого быстрого компилятора мне еще не приходилось видеть).

                          Ради таких удобств в работе я согласен был пожертвовать привязанностью к C/C++, и вспомнить, как пишут код на Паскале. (На первых порах меня доставала необходимость писать := вместо просто =, и begin/end вместо фигурных скобок, но уже скоро я привык и к :=, и оценил очевидные преимущества begin/end для людей с не-100%-ным зрением, для нас это намного более удобная запись, чем фигурные скобки, которые легко перепутать с обычными, а то и вообще не заметить). Добавлю только, что первая рабочая программа была готова уже через пару дней (!), и она прекрасно работала в многооконной среде, делая именно, то, что от нее и требовалось (печать платежных поручений, а вы как думали - самое востребованное ПО в условиях стихийно развивающихся ООО и ЧП).

                          С этого момента я стал убежденным сторонником Паскаля, купил нужные для начинающего книжки по Delphi, даже научился созданию компонентов и сделал парочку своих...
                            Цитата mo3r @
                            Алгоритмы с variant — это то же самое, что и сишная quicksort с функцией сравнения двух void*
                            ну смотри, к примеру, find накладывает ограничение на то, чтобы объекты были сравнимы оператором <, тожно так же можно поставить требование, чтобы v1.less (v2) возвращала результат сравнения объектов... просто с шаблонами это будет куда быстрее (ну, че, дельфисты, айда бенчмарк :lol:)

                            Добавлено
                            Цитата Unreal Man @
                            Расскажи-ка ньюбу, может ли твой любимый boost::any работать с потоками без внушительных потерь производительности?
                            Цитата Unreal Man @
                            Моя реализация Any может.
                            ну и? где здесь велосипед? :rolleyes: чего-то небыло, ты подумал и сделал... кстати, "ньюб", на твою реализацию взглянуть то можно?
                              Стоило, оно хотябы выеденого яйца, тогда имел смысл с чем то париться. по мне алгоритмы не должны зависить от той или иной прослойки-фреймворка..

                              хотя.. интересно затестить древний рекурсивный QuickSort.. хм.. где нибудь в космосе, ибо для меня представляют больший интерес, в плане пользительности автономные блоки и фишки.

                              Добавлено
                              Код хоть и древний, но простенький. Проверил integer массив в 32 метра - всё норм, не сглючило. Ну очень быстро окучивает (конечно зависит и от железа), но се равно это один из сверхшустрых алго.
                              ExpandedWrap disabled
                                program Qsort; uses windows;
                                const
                                  Max = 33554432 div 4; //32MB
                                 
                                type
                                  List = array[1..Max] of Integer;
                                 
                                var
                                  Data: List;
                                  I: Integer;
                                 
                                procedure QuickSort(var A: List; Lo, Hi: Integer);
                                 
                                procedure Sort(l, r: Integer);
                                var
                                  i, j, x, y: integer;
                                begin
                                  i := l; j := r; x := a[(l+r) DIV 2];
                                  repeat
                                    while a[i] < x do i := i + 1;
                                    while x < a[j] do j := j - 1;
                                    if i <= j then
                                    begin
                                      y := a[i]; a[i] := a[j]; a[j] := y;
                                      i := i + 1; j := j - 1;
                                    end;
                                  until i > j;
                                  if l < j then Sort(l, j);
                                  if i < r then Sort(i, r);
                                end;
                                 
                                begin {QuickSort};
                                  Sort(Lo,Hi);
                                end;
                                var time: integer;
                                 
                                begin {QSort}
                                  WriteLn('Now generating 1000 random numbers...');
                                  Randomize;
                                  for i := 1 to Max do Data[i] := Random(-1);
                                  WriteLn('Now sorting random numbers...');
                                  time := GetTickCount;
                                  QuickSort(Data, 1, Max);
                                  Writeln ('Done ', GetTickCount - time);
                                  ReadLn;
                                end.

                              приколоться чтоль в R0, затестить... :huh:
                                бугага! :) прикольно заценить эту консольную прогу под GUI в DirectDraw, (ы\в принципе можно в DOS'е), используя в качестве массива видеоэкран. По красоте, сортировке шума, круче ток Земля с видом из космоса (вроде бил ворота, скора туда полетит) :).

                                хм.. точна! попробую в ring0, с выводом на экран (в принципе мона и синяк ака BSOD словить, однак я это дело люблю - по мне это самый что ни наесть джас-фор-фан... да и по мере приобретения опыта, таких конфузов становиться всё меньше и меньше.. ).

                                2archimed7592-
                                Цитата
                                что за чудесный мир, в котором ты живёшь?

                                тссс... такие развлечения рулили во времена ТурбоПаскаля намба севен :) в порядке вещей, мона сказать... не то что сейчас - никакого бугага... =(((

                                добавлено-с..
                                хм.. =(( При сортировке видео-массива обьявленого как тип Cardinal, получил 'синяк', с integer всё окей .. странно что стек выдержал. придеться разбираться с багой (мож из за того что в коде знаковые типы еще присутствуют).. :wacko:
                                Сообщение отредактировано: n0p -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 26 27 [28] 29 30 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0771 ]   [ 14 queries used ]   [ Generated: 1.06.24, 19:29 GMT ]