Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
Циркуль   (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;
Скачать: [xml.tar.bz2];

Наверх





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


15-1193175070
Прочее
2007-10-24 01:31
2007.12.09
Как сделать чтобы в OnKeyPress проходило сообщение VK_UP ?


2-1194963791
Shurup
2007-11-13 17:23
2007.12.09
InputBox &amp; шрифт


4-1179894213
Klopan
2007-05-23 08:23
2007.12.09
Включение флешки


6-1175622907
Tiberius
2007-04-03 21:55
2007.12.09
Где найти ieConst.pas и IEDocHostUIHandler.pas





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский