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

    Создать где? В шарпе вроде как в интерфейсах вообще полей не можкт быть - только методы. А если ты имеешь ввиду IFoo tmp = new Derived(), то да, конечно.
      Цитата D_KEY @
      Но зачем же наделять интерфейсы свойствами абстрактных базовых классов? Так, пожалуй, их проще реализовать. Но это не аргумент.
      Можно попытаться ответить на этот вопрос. Рассмотрим код:
      ExpandedWrap disabled
        interface IFoo {
            void g();
        }
         
        class Base {
            void g();
        }
         
        class Derived : Base, IFoo {
        }
         
        ...
         
        IFoo b = new Derived;
        b.g();
      Функция IFoo.g() - фактически виртуальная функция. Класс Base вообще ничего не знает об IFoo и Base.g() вообще может быть реализована в стороннем модуле чужим дядей. Ну и как компилятор должен выкручиваться из такой ситуации? Автоматически создать в Derived виртуальную функцию g(), в которой автоматически же вставить вызов базовой функции из Base?

      Добавлено
      Цитата OpenGL @
      А если ты имеешь ввиду IFoo tmp = new Derived(), то да, конечно.
      Да, я это имел ввиду. Но смотри выше.
      Сообщение отредактировано: applegame -
        Цитата applegame @
        Ну и как компилятор должен выкручиваться из такой ситуации?

        Выдать ошибку компиляции :D Ты же не указал, что Derived реализует IFoo.
          Цитата D_KEY @
          Кстати, мне попадался на глаза какой-то фичебаг с alias'ами в D... Вспомнить бы...

          Кажется, вспомнил. alias как-то странно работает с ref.
          ExpandedWrap disabled
            foreach (ref int x; arr)


          не тоже самое, что

          ExpandedWrap disabled
            alias ref int ref_int;
             
            foreach (ref_int x; arr)


          http://ideone.com/zbUG0A

          При этом ref является частью типа функции, например.
            Цитата OpenGL @
            Выдать ошибку компиляции :D Ты же не указал, что Derived реализует IFoo.
            Я уже поправил :P

            Добавлено
            Цитата D_KEY @
            При этом ref является частью типа функции, например.
            Ситуация со ссылками в D мне тоже не нравится. ref почему-то не является частью типа. Например, нельзя создать переменную-ссылку. Не знаю зачем так сделали, но мне не мешает.
            Сообщение отредактировано: applegame -
              Цитата applegame @
              Ситуация со ссылками в D мне тоже не нравится. ref почему-то не является частью типа. Например, нельзя создать переменную-ссылку. Не знаю зачем так сделали, но мне не мешает.

              Так а чего он не ругается на alias с ref, а просто делает какую-то фигню? И почему ref является частью типа возвращаемого значения? ;)
                Цитата D_KEY @
                Так а чего он не ругается на alias с ref, а просто делает какую-то фигню?
                А почему фигню? "alias ref int ref_int;" полностью аналогичен "alias int ref_int;" сейчас уже, кстати можно писать "alias ref_int = int;".
                Цитата D_KEY @
                И почему ref является частью типа возвращаемого значения? ;)
                Нет, не является. Скорее это некий флажок для компилятора. Если функция возвращает ссылку и ты ее присвоишь переменной с типом auto, то будет создана обычная переменная, а не ссылка.

                Но вообще, я согласен с тобой, и в свое время задавал аналогичные вопросы на оффоруме. Там сказали, что-то вроде - ну вот так сделано. :) ref также не являясь частью типа умудряется все же быть частью сигнатуры функции :)
                С другой стороны, как я уже сказал, это не мешает и представляет скорее академический интерес, чем практический.

                Окай. Перейду к другой части мерлезонского балета. А именно, возможность использовать строковые литералы (и вообще любые строки вычисляемые compile-time) в шаблонах.
                В качестве стратегий: http://dpaste.dzfl.pl/adb455e76a45
                В качестве предикатов: http://dpaste.dzfl.pl/30cb1cd23e26

                Добавлено
                На всякий случай сообщаю, что
                ExpandedWrap disabled
                  class Container(string type) {
                  }
                примерно как (хотя в C++ это невозможно)
                ExpandedWrap disabled
                  template<string type>
                  class Container {
                  };
                Сообщение отредактировано: applegame -
                  Чего окай-то? :D мне вот подобных косяков со ссылками и интерфейсами уже достаточно. Наверняка там ещё есть :(
                    Цитата D_KEY @
                    Чего окай-то? :D
                    Ну а что дальше? Этот вопрос рассмотрен и закрыт или у тебя еще есть вопросы? :D Кстати ты не ответил на пост про интерфейсы.
                    Цитата D_KEY @
                    мне вот подобных косяков со ссылками и интерфейсами уже достаточно. Наверняка там ещё есть :(
                    С интерфейсами - это не косяк. Если ты к чему-то привык, то это не значит, что так и должно быть. В каждом языке свои особенности.
                    Что касается других косяков, то там их достаточно. Но тем не менее, почему-то меня не тянет назад на плюсы.
                      Далее, обещаный compile-time reflection, шаблонная функция printMembers печатает имена и значения членов структуры, переданной в качестве аргумента.
                      ExpandedWrap disabled
                        import std.stdio;
                         
                        struct Foo {
                            int i;
                            string s;
                            float f;
                        }
                         
                        void printMembers(T)(T t) {
                            foreach(identifier; __traits(allMembers, T)) {
                                writefln("%s = %s", identifier, mixin("t." ~ identifier));
                            }
                        }
                         
                        void main() {
                            Foo f = Foo(1, "test", 0.5);
                            printMembers(f);
                        }

                      результат - http://dpaste.dzfl.pl/be97ba78d54f

                      Добавлено
                      Цитата D_KEY @
                      Так эти задачи и должна решать система сборки :) В языке это смотрится как излишек. Да и всех проблем не решить заранее в языке.
                      Кстати, не согласен с этим категорически. Приведи пример проблемы, которая решается включением/выключением/заменой куска исходников, и которую нельзя решить способом предлагаемым в D, но можно системой сборки.
                      Сообщение отредактировано: applegame -
                        Цитата applegame @
                        Я не знаю, является ли в C# интерфейс отдельным типом?
                        является. interface - ключевое слово
                        Цитата applegame @
                        Можно ли там создать переменную с типом интерфейса?
                        Это ссылка. Почему нет?

                        Добавлено
                        Цитата applegame @
                        В D например для компиляции под разные ОС, не нужно никаких внешних инструментов, все встроено в язык
                        Так и препроцессор в C/C++ встроен в язык. :D
                          Цитата trainer @
                          Так и препроцессор в C/C++ встроен в язык. :D
                          Ну и как при помощи только лишь препроцессора узнать тип ОС? :)
                            Цитата applegame @
                            встроенные ассоциативные массивы

                            Никаких преимуществ перед библиотечными, одни минусы: ни хэш не задать, ни аллокатор.
                            Цитата applegame @
                            тип real (идеален для математических вычислений)

                            Чем он так идеален, что в мире плюсов нет ничего похожего?
                            Цитата applegame @
                            мощный и в тоже время простой синтаксис шаблонов

                            Эти !() просто ужасны и нечитаемы. Следовало идти по пути Scala. И да, что такое "мощный синтаксис" - моя не понимайт.
                            Цитата applegame @
                            примеси (mixins)

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

                            Пишу на C#, Java, C++, Objective-C - я люблю заголовочные файлы. ЧЯДНТ?
                            Цитата applegame @
                            Настоящая условная компиляция в зависимости от ключей в командной строке, процессора, кода, версии и т.п.

                            Препроцессор не менее настоящий. Но то, что static if - часть языка, что плюс, да.
                            Цитата applegame @
                            настоящий CTFE, вплоть до compile-time импорта в строку и парсинга файла в код на D

                            Парсинг из строки - это убожество. Александреску преподносит это как манну небесную, но мне абсолютно непонятно для чего использовать строки, если нужно записывать код - должна быть нормальная возможность описать AST в стандартном синтаксисе языка, как это сделано в макросах Nemerle.
                            Цитата applegame @
                            встроенные делегаты

                            Как и было доказано, они не нужны.
                            Цитата applegame @
                            нормальные лямбды, тип которых зависит напрямую от сигнатуры, а не как компилятор на душу положит. Кроме того имеется прекрасный сокращенный стиль их написания

                            Т.е. встроенная в язык std::function, но опять таки без возможности параметризации аллокатором.
                            А т.к. тип зависит только от сигнатуры, то прощай тотальное встраивание. Не нужно.
                            Цитата applegame @
                            встроенный TLS (thread local storage) - это реально круто

                            Есть и в C++11. Другое дело, что в D надо наоборот указывать тот факт, что переменная глобальная - в этом плюс есть, да.
                            Цитата applegame @
                            встроенный compile-time reflection

                            Полезно. Вроде как обсуждается к C++17.
                            Цитата applegame @
                            сборщик мусора, к тому же еще и не самый продвинутый

                            Он не то, что не самый продвинутый...Он самый убогий :D Потому что для такого языка возможен лишь консервативный сборщик. Сейчас используется boehmgc... который вообще-то для C/C++ :lol:
                            А в итоге в D наличие сборщика привёло к большой путанице с деструкторами и переопределёнными new/delete - это fail.


                            Вообще, D протух ещё до выхода. Когда-то давно я тоже в него верил, но потом разочаровался и понял: D - это говно, очень вонючее говно. Многие из тех, то его тогда поддерживал, сейчас смотрят на Rust или Go.
                            D_KEY, помнишь, ты даже хотел на форуме подраздел создать, чтобы обсудить D? :) Посмотрел по личным сообщения - 2009 год был :)

                            Ну, и правильные посты про D.
                              Цитата applegame @
                              Ну и как при помощи только лишь препроцессора узнать тип ОС?
                              Вот так: http://msdn.microsoft.com/en-us/library/b0084kay.aspx
                              http://gcc.gnu.org/onlinedocs/cpp/System-s...edefined-Macros
                              Сообщение отредактировано: trainer -
                                Цитата MyNameIsIgor @
                                Objective-C

                                Как оно, кстати? :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (56) 1 2 [3] 4 5 ...  55 56


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0591 ]   [ 15 queries used ]   [ Generated: 28.05.24, 19:11 GMT ]