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

Страницы: (117) « Первая ... 110 111 [112] 113 114 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Цитата Flex Ferrum @
    А то "Абстрактные классы! Абстрактные классы!" А тут оказывается, что C++ с его "эмуляцией" интерфейсов предоставляет несколько, гм, большую гибкость, нежели Delphi с ее явно выделенной для этого сущностью.

    Да нет, чем большую-то? Можно в С++ взять готовую двоичную реализацию интерфейса и использовать в своем классе? Delphi - может.
      Цитата Taz @
      Что можно сделать на С++, того что нельзя сделать на Delphi?

      Ответ новичка не знающего Делфи:
      ExpandedWrap disabled
        char* pCh = "test";
        pCh++;
        Цитата Flex Ferrum @
        По этому стандартный класс (который std::basic_string) реализует необходимый минимум функционала, который может потребоваться от строк, дабы покрыть наиболее широкий спектр задач, в которых он может понадобиться (следуя тому же принципу zero-cost features). Различного рода специализированные библиотеки (наподобие того же Qt или xerces) предлагают свои реализации строки, которые содержат функции, специфичные для той предметной области, в которой эти библиотеки будут применяться.

        Один вопрос: QString - потомок std::basic_string?
          Цитата
          А если бы он присваивался автоматом - я бы так сделать не смог


          А если бы он присваивался автоматом только в том случае, если я его не назначил сам? Ведь Flex Ferrum прав в том смысле, что в своих проектах от COM я далек. Но IID интерфейсам назначаю, лишь потому, что знаю, что без них нет возможности идентифицировать интерфейс НИКАК. Я не смогу полноценно использовать оператор as, так как компилятор для таких интерфейсов не создает никаких уникальных идентификаторов в IntfTable, и TObject.GetInterface не знает, что ему в этом RTTI искать :(
          Это действительно недочет компилятора, так как меня, как разработчика, в случае когда я не собираюсь использовать чужие интерфейсы, не должно волновать, как Delphi их идентифицирует.
            Цитата Romkin @
            Нет. Просто интерфейсы изначально предельно оторваны от реализации. И Delphi не важно, как и когда был написан программный модуль, из которого взят интерфейс. То есть, допустим, у меня есть dll, из которой я получаю ссылку интерфейс (неважно, каким способом). Мне совершенно не интересно, на какой версии компилятора Delphi написана эта библиотека, да и на Delphi ли. Компилятор будет, опираясь на имеющееся описание интерфейса в моем модуле, работать с полученной ссылкой. А какое описание брать - он поймет по IID. А если бы он присваивался автоматом - я бы так сделать не смог, пришлось бы брать из этой библиотеки еще и RTTI, и заботиться о том, какой она версии и так далее.

            Ты до сих пор не понимаешь, о чем идет речь. Если я не меняю платформы и языка разработки, то обо всех этих тонкостях я не должен заботиться. Это не моя головная боль. Все это - головная боль языка и библиотеки его поддержки. Все остальное - от лукавого. Вот если мне надо будет экспортировать интерфейсы за пределы языковой платформы - только в этом случае я должен буду об этом позаботиться. В рамках выбранной технологии экспорта. А сейчас все выглядит так, что сначала по-быстрому прикрутили фенечку (с интерфейсами и поддержкой COM), а потом позно было что-то менять. :)

            Цитата --Ins-- @
            Я критикую C++ лишь за то, что основной принцип этого языка - вседозволенность, которая на мой взгляд не нужна ВЫСОКОУРОВНЕВОМУ ЯП, тем более - объектному. И как следствие - отсутствие всякой логики, наличие неоднозначностей и противоречий. На мой взгляд - это один из худших языков, реализующий концепцию императивного программирования. Причина этому возможно субъективна. Паскалевское воспитание, которое приучает к дисциплине в программировании.

            Вседозволенности в С++ не больше, чем в Delphi. На самом деле, для того, чтобы начать грамотно программировать на С++ достаточно прочитать две книжки: букварь, описывающий основные возможности языка, и книгу Дж. Элджера "Язык С++", в которой описываются основные проблемные места, и методики их обхода, о которых должен помнить разработчик. Все! :) Ну а если "разработчик" принципиально не хочет ничего читать - то, тут да. Тут ему ничего не поможет, только языки и среды, которые бьют по рукам в любом подходящем для этого месте.
              Цитата ISC @
              Ответ новичка не знающего Делфи:
              char* pCh = "test";
              pCh++;

              Кстати, что означает эта конструкция в С++? Меня всегда интересовало, утечки памяти не будет?
                Цитата Romkin @
                Можно в С++ взять готовую двоичную реализацию интерфейса и использовать в своем классе? Delphi - может.

                Что есть "готовая двоичная реализация интерфейса"?

                Добавлено
                Цитата Romkin @

                Один вопрос: QString - потомок std::basic_string?

                Нет. Но может быть легко преобразован в него и обратно.
                  Цитата --Ins-- @
                  А если бы он присваивался автоматом только в том случае, если я его не назначил сам?

                  А вот это вопрос на засыпку :) Когда присваивался?
                    Цитата Romkin @
                    Кстати, что означает эта конструкция в С++? Меня всегда интересовало, утечки памяти не будет?

                    Нет. Ты присваиваешь указателю на char адрес, по которому расположен строковый литерал.
                      Цитата Romkin @
                      Кстати, что означает эта конструкция в С++? Меня всегда интересовало, утечки памяти не будет?

                      Инкримент указателя на ячейку памяти.
                      В смысле утечки? Когда выделенная память станет не нужна? Если память освободить, утечки не будет
                      Сообщение отредактировано: ISC -
                        Цитата
                        в которой описываются основные проблемные места, и методики их обхода

                        А зачем делать в языке фичи, использование которых приведет в конечном итоге только к проблемам? Какой в этом смысл? Чтобы потом читать про то, что их не нужно использовать и в конечном итоге - не использовать?

                        Цитата
                        только языки и среды, которые бьют по рукам в любом подходящем для этого месте.

                        Не мне вам объяснять, что контроль ошибок в compile-time (в т.ч. логических) - всегда благо, по сравнению с отсутствием контроля или контролем в run-time :) Вы ошибку можете допустить не из-за того, что ветер в голове от рождения, а из-за того, что сегодня вы не позавтракали, сын в школе получил двойку, а в магазине вам нахамили ;)
                          Цитата Flex Ferrum @
                          Что есть "готовая двоичная реализация интерфейса"?

                          Композиция готового двоичного кода.
                          Не так давно стояла задача: есть библиотека с уже написанной реализацией интерфейса (например, IFoo), а тут потребовалось сделать коллекцию этих интерфейсов. Причем требовалось сделать именно враппер, расширить имеющийся интерфейс. Я просто сделал класс, реализующий интерфейс элемента коллекции плюс нужный интерфейс IFoo. И в качестве реализации IFoo взял имеющуюся.
                          По правде сказать, там я создаю класс явно, но вполне могу получать интерфейс и из другой библиотеки, меняется одна строка создания имплементации. Думаю, я все-таки разделю библиотеки в будущем.

                          Добавлено
                          Цитата ISC @
                          Когда выделенная память станет не нужна? Если память освободить, утечки не будет

                          Просто указатель-то сместился. Как опознается, сколько надо освободить?

                          Добавлено
                          Цитата Flex Ferrum @
                          Один вопрос: QString - потомок std::basic_string?

                          Нет. Но может быть легко преобразован в него и обратно.

                          А почему? Если basic_string - это базис, то почему не потомок?!
                            Цитата
                            Когда присваивался?


                            Честное слово, мне - по барабану. Это не мои заботы, а разработчиков компилятора. Пусть хотя бы при первом билде и далее существовал всегда. Меня бы даже устроило, если бы интерфейсы без IID-ов различались по именам ;) Или еще как-нибудь...

                            Добавлено
                            Цитата
                            char* pCh = "test";
                            pCh++;


                            ExpandedWrap disabled
                              var
                                pCh: PChar;
                              begin
                                pCh := 'test';
                                Inc(pCh);
                              Цитата --Ins-- @
                              Честное слово, мне - по барабану. Это не мои заботы, а разработчиков компилятора. Пусть хотя бы при первом билде и далее существовал всегда. Меня бы даже устроило, если бы интерфейсы без IID-ов различались по именам

                              А если при первом билде - то где хранить? В отдельном файлике? А удобнее ли это, чем в тексте программы?
                                Цитата Romkin @
                                Просто указатель-то сместился. Как опознается, сколько надо освободить?

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



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