Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

Объясните пожалуйста дельфисту, что такое шаблоны в Си?   Найти похожие ветки 

 
Циркуль   (2007-11-01 01:57) [0]

И что надо отвечать на нападки агрессивных сишников?


 
umbra ©   (2007-11-01 01:59) [1]

отвечать надо одним словом - "отстой" :)


 
Германн ©   (2007-11-01 02:08) [2]


> И что надо отвечать на нападки агрессивных сишников?

Отвечать надо "Вас здесь не стояло". Ну или по Паниковскому с Балагановым - "А ты кто такой?" с толчком в грудь :)


 
Ega23 ©   (2007-11-01 09:08) [3]

Изучить Си, понять, в чём он хуже, а в чём лучше того же Delphi, и потом филосовски пожимать плечами и говорить: профессионалу всё равно на чём писать.


 
Думкин ©   (2007-11-01 09:13) [4]

> профессионалу всё равно на чём писать.

Это не так немного. :)


 
wendy parkinson   (2007-11-01 09:21) [5]

>И что надо отвечать на нападки агрессивных сишников?

"О, милостливый государь, я раскаиваюсь в том, что был привержен все эти годы
упадочническому культу Дельфи. Я вижу мощь C++ и, находясь в здравом уме и твердой памяти, признаю, что программист познавший C++ никогда больше не возьмется за Дельфи. Преклоняюсь пред вами и падаю ниц, да хранит вас Господь."


 
Однокамушкин   (2007-11-01 09:32) [6]

Начнём с того, что в С шаблонов вообще нет, они есть в С++

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

Шаблоны считаются устаревшим небезопасным средством, в новых языках вместо них принято делать обобщения (generics), которые по сути то же самое, но менее гибкие и потому более безопасные... В Delphi обобщения тоже давно обещают, по крайней мере, в .NET 2 - версии, потому что там они средой поддерживаются


 
Anatoly Podgoretsky ©   (2007-11-01 09:35) [7]

> Ega23  (01.11.2007 09:08:03)  [3]

> говорить: профессионалу всё равно на чём писать.

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


 
guav ©   (2007-11-01 09:36) [8]

http://yosefk.com/c++fqa/templates.html


 
wendy parkinson   (2007-11-01 09:49) [9]

Однокамушкин   (01.11.07 09:32) [6]


> Шаблоны считаются устаревшим небезопасным средством, в новых
> языках вместо них принято делать обобщения (generics), которые
> по сути то же самое, но менее гибкие и потому более безопасные.
> ..


Да, но эти самые устаревшие и небезопасные шаблоны, которые по сути являются макросами, позволяют осуществлять метапрограммирование посредством себя

http://www.codeproject.com/cpp/crc_meta.asp

чего генерики делать не позволяют, так как макросами не являются.


 
DrPass ©   (2007-11-01 11:18) [10]


> Да, но эти самые устаревшие и небезопасные шаблоны, которые
> по сути являются макросами, позволяют осуществлять метапрограммирование
> посредством себя

А зачем в коде, предназначенном для чтения и дальнейшей поддержки живыми людьми, делать "метапрограммирование посредством шаблонов"?


 
wendy parkinson   (2007-11-01 11:23) [11]

DrPass ©   (01.11.07 11:18) [10]

Статью читали?

A while ago I was working on a program that used a large lookup table to do some computations. The contents of the table depended on a large number of parameters that I had to tweak to get optimal performance from my code. And every time I changed one parameter the whole table had to be recalculated...

I had written a function that dumped the content of the table to standard output. That way I could compile my program with the new parameters set, cut-and-paste the table from screen and into my source code and finally recompile the whole project. I didn"t mind doing that - the first twenty times. After that I figured there had to be a better way. There was. Enter Template Metaprogramming.


 
Игорь Шевченко ©   (2007-11-01 11:26) [12]

А в C нету шаблонов


 
DrPass ©   (2007-11-01 11:35) [13]


> wendy parkinson   (01.11.07 11:23) [11]
> DrPass ©   (01.11.07 11:18) [10]
>
> Статью читали?

Ага. Согласись, что ЭТО
template< int i >
class LOOP{
 public:
   static inline void EXEC(){
     cout << "A-" << i << " ";
           LOOP< i-1 >::EXEC();
      cout << "B-" << i << " ";
   }
};
class LOOP< 0 >{
 public:
   static inline void EXEC(){
     cout << "A-" << i;
     cout << "\n";
      cout << "B-" << i;
   }
};


...не имеет права быть в программе вместо этого
int sum = 0;
for (int i = 1 ; i <= 1000; i++)
    sum += i;


Пусть даже и разворачивается в более быстрый линейный код (хотя неизвестно, что лучше - три ассемблерные инструкции цикла или тысяча линейных инкрементов).


 
wendy parkinson   (2007-11-01 11:48) [14]

DrPass ©   (01.11.07 11:35) [13]

Программы вообще не нужны. А программирование суть зло.


 
DrPass ©   (2007-11-01 12:44) [15]


> wendy parkinson   (01.11.07 11:48) [14]

Да, а С++ные программисты пьют кровь убиенных христианских младенцев


 
clickmaker ©   (2007-11-01 12:49) [16]


> что надо отвечать на нападки агрессивных сишников?

хук в бубен


 
wicked ©   (2007-11-01 12:55) [17]

> DrPass ©   (01.11.07 11:35) [13]
имеет, поскольку развернется не в линейные инструкции, а в одну константу
вообще, суть метапрограммирования с темплатами - порождать необходимый код на стадии компиляции, а также вынести константные вычисления из стадии выполнения в стадию компиляции


 
Mystic ©   (2007-11-01 12:57) [18]

Говорить, что аналог шаблонов есть в Ada ;)


 
DiamondShark ©   (2007-11-01 12:58) [19]


> Объясните пожалуйста дельфисту, что такое шаблоны в Си?

Седло для коровы.


> И что надо отвечать на нападки агрессивных сишников?

Посылать далеко и нецензурно.


 
Alkid ©   (2007-11-01 13:28) [20]


> Шаблоны считаются устаревшим небезопасным средством, в новых
> языках вместо них принято делать обобщения (generics), которые
> по сути то же самое, но менее гибкие и потому более безопасные.
> .. В Delphi обобщения тоже давно обещают, по крайней мере,
>  в .NET 2 - версии, потому что там они средой поддерживаются

Это чем же шалоны небезопасны? Очень интересно, жду ответа.

Вообще же, дженерики - это весьма размытый термин, ибо они есть и в Java и в .NET 2, но имеют разную природу. В Java это чисто compile-time вещь, по сути аналогичная шаблонам в С++, а в .NET 2 это Run-Time механизм, поддержаный в платформе.

Кстати, небольшой нюанс: под .NET 2 можно писать используюя и шаблоны и дженерики. Это можно сделать при помощи MC++ и С++/CLI.

В Дельфи шаблонов сильно не хватает. Там хотя бы дженерики сильно бы пригодились.

Что касается метапрограммирования на шаблонах, то как некий state-of-art программисткого умения и концепт, показывающий безграничность нашей мысли, это очень хорошо, а в промышленной практике - это плохо. По сути это есть попытка нецелевым способом использовать шаблоны для того, что бы моделировать такие стредства, как макросы (не Сишные, а в стиле LISP и Nemerle) и "нормальное" метапрограммирование.

Как и все попытки моделировать на уровне библиотечного кода те вещи, которые должны быть поддержаны на уровне языка или платформы (такие как Reflection, автоматическая сборка мусора, метапрограммирование и т.п.) этот подход имеет кучу минусов: нечитаемый переусложнённый код, в котором легко сделать ошибку, который серъёзно повышает требования к подготовке программиста. Кроме того, код становится более требователен к качеству реализации стандарта компилятором и дольше собирается.

В С++ скорось сборки это вообще проблема. У нас на работе и без особого метапрограммирования один модуль может собираться по 1.5-2 часа. А всё из-за одного перца, который реализовал парочку своих state-of-art идей.

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


 
clickmaker ©   (2007-11-01 13:30) [21]


> Это чем же шалоны небезопасны?

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


 
Alkid ©   (2007-11-01 13:35) [22]


> это маркетинг
> если невыгодно продавать соль, то ее обзывают "белой смертью",
>  ну и т.д.

Точнее, если хочется впарить что-то, что должно вытеснить соль с рынка :)


 
wendy parkinson   (2007-11-01 13:38) [23]

Alkid ©   (01.11.07 13:28) [20]


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


Но делает C++ однозначно лучше среди языков своего класса.


 
homm ©   (2007-11-01 13:43) [24]

> Объясните пожалуйста дельфисту, что такое шаблоны в Си?

В Си нет шаблонов, afaik.


 
Alkid ©   (2007-11-01 13:46) [25]


> Но делает C++ однозначно лучше среди языков своего класса.

А какие ещё языки входят в этот класс?
Это я к тому, что достоинства языка складываются из многих его свойств, а не только из начилия/отсутствия шаблонов :)


 
DiamondShark ©   (2007-11-01 13:51) [26]


> В Дельфи шаблонов сильно не хватает.

О, да. Дельфист без шаблонов -- всё равно что рыба без велосипеда.


 
Alkid ©   (2007-11-01 13:58) [27]


> О, да. Дельфист без шаблонов -- всё равно что рыба без велосипеда.

Сарказм не по делу. Основное назначение шаблонов - создание типобезопасноых контейнеров.
Сейчас, если у меня есть класс TMyClass, и я хочу сделать для него контейнер, то у меня есть 2 пути:
1. Использовть TObjectList и каждый раз заниматься небезопасными конверсиями типов.
2. Писать самому свой контейнер.

Первый путь небезопасен, второй связан с постоянным рутинным написанием почти одинакового кода.

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


 
clickmaker ©   (2007-11-01 13:59) [28]


> если хочется впарить что-то, что должно вытеснить соль с
> рынка

да
в умелых руках, как известно, и топор - балалайка
а тому, у кого руки под х.. заточены, тому никакие шаблоны не помогут )


 
vpbar ©   (2007-11-01 14:05) [29]

Alkid ©   (01.11.07 13:58) [27]
Для таких случаев можно симулировать :)
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=744 и ww.delphikingdom.com/asp/viewitem.asp?catalogid=453 есть статья получше. Но ссылку не помню.


 
DiamondShark ©   (2007-11-01 14:07) [30]

Я знал, что мне опять расскажут байку про контейнеры.


 
Alkid ©   (2007-11-01 14:18) [31]


> Я знал, что мне опять расскажут байку про контейнеры.

Я примерно 5 лет программировал на дельфи на прошлой работе. За это время я бессчётное количество раз реализовывал разного рода контейнеры, пока не открыл способ, описанный в [29]. На этом я потерял столько времени и наделал столько ошибок, переписывая в n+1-ый раз методы GetCount, GetItem, Add, Remove и Clear, что могу тебе авторитетно заявить - про контейнеры, это не байки, а суровая правда жизни.


> vpbar ©   (01.11.07 14:05) [29]

Да, я этот медод знаю и использовал. :)


 
Palladin ©   (2007-11-01 14:23) [32]


> Но делает C++ однозначно лучше среди языков своего класса.

а что за класс языков то?


 
wendy parkinson   (2007-11-01 14:31) [33]

Palladin ©   (01.11.07 14:23) [32]

>а что за класс языков то?\

general purpose strongly typed languages


 
DiamondShark ©   (2007-11-01 14:35) [34]


> Alkid ©   (01.11.07 14:18) [31]

Я примерно 12 лет программировал на дельфи, не помню, сколько раз я реализовывал разного рода контейнеры. Наверное, потому не помню, что это не было не только сколь-нибудь трудным делом, но и сколь-нибудь значимым, по сравнению со всем остальным делом.

Зато я прекрасно помню проект на позапрошлой работе, который мне достался в наследство от предыдущего сотрудника -- весьма креативного юноши, у которого ещё не прошёл ребячий восторг от возможности написать vector<CMyObject>. Проект долго переходил из рук в руки, вызывая рак мозгов у всех, пытавшихся разобраться в нагромождении шаблонов юного вундеркинда.

После этого я повесил в красном углу икону преподобного Вирта и возжёг пред ней лампаду.


 
Alkid ©   (2007-11-01 14:44) [35]


> Я примерно 12 лет программировал на дельфи, не помню, сколько
> раз я реализовывал разного рода контейнеры. Наверное, потому
> не помню, что это не было не только сколь-нибудь трудным
> делом, но и сколь-нибудь значимым, по сравнению со всем
> остальным делом.

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

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

Принципиальны отказ от шаблонов тут так же излишне категоричен, как и их "креативное" использование в стиле boost.


 
wendy parkinson   (2007-11-01 14:44) [36]

DiamondShark ©   (01.11.07 14:35) [34]

А от такого бы на месте застрелился?

vector<shared_ptr<map<string, stirng> > >


 
Alkid ©   (2007-11-01 14:46) [37]


> general purpose strongly typed languages

Очень широкий класс языков получается.
В любом случае, если свободно выбирать из них на чём стартовать новый проект, то у меня выбор будет скорее всего в пользу C#, а не С++, хоть дженерики С# мне нравятся меньше, чем шаблоны в С++. А всё потому, что у С++ есть куча других недостатков, которые не компенсируются наличием шаблонов.


 
clickmaker ©   (2007-11-01 14:46) [38]


> Принципиальны отказ от шаблонов тут так же излишне категоричен,
> как и их "креативное" использование в стиле boost.

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


 
wendy parkinson   (2007-11-01 14:47) [39]

Alkid ©   (01.11.07 14:46) [37]

Но у C# тоже есть один большой недостаток. 20 мегабайтный :)


 
homm ©   (2007-11-01 14:48) [40]

> [39] wendy parkinson   (01.11.07 14:47)
> Но у C# тоже есть один большой недостаток. 20 мегабайтный :)

В версии 3.0 уже 35 вроде. И все больше и больше…



Страницы: 1 2 3 4 5 вся ветка

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.03 c
11-1180896008
=BuckLr=
2007-06-03 22:40
2007.12.09
Защита участка RichEdit от изменения


15-1194896394
Tracy Hide
2007-11-12 22:39
2007.12.09
Касательно ИИ


2-1194703331
addi
2007-11-10 17:02
2007.12.09
Общение с "чужим" приложением.


15-1194338110
Costy
2007-11-06 11:35
2007.12.09
Вопрос по литературе


2-1195046408
Jason
2007-11-14 16:20
2007.12.09
Как удалить динамически созданные едиты?