Насколько полезны и логичны шаблоны?
От: Курилка Россия http://kirya.narod.ru/
Дата: 04.04.04 14:04
Оценка:
Вопрос собственно в сабж.
Просто зашёл спор опять с одним из апологетов Delphi, о том, что не всё на нём можно реализовать удобно и логично, в отличие от C++ (хотя и у него есть свои грабли). Одним из основных аргументов моих выступили именно шаблоны, которые теперь и в Java и .Net будут скоро добавлены. А в Delphi тот же std::vector<> так просто не реализуешь если не принебречь строгой типизацией (т.е. сделать что-нибудь типа TList, но где придётся явное приведение типов делать). И в процессе обсуждения возник вопрос: если макросы есть зло (а большей частью они как раз и являются им запутывая логику программы), а шаблоны есть вещь очень близкая к макросам, то не являются ли они таким же злом?
Пока у меня только аргументация про то, что шаблоны есть фича компилятора (а не препроцессора), строго описанная и логически выверенная...
Может кто-нить ещё приведёт более строгую аргументаци?
Заранее сенки!
Re: Насколько полезны и логичны шаблоны?
От: Аноним  
Дата: 04.04.04 14:31
Оценка:
Здравствуйте, Курилка, Вы писали:

К>И в процессе обсуждения возник вопрос: если макросы есть зло (а большей частью они как раз и являются им запутывая логику программы), а шаблоны есть вещь очень близкая к макросам, то не являются ли они таким же злом?


Ох уж эти аналогии...
Шаблоны с макросами имеют ну очень мало общего.
Так же можно и селедку с китом сравнивать.
А что? Оба плавают, значит похожи...

При использовании щаблонов не приходится пренебрегать строгой типизацией.
По крайней мере не больше, чем при программировании без шаблонов.

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

Чтобы спроектировать и реализовать хороший аналог std::vector
нужно очень хорошо подумать, а что вообще общего у всех векторов,
независимо от того, что в них хранится.
Нужно так же продумать, какими минимальными свойствами должны
обладать объекты, чтобы их можно было хранить в векторе.
Мощь и польза шаблонов как раз в том, что они позволяют делать делать
такие обобщения и проектировать не классы, а метаклассы.
Проектировать метаклассы сложнее, но хороший метакласс затем может очень
сильно помочь и в итоге съэкономить время и средства...

P.S. Шаблоны хороши, но это, надеюсь, не последнее слово
Re[2]: Насколько полезны и логичны шаблоны?
От: Курилка Россия http://kirya.narod.ru/
Дата: 04.04.04 14:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Курилка, Вы писали:


К>>И в процессе обсуждения возник вопрос: если макросы есть зло (а большей частью они как раз и являются им запутывая логику программы), а шаблоны есть вещь очень близкая к макросам, то не являются ли они таким же злом?


А>Ох уж эти аналогии...

А>Шаблоны с макросами имеют ну очень мало общего.
А>Так же можно и селедку с китом сравнивать.
А>А что? Оба плавают, значит похожи...
Согласен что несколько натянутая аналогия, но несколько даже обоснованная — первые реализации шаблонов были как раз на макросах... Но это уже "история"...

А>При использовании щаблонов не приходится пренебрегать строгой типизацией.

А>По крайней мере не больше, чем при программировании без шаблонов.
Вот это серьёзный аргумент, сенки

А>Чтобы спроектировать и реализовать хороший аналог std::vector

А>нужно очень хорошо подумать, а что вообще общего у всех векторов,
А>независимо от того, что в них хранится.
А>Нужно так же продумать, какими минимальными свойствами должны
А>обладать объекты, чтобы их можно было хранить в векторе.
А>Мощь и польза шаблонов как раз в том, что они позволяют делать делать
А>такие обобщения и проектировать не классы, а метаклассы.
А>Проектировать метаклассы сложнее, но хороший метакласс затем может очень
А>сильно помочь и в итоге съэкономить время и средства...
Где-то я слышал термин для такого программирования... Что-то типа обобщённого программирования (название не такое, но смысл похожий), никак не могу вспомнить

А>P.S. Шаблоны хороши, но это, надеюсь, не последнее слово


Что именно есть "не последнее слово"?
Re[3]: Насколько полезны и логичны шаблоны?
От: Аноним  
Дата: 04.04.04 14:54
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Где-то я слышал термин для такого программирования... Что-то типа обобщённого программирования (название не такое, но смысл похожий), никак не могу вспомнить


Метапрограммирование...
Re[4]: Насколько полезны и логичны шаблоны?
От: Twirl Швеция  
Дата: 04.04.04 14:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Курилка, Вы писали:


К>>Где-то я слышал термин для такого программирования... Что-то типа обобщённого программирования (название не такое, но смысл похожий), никак не могу вспомнить


А>Метапрограммирование...


generic programming еще
Re[5]: Насколько полезны и логичны шаблоны?
От: Курилка Россия http://kirya.narod.ru/
Дата: 04.04.04 15:00
Оценка:
Здравствуйте, Twirl, Вы писали:

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


А>>Здравствуйте, Курилка, Вы писали:


К>>>Где-то я слышал термин для такого программирования... Что-то типа обобщённого программирования (название не такое, но смысл похожий), никак не могу вспомнить


А>>Метапрограммирование...


T>generic programming еще


Вот это ближе (хотя всё равно такое ощущение, что был другой термин), а, кстати, окромя шаблонов нет ещё применений generic programming?
Re[2]: Насколько полезны и логичны шаблоны?
От: INTP_mihoshi Россия  
Дата: 04.04.04 15:02
Оценка: 13 (1) -4
Здравствуйте, Аноним, Вы писали:

А>Ох уж эти аналогии...

А>Шаблоны с макросами имеют ну очень мало общего.
А>Так же можно и селедку с китом сравнивать.
А>А что? Оба плавают, значит похожи...

Шаблоны — это просто чуть более цивилизованная реализация макросов.
Re[3]: Насколько полезны и логичны шаблоны?
От: Курилка Россия http://kirya.narod.ru/
Дата: 04.04.04 15:12
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

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


А>>Ох уж эти аналогии...

А>>Шаблоны с макросами имеют ну очень мало общего.
А>>Так же можно и селедку с китом сравнивать.
А>>А что? Оба плавают, значит похожи...

INT>Шаблоны — это просто чуть более цивилизованная реализация макросов.


Так вот вопрос в том — насколько "более цивилизованная"?
Просто запутанность макросов как подукта препроцессора порождает иногда совсем нелогичные последствия, что ведёт к выводу: макросы = зло. Можно ли поставить знак равенства след. образом: "шаблоны=зло"?
Re[3]: Насколько полезны и логичны шаблоны?
От: Аноним  
Дата: 04.04.04 16:09
Оценка: 6 (1) +5
Здравствуйте, INTP_mihoshi, Вы писали:

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


А>>Ох уж эти аналогии...

А>>Шаблоны с макросами имеют ну очень мало общего.
А>>Так же можно и селедку с китом сравнивать.
А>>А что? Оба плавают, значит похожи...

INT>Шаблоны — это просто чуть более цивилизованная реализация макросов.


Для чего нужны макросы?
Для того, чтобы выполнять какие-то операции над текстом программы до компиляции.
Не более и не менее...
Макросы вообще не имеют представления о самом языке как таковым.
Макросы не оперируют конструкциями языка.
Сишные макросы — это вообще довольно убогое зрелище по сравнению
с тем, что было например в PL/1

У шаблонов совсем иная задача.
Задача шаблонов — помогать определять свои пользовательские типы данных.

Разница просто огромная...
Между макросами и шаблонами есть только одно, что может
давать иллюзию схожести — это наличие параметров.
Все остальное — просто разное по своей природе...

Что получается при применении макроса?
Ничего сказать невозможно. В общем случае какой-то набор символов.

Что является результатом инстанцирования шаблона?
Получается пользовательский тип данных, который подчиняется всем правилам,
на обычные классы.

Я не утверждаю, что с шаблонами все гладко и прекрасно.
Но сравнивать их с макросами просто некорректно.
Такая аналогия была допустима, когда шаблоны только появились
и программистам надо было привести некую аналогию, чтобы было легче
понять новую сущность. Сейчас такая аналогия не нужна.
Re: Насколько полезны и логичны шаблоны?
От: BUran Россия http://www.buriy.com/
Дата: 04.04.04 20:20
Оценка: -3
Здравствуйте, Курилка, Вы писали:

К>Вопрос собственно в сабж.

К>Просто зашёл спор опять с одним из апологетов Delphi, о том, что не всё на нём можно реализовать удобно и логично, в отличие от C++ (хотя и у него есть свои грабли). Одним из основных аргументов моих выступили именно шаблоны, которые теперь и в Java и .Net будут скоро добавлены. А в Delphi тот же std::vector<> так просто не реализуешь если не принебречь строгой типизацией (т.е. сделать что-нибудь типа TList, но где придётся явное приведение типов делать). И в процессе обсуждения возник вопрос: если макросы есть зло (а большей частью они как раз и являются им запутывая логику программы), а шаблоны есть вещь очень близкая к макросам, то не являются ли они таким же злом?
К>Пока у меня только аргументация про то, что шаблоны есть фича компилятора (а не препроцессора), строго описанная и логически выверенная...
К>Может кто-нить ещё приведёт более строгую аргументаци?
К>Заранее сенки!

Основное отличие шаблонов от макросов верно заметили: можно верифицировать типы, применяемые в шаблонах. Если бы сделали вызов макроса явным, да добавили в него проверку типов при компиляции, то получились бы те же шаблоны.

А теперь более глобально:

Во-первых, любой умный код есть зло:
1) Инфраструктура — это оптимизации, часто досрочные. А досрочные оптимизации часто увеличивают срок написания программы и увеличивают зависимость программы от написавшего ее программиста.
2) Любой уровень абстракции есть зло, поскольку при чтении программы до того, какую роль он играет, нужно "догадаться", а при отладке программы труднее убеждаться, что все происходит так, как нужно. По грубой прикидке, каждый новый уровень абстракции при описании механизма работы программы уменьшает количество понимающих людей вдвое. (Ну или просто увеличивает время понимания механизма работы программы — это если разрешены вопросы или самостоятельная работа с кодом)
3) Увеличивается связанность частей программы. Появляются нетривиальные зависимости. Баги переползают на поздние этапы работы с программой.

Во-вторых, у тупого кода тоже есть свои недостатки:
1) Ухудшается обзорность кода
2) Повторы кода ведут к ошибкам при исправлении программы.
3) Больший объем кодирования (scope)

Если бы недостатков у тупого кода не было, никакие умные средства никто бы и не использовал.

На деле происходит так, что, чем ты более опытный в данной области, тем выгодней тебе будет "свернуть" свои знания в компактную форму. И шаблоны тогда будут лишь одним из средств, очень эффективным притом. "Усилителем интеллекта". А в Delphi для усиления интеллекта есть свои методы. Да, этих методов меньше, но ведь и программы на Delphi пишутся более простые, нежели на C++

P.S. Программирование — это ремесло. Программы — штучный товар. Каждый делает программы по-своему: кто-то без молотка обойтись не может (тупой код), а кто-то без умных слов (шаблоны итд).
/bur
Re[2]: Насколько полезны и логичны шаблоны?
От: Курилка Россия http://kirya.narod.ru/
Дата: 05.04.04 05:39
Оценка:
Здравствуйте, BUran, Вы писали:

...
BU> А в Delphi для усиления интеллекта есть свои методы.

Если не лень — какие?
Re[3]: Насколько полезны и логичны шаблоны?
От: c-smile Канада http://terrainformatica.com
Дата: 05.04.04 06:11
Оценка: -1 :))
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, BUran, Вы писали:


К>...

BU>> А в Delphi для усиления интеллекта есть свои методы.

К>Если не лень — какие?


Все производные класса TNootropil.

( Pascal люблю. И C++ люблю. Я извращенец, да? )
Re[4]: Насколько полезны и логичны шаблоны?
От: Аноним  
Дата: 05.04.04 07:05
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, Курилка, Вы писали:


К>>Здравствуйте, BUran, Вы писали:


К>>...

BU>>> А в Delphi для усиления интеллекта есть свои методы.

К>>Если не лень — какие?


CS>Все производные класса TNootropil.


CS>( Pascal люблю. И C++ люблю. Я извращенец, да? )


Ну если ты пользуешься производными класса TNootropil, то помощь тебе точно нужна

Вообще-то человек серьезно спрашивал.
Если ты любишь Pascal, то мог бы ответить по существу...
Re[5]: Насколько полезны и логичны шаблоны?
От: Кодт Россия  
Дата: 05.04.04 09:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ну если ты пользуешься производными класса TNootropil, то помощь тебе точно нужна


Вроде бы к ноотропилу нет привыкания.
А какие у него производные? ("смешать с героином, растворить, затем выронить ноотропил в осадок, а полученный раствор считать производным" )
Перекуём баги на фичи!
Re[4]: Насколько полезны и логичны шаблоны?
От: LaptevVV Россия  
Дата: 05.04.04 09:38
Оценка:
Здравствуйте, Курилка, Вы писали:

INT>>Шаблоны — это просто чуть более цивилизованная реализация макросов.

Ага, так и назывались раньше — синтаксические макросы
К>Так вот вопрос в том — насколько "более цивилизованная"?
К>Просто запутанность макросов как подукта препроцессора порождает иногда совсем нелогичные последствия, что ведёт к выводу: макросы = зло.
Ага, попробовали бы они писать на ассемблере без макросов
К>Можно ли поставить знак равенства след. образом: "шаблоны=зло"?
Ну, уж это, батенька, вы загнули!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Насколько полезны и логичны шаблоны?
От: Kluev  
Дата: 05.04.04 09:39
Оценка: +1
Здравствуйте, Курилка, Вы писали:

К>Вопрос собственно в сабж.

К>Просто зашёл спор опять с одним из апологетов Delphi, о том, что не всё на нём можно реализовать удобно и логично, в отличие от C++ (хотя и у него есть свои грабли).

Делфи силен только своими библиотеками и средой разработки. Если сравнить голый С++ с голым ObjectPascal, то можно не продолжать....
Re[6]: Насколько полезны и логичны шаблоны?
От: Аноним  
Дата: 05.04.04 09:40
Оценка:
Здравствуйте, Кодт, Вы писали:

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


А>>Ну если ты пользуешься производными класса TNootropil, то помощь тебе точно нужна


К>Вроде бы к ноотропилу нет привыкания.

К>А какие у него производные? ("смешать с героином, растворить, затем выронить ноотропил в осадок, а полученный раствор считать производным" )

Не знаю, если к нему привыкание,
но если человеку требуется химическая подзарядка, то значить дело худо
Re[4]: Насколько полезны и логичны шаблоны?
От: INTP_mihoshi Россия  
Дата: 05.04.04 10:07
Оценка: +1 -2
Здравствуйте, Курилка, Вы писали:
INT>>Шаблоны — это просто чуть более цивилизованная реализация макросов.

К>Так вот вопрос в том — насколько "более цивилизованная"?

К>Просто запутанность макросов как подукта препроцессора порождает иногда совсем нелогичные последствия, что ведёт к выводу: макросы = зло. Можно ли поставить знак равенства след. образом: "шаблоны=зло"?

Кривыми макросами можно покривить программы точно так же, как кривыми шаблонами, классами, фукциями и вообще чем угодно. Зло — кривые руки и кривые языки.

Для меня макрос — метод залатывания неоторых корявостей языка. Например, вот пара макросов с очевидным смыслом.

#define FOR_EACH(TYPE, ITERATOR, CONTAINER) \
for(TYPE ITERATOR = CONTAINER.begin(); ITERATOR != CONTAINER.end(); ITERATOR++)

#define IF_FIND(TYPE, ITERATOR, CONTAINER, VALUE) \
TYPE ITERATOR = CONTAINER.find(VALUE); \
if(ITERATOR != CONTAINER.end())

Язык и STL не позволяет мне цивилизованным способом сказать то же самое без использования макросов.

Что более запутанно —

FOR_EACH(TDMembers::iterator, imember, _members){...}

или

for(TDMembers::iterator imember = _members.begin(); imember != _members.end(); imember++){...}

?
Re: Насколько полезны и логичны шаблоны?
От: Banch  
Дата: 05.04.04 11:05
Оценка: -1
Здравствуйте, Курилка, Вы писали:

К>Одним из основных аргументов моих выступили именно шаблоны, которые теперь и в Java и .Net будут скоро добавлены.


имхо не туда они гребут ... превращают хорошие объектные языки в хрен знает что (
сиди потом разбирайся во всяких смесях их шаблонов и не шаблонов, наверно скоро макросы добавят ...

лучше б к Smalltalk двигались
Re[2]: Насколько полезны и логичны шаблоны?
От: Кодт Россия  
Дата: 05.04.04 11:29
Оценка: :))) :))
Здравствуйте, Banch, Вы писали:

К>>Одним из основных аргументов моих выступили именно шаблоны, которые теперь и в Java и .Net будут скоро добавлены.


B>имхо не туда они гребут ... превращают хорошие объектные языки в хрен знает что (

B>сиди потом разбирайся во всяких смесях их шаблонов и не шаблонов, наверно скоро макросы добавят ...

B>лучше б к Smalltalk двигались


Даёшь шаблоны в смолтоке !
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.