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

Страницы: (117) « Первая ... 107 108 [109] 110 111 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Цитата
    C#, Pascal, Delphi, VB, PHP, Java, ... продолжать?


    Ты уже показал, как ты знаешь Delphi (раздельная компиляция юнитов - такой же основной принцип, как и строгая типизация), так что если с другими языками ситуация схожа - то лучше не надо :) Я тоже знаю карате, джиу-джицу, самбо, таеквандо и много других страшных слов :lol:

    PS: Кстати, где ты в словах Ромкина нашел переходы на личности или провокацию на них других участников? Я пока увидел это лишь в словах г-на trainer, по поводу пророков ;)
      Поправил из-за сбоя, чтобы не двоилось

      Цитата Flex Ferrum @
      у меня получается сделать следующий вывод:
      1. Delphi не поддерживает неявную идентификацию интерфейсов в среде выполнения (т. е. ее RTTI не так хорош, как его тут малюют)
      2. (как следствие) Delphi использует в качестве RTTI для интерфейсов явно указываемые UUID'ы и возлагает обязанность по их созданию на программиста, что (на мой взгляд) несколько странно.
      3. (как следствие) Delphi имеет определенные завязки на COM, т. к. ни в каком другом языке (из тех, с которыми я работал) нет специальных языковых конструкций, используемых для навешивания на интерфейсы UUID'ов (в С++ этого вообще нет, в C# для этого используются метаатрибуты классов, но там метаатрибутика используется много для чего еще, в Java - и быть не может, т. к. изначально формировалась в другой среде).
      4. Либо говорящий не совсем понимает, о чем вообще ведется речь, и откуда у чего ноги растут.

      По порядку:
      1 - 2. RTTI для интерфейсов в Delphi просто не употребим. Да, употребляется именно UUID. И по следующим причинам:
      RTTI не работает через границу dll и процесса. Требуется bpl, а это чистая зависимость от языка. RTTI также работает для классов, а интерфейс - абстракция, и может быть реализован где угодно и как угодно. На это, собственно, и расчет. Как бы класс ни реализовал интерфейс - интерфейс будет опознан.
      На мой взгляд, все вполне логично: в результате в Delphi я не обязан реализовывать декларируемый интерфейс непосредственно в классе, там обеспечена двоичная композиция (кажется, это так называется), когда интерфейс реализуется вообще сторонним коклассом, присоединяемым в двоичном коде.
      Замечу, что да, изначально интерфейсы были созданы для поддержки СОМ. Но это было в прошлом веке. Сейчас, по крайней мере теоретически, данный механизм независим от платформы. И можно говорить, что интерфейсы в Delphi имеют поведение как в СОМ, но имеются ли завязки - я не уверен. По крайней мере, интерфейс, который я привел выше, обязан работать и на Linux, где я о COM не слышал. К сожалению, Kylix не стоит, проверить не могу. Но я уверен, что задумка была именно такая. Именно поэтому был введен IInterface, который, как заявлено, в win32 соответствует IUnknown,
      3. Я бы сказал, "интерфейсы работают как в СОМ", привязка не обязательна.
      4. А вот это вполне возможно :)
      Сообщение отредактировано: Romkin -
        Цитата
        И тут, их величество интерфейсы ни с того ни с чего умеют подсчитывать ссылки(это на уровне языка/language core).


        А их величество строки не умеют? :blink: А варианты? А динамические массивы?

        Цитата
        Чтобы качественно программировать на Дельфи нужно знать не меньше подводных камней.


        По крайней мере, не нужно знать, что строки необходимо заканчивать нулевым символом ;) Тоже не назовешь "прозрачным" поведением, не так ли?
          Цитата --Ins-- @
          Ты уже показал, как ты знаешь Delphi

          Ладно, ладно, молчу, но, лучше бы ты повнимательней присмотрелся к контексту моих "страшных слов"...

          Цитата Romkin @
          Чем отличается то, что сказал ты, от того, что сказал я?

          Ты процитировал какую-то мудрую книгу по COM, где было сказано, что интерфейс - это не абстрактный класс :).

          Цитата Romkin @
          1 - 2. RTTI для интерфейсов в Delphi просто не употребим.

          Я конечно ничего в Delphi не понимаю, как верно заметил --Ins--, но мне казалось, что в Delphi можно написать someRef as ISomeInterface и получить что нужно без указания каких-либо UUID'ов. Разве нет?
            Цитата
            Господа Дельфисты, признайте уже, что Delphi - это Windows-only язык/компилятор и т.д., а программирование на Kylix столь же широко распространёно, сколько сайтостроение на С++.


            То, что он не получил распространение - это не аргумент. Аргумент - это само существование этого компилятора. Если можно было создать - значит язык кроссплатформенный. И ты не все учитываешь, есть еще .NET и Free Pascal ;)
              Цитата --Ins-- @
              А их величество строки не умеют? :blink: А варианты? А динамические массивы?

              Ну да.
              1. Строки в Delphi - особая каста. MM строк берёт на себя RTL. UPD: да, и кстати, строки у вас тоже OLE-compatible :D.
              2. Варианты - а чего их подсчитывать то? :) AFAICS, это обыкновенные структурки размером байт эдак в 10-20, которые располагаются совсем не в куче.
              3. Динамические массивы - ну да, ещё один костыль в языке для которого есть специальные ф-ции hi/lo, специальные правила MM и пр. BTW, IIRC эти самые массивы совместимы с OLE'шными - то бишь очередная рюшечка :D.

              UPD: итого, у вас reference-counted только те сущности, которые нужны для OLE/COM.

              Добавлено
              Цитата --Ins-- @
              По крайней мере, не нужно знать, что строки необходимо заканчивать нулевым символом ;) Тоже не назовешь "прозрачным" поведением, не так ли?

              Какие-такие строки? Я ничего никаким нулевым символом не заканчиваю ;).
              Сообщение отредактировано: archimed7592 -
                Цитата archimed7592 @
                Дык вот, в таком же духе: зачем нужен UIID как языковая конструкция?
                Я уже говорил, что это нужно для распознания нужного интерфейса. Флекс верно заметил, можно было бы сделать на основе RTTI, но эта штука может меняться даже в разных версиях компилятора, так что не катит.
                Цитата archimed7592 @
                Извини, что повторяюсь, но, каким местом ты сюда строки приплёл? Я про символы говорил...
                Если уж на то пошло, то в Си вообще нет понятия символов, есть лишь понятие char, который можно рассматривать как символ, но не более. Вот именно эта концепция и не позволяет удобно работать со строками.
                Цитата archimed7592 @
                Чтобы качественно программировать на Дельфи нужно знать не меньше подводных камней.
                В Дельфях синтаксис более строгий, так что компилятор зарубит на корню любые попытки "прострелить себе ногу" ;)
                Цитата archimed7592 @
                вот это я и называю рющечками: взята конкретная платформа(win32), конкретная технология(COM) и добавлена рющечка в язык
                Не смешно. Если взять тот же Си, то могу напомнить тебе, что строки с завершающим нулем появились под вполне определенную архитектуру, где была удобная аппаратная поддержка ;) Так что не надо про рюшечки, их в любом языке хватает.
                Цитата archimed7592 @
                К TObject можно привести только его наследников, но никак не втсроенные типы аля integer, double, boolean, string
                Ну вот, приехали. Это каким же образом связаны базовый объект ООП и типы данных? Или ты не знаешь, что Дельфи позволяет обходиться без ООП? ;) А раз так, то зачем привязывать типы к ООП?

                Добавлено
                Цитата archimed7592 @
                1. Строки в Delphi - особая каста. MM строк берёт на себя RTL. UPD: да, и кстати, строки у вас тоже OLE-compatible :D.
                Архимед, скорее наоборот ;) Дельфийские строки являются прямым наследником Паскалевских, а OLE появилось позже ;) Так что это микрософт передрал идею, сделав свою технологию Дельфи-совместимой :P
                  Цитата --Ins-- @
                  И ты не все учитываешь, есть еще .NET и Free Pascal ;)

                  Free Pascal - бедняги, пытаются по неоднозначной спецификации(используя старый и проверенный метод проб и ошибок) состряпать компилятор, который будет более-менее соответствовать современной редакции Delphi. А Borland плевать, что кто-то что-то там пытается - они будут менять язык и поведение как им заблагорассудиться и не будут "проталкивать новый стандарт".

                  .NET - то же мне кроссплатформенность. Я не удивлюсь, если уже есть brainfuck4dotNET. Чтобы сделать .NET компилятор нужно: 1) добавить все возможности, требуемые CLS и 2) специфицировать существующие возможности языка в терминах CLR.
                    Цитата archimed7592 @
                    Я конечно ничего в Delphi не понимаю, как верно заметил --Ins--, но мне казалось, что в Delphi можно написать someRef as ISomeInterface и получить что нужно без указания каких-либо UUID'ов. Разве нет?

                    Если SomeRef - класс, то можно. Если интерфейс - то при наличии IID, поскольку переход в общем случае может быть нетривиальным, и упор идет на реализацию этих интерфейсов непосредственно в коклассе.

                    Добавлено
                    Цитата Flex Ferrum @
                    Ну, если посмотреть в сторону C#, то там интерфейс реализован вообще хитро. Реализация методов интерфейса ищется не только в том классе, который явно описан, как реализующий интерфейс, и наследниках этого класса, но также и в предках этого класса (по сигнатуре метода интерфейса). Вот это - реализация интерфейса, как языковой конструкции.

                    Упс. И в наследниках?! Вот этого точно нет. Это как? Потомок же не создан, он что, создается?
                    А в предках - ищется, куда денешься-то?
                      Цитата
                      1. Строки в Delphi - особая каста. MM строк берёт на себя RTL. UPD: да, и кстати, строки у вас тоже OLE-compatible


                      Ты не поверишь, но работа со строками в Delphi - куда более логична и прозрачна, чем в C/C++. Программист работает с некой абстрактной сущностью и его совсем не интересуют аспекты ее реализации. Компилятор все берет на себя. Кстати,

                      Цитата
                      ...скорее наоборот Дельфийские строки являются прямым наследником Паскалевских, а OLE появилось позже Так что это микрософт передрал идею, сделав свою технологию Дельфи-совместимой


                      в этой цитате очень большая доля правды. Почитай более старую литературу, там строки, длина которых не определяется нулевым символом, а записана непосредственно рядом со строкой, называются "Pascal-строками" ;) И очень многие подхватили эту идею и перенесли ее к себе. Так как, например, для операции конкатеции строк не нужно пробегать по всем строкам, определяя положение нулевого символа, и вычисления размера буфера для новой строки. Теперь эти длины можно просто взять из метаданных и сложить. :)
                        Цитата Romkin @
                        Брр. Чем отличается то, что сказал ты, от того, что сказал я? Я с самого начала утверждал, что интерфейс - абстракция, и нельзя говорить, как именно он обязан реализоваться.

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

                        Цитата --Ins-- @
                        1 - 2. RTTI для интерфейсов в Delphi просто не употребим. Да, употребляется именно UUID. И по следующим причинам:
                        RTTI не работает через границу dll и процесса. Требуется bpl, а это чистая зависимость от языка. RTTI также работает для классов, а интерфейс - абстракция, и может быть реализован где угодно и как угодно. На это, собственно, и расчет. Как бы класс ни реализовал интерфейс - интерфейс будет опознан.
                        На мой взгляд, все вполне логично: в результате в Delphi я не обязан реализовывать декларируемый интерфейс непосредственно в классе, там обеспечена двоичная композиция (кажется, это так называется), когда интерфейс реализуется вообще сторонним коклассом, присоединяемым в двоичном коде.
                        Замечу, что да, изначально интерфейсы были созданы для поддержки СОМ. Но это было в прошлом веке. Сейчас, по крайней мере теоретически, данный механизм независим от платформы. И можно говорить, что интерфейсы в Delphi имеют поведение как в СОМ, но имеются ли завязки - я не уверен. По крайней мере, интерфейс, который я привел выше, обязан работать и на Linux, где я о COM не слышал. К сожалению, Kylix не стоит, проверить не могу. Но я уверен, что задумка была именно такая. Именно поэтому был введен IInterface, который, как заявлено, в win32 соответствует IUnknown,

                        Почему-то С++ не границы dll не мешают. Я вполне могу (в случае, если я пользуюсь одним компилятором) делать dynamic_cast'ы, "нарушающие" границы dll-ек, и это будет прекрасно работать. И по простой причине - компилятор с RTTI отвечают за то, чтобы такие касты проходили корректно.
                        Интерфейс - это, конечно, абстракция. Но ровно до того момента, пока не получает конкретного воплощения для своего описания. В С++ - это абстрактные классы. В Delphi - это сущности под заголовком interface. Т. е. когда интерфейс приобретает вид вполне конкретной синтаксической и семантической конструкции, он перестает быть абстракцией. Вот в том же С++ я действительно могу использовать "чисто абстрактные" интерфейсы - когда программирую с помощью шаблонов (т. е. занимаюсь метапрограммированием). Там я интерфейс явно нигде не описываю, предполагая, что типы, которыми я типизирую конкретный шаблон, содержат реализации нужных мне методов. Вот это - интерфейсы как абстракция. Тут никакого RTTI и в помине быть не может. Правда, все остается на уровне компилятора.
                        А когда ты в коде описываешь нечто под заголовком interface, этому нечто вполне можно присвоить некий RTTI-идентификатор. Автоматически, а значит навешивать явным образом UUID - это уже от лукавого (что и демонстрирует -Ins-). И кроссплатформенность тут приплетать ни к чему. Уж кому-кому, но не С++-сникам рассказывать про кроссплатформенность. :) Об этом можно будет поговорить, когда ты сможешь написать программу, которая откомпилируется двумя-тремя различными компиляторами под две-три разных программно-аппаратных архитектуры. ;) Вот тогда будем говорить про кроссплатформенность, переносимость и про проблемы, которые тогда возникают. А пока большинство приведенных тобою аргументов выглядят несколько, гм, притянутыми за уши, т. к. я еще в предыдущем посте сказал, что есть две решаемые проблемы - когда мы не покидаем границ языка и платформы, и когда нам нужно связать код, написанный на разных языках и разными компиляторами, и все приведенные тобою аргументы относятся ко второму случаю, который (при разработке) возникает далеко не часто.
                          Цитата AndNot @
                          Если уж на то пошло, то в Си вообще нет понятия символов, есть лишь понятие char, который можно рассматривать как символ, но не более. Вот именно эта концепция и не позволяет удобно работать со строками.

                          Где неудобство? Я сколько работаю - одни удобства. На примере можно?

                          Цитата AndNot @
                          В Дельфях синтаксис более строгий, так что компилятор зарубит на корню любые попытки "прострелить себе ногу" ;)
                          Это не аргумент ;). Волков бояццо - в лес не ходить :).

                          Цитата AndNot @
                          Не смешно. Если взять тот же Си, то могу напомнить тебе, что строки с завершающим нулем появились под вполне определенную архитектуру, где была удобная аппаратная поддержка ;) Так что не надо про рюшечки, их в любом языке хватает.

                          Если честно, ты не напомнил мне(ибо я этого не знал :)), но, так или иначе, это было в каком году? И в каком году появились UUID'ы в Delphi? Я бы понял, если бы эта рюшечка пришла в Дельфи из Паскаля, но, с высоты сегодняшнего дня UIID'ы в языке смотрятся как-то глупо. Я же не ропчу на Delphi за их object ... end, который похож на class ... end - ну да, досталось в наследство, ничего не поделаешь.

                          Цитата AndNot @
                          Ну вот, приехали. Это каким же образом связаны базовый объект ООП и типы данных? Или ты не знаешь, что Дельфи позволяет обходиться без ООП? ;) А раз так, то зачем привязывать типы к ООП?

                          Ах, вот оно какое тут rational :).

                          Цитата Romkin @
                          Если интерфейс - то при наличии IID, поскольку переход в общем случае может быть нетривиальным, и упор идет на реализацию этих интерфейсов непосредственно в коклассе.

                          Мдя... А коклассы - это случаем не OLE/COM-приблуда? :lol:
                            Цитата archimed7592 @
                            Строки в Delphi - особая каста. MM строк берёт на себя RTL. UPD: да, и кстати, строки у вас тоже OLE-compatible

                            Собственно, так же, как и массивы :) И кто тебе сказал, что они OLE-совместимы? Скорее совместимы с ASCIIZ (PChar). Скажешь, тоже рюшечки?
                            И динамические массивы тоже не путай с вариантными.
                            По-твоему, Delphi полностью OLE-совместимым каким-то получается :)))

                            Цитата archimed7592 @
                            UPD: итого, у вас reference-counted только те сущности, которые нужны для OLE/COM.

                            Да уж. Вывод на пустом месте. И где в COM определена структура ansistring? Собственно да, WideString соответствует по структуре BSTR. Насколько - не знаю. Но трудно придумать что-то другое: структура простая, так почему бы не взять то, что уже есть и не изобретать велосипед?
                            А динамический массив - это не safe array!

                            Все, что ты сказал - уж прости, не соответствует действительности и основано на слухах.
                              Цитата --Ins-- @
                              Программист работает с некой абстрактной сущностью и его совсем не интересуют аспекты ее реализации.

                              Да я тоже работаю с некой абстрактной сущностью и меня не интересуют аспекты её реализации. Только, в отличии от Delphi-программистов я могу выбрать реализацию от STLport, стандартную, реализацию от Qt, из ICU и т.д.

                              Цитата --Ins-- @
                              очень многие подхватили эту идею и перенесли ее к себе. Так как, например, для операции конкатеции строк не нужно пробегать по всем строкам, определяя положение нулевого символа, и вычисления размера буфера для новой строки. Теперь эти длины можно просто взять из метаданных и сложить. :)

                              У, блин, да сто лет в обед, как в С++ не используются NTBS. Да, они там есть, точно так же, как и есть object ... end в Delphi, но наличие не обязует к использованию.
                                Цитата archimed7592 @
                                А коклассы - это случаем не OLE/COM-приблуда?

                                Я называю коклассом класс, реализующий данный интерфейс. Извини, попутал тебя.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 107 108 [109] 110 111 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



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