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

Страницы: (117) « Первая ... 105 106 [107] 108 109 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Цитата Romkin @
    И опять в очередной раз "слышал звон". НЕ путай реализацию интерфейсов с СОМ. Привязка к СОМ начинается с использования модуля ActiveX. А интерфейс я спокойно могу объявить вообще ничего не используя, точно так же, как и класс.

    Ромкин, спустись на землю и постарайся не слепо защищать свой favorite language, а более менее объективно смотреть на ситуацию.
    Как насчёт GUID'ов, для указания которых есть специальная синтаксическая конструкция? Или подобные расширения языка включаются только после подключения модуля ActiveX? Не подскажешь, как такие модули самому написать? ;)

    Цитата Romkin @
    Это ты про С++ сказал? :lol:
    В Delphi ты хоть какие декларации делай в B, к привату класса из другого модуля не доберешься. Ты пытался привести доступ к protected путем повышения видимости метода в потомке, что совершенно легально.

    Ребят, я готов признать, что я балабол и публично извиниться за флуд в теме, но... прежде хотелось бы убедиться, что эта возможность в языке мне приснилась :).
    Вот код, который ессно будет содержать множество синтаксических ошибок, но, надеюсь вы их подправите.
    ExpandedWrap disabled
      unit UnitA;
      interface;
      type
        A = class
        begin
          private;
             procedure foo;
        end;
      implementation;
        procedure A.foo;
        begin
          WriteLn('gotcha!');
        end;
      end.
      { ----------------------------------------------- }
      unit UnitB;
      interface;
      uses
        UnitA;
      type
        A = class; // forward declaration
        B = class
        begin
          public;
             procedure foo;
        end;
      implementation;
        procedure B.foo;
        var
          aInstance : A;
        begin
          aInstance = A.Create;
          aInstance.foo; // вызываем private метод из другого модуля
        end;
      end.
      { ----------------------------------------------- }
      program Prog;
      uses
        UnitB;
      var
        bInstance : B;
      begin
        bInstance = B.Create;
        bInstance.foo;
      end.

    Итак, суть должна быть ясна, просьба исправить ошибки, если найдутся(и выложить исправленную версию) и попытаться откомпилировать. Желательно проделать это не только с последней версией, но и с 7-й(авось исправили багофичу).
    Сообщение отредактировано: b-a1 -
      Цитата b-a1 @
      Ромкин, спустись на землю и постарайся не слепо защищать свой favorite language, а более менее объективно смотреть на ситуацию.
      Как насчёт GUID'ов, для указания которых есть специальная синтаксическая конструкция?

      И что GUID? Это обязательно СОМ?
      А ты в курсе, что я могу его не указывать? ;)
      По поводу кода. Второй модуль просто не компилируется, я даже попробовал перенести uses ниже:
      ExpandedWrap disabled
        unit UnitB;
         
        interface
        uses UnitA;
         
        type
          A = class;// forward declaration
         
          B = class
          public
            procedure foo;
          end;
         
         
        implementation
         
          procedure B.foo;
          var
            aInstance : A;
          begin
            aInstance := A.Create;
            aInstance.foo;
            aInstance.Free;
          end;
         
        end.

      Крик начинается на A = class; по поводу неполного определения. Если эту строчку убрать, получаем что ожидал: foo - такого нет. Все.

      Добавлено
      А, да, версия у меня 6 :)
        Цитата Romkin @
        И что GUID? Это обязательно СОМ?

        Да нет, это просто для приколу цифробуквы в квадратных скобках указываются. Ессно, можно не указывать, но наличие такой конструкции в языке говорит о многом. Я просто не припомню других, но в языке таких windows-only рюшечек немало.

        Цитата Romkin @

        Крик начинается на A = class;

        Ок, как делается forward declaration в Delphi?

        Цитата Romkin @
        А, да, версия у меня 6 :)

        6 или 2006? :)
          Цитата
          Как насчёт GUID'ов, для указания которых есть специальная синтаксическая конструкция?


          GUID нужен не для COM, а для того, чтобы отличать один интерфейс от другого. Когда ты запрашиваешь интерфейс, тебе нужно каким-то образом указать, какой из них ты имеешь в виду. Этот способ не ПРИВЯЗЫВАЕТ интерфейсы к COM, а делает их COM-СОВМЕСТИМЫМИ. Чувствуешь разницу? К тому же GUID - не обязателен.
            Цитата b-a1 @
            Да нет, это просто для приколу цифробуквы в квадратных скобках указываются. Ессно, можно не указывать, но наличие такой конструкции в языке говорит о многом. Я просто не припомню других, но в языке таких windows-only рюшечек немало.

            Угу. Про CORBA что-нибудь слышал? Или про UUID?
            Цитирую: "UUID (Universally Unique Identifier) — это стандарт идентификации, используемый в создании программного обеспечения, стандартизированный Фондом свободного программного обеспечения (FSF) как часть Распределенного компьютерного окружения (DCE). ...
            Наиболее распространенным использованием данного стандарта является Globally Unique Identifier (GUID) фирмы Microsoft. Другими значительными пользователями являются Linux файловая система ext2/ext3, LUKS шифрованные разделы, GNOME, KDE, и Mac OS X, все из них применяют реализацию, полученную из библиотеки uuid, находящаяся в пакете e2fsprogs.

            UUID представляет собой 16-байтный (128-битный) номер. В шестнадцатеричной системе счисления UUID выглядит как:
            550e8400-e29b-41d4-a716-446655440000
            ..."
            Угумс. GUID - частная реализация UUID. И если в Delphi он записывается в квадратных скобках - ты сразу делаешь вывод, что это "только для виндов"? :angry:

            Добавлено
            Более того, объявление
            ExpandedWrap disabled
              type
                IFoo = interface(IInterface)
                ['{98B1D125-A102-4566-9CE6-978AE71A2B0A}']
                  procedure Bar;
                end;
            является более мультиплатформным, чем все рюшечки ATL.
              Цитата
              Ок, как делается forward declaration в Delphi?


              Так и делается. Только после этого юнит должен содержать описание и реализацию данного класса. Нельзя объявить класс в одном юните, а реализовать в другом.

              Добавлено
              Цитата Повстанець @
              Я говорил, что компилер туды нагло вмешивается. Т.е. для его функционирования недостаточно просто выдержать синтаксис делфи.


              А я говорю, что достаточно. Так что, поясняй свою мысль.
                Цитата Повстанець @
                На практике -- компилятор вмешивается в реализацию VCL, фактически дописывая её в компил-тайме, что делает её наглухо закреплённой в компиляторе.
                Цитата Повстанець @
                Я говорил, что компилер туды нагло вмешивается. Т.е. для его функционирования недостаточно просто выдержать синтаксис делфи.
                Да нет, даже при моем мизерном знании дельфей я такого не замечал. Скажу более, если удалить VCL, то ничего не изменится, можно даже почти весь RTL вырезать :) В качестве примера могу посоветовать посмотреть на урезанные версии, где есть только экзешник и модуль SYSTEM, тоже урезанный. Используются для создания компактных прог, зачастую под другие системы, у меня например была реализация под dos-расширитель WDOSX, причем изменялся только модуль SYSTEM, все остальное выкидывалось.
                  Цитата --Ins-- @
                  Так и делается. Только после этого юнит должен содержать описание и реализацию данного класса. Нельзя объявить класс в одном юните, а реализовать в другом.

                  ОК, извиняюсь за дезинформацию :yes-sad:.
                  У меня похерился винт с дистрибутивами, как доберусь до какой-нибудь версии Delphi, попробую разобраться, откуда я взял эту информацию...

                  Цитата Romkin @
                  Угу. Про CORBA что-нибудь слышал? Или про UUID?

                  А, вшивать в язык возможности для COBRA - это весьма мудро :).
                    Цитата archimed7592 @
                    А, вшивать в язык возможности для COBRA - это весьма мудро

                    Надо говорить "обеспечивать встроенную в язык поддержку интерфейсов в полном соответствии с международными стандартами". :tong:
                    Программист должен быть грамотным!
                    Сообщение отредактировано: Romkin -
                      Цитата Romkin @
                      поддержку интерфейсов в полном соответствии с международными стандартами

                      Ой, а поподробнее можно про международные стандарты об интерфейсах? Ну, хотя бы, об одном из таких стандартов...

                      Цитата Romkin @
                      Программист должен быть грамотным!

                      Серьёзно? :)
                      Мдя, и не поспоришь :lol:.
                        Цитата --Ins-- @
                        Я могу использовать MFC в C++ Builder, скажем?
                        да. Не одновременно с VCL.
                          Цитата archimed7592 @
                          Ой, а поподробнее можно про международные стандарты об интерфейсах?

                          Я говорил об идентификаторах, на которую (b-a1) возмущался по поводу их встройки в язык.
                          http://ru.wikipedia.org/wiki/UUID
                          Тебе нужно об интерфейсах стандарт? А об объектах тебе не нать? Почему встроенная в язык поддержка объектов - это нормально, а интерфейсов - так "это только для СОМCORBA"?
                          И давай договоримся, если начал под одним ником - так под ним и продолжай.
                            Цитата archimed7592 @
                            Цитата Romkin @
                            Угу. Про CORBA что-нибудь слышал? Или про UUID?

                            А, вшивать в язык возможности для COBRA - это весьма мудро :).

                            А ты сам подумай, класс может содержать множество интерфейсов, а различать их как то надо. Вот и воспользовались готовым решением. Тем более, что сама идея интерфейсов была новой, для ООП Дельфи. Да и довольно удачной.
                              Цитата Romkin @
                              Я говорил об идентификаторах

                              Ты говорил: "поддержку интерфейсов в полном соответствии с международными стандартами". Вполне конкретное утверждение на что я поставил вполне конкретный вопрос.

                              Цитата Romkin @
                              Почему встроенная в язык поддержка объектов - это нормально, а интерфейсов - так "это только для СОМCORBA"?

                              А где я говорил о том, что встроенная в язык поддержка интерфейсов - это плохо? Я как раз про идентификаторы, которые самому языку не нужны и специальная конструкция для них - это излишество(я так считаю).

                              Цитата Romkin @
                              И давай договоримся, если начал под одним ником - так под ним и продолжай.

                              Ну давай, договаривайся :lol:.


                              Цитата AndNot @
                              А ты сам подумай, класс может содержать множество интерфейсов, а различать их как то надо.

                              Действительно, есть множество языков(С++ в т.ч.) в которых есть такое понятие как интерфейс(и подразумевается их множественность) и почему-то в них не появляется необходимости в UUID'ах и их аналогах(по крайней мере вшитых в язык).
                                Цитата archimed7592 @
                                Ты говорил: "поддержку интерфейсов в полном соответствии с международными стандартами". Вполне конкретное утверждение на что я поставил вполне конкретный вопрос.

                                Ну да. Интерфейсы идентифицируются в сооветствии со стандартом :)
                                Еще будешь цепляться к словам - буду игнорировать. Терпеть не могу демагогов.

                                Цитата archimed7592 @
                                Я как раз про идентификаторы, которые самому языку не нужны и специальная конструкция для них - это излишество(я так считаю).

                                Цитата archimed7592 @
                                Действительно, есть множество языков(С++ в т.ч.) в которых есть такое понятие как интерфейс(и подразумевается их множественность) и почему-то в них не появляется необходимости в UUID'ах и их аналогах(по крайней мере вшитых в язык).


                                Вот тут и проявляется некоторая флюсоватость сиплюсника:
                                1. если этого нет в любимом языке - то это и не нужно, лишнее.
                                2. и все равно это можно сделать в С++, так что лишнее по-любому!

                                Кстати, насколько мне известно, именно в С++ такого понятия, как интерфейс, нет. Они эмулируются через абстрактные классы, не так ли?
                                Не беспокойся, есть куча языков, которые динамично развиваются, и в которых новшества вносятся быстрее, чем в твое "множество языков". Delphi - один из них. Просто потому что нет надобности десятилетиями проталкивать новый стандарт языка :tong:

                                ТЫ считаешь, что UUID не нужен; я считаю - что нужен.
                                И по крайней мере, уж точно ничему не мешает и вполне универсален.
                                Думаю, я достаточно разжевал свою точку зрения.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 105 106 [107] 108 109 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1290 ]   [ 15 queries used ]   [ Generated: 22.07.25, 18:40 GMT ]