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

    Цитата MyNameIsIgor @
    Чудесно - два неразделимых процесса, завязанных друг на друг.
    Может, вы дадите определение препроцессора? А то мы, похоже, его по-разному понимаем.

    Речь не о том, можно ли использовать приставку "пре" и что на что на что завязано. Речь о сути. Шаблоны являются средством кодогенерации. Вы с этим согласны ? Если да, то что и когда они генерируют ?
    ПС
    Складывается ощущение, что слово "препроцессор" воспринимается как ругательство какое-то :)

    Добавлено
    Цитата MyNameIsIgor @
    то не могли бы вот эту хрень
    сделать менее похожей на поделку индусского джуниора?

    Кстати, было бы интересно взглянуть на плюсовый код, который сгенерили бы шаблоны, будь такая возможность. ?)
      Цитата IL_Agent @
      Складывается ощущение, что слово "препроцессор" воспринимается как ругательство какое-то

      Нет. Складывается впечатление, что вы не знаете значения слова "препроцессор"...
      Цитата IL_Agent @
      Шаблоны являются средством кодогенерации. Вы с этим согласны ?

      Нет. Кодогенератор работает отдельно от компилятора и никак с ним не связан. Шаблоны же невозможно инстанцировать без знания об остальных синтаксических и семантических правилах C++ - перегрузки функций, проверки типов, их преобразований - т.е. без запуска компилятора. Кроме примера перегрузки функций попробуйте, например, выбрать специализацию шаблона, не задействуя никаких других правил C++.
      Вы не сможете выделит стадию "шаблонной кодогенерации", после которой можно было бы выход отдать компилятору языка C++_без_шаблонов - вы неизбежно втянете все правила плюсов в такой "кодогенератор".
      Другое дело, что когда компилятор всё разобрал, инстанцировал, сгенерировал промежуточный код, то наступает стадия создания кода целевой машины. А вот целевой машиной может быть как x86, так и язык C++_без_шаблонов, и plain C, и всё, что душе угодно.
      Цитата IL_Agent @
      Если да, то что и когда они генерируют ?

      Шаблоны позволяют компилятору генерировать и параметризировать его внутренние структуры разбора кода на C++.
      Цитата korvin @
      эээ, а как же необходимость размещать нелокальные шаблоны в заголовочных файлах?

      Ну, во-первых, экспорт шаблонов не отменили, всего ли объявили deprecated :D
      А во-вторых, "полностью (почти)" и "полностью" - всё же разные вещи :)

      Добавлено
      Цитата IL_Agent @
      Кстати, было бы интересно взглянуть на плюсовый код, который сгенерили бы шаблоны

      Ещё раз: шаблоны не генерируют плюсовый код. Это может сделать только компилятор, если вы напишете для него back-end для целевой машины "язык C++_без_шаблонов". Если вы так жаждете, то вон есть gcc - у него back-end отдельно, напишите нужный и посмотрите на результат.
      Сообщение отредактировано: MyNameIsIgor -
        Цитата MyNameIsIgor @
        Нет.

        Ну отлично :D И метапрограммирование тут тоже не при чём.

        Цитата MyNameIsIgor @
        Кодогенератор работает отдельно от компилятора и никак с ним не связан.

        Это ты сам придумал ? :)

        Цитата MyNameIsIgor @
        Ещё раз: шаблоны не генерируют плюсовый код.

        Они генерируют "внутренние структуры", которые были бы получены в результате обработки некоторого индусского кода на с++_без_шаблонов. Так ведь ?
          Цитата IL_Agent @
          Ну отлично. И метапрограммирование тут тоже не при чём.

          Метапрограммирование - это обязательно препроцессор?
          Цитата IL_Agent @
          Это ты сам придумал ?

          Нет, это мне мама сказала, так что инфа 100%
          Цитата IL_Agent @
          Они генерируют "внутренние структуры", которые были бы получены в результате обработки некоторого индусского кода на с++_без_шаблонов. Так ведь ?

          Ага. А ещё те же самые структуры были бы получены при написании кода на C. И на ассемблере. А структуры разбора шарпа можно сымитировать на MSIL. делаем вывод: шарп - препроцессор MSIL'а, плюсы - ассемблера.
            Я это уже говорил :tong:
              Qraizer, да я то знаю, но приходится по второму кругу повторять :(
                Цитата MyNameIsIgor @
                Метапрограммирование - это обязательно препроцессор?

                А как ты понимаешь термин "метапрограммирование" ?

                Цитата MyNameIsIgor @
                Нет, это мне мама сказала, так что инфа 100%

                Ну мама - это святое :)

                Цитата MyNameIsIgor @
                делаем вывод: шарп - препроцессор MSIL'а, плюсы - ассемблера.

                Да. На языке А пишется программа, результатом работы которой является программа на языке Б. А=шаблоны, Б=с++_без_шаблонов. А вот, например, в лиспе или немерле А=Б.
                  Цитата IL_Agent @
                  Да. На языке А пишется программа, результатом работы которой является программа на языке Б. А=шаблоны, Б=с++_без_шаблонов. А вот, например, в лиспе или немерле А=Б.

                  Шаблоны это не отдельный язык. Тебе ведь уже 100 раз сказали.
                    Цитата IL_Agent @
                    На языке А пишется программа, результатом работы которой является программа на языке Б. А=шаблоны, Б=с++_без_шаблонов.

                    Нет, не получится. У тебя в A будет большая часть Б, а Б вообще-то существует только у тебя в голове :)
                      Цитата IL_Agent @
                      А как ты понимаешь термин "метапрограммирование" ?

                      Для начала
                      Цитата MyNameIsIgor @
                      Может, вы дадите определение препроцессора? А то мы, похоже, его по-разному понимаем.

                      а там видно будет.
                      Цитата IL_Agent @
                      Да. На языке А пишется программа, результатом работы которой является программа на языке Б.

                      Может, на языке А пишется программа, результатом преобразования которой по определённым правилам является программа на языке Б? А то ваша фраза, конечно, имеет смысл, но абсолютно бесполезна в контексте обсуждения.
                      Цитата IL_Agent @
                      А вот, например, в лиспе или немерле А=Б.

                      Ничего не буду говорить за лисп - не в курсе. А по поводу Nemerle, то после его макроподстановок (которые опять же невозможны без знаний остальных правил Nemerle), мы можем в качестве целевой машины иметь Nemerle_без_макросов.
                        Цитата IL_Agent @
                        А вот, например, в лиспе или немерле А=Б.

                        Для nemerle это не совсем так, во-первых. А во-вторых, в nemerle работу с макросами можно выделить в отдельную самостоятельную часть, в отличие от С++, где работа с шаблонами происходит, упращенно говоря, "параллельно" с компиляцией "обычного" кода.
                          Цитата MyNameIsIgor @
                          Для начала

                          Ещё раз: я не имею в виде препроцессор в буквальном смысле.

                          Цитата MyNameIsIgor @
                          Может, на языке А пишется программа, результатом преобразования которой по определённым правилам является программа на языке Б?

                          Ну если программу на языке Б, являющуюся результатом работы программы на языке А, можно считать преобразованием программы А в программу Б по определённым правилам, то да :).
                            Цитата IL_Agent @
                            Ещё раз: я не имею в виде препроцессор в буквальном смысле.

                            Это определение?
                              Цитата IL_Agent @
                              На языке А пишется программа, результатом работы которой является программа на языке Б. А=шаблоны, Б=с++_без_шаблонов.
                              Если бы это было так, то cf1 и cf2 были бы инициализированы той же f(). Однако вызваны будут разные f(). Так что Б!=c++_без_шаблонов.
                                Цитата D_KEY @
                                Иногда я думаю, что лучше бы в С++ действительно были нормальные макросы(в духе Nemerle) - их можно было бы считать "препроцессором" - и чуть менее сложные чем сейчас шаблоны(но не опущенные до уровня дженериков, естественно).

                                кстати, я что-то пропустил, или в шаблонах уже можно ограничивать значение классового параметра? а ля <T extends Super> ?
                                2 пользователей читают эту тему (2 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 336 337 [338] 339 340 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5131 ]   [ 15 queries used ]   [ Generated: 31.07.26, 12:14 GMT ]