чем плохи шаблоны?
От: Аноним  
Дата: 04.02.12 05:49
Оценка:
собственно какие возражения против шаблонов? Чем они отличаются от функциональнозапрограммированых макросов
Re: чем плохи шаблоны?
От: hardcase Пират http://nemerle.org
Дата: 04.02.12 05:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>собственно какие возражения против шаблонов?


Попробуйте прочитать конфиг шаблоном.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: чем плохи шаблоны?
От: Аноним  
Дата: 04.02.12 06:09
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Попробуйте прочитать конфиг шаблоном.


Делается через include. Но это уже не функциональный чисто функциональный. Да и тяжело очень.
Re: чем плохи шаблоны?
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.02.12 05:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>собственно какие возражения против шаблонов?


С++-ые что ли?

А>Чем они отличаются от функциональнозапрограммированых макросов


Ну, тем что не макросы. Это примерно тоже самое, что спрашивать чем отличаются завод от автомобиля. С помощью автомобиля завод не сделать, а наоборот запросто.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: чем плохи шаблоны?
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.02.12 05:37
Оценка:
Здравствуйте, Аноним, Вы писали:

H>>Попробуйте прочитать конфиг шаблоном.


А>Делается через include. Но это уже не функциональный чисто функциональный. Да и тяжело очень.


Да ладно конфиги читать. Ты попробуй, например, хотя бы сообщение пользователю во время компиляции выдать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: чем плохи шаблоны?
От: Аноним  
Дата: 04.02.12 05:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Да ладно конфиги читать. Ты попробуй, например, хотя бы сообщение пользователю во время компиляции выдать.


gamedev.ru/code/forum/?id=133522
легко
Re[2]: чем плохи шаблоны?
От: catbert  
Дата: 04.02.12 05:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, тем что не макросы. Это примерно тоже самое, что спрашивать чем отличаются завод от автомобиля. С помощью автомобиля завод не сделать, а наоборот запросто.


Что-то мне кажется, что сделать шаблоны из макросов Nemerle — не запросто.
Re[5]: чем плохи шаблоны?
От: catbert  
Дата: 04.02.12 09:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>gamedev.ru/code/forum/?id=133522

А>легко

А можно конкретно носом тыкнуть, где там шаблоны? Я не С++-ник, поэтому шаблоны вижу только там где много угловых скобочек, а по линку ни одной. Я даже на страницу два зашел.
Re[6]: чем плохи шаблоны?
От: Аноним  
Дата: 04.02.12 09:45
Оценка:
Здравствуйте, catbert, Вы писали:

C>Здравствуйте, Аноним, Вы писали:


А>>gamedev.ru/code/forum/?id=133522

А>>легко

C>А можно конкретно носом тыкнуть, где там шаблоны? Я не С++-ник, поэтому шаблоны вижу только там где много угловых скобочек, а по линку ни одной. Я даже на страницу два зашел.


Что мешает эту прагму использовать в шаблонах и получать сообщения об ошибках? Эта прагма не более чем printf
Re: чем плохи шаблоны?
От: catbert  
Дата: 04.02.12 09:52
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>собственно какие возражения против шаблонов? Чем они отличаются от функциональнозапрограммированых макросов


(я про шаблоны С++ в этом посте)

Мне кажется, главный недостаток шаблонов в том, что с их помощью очень тяжело запрограммировать что-то, для чего они изначально не предназначены, то есть любые операции не с типами. Допустим, у вас вряд ли выйдет легко написать быструю программу на шаблонах, которая бы выполняло арифметику с плавающей запятой.

Средства абстракции шаблонов тоже довольно слабые — у вас нету ни методов, ни классов, ни наследования, ни модулей. А набор примитивов довольно убог.

Ввод-вывод ограничен. С инклюдом
Автор:
Дата: 04.02.12
вы хорошо выкрутились, но "outclude" нету, поэтому написать чего-то не выйдет. Это не говоря уже о доступе в сеть, использовании полноценного API потоков с буферизацией и так далее.

Про скорость нужно еще раз сказать. Макросы выполняются намного быстрее любых нетривиальных шаблонов.

Тем не менее, шаблоны не "плохи". Они чудесно выполняют свою главную функцию (поддержка обобщенного программирования), да еще и Тюринг-полны. Но в реалиях .НЕТ-а, имхо, более оптимальным выбором метапрограммирования являются макросы+генерики.
Re[7]: чем плохи шаблоны?
От: catbert  
Дата: 04.02.12 09:58
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Что мешает эту прагму использовать в шаблонах и получать сообщения об ошибках? Эта прагма не более чем printf


Опять же, не знаю тонкостей процесса компиляции, но что-то мне подсказывает, что эта прагма работает либо до раскрытия шаблонов, на процессе прекомпиляции, либо уже после. Обозначить ошибку в зависимости от того, что видит шаблон, невозможно.

Иначе ошибки STL визуал студии были бы понятнее, чем сейчас.
Re: чем плохи шаблоны?
От: Аноним  
Дата: 04.02.12 10:05
Оценка: +4
Здравствуйте, Аноним, Вы писали:

А>собственно какие возражения против шаблонов? Чем они отличаются от функциональнозапрограммированых макросов


Как программист на C++ с большим опытом, могу ответить: наверно, тем, что "метапрограммирование" на шаблонах в C++ это всего лишь жалкая пародия на макросы Nemerle? Наверно, потому что всё "метапрограммирование" на C++ есть не что иное, как использование набора трюков и побочных эффектов, тогда как макросы Nemerle являются штатной возможностью метапрограммирования, с которой язык заранее проектировался? Наверно, потому что шаблоны на C++ делают "криво" и сложно то, что макросы на Nemerle делают "прямо" и просто?
Re[2]: чем плохи шаблоны?
От: Аноним  
Дата: 04.02.12 10:08
Оценка:
Здравствуйте, catbert, Вы писали:

C>(я про шаблоны С++ в этом посте)


C>Мне кажется, главный недостаток шаблонов в том, что с их помощью очень тяжело запрограммиовать что-то, для чего они изначально не предназначены, то есть любые операции не с типами. Допустим, у вас вряд ли выйдет легко написать быструю программу на шаблонах, которая бы выполняло арифметику с плавающей запятой.

Согласен. Тут сказывается проблема того что шаблоны представляют собой чистый функциональный язык в то время как с++ нет. Кроме того в шаблонах не предусмотрено удаление хвостовой рекурсии. Сложность программирования на шаблонах сравнима со сложностью программирования на haskell.

C>Средства абстракции шаблонов тоже довольно слабые — у вас нету ни методов, ни классов, ни наследования, ни модулей. А набор примитивов довольно убог.

Опять же чисто функциональный. Что от него хочешь?
C>Ввод-вывод ограничен. С инклюдом
Автор:
Дата: 04.02.12
вы хорошо выкрутились, но "outclude" нету, поэтому написать чего-то не выйдет. Это не говоря уже о доступе в сеть, использовании полноценного API потоков с буферизацией и так далее.


C>Про скорость нужно еще раз сказать. Макросы выполняются намного быстрее любых нетривиальных шаблонов.

Рано или поздно сделают удаление хвостовой рекурсии в внешних шаблонах.
C>Тем не менее, шаблоны не "плохи". Они чудесно выполняют свою главную функцию (поддержка обобщенного программирования), да еще и Тюринг-полны. Но в реалиях .НЕТ-а, имхо, более оптимальным выбором метапрограммирования являются макросы+генерики.
Возможно Просто шаблоны не сделаешь в нет
Re[5]: чем плохи шаблоны?
От: CodingUnit Россия  
Дата: 04.02.12 10:09
Оценка:
Здравствуйте, Аноним, Вы писали:

VD>>Да ладно конфиги читать. Ты попробуй, например, хотя бы сообщение пользователю во время компиляции выдать.


А>gamedev.ru/code/forum/?id=133522

А>легко

Это не серьезный ответ если мы говорим о шаблонах C++ а не прагма директивах препроцессора конкретного компилятора, вот в этом и заканчивается кажущаяся мощь шаблонов. Они предлагают свои возможности метапрограммирования, но по опыту это очень сложная и неудобная модель, которая работает еще и не на всех компиляторах, довольно ограниченная потому что позволяет делать очень мало и кода как такового из шаблона вызвать невозможно, поэтому вопрос чем они плохи по сравнению с макросами я думаю ясен.
Re[3]: чем плохи шаблоны?
От: CodingUnit Россия  
Дата: 04.02.12 10:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Согласен. Тут сказывается проблема того что шаблоны представляют собой чистый функциональный язык в то время как с++ нет. Кроме того в шаблонах не предусмотрено удаление хвостовой рекурсии. Сложность программирования на шаблонах сравнима со сложностью программирования на haskell.


Так о каких таких шаблонах идет речь, если не о С++ и где там чисто функциональный язык и хвостовая рекурсия?
Re[2]: чем плохи шаблоны?
От: Аноним  
Дата: 04.02.12 10:14
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>собственно какие возражения против шаблонов? Чем они отличаются от функциональнозапрограммированых макросов


А>Как программист на C++ с большим опытом, могу ответить: наверно, тем, что "метапрограммирование" на шаблонах в C++ это всего лишь жалкая пародия на макросы Nemerle? Наверно, потому что всё "метапрограммирование" на C++ есть не что иное, как использование набора трюков и побочных эффектов, тогда как макросы Nemerle являются штатной возможностью метапрограммирования, с которой язык заранее проектировался? Наверно, потому что шаблоны на C++ делают "криво" и сложно то, что макросы на Nemerle делают "прямо" и просто?

Просто писать после императивного в чисто функциональном тяжело. Не понимаешь почему надо писать кучу кода вместо обычного императива. У вас есть опыт написания на чисто функциональном?
Re[4]: чем плохи шаблоны?
От: Alexey F  
Дата: 04.02.12 10:19
Оценка:
Здравствуйте, CodingUnit, Вы писали:

CU>Так о каких таких шаблонах идет речь, если не о С++ и где там чисто функциональный язык и хвостовая рекурсия?

Шаблоны C++, по-сути, являются чисто функциональным языком со специфичным ( ) синтаксисом, без сборщика мусора, отсутствием оптимизации хвостовой рекурсии и верхним пределом (обычно, не жёстко фиксированным) глубины рекурсивных вызовов. // Да дополнят и поправят меня, если я где-то ошибся.
Re[4]: чем плохи шаблоны?
От: Аноним  
Дата: 04.02.12 10:23
Оценка:
Здравствуйте, CodingUnit, Вы писали:

CU>Так о каких таких шаблонах идет речь, если не о С++ и где там чисто функциональный язык и хвостовая рекурсия?


Шаблоны и есть чисто функциональный язык со всеми следующими из этого недостатками и преимуществами. Отсутствие ввода вывода, циклы через рекурсию, не возможность модифицировать значение. И плюсы потоко безопасность и отсутствие императивных эффектов.
Re[5]: чем плохи шаблоны?
От: CodingUnit Россия  
Дата: 04.02.12 10:36
Оценка:
Здравствуйте, Alexey F, Вы писали:

AF>Шаблоны C++, по-сути, являются чисто функциональным языком со специфичным ( ) синтаксисом, без сборщика мусора, отсутствием оптимизации хвостовой рекурсии и верхним пределом (обычно, не жёстко фиксированным) глубины рекурсивных вызовов. // Да дополнят и поправят меня, если я где-то ошибся.


Довольно странное определение, к чисто функциональным языкам относят языки неиспользующими деструктивные модификации, но в шаблонах С++ нет переменных как таковых, есть только типы и константы, порядок вычисления и поток выполнения не определен, то есть невозможно понять в каком порядке компилятор обработает их и невозможно отладить это. К тому же функциональные языки чтобы называться таковыми должны уметь выполнять типичные алгоритмы, можно ли на шаблонах построить дерево, сбалансировать, преобразовать в другой вид? Функции в этих языках первоклассные сущности, в шаблонах же нет функций как таковых преобразующих данные из одного в другой. Поэтому вряд ли их можно назвать чисто функциональным языком, это более надстройка во время компиляции для настройки системы типов, которую пытаются растянут чтобы получить некое метапрограммирование в терминах типов.
Re[3]: чем плохи шаблоны?
От: catbert  
Дата: 04.02.12 10:38
Оценка: +2
Здравствуйте, Аноним, Вы писали:

C>>Средства абстракции шаблонов тоже довольно слабые — у вас нету ни методов, ни классов, ни наследования, ни модулей. А набор примитивов довольно убог.

А>Опять же чисто функциональный. Что от него хочешь?

Хочу чтобы если функциональный — то как Хаскелл. Или хотя бы тот же Немерле. Не все чисто функциональные языки одинаковы... на Унламбде писать еще хуже чем на Брейнфаке.

А>Рано или поздно сделают удаление хвостовой рекурсии в внешних шаблонах.

Вот когда сделают компиляцию их в байт-код, можно будет говорить о скорости.

C>>Тем не менее, шаблоны не "плохи". Они чудесно выполняют свою главную функцию (поддержка обобщенного программирования), да еще и Тюринг-полны. Но в реалиях .НЕТ-а, имхо, более оптимальным выбором метапрограммирования являются макросы+генерики.

А>Возможно Просто шаблоны не сделаешь в нет

Я думаю, на макросах Немерле примитивный "шаблонизатор" (без рекурсии и специализации шаблонов) делается за несколько часов. Но никому он конечно не нужен, потому что работает только в рамках Немерле, а в Немерле есть макросы.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.