На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (56) 1 [2] 3 4 ...  55 56  ( Перейти к последнему сообщению )  
> D vs C++ , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
    Цитата applegame @
    вы плюсовики, просто не знаете как это прекрасно
    Ты в прошлом дельфист?
    Это характерная кодовая фраза.
      Цитата applegame @
      Кроме того, интерфейс - это еще и базовый тип с виртуальными функциями f() и g().

      А не должен быть :) Иначе это не интерфейс, а обычный плюсовый абстрактный класс. Вот только множественного наследования в D нет :tong:
        IDE какие для D , кроме Code Blocks ?
          Цитата D_KEY @
          Кстати, я помню времена, когда в агитках по D писали, что модель с разделением файлов поддерживается тоже и можно писать в том стиле, в котором хочешь.
          Да, такая модель поддерживается, но не обязательна и, реально имеет смысл, только для библиотек с закрытым исходным кодом.
          Цитата D_KEY @
          А при использовании препроцессора она не настоящая? А для D я смогу задать какие-то константы через систему сборки?
          Препроцессор - кривой костыль. В D например для компиляции под разные ОС, не нужно никаких внешних инструментов, все встроено в язык:
          ExpandedWrap disabled
            version(Windows) {
              ...
            }
            version(linux) {
              ...
            }
          Версию можно задать и кастомную через аргументы командной строки, Затем проверять ее. Раскрыто здесь: http://dlang.org/version.html
          Цитата D_KEY @
          Попадались мне разные тесты, которые показывали, что как-то не очень там все. Впрочем, не найду сейчас :(
          Когда-то было худо. Сейчас есть небольшие проблемы с производительностью при очень больших объёмах CTFE-кода. В проекте над которым я тружусь вовсю используются compile-time веб-шаблоны написаные на Diet. Они компиляться прямо в D-код, из-за чего чрезвычайно быстры.
          Цитата D_KEY @
          Мы вроде даже на форуме выясняли, что преимуществ перед лямбдами и std::function нет. Единственная фича - сохранение захваченного контекста, а не как в C++, где захват по ссылке локальной переменной приведет к проблемам, если лямбда будет жить дольше локального фрейма.
          Лямбдами в D просто удобней пользоваться. В D я знаю тип лямбды и могу его использовать, а в C++ у лямбды тип compiler specific, то бишь, фактически, неизвестен. std::function - имеет заметный оверхед по сравнению с лямбдами.
          Цитата D_KEY @
          Чем это принципиально отличается от возможностей C и C++?
          Сейчас уже возможно особо ничем, так как вроде реализовали уже в GCC даже под вынь.
          Цитата D_KEY @
          Недостатком является его плохая степень опциональности. Сам по себе сборщик это хорошо, если он не вездесущий.
          Полностью согласен.

          Добавлено
          Цитата trainer @
          Ты в прошлом дельфист?
          Это характерная кодовая фраза.
          Фу-фу. Я в прошлом плюсовик, как ни странно. Даже фанат можно сказать.
          Цитата D_KEY @
          А не должен быть :) Иначе это не интерфейс, а обычный плюсовый абстрактный класс. Вот только множественного наследования в D нет :tong:
          Дык, интерфейсы в D - это по сути и есть плюсовый абстрактный класс, в котором все виртуальные функции - чисто виртуальные. Я могу создать переменную с типом интерфейса и хранить в ней любой объект унаследовавший данный интерфейс. Если мне нужно просто проверить наличие функций, я это сделаю без всяких интерфейсов, причем compile-time, так-то. Множественное наследование - не нужно. :P
            Цитата sergioK @
            IDE какие для D , кроме Code Blocks ?

            А что, тот же NetBeans никак не прикрутить? Да и IDE по мойму самая последняя проблема. В блокноте пиши ну или Far юзай :D
              Цитата applegame @
              Препроцессор - кривой костыль.

              :D

              Цитата
              В D например для компиляции под разные ОС, не нужно никаких внешних инструментов, все встроено в язык:
              ExpandedWrap disabled
                version(Windows) {
                  ...
                }
                version(linux) {
                  ...
                }

              Если честно, это выглядит как детский сад. Какие-то зашитые названия ОС прямо в среду. С препроцессором все совсем иначе - это обычные define'ы в системных заголовочных файлах.

              Цитата
              Версию можно задать и кастомную через аргументы командной строки, Затем проверять ее.

              Так чем это отличается от того, что все делают в C и C++?

              Цитата
              Цитата D_KEY @
              Мы вроде даже на форуме выясняли, что преимуществ перед лямбдами и std::function нет. Единственная фича - сохранение захваченного контекста, а не как в C++, где захват по ссылке локальной переменной приведет к проблемам, если лямбда будет жить дольше локального фрейма.
              Лямбдами в D просто удобней пользоваться. В D я знаю тип лямбды и могу его использовать, а в C++ у лямбды тип compiler specific, то бишь, фактически, неизвестен. std::function - имеет заметный оверхед по сравнению с лямбдами.

              Так вроде выясняли, что не имеет при нормальной оптимизации, особенно в сравнении с D. Или я что-то путаю?

              Цитата
              Цитата D_KEY @
              Чем это принципиально отличается от возможностей C и C++?
              Сейчас уже возможно особо ничем, так как вроде реализовали уже в GCC даже под вынь.

              А раньше чем отличалось? :) Давно уже использовали tls на разных платформах. Да и boost::thread_specific_ptr появился очень давно. В Qt тоже есть что-нибудь на эту тему наверняка.

              Добавлено
              Цитата applegame @
              Дык, интерфейсы в D - это по сути и есть плюсовый абстрактный класс

              Так в D же есть абстрактные классы :D Зачем им плюсовые? Что мешало сделать интерфейсы такими же, как в других языках, где они есть? Зачем людей путать? Ради NVI?
                Цитата sergioK @
                IDE какие для D , кроме Code Blocks ?
                Выбор негуст, но есть:
                - плагин для MSVS - VisualD;
                - аддон к Monodevelop - Mono-D;
                - IDE на базе Eclipse - DDT

                Добавлено
                Цитата D_KEY @
                С препроцессором все совсем иначе - это обычные define'ы в системных заголовочных файлах.
                Ага, а потом эти заголовочные файлы надо еще правильно подключить в зависимости от ОС. Привет системам сборки а-ля make, cmake, scons - тысячи их :D Скорей это выглядит как старперский пережиток прошлого. :P
                Цитата D_KEY @
                Так вроде выясняли, что не имеет при нормальной оптимизации, особенно в сравнении с D. Или я что-то путаю?
                Мы забросили тесты. Там был слишком простой код, который G++ оптимизировал просто в нуль. Он это умеет, да, также как и GDC. :)
                Цитата D_KEY @
                Так чем это отличается от того, что все делают в C и C++?
                В том что это делает "умный" компилятор, а не "тупой" препроцессор. Что позволяет, например, намного лучше диагностировать ошибки.
                Цитата D_KEY @
                А раньше чем отличалось? :) Давно уже использовали tls на разных платформах. Да и boost::thread_specific_ptr появился очень давно. В Qt тоже есть что-нибудь на эту тему наверняка.
                Раньше не было встроено в язык. В D, по умолчанию, все глобальные переменные - в TLS. А если рассуждать так как ты, то C++ ничем не лучше ассемблера. А что? Там тоже можно пользоваться TLS, через API OS.
                Цитата D_KEY @
                Так в D же есть абстрактные классы :D Зачем им плюсовые? Что мешало сделать интерфейсы такими же, как в других языках, где они есть? Зачем людей путать? Ради NVI?
                Они похожи, но таки разные вещи. В D можно наследоваться от нескольких интерфейсов, но нельзя от нескольких классов. Класс, в отличие от интерфейса, может содержать еще и данные.

                Добавлено
                D_KEY, ты задаешь слишком много вопросов :D, я не успеваю на них отвечать. Давай лучше разберем каждый аспект по очереди, не торопясь :)
                Сообщение отредактировано: applegame -
                  Цитата applegame @
                  Ага, а потом эти заголовочные файлы надо еще правильно подключить в зависимости от ОС. Привет системам сборки а-ля make, cmake, scons - тысячи их :D

                  Так эти задачи и должна решать система сборки :) В языке это смотрится как излишек. Да и всех проблем не решить заранее в языке. По схожим причинам мне не нравится зашитая в D поддержка юнит-тестов.

                  Цитата
                  Цитата D_KEY @
                  Так вроде выясняли, что не имеет при нормальной оптимизации, особенно в сравнении с D. Или я что-то путаю?
                  Мы забросили тесты. Там был слишком простой код, который G++ оптимизировал просто в нуль. Он это умеет, да, также как и GDC. :)

                  Ну давай продолжим. Придумай тестик с демонстрацией преимуществ D.

                  Цитата
                  Цитата D_KEY @
                  Так чем это отличается от того, что все делают в C и C++?
                  В том что это делает "умный" компилятор, а не "тупой" препроцессор. Что позволяет, например, намного лучше диагностировать ошибки.

                  Пример?

                  Цитата
                  А если рассуждать так как ты, то C++ ничем не лучше ассемблера. А что? Там тоже можно пользоваться TLS, через API OS.

                  Во-первых, API нормальных ОС описано на Си. Во-вторых, C++ высокоуровнее ассемблера а не хуже/лучше.

                  Цитата
                  В D можно наследоваться от нескольких интерфейсов, но нельзя от нескольких классов. Класс, в отличие от интерфейса, содержит еще и данные.

                  Это все понятно. Не понятно, почему было не сделать интерфейсы такими, к каким привыкли люди.

                  Цитата
                  D_KEY, ты задаешь слишком много вопросов :D, я не успеваю на них отвечать. Давай более последовательно разберем каждый аспект по очереди :)

                  Странно, у меня на подробных разбор одного аспекта будет времени больше уходить, чем вот так вот отвечать.
                  "Письмо это вышло более длинным только потому, что мне некогда было написать его короче"(с) Блез Паскаль :D

                  Добавлено
                  applegame, ладно, выбирай аспект :)
                  Сообщение отредактировано: D_KEY -
                    Давай про интерфейсы :)
                    Цитата D_KEY @
                    Это все понятно. Не понятно, почему было не сделать интерфейсы такими, к каким привыкли люди.
                    Какие люди? К чему привыкли? Я вообще ни к чему не привыкал. В C++ интерфейсов не было, вместо них юзались абстрактные классы, в похапе я даже не помню были ли интерфейсы. :) На форуме D кстати этот вопрос поднимался. Одна из причин - отсутствие множественного наследования. Интерфейсы могут помочь, когда такое наследование необходимо.
                      Цитата applegame @
                      В плюсах сделано также как и в D: http://ideone.com/q5rgmu,

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

                      Реализация тоже есть же - в базовом классе.
                      Цитата sergioK @
                      IDE какие для D , кроме Code Blocks ?

                      Видел для студии соответствующий плагин :) Visual D называется.
                      Цитата applegame @
                      Дык, интерфейсы в D - это по сути и есть плюсовый абстрактный класс, в котором все виртуальные функции - чисто виртуальные.

                      Странное решение. Интерфейс показывает, грубо говоря - "что экземпляр класса умеет делать", а наследование - "кем является объект этого класса". Первое связано со вторым, но им, очевидно, не является.

                      Добавлено
                      Цитата applegame @
                      Какие люди? К чему привыкли?

                      Люди, пишущие на языках, где есть интерфейсы, привыкли пользоваться ими как интерфейсами, а не как абстрактными классами :)
                      Цитата applegame @
                      Интерфейсы могут помочь, когда такое наследование необходимо.

                      Кстати, ЕМНИП, Qraizer как-то выкладывал код, где множественное наследование было в тему, и интерфейсами нельзя было обойтись :)
                        Насчет плюсов встроенных ассоциативных массивов. Мне достаточно того, что вместо
                        ExpandedWrap disabled
                          std::unordered_map<int, std::string> var;
                        я пишу
                        ExpandedWrap disabled
                          string[int] var;
                        Сообщение отредактировано: applegame -
                          Цитата applegame @
                          Какие люди? К чему привыкли?

                          Программисты, использующие языки, в которых есть интерфейсы. Привыкли к тому, что описал OpenGL.

                          Цитата
                          На форуме D кстати этот вопрос поднимался. Одна из причин - отсутствие множественного наследования. Интерфейсы могут помочь, когда такое наследование необходимо.

                          Это причина для добавления в язык интерфейсов, да. Так поступили в Java и в C#. Правда scala показала немного другой путь с trait'ами, но это к делу не относится.
                          Но зачем же наделять интерфейсы свойствами абстрактных базовых классов? Так, пожалуй, их проще реализовать. Но это не аргумент.
                            Цитата applegame @
                            Насчет плюсов встроенных ассоциативных массивов.

                            Кстати, да - объявление массивов в D мне нравится :) Очень удобно и однотипно объявляются статические, динамические и ассоциативные массивы.
                              Цитата applegame @
                              Насчет плюсов встроенных ассоциативных массивов. Мне достаточно того, что вместо
                              ExpandedWrap disabled
                                std::unordered_map<int, std::string> var;
                              я пишу
                              ExpandedWrap disabled
                                string[int] var;

                              А я typedef'ы использую. В D бы тоже использовал.

                              Добавлено
                              Кстати, мне попадался на глаза какой-то фичебаг с alias'ами в D... Вспомнить бы...
                                Цитата OpenGL @
                                Странное решение. Интерфейс показывает, грубо говоря - "что экземпляр класса умеет делать", а наследование - "кем является объект этого класса". Первое связано со вторым, но им, очевидно, не является.
                                Интерфейс в D - в целом то же самое. Но со своими особенностями. Я не знаю, является ли в C# интерфейс отдельным типом? Можно ли там создать переменную с типом интерфейса?

                                Добавлено
                                Цитата D_KEY @
                                А я typedef'ы использую. В D бы тоже использовал.
                                Зачем? string[int] выглядит очень наглядно и понятно.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (56) 1 [2] 3 4 ...  55 56


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0536 ]   [ 16 queries used ]   [ Generated: 28.03.24, 21:55 GMT ]