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

Страницы: (117) « Первая ... 108 109 [110] 111 112 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Цитата
    Это не аргумент . Волков бояццо - в лес не ходить .


    Как раз таки контроль на стороне компилятора и языка - это наиболее правильный подход, и он был заложен Виртом в язык изначально и умышленно. Чтобы приучать программиста к дисциплине, а не к вседозволенности. Кстати, в той же вики, отстутствие такой возможности в C++ приписывают именно к недостаткам языка (самый первый) ;)

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

    Значит - интересуют :P И это ничем не лучше, чем явно указывать IID при объявлении интерфейса
      Цитата Romkin @
      По-твоему, Delphi полностью OLE-совместимым каким-то получается :)))

      Ладно, ребят, чтобы не ходить вокруг да около, напишите ка мне простенькую консольную программку, которая создаёт xls/xlsx файл в котором в ячейку B7 записано число 99, в ячейку A3 строка "abc", ну а для B7 выставлен формат 0.00(не помню как это будет выглядеть в форматной строке excel).
        Цитата
        У, блин, да сто лет в обед, как в С++ не используются NTBS.


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

          Ну вряд ли критикую. Я просто утверждаю, что это - эмуляция понятия интерфейс.

          Цитата Flex Ferrum @
          Я вполне могу (в случае, если я пользуюсь одним компилятором) делать dynamic_cast'ы, "нарушающие" границы dll-ек, и это будет прекрасно работать. И по простой причине - компилятор с RTTI отвечают за то, чтобы такие касты проходили корректно.

          Вот здесь главный упор - на один компилятор. То же самое я могу, используя bpl, которая, собственно, представляет собой dll с экспортом нужной для RTTI информацией. ДУмаю, в С++ примерно такой же механизм.
          А вот если просто передавать указатель на класс, то информация о типе не передается, об этом и речь.

          Цитата Flex Ferrum @
          А когда ты в коде описываешь нечто под заголовком interface, этому нечто вполне можно присвоить некий RTTI-идентификатор. Автоматически, а значит навешивать явным образом UUID - это уже от лукавого (что и демонстрирует -Ins-). И кроссплатформенность тут приплетать ни к чему. Уж кому-кому, но не С++-сникам рассказывать про кроссплатформенность.

          Автоматически - можно, конечно. Вопрос в том - когда присваивать. Во время компиляции? Как давать в каждом билде один и тот же IID?
          IID тем и хорош, что присваивается интерфейсу один раз и навсегда. К сожалению, это - число, причем генерируемое довольно случайным образом.
          И IID нужен там, где RTTI может и не работать, поэтому он присваивается явно. Плюс - он идентифицирует интерфейс глобально, а не только в рамках данного модуля.
          Если хочешь, можешь считать IID тем самым идентификатором для RTTI. Одновременно выполняющем роль глобального идентификатора. Два-в-одном. И чем это плохо?
            Цитата --Ins-- @
            Значит - интересуют :P

            Да ничего меня не интересует. Просто я использую наиболее подходящую реализацию. К примеру, в рамках Qt логично использовать QString.

            Добавлено
            Цитата --Ins-- @
            Что такое NTBS?

            Null Terminated Byte String.

            Добавлено
            Цитата Romkin @
            Я просто утверждаю, что это - эмуляция понятия интерфейс.

            Глупость какая-то. Если интерфейс - это идиома, то любая реализация будет представлять из себя эмуляцию. Или же ты берешь за эталон дельфёвый interface? Ну тогда, конечно, эмуляция :)
              Цитата archimed7592 @
              Где неудобство? Я сколько работаю - одни удобства. На примере можно?
              Элементарно
              ExpandedWrap disabled
                s := "foo"+"bar"+t+"rulez!"
              А теперь прикинь, сколько телодвижений нужно сделать в Си, для подобного результата ;) Или так:
              ExpandedWrap disabled
                if s <> "foo" then
                .....
                .....
                if s = t then
                ......
              Это я и называю удобной работой со строками ;)
              Цитата archimed7592 @
              Волков бояццо - в лес не ходить :).
              Мне то можешь не говорить, учитывая мой любимый язык ;)
              Цитата archimed7592 @
              но, так или иначе, это было в каком году? И в каком году появились UUID'ы в Delphi?
              А это имеет значение? Ну если уж Си амнистировал, то почему бы и Дельфи не попасть под амнистию? ;)
                Цитата Romkin @
                А вот если просто передавать указатель на класс, то информация о типе не передается, об этом и речь.

                Если ты имел ввиду указатель на объект(или ссылка, как это у вас принято называть), то информация о типе ещё как передаётся.

                Цитата Romkin @
                Автоматически - можно, конечно. Вопрос в том - когда присваивать. Во время компиляции? Как давать в каждом билде один и тот же IID?

                Ну в .NET как-то это делается же :).
                  Цитата AndNot @
                  Элементарно
                  s := "foo"+"bar"+t+"rulez!"
                  А теперь прикинь, сколько телодвижений нужно сделать в Си, для подобного результата Или так:
                  if s <> "foo" then
                  .....
                  .....
                  if s = t then
                  ......
                  Это я и называю удобной работой со строками
                  И сколько же телодвижений в с++ нужно сделать для подобного результата?
                    Цитата archimed7592 @
                    Просто я использую наиболее подходящую реализацию. К примеру, в рамках Qt логично использовать QString.

                    Угу. В рамках MFC CString кажется? А в рамках другой библиотеки - другой тип...
                    Вот это я и называю изобретать велосипед: вместо единого типа, которым пользуются все - в каждой библиотеке свой велосипед со своими заморочками. А тем, что есть, asciiz - не пользуются.
                    Взять хоть тот же QString: вроде бы чистая абстракция, но там есть подсчет ссылок, и, соответсвенно, особенности при использовании в потоках. В другой библиотеке у тебя, скорее всего, будет другой тип с другим поведением.
                    И постоянно надо учить, как себя ведет в данной библиотеке данный объект, который представляет всего лишь строку!
                      Цитата
                      А вот если просто передавать указатель на класс, то информация о типе не передается, об этом и речь.


                      Либо теперь уже я тебя не правильно понял, либо - передается. Тут проблема в том, что библиотеки компилируются раздельно и независимо друг от друга, поэтому каждый экземпляр обладает своей версией RTTI. Т.е. класс TFoo в двух разных DLL - это разные классы с точки зрения рантайма. Даже если они бинарно идентичны. Но могут и различаться, поэтому динамический тайпкаст делается только в пределах данного программного модуля. Думаю, ты это и без меня прекрасно понимаешь ;) Кстати, сделать межмодульный тайпкаст ручками можно.
                        Цитата archimed7592 @
                        Ну в .NET как-то это делается же

                        Там проще: можно сказать, единый RTTI для всех.
                          Цитата AndNot @
                          А теперь прикинь, сколько телодвижений нужно сделать в Си, для подобного результата ;) Или так:

                          Так, поднимаешь взор на заголовок браузера и видишь "Delphi vs C++".
                          ExpandedWrap disabled
                            s = string() + "foo" + "bar" + t + "...";
                            if (s != "foo")
                              ;
                            if (s == "foo")
                              ;
                            // и даже relational
                            if (s1 < s2)
                              ;
                            if (s1 <= s2)
                              ;
                            // etc.
                            Цитата
                            Да ничего меня не интересует. Просто я использую наиболее подходящую реализацию.


                            Значит меня тоже не интересует реализация идентификаторов для интерфейсов :) Я просто сам назначаю этот идентификатор. Ведь получается то же самое - там где программист должен что-то сам ручками задавать - значит поведение непрозрачно.

                            Цитата
                            Null Terminated Byte String.


                            В С++ не используются? А в C? А тебе известно, что C++ был придуман через 10 лет после Паскаля? Вот я и говорю, что в более старой литературе такой тип строк называю Pascal-строками, так как именно отсюда ноги растут ;)
                              Цитата --Ins-- @
                              Либо теперь уже я тебя не правильно понял, либо - передается. Тут проблема в том, что библиотеки компилируются раздельно и независимо друг от друга, поэтому каждый экземпляр обладает своей версией RTTI.

                              Собственно, я говорил именно об этом :D Тип-то выяснить можешь, но это не тот, что у тебя есть. В С++, насколько я знаю, делаются dll, которые являются аналогом bpl: в экспорт идет все из заголовков.
                                Цитата Romkin @
                                Угу. В рамках MFC CString кажется? А в рамках другой библиотеки - другой тип...
                                Вот это я и называю изобретать велосипед: вместо единого типа, которым пользуются все - в каждой библиотеке свой велосипед со своими заморочками. А тем, что есть, asciiz - не пользуются.

                                Not exactly. Right tool for the right job :rolleyes:/

                                Цитата Romkin @
                                Взять хоть тот же QString: вроде бы чистая абстракция, но там есть подсчет ссылок, и, соответсвенно, особенности при использовании в потоках.

                                Правда что ль? Какие такие особенности? :)

                                Добавлено
                                Цитата Romkin @
                                Там проще: можно сказать, единый RTTI для всех.

                                А у вас разный что ль? А почему? Потому что ваш с COM не совместим был что ль? :D

                                Цитата --Ins-- @
                                Я просто сам назначаю этот идентификатор.

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



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