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

Вниз

Будут ли когданибудь шаблоны в делфях? может они уже есть?   Найти похожие ветки 

 
Dust ©   (2007-07-03 16:31) [0]

сабж

тут вообще недавно возникла идея - написать шаблонизатор %))


 
Mystic ©   (2007-07-03 16:37) [1]

Пиши на Ada  ;)


 
StriderMan ©   (2007-07-03 17:30) [2]

о каких шаблонах речь?


 
Amoeba ©   (2007-07-03 17:32) [3]

Есть в некотором роде аналог:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=891


 
Dust ©   (2007-07-03 18:18) [4]

2 Amoeba
Написано много и интересно но не про шаблоны..


 
Kolan ©   (2007-07-03 18:29) [5]

> о каких шаблонах речь?

Я тоже не понял.
Если Шаблоны это&#133
Паттерны , то есть
Generics(я смутно представляю что это) как в C++, то нет.


 
DrPass ©   (2007-07-03 18:33) [6]

Еще нет, но они работают над этим
http://qc.codegear.com/wc/qcmain.aspx?d=11168


 
StriderMan ©   (2007-07-03 18:40) [7]


> Я тоже не понял.
> Если Шаблоны это…
> Паттерны , то есть
> Generics(я смутно представляю что это) как в C++, то нет

я даже смутно не представляю :))

есть репозиторий, или это не в ту степь совсем?


 
Celades ©   (2007-07-03 19:12) [8]


> есть репозиторий, или это не в ту степь совсем?

не в ту


 
oldman ©   (2007-07-03 19:19) [9]


> тут вообще недавно возникла идея - написать шаблонизатор


Форма с одной кнопкой - "Хачу чтоб все работало"?
:)


 
tesseract_pocket   (2007-07-03 20:25) [10]

шаблоны - попытка скрестить ужа с ежом. в delphi есть намного более удобные средства делегированиеи rtti. Используйте их грамотно и всё ок.


 
wicked ©   (2007-07-03 20:37) [11]


> шаблоны - попытка скрестить ужа с ежом. в delphi есть намного
> более удобные средства делегированиеи rtti. Используйте
> их грамотно и всё ок.

несомненно... именно поэтому шаблоны были встроены в дот нет и джаву последних версий....


 
oxffff ©   (2007-07-03 21:04) [12]

Все же давайте не будем забывать, что шаблоны С++(template) и generics(.NET) отличаются, хотя и служат общей цели - параметризованным классам и функциям.

Например инстанцировать в Run-time параметризованный класс в .NET можно.
А в С++ нет.

Как реализуют в Delphi неизвестно

P.S.

The following are the key differences between C# Generics and C++ templates:

C# generics do not provide the same amount of flexibility as C++ templates. For example, it is not possible to call arithmetic operators in a C# generic class, although it is possible to call user defined operators.

C# does not allow non-type template parameters, such as template C<int i> {}.

C# does not support explicit specialization; that is, a custom implementation of a template for a specific type.

C# does not support partial specialization: a custom implementation for a subset of the type arguments.

C# does not allow the type parameter to be used as the base class for the generic type.

C# does not allow type parameters to have default types.

In C#, a generic type parameter cannot itself be a generic, although constructed types can be used as generics. C++ does allow template parameters.

C++ allows code that might not be valid for all type parameters in the template, which is then checked for the specific type used as the type parameter. C# requires code in a class to be written in such a way that it will work with any type that satisfies the constraints. For example, in C++ it is possible to write a function that uses the arithmetic operators + and - on objects of the type parameter, which will produce an error at the time of instantiation of the template with a type that does not support these operators. C# disallows this; the only language constructs allowed are those that can be deduced from the constraints.

P.S.S

Рекомендую

1. Design and Implementation of Generics for the .NET Common Language Runtime
Andrew Kennedy Don Syme

2. ECMA


 
tesseract ©   (2007-07-03 21:28) [13]


> несомненно... именно поэтому шаблоны были встроены в дот
> нет и джаву последних версий....


Гм. А чем, приведение классов не нравиться? Назовите мне случай явной необходимости специфики Generic, из того чего нет в ООП ? Хотя они намного логичней шаблонов.


 
DrPass ©   (2007-07-03 21:32) [14]


> Назовите мне случай явной необходимости специфики Generic

Случай явной необходимости, естественно, тебе никто не назовет. Попробуй, например, назвать случай явной необходимости цикла for или условия if..then. Необходимости нет, но в определенных случаях именно эта конструкция будет наиболее удобной


 
tesseract ©   (2007-07-03 21:40) [15]


> for или условия if..then. Необходимости нет, но в определенных
> случаях именно эта конструкция будет наиболее удобной


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


 
hommRO   (2007-07-03 21:41) [16]

> Попробуй, например, назвать случай явной необходимости цикла
> for или условия if..then. Необходимости нет

Ну приплыли :(


 
palva ©   (2007-07-03 22:35) [17]

tesseract ©   (03.07.07 21:40) [15]
> неудачен пример Ваш.
А причем здесь - удачен или не удачен. Это пример вещей, которые и в самом деле не являются необходимыми.


 
tesseract ©   (2007-07-03 22:41) [18]


>  Это пример вещей, которые и в самом деле не являются необходимыми.


Согласен,  изредка бывает необходимость в шаблонах, но ведь когда используешь например COM - они вообще отпадают, но механизмы ООП остаються. Не вижу в них смысла, это всё.


 
euru ©   (2007-07-03 22:47) [19]


> tesseract ©   (03.07.07 21:40) [15]
Любой цикл можно заменить на if и goto.
Зачем нужны циклы?


 
tesseract ©   (2007-07-03 22:51) [20]


> Зачем нужны циклы?


goto - жесть


 
hommRO   (2007-07-03 22:51) [21]

> Любой цикл можно заменить на if и goto.

Ну и пиши на ассамблере, там только if и goto.


 
wicked ©   (2007-07-03 22:51) [22]

> tesseract ©   (03.07.07 22:41) [18]

> Согласен,  изредка бывает необходимость в шаблонах, но ведь
> когда используешь например COM - они вообще отпадают, но
> механизмы ООП остаються. Не вижу в них смысла, это всё.

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

в реальности - шаблоны нужны и ими вовсю пользуются


 
palva ©   (2007-07-03 23:00) [23]

> Согласен,  изредка бывает необходимость в шаблонах,
Разве я такое говорил? Я говорил, что оператор for точно также не является необходимым, как и шаблоны. Так что это я с вами согласен, а не вы со мной.

> Не вижу в них смысла
Имеете ввиду "смысла в их существовании"? Ну это уже вопрос вашего выбора. Очень многие программисты не уполномочено делать такой выбор. Они используют те средства разработки, которые использует команда. Либо увольняются.


 
Anatoly Podgoretsky ©   (2007-07-03 23:30) [24]

> hommRO  (03.07.2007 22:51:21)  [21]

Ни того, ни другого, там команды процессора


 
hommRO   (2007-07-03 23:48) [25]

> Ни того, ни другого, там команды процессора

Что суть одно и то-же. Рзведем флуд постов на 20?


 
Германн ©   (2007-07-04 01:35) [26]


> hommRO   (03.07.07 23:48) [25]
>
> > Ни того, ни другого, там команды процессора
>
> Что суть одно и то-же. Рзведем флуд постов на 20?
>

Не надо флуда. "Там" только условные и безусловные переходы.


 
euru ©   (2007-07-04 01:52) [27]


> oxffff ©   (03.07.07 21:04) [12]

> The following are the key differences between C# Generics
> and C++ templates:
А есть где-нибудь описание, с чем связаны такие различия?


 
Kolan ©   (2007-07-04 08:20) [28]

> tesseract ©   (03.07.07 22:41)
Не вижу в них смысла, это всё.


Пусть будут, а не хош не пользуй &#151; это мое имхо по всем новым фичам.


 
oxffff ©   (2007-07-04 08:55) [29]


> euru ©   (04.07.07 01:52) [27]
>
>
> > oxffff ©   (03.07.07 21:04) [12]
>
> > The following are the key differences between C# Generics
> > and C++ templates:
> А есть где-нибудь описание, с чем связаны такие различия?
>


google интервью с Хейлсбергом.


 
Суслик ©   (2007-07-04 09:08) [30]

разве в roadmap на www.codegear.com нет интересующей инфы?
вроде была


 
Kolan ©   (2007-07-04 09:14) [31]

> вроде была


Да, и впрямь есть:

Delphi &laquo;Highlander&raquo;

Codename: Highlander
Time Frame: Second Half 2007

Consumption and creation of parameterized types (generics) for Delphi for .Net.


Delphi &laquo;Tiburon&raquo;

Codename: Tiburon
Time Frame: First Half 2008
Theme: Delphi and VCL development with Unicode and Generics


 
db2admin ©   (2007-07-04 13:27) [32]

tesseract ©   (03.07.07 22:51) [20]
обьясни...


 
Alkid ©   (2007-07-04 13:36) [33]

Кстати, о птичках...
То есть о шаблонах.
Я сам С++-ник со стажем и на дельфи программировал 4.5 года на прошлой работе. Сейчас участвую в проекте, писанном на С++.
Так вот, по поводу шаблонов (именно С++-ных шаблонов, а не generic`ов) у меня двойственное ощущение. С одной стороны они чрезвычайно удобны, когда применяются для создания достаточно простых вещей, типа обобщённых контейнеров и алгоритмов, ибо позволяют реализовать compile-time duck-typing. Автор STL это крайне грамотно использовал.

С дргой стороны на примере того же проекта, в котором я участвую, я вижу и примеры переусложнённого использования шаблонов для метапрограммирования. Про BOOST я вообще молчу - это такая крутая абстрактная математика, что у нас её на фирме тупо запретили. (Не самое разумное решение, но в нём есть своё рациональное зерно). Т.е. шаблоны, как и многие другие фишки С++ (например, множественное наследование) - это мощная фитча, которая, однако, может завести в дебри, если ей неправильно пользоваться.


 
Satanas ©   (2007-07-04 14:07) [34]

Шаблоны C++ - это дополнительный уровень абстракции. См. boost::MPL. Такого на делфи не сделать в принципе. Да и дженерики тут не подойдут.


 
Alkid ©   (2007-07-04 17:06) [35]


> Шаблоны C++ - это дополнительный уровень абстракции. См.
>  boost::MPL. Такого на делфи не сделать в принципе. Да и
> дженерики тут не подойдут.

Я не умаляю ума создателей буста, и BOOST::MPL в частности, но всё это суть изврат. Т.е. попытка смоделировать при помощи нетривиального использования механизма темплейтов то, что должно быть реализованно на уровне самого языка.
Вы хотите метапрограммирования? Юзайте Лисп или Немерле, там есть для этого мощные простые средсва, органично встроенные в сам язык. Если же я программирую на С++ (а я это сейчас и делаю), я всеми силами избегаю подобных вещей, ибо они привносят в программу ненужное переусложнение. Сложно любой сделает, а программа должна быть простой, ибо она не произведение искусства, а промышленное изделие.


 
oxffff ©   (2007-07-04 19:57) [36]


> Satanas ©   (04.07.07 14:07) [34]
> Шаблоны C++ - это дополнительный уровень абстракции. См.
>  boost::MPL. Такого на делфи не сделать в принципе. Да и
> дженерики тут не подойдут.


Можно конечно и так

template< unsigned n >
struct factorial
{
   static const unsigned value = n * factorial<n-1>::value;
};

template<>
struct factorial<0>
{
   static const unsigned value = 1;
};

...........

factorial<3> a;

Но чтобы посчитать ТАК!!! факториал в compile time это уже личное дело.


 
oxffff ©   (2007-07-04 20:25) [37]

to Satanas ©  
А если убрать Specialization :))))
и сделать так

template< unsigned n >
struct factorial
{
  static const unsigned value = n * factorial<n-1>::value;
};

factorial<3> a;

То будет реально метапрограммирование для компилятора. И он естественно валится


 
Alx2 ©   (2007-07-04 20:38) [38]

>oxffff ©  
На рекурсии по шаблонам (и не только) принято умные башмаки ставить, чтобы пользоваться можно было. И посчитать в т.н. "compile time" тоже есть чего очень много умного.

Например, расписано по деталям в
К. Чарнецки, У. Айзенекер
"Порождающее программирование"


 
oxffff ©   (2007-07-04 20:51) [39]


> Alx2 ©   (04.07.07 20:38) [38]
> >oxffff ©  
> На рекурсии по шаблонам (и не только) принято умные башмаки
> ставить, чтобы пользоваться можно было. И посчитать в т.
> н. "compile time" тоже есть чего очень много умного.
>
> Например, расписано по деталям в
> К. Чарнецки, У. Айзенекер
> "Порождающее программирование"


О каких башмаках идет речь? Может быть о белых тапочках?

Я не отрицаю, что template мощное средство, несмотря на работу в compile time. Но использовать его надо исключительно по назначению. А именно

safety (more bugs caught at compile time),
expressivity (more invariants expressed in type signatures),
clarity (fewer explicit conversions between data types),
and efficiency (no need for run-time type checks).

Но ключ это clarity


 
Alx2 ©   (2007-07-04 21:00) [40]

>oxffff ©   (04.07.07 20:51) [39]

>Но использовать его надо исключительно по назначению

Это значит копаться в мозгах разработчика.  Тут может получиться кому как кажется.

>Но ключ это clarity

Согласен. Всегда можно писать ясно. И, думаю, шаблоны от С++ не против этого.



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

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

Наверх




Память: 0.57 MB
Время: 0.023 c
2-1183798091
Maxoglot
2007-07-07 12:48
2007.08.05
Сортировка вещественных чисел


15-1183689416
Slider007
2007-07-06 06:36
2007.08.05
С днем рождения ! 6 июля 2007 пятница


2-1183879448
sl8er
2007-07-08 11:24
2007.08.05
Не вижу изменения


1-1180359392
d_oleg
2007-05-28 17:36
2007.08.05
Вызов функции по имени в run-time


15-1183973813
Anatoly Podgoretsky
2007-07-09 13:36
2007.08.05
Паскаль