Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 336 337 [338] 339 340 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#5056
,
|
|
|
|
Цитата MyNameIsIgor @ Чудесно - два неразделимых процесса, завязанных друг на друг. Может, вы дадите определение препроцессора? А то мы, похоже, его по-разному понимаем. Речь не о том, можно ли использовать приставку "пре" и что на что на что завязано. Речь о сути. Шаблоны являются средством кодогенерации. Вы с этим согласны ? Если да, то что и когда они генерируют ? ПС Складывается ощущение, что слово "препроцессор" воспринимается как ругательство какое-то Добавлено Цитата MyNameIsIgor @ то не могли бы вот эту хрень сделать менее похожей на поделку индусского джуниора? Кстати, было бы интересно взглянуть на плюсовый код, который сгенерили бы шаблоны, будь такая возможность. ?) |
|
Сообщ.
#5057
,
|
|
|
|
Цитата IL_Agent @ Складывается ощущение, что слово "препроцессор" воспринимается как ругательство какое-то Нет. Складывается впечатление, что вы не знаете значения слова "препроцессор"... Цитата IL_Agent @ Шаблоны являются средством кодогенерации. Вы с этим согласны ? Нет. Кодогенератор работает отдельно от компилятора и никак с ним не связан. Шаблоны же невозможно инстанцировать без знания об остальных синтаксических и семантических правилах C++ - перегрузки функций, проверки типов, их преобразований - т.е. без запуска компилятора. Кроме примера перегрузки функций попробуйте, например, выбрать специализацию шаблона, не задействуя никаких других правил C++. Вы не сможете выделит стадию "шаблонной кодогенерации", после которой можно было бы выход отдать компилятору языка C++_без_шаблонов - вы неизбежно втянете все правила плюсов в такой "кодогенератор". Другое дело, что когда компилятор всё разобрал, инстанцировал, сгенерировал промежуточный код, то наступает стадия создания кода целевой машины. А вот целевой машиной может быть как x86, так и язык C++_без_шаблонов, и plain C, и всё, что душе угодно. Цитата IL_Agent @ Если да, то что и когда они генерируют ? Шаблоны позволяют компилятору генерировать и параметризировать его внутренние структуры разбора кода на C++. Ну, во-первых, экспорт шаблонов не отменили, всего ли объявили deprecated ![]() А во-вторых, "полностью (почти)" и "полностью" - всё же разные вещи Добавлено Цитата IL_Agent @ Кстати, было бы интересно взглянуть на плюсовый код, который сгенерили бы шаблоны Ещё раз: шаблоны не генерируют плюсовый код. Это может сделать только компилятор, если вы напишете для него back-end для целевой машины "язык C++_без_шаблонов". Если вы так жаждете, то вон есть gcc - у него back-end отдельно, напишите нужный и посмотрите на результат. |
|
Сообщ.
#5058
,
|
|
|
|
Цитата MyNameIsIgor @ Нет. Ну отлично И метапрограммирование тут тоже не при чём.Цитата MyNameIsIgor @ Кодогенератор работает отдельно от компилятора и никак с ним не связан. Это ты сам придумал ? ![]() Цитата MyNameIsIgor @ Ещё раз: шаблоны не генерируют плюсовый код. Они генерируют "внутренние структуры", которые были бы получены в результате обработки некоторого индусского кода на с++_без_шаблонов. Так ведь ? |
|
Сообщ.
#5059
,
|
|
|
|
Цитата IL_Agent @ Ну отлично. И метапрограммирование тут тоже не при чём. Метапрограммирование - это обязательно препроцессор? Цитата IL_Agent @ Это ты сам придумал ? Нет, это мне мама сказала, так что инфа 100% Цитата IL_Agent @ Они генерируют "внутренние структуры", которые были бы получены в результате обработки некоторого индусского кода на с++_без_шаблонов. Так ведь ? Ага. А ещё те же самые структуры были бы получены при написании кода на C. И на ассемблере. А структуры разбора шарпа можно сымитировать на MSIL. делаем вывод: шарп - препроцессор MSIL'а, плюсы - ассемблера. |
|
Сообщ.
#5060
,
|
|
|
|
Я это уже говорил
|
|
Сообщ.
#5061
,
|
|
|
|
Qraizer, да я то знаю, но приходится по второму кругу повторять
|
|
Сообщ.
#5062
,
|
|
|
|
Цитата MyNameIsIgor @ Метапрограммирование - это обязательно препроцессор? А как ты понимаешь термин "метапрограммирование" ? Цитата MyNameIsIgor @ Нет, это мне мама сказала, так что инфа 100% Ну мама - это святое ![]() Цитата MyNameIsIgor @ делаем вывод: шарп - препроцессор MSIL'а, плюсы - ассемблера. Да. На языке А пишется программа, результатом работы которой является программа на языке Б. А=шаблоны, Б=с++_без_шаблонов. А вот, например, в лиспе или немерле А=Б. |
|
Сообщ.
#5063
,
|
|
|
|
Цитата IL_Agent @ Да. На языке А пишется программа, результатом работы которой является программа на языке Б. А=шаблоны, Б=с++_без_шаблонов. А вот, например, в лиспе или немерле А=Б. Шаблоны это не отдельный язык. Тебе ведь уже 100 раз сказали. |
|
Сообщ.
#5064
,
|
|
|
|
Цитата IL_Agent @ На языке А пишется программа, результатом работы которой является программа на языке Б. А=шаблоны, Б=с++_без_шаблонов. Нет, не получится. У тебя в A будет большая часть Б, а Б вообще-то существует только у тебя в голове |
|
Сообщ.
#5065
,
|
|
|
|
Цитата IL_Agent @ А как ты понимаешь термин "метапрограммирование" ? Для начала Цитата MyNameIsIgor @ Может, вы дадите определение препроцессора? А то мы, похоже, его по-разному понимаем. а там видно будет. Цитата IL_Agent @ Да. На языке А пишется программа, результатом работы которой является программа на языке Б. Может, на языке А пишется программа, результатом преобразования которой по определённым правилам является программа на языке Б? А то ваша фраза, конечно, имеет смысл, но абсолютно бесполезна в контексте обсуждения. Цитата IL_Agent @ А вот, например, в лиспе или немерле А=Б. Ничего не буду говорить за лисп - не в курсе. А по поводу Nemerle, то после его макроподстановок (которые опять же невозможны без знаний остальных правил Nemerle), мы можем в качестве целевой машины иметь Nemerle_без_макросов. |
|
Сообщ.
#5066
,
|
|
|
|
Цитата IL_Agent @ А вот, например, в лиспе или немерле А=Б. Для nemerle это не совсем так, во-первых. А во-вторых, в nemerle работу с макросами можно выделить в отдельную самостоятельную часть, в отличие от С++, где работа с шаблонами происходит, упращенно говоря, "параллельно" с компиляцией "обычного" кода. |
|
Сообщ.
#5067
,
|
|
|
|
Цитата MyNameIsIgor @ Для начала Ещё раз: я не имею в виде препроцессор в буквальном смысле. Цитата MyNameIsIgor @ Может, на языке А пишется программа, результатом преобразования которой по определённым правилам является программа на языке Б? Ну если программу на языке Б, являющуюся результатом работы программы на языке А, можно считать преобразованием программы А в программу Б по определённым правилам, то да . |
|
Сообщ.
#5068
,
|
|
|
|
Цитата IL_Agent @ Ещё раз: я не имею в виде препроцессор в буквальном смысле. Это определение? |
|
Сообщ.
#5069
,
|
|
|
|
Цитата IL_Agent @ Если бы это было так, то cf1 и cf2 были бы инициализированы той же f(). Однако вызваны будут разные f(). Так что Б!=c++_без_шаблонов. На языке А пишется программа, результатом работы которой является программа на языке Б. А=шаблоны, Б=с++_без_шаблонов. |
|
Сообщ.
#5070
,
|
|
|
|
Цитата D_KEY @ Иногда я думаю, что лучше бы в С++ действительно были нормальные макросы(в духе Nemerle) - их можно было бы считать "препроцессором" - и чуть менее сложные чем сейчас шаблоны(но не опущенные до уровня дженериков, естественно). кстати, я что-то пропустил, или в шаблонах уже можно ограничивать значение классового параметра? а ля <T extends Super> ? |