Re[14]: Экспорт шаблонов
От: McSeem2 США http://www.antigrain.com
Дата: 11.01.05 05:29
Оценка: 112 (6) +2 -1 :)
Здравствуйте, c-smile, Вы писали:

CS>Правда хочется иногда прыстально так глянуть в лицо комитету и спросить "где например метафункция is_pod_type() или там type_info времени компиляции, господа писатели? Доколе в эмпиреях парить будем?" но это так, опционально, хотя тортик для встречи я уже припас.


Я уже упоминал как-то об этом, здесь все дело в традициях. Дело в том, что товарищ Керниган Томпсонович Ричи сильно схалтурил в свое время, дав народу на редкость убогий препроцессор — ну не доработали они. Да и вообще. надо было делать не пре-процессор, а просто хороший макро-процессор, как в MACRO-11.

Осмелюсь высказать крамольную мысль, что UNIX и язык C были чисто гаражно-наколенной разработкой, очень хакерской, без какой-либо серьезной теоретической проработки.
Товарищ Страу Струпович был связан по рукам и ногам, задавшись целью полной обратной совместимости и тоже напроч забыв в свое время о таком понятии, как макро-программирование. Потом, во времена разработки шаблонов ему стало стыдно и он решил выкрутиться из ситуации, введя более круто звучащий термин "мета-программирование".

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

Я вполне понимаю комитет — непросто все это. Вот, например, есть такой замечательный язык Ада, разработчики которого решили пресечь на корню разные толкования их "талмуда" и заставили соблюдать строгую сертификацию. Ну и где этот язык теперь? Народ очень сопротивляется, когда некое министерство обороны пытается навязывать свою волю. Народ любит свободу...

Кстати, случайно нашлось эпохальное сообщение Дениса Ричи в какой-то конфе: http://idiot-dog.com/humor/krt.html

The Differences Between Kernighan, Ritchie, and Thompson
I read,

Looks like folks are now beginning to credit the development of UNIX to Kernighan and Ritchie, but I thought the principal investigators were *Thompson* and Ritchie. Did something change?
The differences between Kernighan Ritchie Thompson are real but very subtle. We all look alike (middle aged with scruffy graying beards). Note these distinctions:

Kernighan is slimmest, Ritchie middlest, Thompson heaviest in body build
Ritchie got contacts a couple of years ago and so is the only current non-glasses wearer
Thompson wouldn't touch netnews with a pole, Kernighan secretly gets misc.invest and misc.taxes mailed to him, Ritchie reads it more than is good for him and occasionally contributes
Ritchie is the only one who has met five people who have appeared on David Letterman (Penn, Teller, Rob Pike, Mayor Koch, and the guy who raised the biggest hog in Ohio)
Kernighan has written ten times as much readable prose as has Ritchie, Ritchie ten times as much as Thompson. It's tempting to say that the reverse proportions hold for code, but in fact Kernighan and Ritchie are more nearly tied and Thompson wipes us both out.
Dennis

--------------------------------------------------------------------------------

4 March 1991 / dmr@alice.att.com (Dennis Ritchie)
Back to Humor Index

McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[15]: Экспорт шаблонов
От: c-smile Канада http://terrainformatica.com
Дата: 11.01.05 06:18
Оценка:
Здравствуйте, McSeem2, Вы писали:

Вот MACRO-11, даже проект под VS 6 имеется.
ftp://ftp.dbit.com/pub/linux/macro11/

Поменять испукание ассемблера на испускание C/C++ и высе... делов то
Re[13]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.05 13:18
Оценка: -2 :)))
Здравствуйте, Павел Кузнецов, Вы писали:

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


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

Надеюсь не нежно объяснять почему такое решение является правильным?
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.05 13:18
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Ничего подобного. Итераторы программой как данными не оперируют. Более того, ничего принципиально декларативного в них тоже нет:

ПК>
ПК>std::vector<int> v( 10 );
ПК>for (std::vector<int>::iterator i = v.begin(), e = v.end(); i != e; ++i)
ПК>   *i = e - i;
ПК>

ПК>самая что ни на есть итеративная программа.

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

Чем, по-твоему, итераторы С++ отличаются от энумераторов дотнета?
public interface IEnumerator
{
    bool MoveNext();
    object Current { get; }
    void Reset();
}

public interface IEnumerator<T> : IDisposable, IEnumerator
{
    T Current { get; }
}

...

int sum = 0;

foreach (int elem in new int[]{ 2, 3, 5, 7, 9 })
    sum += elem;

Просто, как всегда, С++ операется не на жетский интерфейс и его предварительное описание, а на сентаксическое соотвествие. В C# объект для использования в качестве итератора должен реализовывать интерфейс IEnumerator<T>, а в С++ поддерживать синтаксическую операцию сравнения и инкремента.

Так что АВК тут не прав, но приципились вы к его словам зря. По сути он совершенно прав. Все что могут шаблоны в области обобщенного программирования, все тоже самое могут и дженерики. Неподвластно им только лишь метапрограммирование. Но это не потому, что у тех кто их делал кишка тонка или мозгов не хватает. Прост они не хотели рождать уродцев подобных С++. Концепции должны быть чистыми. Как только появится красивая концепция метопрограммирования, хорошо интегрируемая в дотнет и Шарп, то она тот час же будет реализована.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.05 13:18
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Ну и что? От этого действия, выполняемые итератором, равно как и вид результирующей программы ни на йоту не изменятся. Или все, что реализуемо на C++, но не реализуемо на C# является метапрограммированием?


А что в итераторах СТЛ не реализуется на Шарпе?
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.05 13:18
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Павел Кузнецов, Вы писали:


>>> В этом случае все без особых проблем реализуется на шарпе.


ПК>>Ну и что?


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


Чушь какая-то. Метапрограмма — это прграмма переписывающая (модифицирующая код). А функциональный стиль — это всего лишь синтакически-стилистическая особенность.

Вот тебе чисто функциональный пример исползования итераторов (точнее энумераторов, но это тоже самое, разница только в терминологии) в Шарпе:
int[] array = new int[] { 2, 4, 5, 8 };
int sum = 0;
Array.ForEach(array, delegate(int elem) { sum += elem; })
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.05 13:18
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Имхо все это неверно, т.к. все эти вещи, равно как и многие отличия шаблонов C++ от C# generics, позволяют использовать какие-то новые идиомы, и, соответственно, просто к "улучшению синтаксиса применения" не сводятся. По-моему, грань, отделяющая "улучшение синтаксиса" от "выполнения работы" как раз и лежит там, где добавление новых выразительных средств приводит к качественному изменению языка, давая пространство для новых идиом и стилей программирования.


И какие новые идиомы и т.п. даемт нам С++ по сравнению с Шарпом если таки выбросить аспект метапрограммирования?
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.05 13:18
Оценка: :)
Здравствуйте, AndrewVK, Вы писали:

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


Тут ты заблуждаешся. Итераторы С++ ничего общего с метапрограммированием не имеют.

AVK>Более правильным было бы наличие чистых дженериков без побочных эффектов + специализированные средства метапрограммирования, как например в OpenC++, XC#, R# наконец. Вот только чтобы это была стандартная фича языка, а не стороннее средство.


Вот тут согласен. Хотя хоть убей не пойму какого черта нужно мечтать о чем-то, а не взять то что есть?

ПК>> А неявный боксинг?


AVK>А это уже фича рантайма.


Отнюдь. Это фича языка. В МС++, например, автобоксинга нет. Там приходится писать нечто вроде:
Object obj = __box(123);


ПК>> А операторы + — и т.п. вместо функций Add, Substract и т.п.?


AVK>Чисто синтаксическая фича к сожалению.


Ну, вот ты и договорился до того на что тебя Паша подвигал. add и sub — это классика ассемблера. Все же это уже качественное изменение, а не количественное. Так же как if и switch — это качественное изменение по сравнению с cmp & jne.

ПК>> А properties? А enums?


AVK>Поддерживается рантаймом.


Ага. А if и + не поддерживаются?

AVK>Тоже синтаксис. В IL никакого for нет. Офф: знаешь откуда синтаксис for взялся? Практически 1 в 1 скопированно с соответствующего макроса макроассемблеров.


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

И совершенно верно то, что метапрогаммирование позволяет повышать этот уровень без изменения базового языка. Веренее метапрограммирование позволяет локально менять базовый язык (под потребности конкретной прикладной области).

И очень жаль, что Паше как всегда удалось увести тебя от сути обсуждения к частностям. Ты совершенно прав в том, что дженерики отличаются от шаблонов (с точки зрения взможностей) только тем, что они не позволяют заниматься метапрограммированием, и позволяют не нарушать компонентную модель (и другие рантаймные тахнологии). И опять же ты прав в том, что метапрограммирование на шалонох убого и является архитектурным артифактом не запланированным создателями языка.

В общем, очень жаль, что ты вовремя не признал свою ошибку в оценке итераторов и пытаешся далее жащищать эту ошибку. Именно используя это ПК с успехом отстаивает в принципяльно неверную позицию.

Ошибка же ПК более глобальна. Для него "С++ — это Аллах, а шаблоны пророк его". И в попытке отстоять это заблуждение он испоьзует любые малейшие ошибки и пробелы в знаниях.

Примитивный примем — подлов на слове и раскручивание ошибок действует очень неплохо. Так что нужно вовремя возвращаться к исходным посылкам признавая мелкие неточности или ошибки.

В данном случае ты не прав, в отношении итераторов. Это просто обобщенный код. Просто код несколько необычный для твоего глаза. Однако это никак не изменяет правоты твоей исходной послыки. И не фига поддаваться на провакации с классификацией структурных операторов и сравнению их с ассемблерными.

AVK>А вобще я не понимаю к чему этот спор о терминах. Называй как хочешь — суть то от этого не меняется.


К тому чтобы уципиться за явно ошибочное утверждение и на этом фоне поставить под сомнения утверждения которые он не может опровергнуть, но котрые ему не нравятся. Можно назвать этот приемом как угожно, но он "прошел на ура"... И не в первый раз... К сожалению.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.05 13:18
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Ты, похоже, пользуешься каким-то уж очень нетрадиционным определением метапрограммирования.


ПК>А функция find() в этих "обыкновенных" контейнерах Vector и List тоже "будет метапрограммированием"? Если нет, чем она отличается от итераторов? Если да, то я вообще не понимаю, где в твоей трактовке грань между generic программированием, и метапрограммированием.


ПК>Если мы уберем из контейнеров итераторы, то, по-видимому, придется добавить индексацию (operator []). Индексация тоже "будет метапрограммированием", или нет?


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

Ты подверг сомнению утверждение "дженерики обладают теми же возможностями, что и шаблоны за исключением метапрограммирования". Так? Ну, вот и попытайся доказать неверность этого утвержения. А не борись со всеми мельницами в округе.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.05 13:18
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Точно! Может скажу и не в кассу, но слово "метапрограммирование" во мне до сих пор вызывает какой-то ступор, почти как "контрреволюция" — совершенно не понятно, что под ним скрывается. С этой точки зрения термин "generic" — гораздо более удачен. Есть сильное подозрение, что он рассчитан на профанов типа меня, не понимающих слова "метапрограммирование"


В точку. К сожалению таких как ты очень много.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.05 13:18
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>На самом деле, все выпады дот-нетчиков в сторону C++ сводятся к одной простой фразе:

MS>

MS>Если вы все такие умные, чего же вы строем не ходите?


MS> Без обид!


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

В общем, дежавю какое-то. Все те же выподы только с большим сарказмом С++ вместо С. То ли еще будет...
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.05 13:18
Оценка:
Здравствуйте, McSeem2, Вы писали:

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


AVK>>То что ты не знаешь языков гибче С++ еще не значит что их не существует. Например OpenC++ по гибкости на порядок круче С++.


MS>Фактически, если я о них не знаю, это как раз и означает, что их нет.


Космические масштабы отдыхают...

MS> Это все делается на уровне доморощенного энтузиазма, так же, как мой AGG или R#. До стандартизации и промышленного применения — ох как далеко. Короче говоря, здесь я больше верю в дот-нет, чем в OpenC++.


Ну, хотя бы сошлись на том, что в С++ мы уже точно не верим.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Экспорт шаблонов
От: Павел Кузнецов  
Дата: 08.02.05 02:59
Оценка: :)
VladD2,

> Примеры в студию, того что нельзя сделать на дженириках и при этом это не относится к метапрограммированию.


Нельзя использовать все возможности языка (того же C# в данном случае). Например, использовать перегруженные операторы, статические методы, конструкторы с аргументами. Последнее ограничение, например, не позволяет сделать шаблон фабрики. Первое — даже простейший шаблон accumulate.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[21]: Экспорт шаблонов
От: Павел Кузнецов  
Дата: 08.02.05 03:29
Оценка:
VladD2,

> И какие новые идиомы и т.п. даемт нам С++ по сравнению с Шарпом если таки выбросить аспект метапрограммирования?


Чтобы не углубляться в очередной терминологический спор, сформулируем просто: в шаблонах C++ можно использовать все возможности языка C++, в C# generics все возможности языка C# использовать нельзя. Т.е. часть алгоритмов, которые можно на C# написать, обобщить до generics не получится. С шаблонами C++ таких проблем нет.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[22]: Экспорт шаблонов
От: Павел Кузнецов  
Дата: 08.02.05 03:40
Оценка:
VladD2,

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


У Андрея хоть аргументы какие-никакие были. А тебе достаточно повторять данное утверждение, вероятно, полагая, что от этого оно станет более верным, или аргументы все-таки последуют?

> Ошибка же ПК более глобальна. Для него "С++ — это Аллах, а шаблоны пророк его".


Я очень хорошо знаю о недостатках C++ и его шаблонов. Но точно так же я вижу, что C# generics лишены достоинств шаблонов. За исключением одного: уменьшения потребности в явных приведениях типов. В данном случае я склонен согласиться с Брюсом Эккелем: generics aren't.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[22]: Экспорт шаблонов
От: McSeem2 США http://www.antigrain.com
Дата: 08.02.05 04:06
Оценка: +1
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Чтобы не углубляться в очередной терминологический спор, сформулируем просто: в шаблонах C++ можно использовать все возможности языка C++, в C# generics все возможности языка C# использовать нельзя. Т.е. часть алгоритмов, которые можно на C# написать, обобщить до generics не получится. С шаблонами C++ таких проблем нет.


Это просто разные по своей сущности вещи. Общего в них лишь использование угловых скобок.

Щас снова скажу крамолу (вах, боюс-боюс).
Шаблоны по своей сути — это макросы, какими бы умными "метапрограммированиями" их ни обзывали. Конечно, это не сишные define-макросы, они гораздо мощнее — хотя бы тем, что их можно нормально (иногда!) трассировать в отладчике. Но в этом-то и проблемы тоже — ужасающие сообщения об ошибках компиляции. Чего бы там ни говорили, но человек — не компилятор и "вкурить" сообщение длиной в килобайт — иногда повеситься можно. Кстати, это не просто так нельзя использовать что-то типа
template<int N> void copy(. . .)
{
   repeat<N> { *p++ = *s++ }
}

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

Генерики полностью свободны от недостатков шаблонов, поскольку принципиально runtime. Но ведь они и не дают ничего существенного. Как было убедительно показано, они — всего лишь автоматизация dynamic cast. Типа просто надо было придумать некий "наш ответ Страуструпу — мы тоже умеем использовать угловые скобки"
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[23]: Экспорт шаблонов
От: Павел Кузнецов  
Дата: 08.02.05 05:16
Оценка:
McSeem2,

> ПК> часть алгоритмов, которые можно на C# написать, обобщить до generics не получится. С шаблонами C++ таких проблем нет.


> Это просто разные по своей сущности вещи. Общего в них лишь использование угловых скобок.


+1

> Щас снова скажу крамолу (вах, боюс-боюс).

> Шаблоны по своей сути — это макросы, какими бы умными "метапрограммированиями" их ни обзывали.

(Ну и гаразд же ты терминами крутить) собственно, в этом их сила. Как и макросы, шаблоны были призваны заменить собой copy-paste. В отличие от generics, они с этой задачей вполне в состоянии справиться. И как оказалось впоследствии, и еще с некоторыми, хотя уже далеко не с такой же элегантностью

> Генерики полностью свободны от недостатков шаблонов, поскольку принципиально runtime. Но ведь они и не дают ничего существенного. Как было убедительно показано, они — всего лишь автоматизация dynamic cast.


+1
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[23]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.02.05 18:17
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>VladD2,


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


ПК>У Андрея хоть аргументы какие-никакие были. А тебе достаточно повторять данное утверждение, вероятно, полагая, что от этого оно станет более верным, или аргументы все-таки последуют?


Забавный ты мужик. У самого вместо аргументов докапывание к отдельным ошибкам аппонента не имеющим отношения к делу. А от других сразу аргументов требуешь.

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

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

>> Ошибка же ПК более глобальна. Для него "С++ — это Аллах, а шаблоны пророк его".


ПК>Я очень хорошо знаю о недостатках C++ и его шаблонов. Но точно так же я вижу, что C# generics лишены достоинств шаблонов.


Или недостатоков. Это завист от того как смотреть. Ну, да тут о достоинствах или недостатках вроде никто не гворил. Предлагаю не преключать тему. Ты утверждаешь, что у Шаблонов есть еще какие-то качественные приемущества кроме возможности метапрограммирования на них. Вот и обоснуй свое утверждение.

ПК> За исключением одного: уменьшения потребности в явных приведениях типов.


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

ПК> В данном случае я склонен согласиться с Брюсом Эккелем: generics aren't.


Ты случаем не обратил внимания на две мелочи? Нет? Такие незаметнинькие...
1. Он говорит о Яве. А в яве дженерики реализованы с серьезными ограничениями.
2. Они забыл разобраться в дэенериках.

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

Что это? Дык дженерик-интерфейсы и дженерик-делегаты.

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

Все эти "зеро эдвантедж" и т.п. выглядят просто смешно. Ну, прям идиоты сделали никому не нужную вещь, а он один провидец все увидел.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.02.05 18:17
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Чтобы не углубляться в очередной терминологический спор,


Да, уж. Желательно. А то как-то это докапывание до разной ерунды надоедает.

ПК> сформулируем просто: в шаблонах C++ можно использовать все возможности языка C++, в C# generics все возможности языка C# использовать нельзя.


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

ПК> Т.е. часть алгоритмов, которые можно на C# написать, обобщить до generics не получится. С шаблонами C++ таких проблем нет.


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

В общем, приводи мне недженерик код на Шарпе и я тебе перепишу его на дженериках.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: Экспорт шаблонов
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.02.05 18:17
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Здравствуйте, Павел Кузнецов, Вы писали:


ПК>>Чтобы не углубляться в очередной терминологический спор, сформулируем просто: в шаблонах C++ можно использовать все возможности языка C++, в C# generics все возможности языка C# использовать нельзя. Т.е. часть алгоритмов, которые можно на C# написать, обобщить до generics не получится. С шаблонами C++ таких проблем нет.


MS>Это просто разные по своей сущности вещи. Общего в них лишь использование угловых скобок.


MS>Щас снова скажу крамолу (вах, боюс-боюс).

MS>Шаблоны по своей сути — это макросы, какими бы умными "метапрограммированиями" их ни обзывали. Конечно, это не сишные define-макросы, они гораздо мощнее — хотя бы тем, что их можно нормально (иногда!) трассировать в отладчике. Но в этом-то и проблемы тоже — ужасающие сообщения об ошибках компиляции. Чего бы там ни говорили, но человек — не компилятор и "вкурить" сообщение длиной в килобайт — иногда повеситься можно. Кстати, это не просто так нельзя использовать что-то типа
MS>
MS>template<int N> void copy(. . .)
MS>{
MS>   repeat<N> { *p++ = *s++ }
MS>}
MS>

MS>Если такое разрешить, то на адекватном трассировании сразу можно ставить жирный крест — возвращаемся к базотладочным временам лог-файлов.


Вот до сюда согласен с каждым словом.

MS>Генерики полностью свободны от недостатков шаблонов, поскольку принципиально runtime. Но ведь они и не дают ничего существенного. Как было убедительно показано, они — всего лишь автоматизация dynamic cast. Типа просто надо было придумать некий "наш ответ Страуструпу — мы тоже умеем использовать угловые скобки"


А вот это, прости, эдакое лукавство. "Как было убедительно показано". Это кем и что было доказано? Уж не Брюсом Эккелем? Берусь доказать что он не долго разбирался с дженериками в дотнете.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.