Насколько правила женериков для С++ отличаются/подходят к #-вым?
Ну синтаксис и прочее что писал Алексадреску и Джосуттис, насколько они адекватны в свете #вых женериков?
Здравствуйте, LaFlour, Вы писали:
LF>Насколько правила женериков для С++ отличаются/подходят к #-вым? LF>Ну синтаксис и прочее что писал Алексадреску и Джосуттис, насколько они адекватны в свете #вых женериков?
Насколько я понимаю шаблоны С++ это по сути шаблон, где многие операции приводятся за счет перегрузки методов и операций, что бы на этапе компиляции правильно собрать объект и уже затем откомпилировать. В Net дженерики это готовые к употреблению объекты т.к. подчиняются всем требованиям ООП и нельзя применять к типу операции не оговоренных на этапе создания. На самом деле шаблоны С++ выхолащивают ООП практически сводя программирование к конструированию примитивных объектов.
В дженериках все премущества и недостатки ООП — виртуальные методы, наследование и отслеживание типа на этапе разработки и завершение кода.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, LaFlour, Вы писали:
LF>Насколько правила женериков для С++ отличаются/подходят к #-вым? LF>Ну синтаксис и прочее что писал Алексадреску и Джосуттис, насколько они адекватны в свете #вых женериков?
LF>Насколько правила женериков для С++ отличаются/подходят к #-вым? LF>Ну синтаксис и прочее что писал Алексадреску и Джосуттис, насколько они адекватны в свете #вых женериков?
Насколько я знаю в С++ не джинериков. Есть шаблоны но это абсолютно другое. Одно просто огромное и главное отличие — это то, что шаблоны в С++ — сущьность времени компиляции. В .NET же джинерики — сущьность рантайм. Т.е ты можешь написать скажем свою супер пупер коллекцию обьектов и сделать её параметризуемой, причём в скомпилированной сборке будет находится именно джинерик. Т.е параметризуеммый класс. Ессно данную фичу мы имеем исключитьльно из за того, что реально в сборке лежит MSIL, и CLR уже в рантайме компилирует твой класс для данного типа. Причём для всех reference типов это делается единажды, а для value каждый раз для нового типа.
Здравствуйте, LaFlour, Вы писали:
LF>Насколько правила женериков для С++ отличаются/подходят к #-вым? LF>Ну синтаксис и прочее что писал Алексадреску и Джосуттис, насколько они адекватны в свете #вых женериков?
В МС++ будут поддерживаться как старые добрые шаблоны, так и дженирики полностью совместимые с дотнетом (и Шарпом в частности).
... << RSDN@Home 1.1.0 stable >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
НУ я к тому что зная шаблоныы С++ лехгко ли будет применить данные знания при переходе на женерик шарповый, или всеже прийдется кардинально переучиваться
"VladD2" <forum@rsdn.ru> wrote in message news:447454@news.rsdn.ru...
From: VladD2 rsdn www.optim.ru/cs
Здравствуйте, LaFlour, Вы писали:
LF>Насколько правила женериков для С++ отличаются/подходят к #-вым? LF>Ну синтаксис и прочее что писал Алексадреску и Джосуттис, насколько они адекватны в свете #вых женериков?
В МС++ будут поддерживаться как старые добрые шаблоны, так и дженирики полностью совместимые с дотнетом (и Шарпом в частности).
... << RSDN@Home 1.1.0 stable >>
Re: Generic в C# и C++? Оценить
Здравствуйте, LaFlour, Вы писали:
LF>НУ я к тому что зная шаблоныы С++ лехгко ли будет применить данные знания при переходе на женерик шарповый, или всеже прийдется кардинально переучиваться
Еще раз дженерики в Net это полноценные классы и описатели. Ты задаешь только тип и интерфесы поддерживаемые им.
например
internal abstract class BTCustomLevel<K,V>
{
public int Level;
public BTIndexPP<K,V> Header;
public int index;
public BTParentLevel<K,V> Parent;
public BTCustomLevel<K,V> Child;
public abstract void First();
..................................
internal sealed class BTNullLevel<K,V>: BTCustomLevel<K,V>
{
public BTNullLevel(BTIndexPP<K,V> Header)
{
Level = 0;
this.Header = Header;
page = new NullPage<K,V>();
}
public override void First()
{ index = -1; }
.................................................
internal sealed class BTParentLevel<K,V>: BTCustomLevel<K,V>
{
public ParentPage<K> page;
public override void First()
{
index = 0;
Child.SetPage(this.page.PageItems[0].ChildPage);
Child.First();
}
.............................................
public class BTIndexPP<K,V>
{
internal IKeyComparer<K> Comp;
internal BTCustomLevel<K,V> Ind;
internal BTNullLevel<K,V> NullLevel;
internal int RecordCount;
internal NullItem<K,V> NullItemAsNull;
И работаешь как с обычными объектами. Если например в Delphi тоже можно применять такой подход, но приходится копировать объект и присваивать свой тип, что неудобно то сдесь уже все подставляется автоматически по шаблону.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
VD>>Про ООП — это чущь.
S>А это почему??? Все ООП прекрасно вписывается. Если посмотришь мои Б++ деревья то там полное ООП на дженериках.
Вписывается это одно. А имеет отношение — это другое. Дженирик программинг — это отдельная и ни в коей мере не конкурирующая с ООП парадигма программирования.
Шаблоны в С++ прекрасно интегрируются с ООП.
... << RSDN@Home 1.1.0 stable >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Serginio1, Вы писали:
VD>>>Про ООП — это чущь.
S>>А это почему??? Все ООП прекрасно вписывается. Если посмотришь мои Б++ деревья то там полное ООП на дженериках.
VD>Вписывается это одно. А имеет отношение — это другое. Дженирик программинг — это отдельная и ни в коей мере не конкурирующая с ООП парадигма программирования.
Я бы сказал расширяющаяя обычное понятие ООП. Т.К. неопределенные типы имеют право на жизнь за счет дополнительных параметров определяющие правило функционирования этих типов. Это намного лучше чем использовать нетипизированные указатели зная размер типа и приводя его к типизированной ссылке.
VD>Шаблоны в С++ прекрасно интегрируются с ООП.
Только интеграция эта происходит на этапе компиляции по сути являющиеся аналогом Copy-Paste-Replace только производимая компилятором. Это лично мое мнение. Но пообщавшись с Дженериками мне такой подход больше нравится и он единственный в объектном подходе в Net.
А плюс шаблонов только в скорости зс счет вызовов прямых (Inline) методов и прямого сравнения за счет перегрузки операторов. Выигрыш в итоге не принципиальный особенно в идеалогии Net.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S> А плюс шаблонов [C++] только в скорости зс счет вызовов прямых (Inline) методов и прямого сравнения за счет перегрузки операторов. Выигрыш в итоге не принципиальный особенно в идеалогии Net.
Ну я не стал бы так вот заявлять, у шаблонов множество разнообразных применений, включая лямбда-исчисление. См. boost, например.
К тому же настолько категоричные заявления смотрятся, мягко говоря, странно после твои слов:
Здравствуйте, orangy, Вы писали:
O>Здравствуйте, Serginio1, Вы писали:
S>> А плюс шаблонов [C++] только в скорости зс счет вызовов прямых (Inline) методов и прямого сравнения за счет перегрузки операторов. Выигрыш в итоге не принципиальный особенно в идеалогии Net. O>Ну я не стал бы так вот заявлять, у шаблонов множество разнообразных применений, включая лямбда-исчисление. См. boost, например. O>К тому же настолько категоричные заявления смотрятся, мягко говоря, странно после твои слов: O>
O>Могу ошибаться т.к. не программирую на С++.
Я как собака понимаю С++ но не пишу, не только из принципиальных соображений но из-за его по моему мнению анахронизма. На 1С пишу только ради денег.
Я не говорю, что шаблоны не нужны. Весь С++ на нем построен и это его главное премущество вышедшее и Ассемблера. Но времена меняются и чистое ООП вытесняет такие подходы. Интересно посмотреть что будет с С++ через 3 года.
Главное принцип построения результирующего кода. В итоге происходит сначала формирование исходного кода на С++ а затем уже в машинный код. Получить машинный код можно и другими путями.
Готов выслушать аргументированное категоричное мнение отличное от моего.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, LaFlour, Вы писали:
LF>НУ я к тому что зная шаблоныы С++ лехгко ли будет применить данные знания при переходе на женерик шарповый, или всеже прийдется кардинально переучиваться
Лично мне даже не пришлось заглядывать в документацию. Дженерики в Шарпе очень похожи на С++, но проще и применимы кроме всего прочего еще и к делегатам и интерфейсам.
... << RSDN@Home 1.1.0 stable >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Serginio1, Вы писали:
S> Я бы сказал расширяющаяя обычное понятие ООП. Т.К. неопределенные типы имеют право на жизнь за счет дополнительных параметров определяющие правило функционирования этих типов. Это намного лучше чем использовать нетипизированные указатели зная размер типа и приводя его к типизированной ссылке.
Ничего они не расширяют. Это просто способ создания обобщенных алгоритмов. Не больше и не меньше.
S> Только интеграция эта происходит на этапе компиляции
Да. И учитывая возможности шаблонов это в некоторой степени оправданно. К тому же такова уж концепция С++. В нем почти все происходит в компайл-тайме.
S>по сути являющиеся аналогом Copy-Paste-Replace только производимая компилятором.
Гы. Если копи-пэст делает компилятор, то это уже называется повторное использование кода. Собственно джит делает почти тоже самое (особенно если учесть, что линкер в С++ выкидывает дублирующийся код).
S>Но пообщавшись с Дженериками мне такой подход больше нравится и он единственный в объектном подходе в Net.
Дело в том, что ты не достаточно "общался" с шаблонами. Они во многом гибче и производительнее. По сути дженирики решают две задачи: 1) повышают контроль типов в обобщенных алгоритмах, 2) повышают скорость кода. Так вот, тоже самое делают и шаблоны. Но они порождают потенциально более бытрый код, и ко всему прочему, позволют делать некоторые выкрутасы недоступные дженирикам. В свою очередь дженирики обладают свойствами компонентности и предоставлют такие фичи как дженерик-виртальные фукнкции, дженерик-делегаты и дженерик-интерфейсы. Этого уже нет в С++.
Таким образом дженирики — это просто другая реализация тогоже подхода. Со своими плюсами и со своими минусами. Однако тот факт, что с помпщью шаблонов можно создавать более оптимизированный код, говорит о том, что пункт 2) (своего предназначения) шаблоны выполняют лучше дженириков. Будем надеяться, что в будущем это исправится (возможно уже в релизе).
S> А плюс шаблонов только в скорости зс счет вызовов прямых (Inline) методов и прямого сравнения за счет перегрузки операторов. Выигрыш в итоге не принципиальный особенно в идеалогии Net.
Пол смысла в дженикиках — это скорость. Как ты мог заметить, в некоторых случаях, дженирики работают в десятки раз быстрее чем аналогичные полиморфные алгоритмы. Вторая заслуга — это строгая типизация. Так она в обоих случаях на всоте. Разве что можно записать в плюс дженирикам то, что они обеспечивают копилт-ворд при редактировании.
... << RSDN@Home 1.1.0 stable >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Serginio1, Вы писали:
S>Но времена меняются и чистое ООП вытесняет такие подходы. Интересно посмотреть что будет с С++ через 3 года.
Кто чего вытесняет? Как только в С++ появились шаблоны все больше и больше кода пишется с их использованием. Так что верным скорее будет обратное утверждение: Времена меняется, и чистый ООП вытесняется "такими" подходами.
S> Главное принцип построения результирующего кода. В итоге происходит сначала формирование исходного кода на С++ а затем уже в машинный код. Получить машинный код можно и другими путями.
А что на Дельфи или Шарпе можно пропустить этап "формирования исходнго кода"?
S> Готов выслушать аргументированное категоричное мнение отличное от моего.
Для этого нужно сначало как следует аргументировать собственное мнение.
... << RSDN@Home 1.1.0 stable >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, der Igel, Вы писали:
DI>Hello, LaFlour!
DI>Ничего личного, но настойчиво рекомендую настроить ньюс-клиент в соттветсвии с DI>http://rsdn.ru/article/files/progs/rsdnnntp/rsdnnntp.xml и оформлять ответы в принятом на сайте стиле — сначала вопрос, потом ответ.
А никто не подскажет, как Оутлук (не экспресс) заставить квотить сообщения в таком же стиле?
... << RSDN@Home 1.1.0 stable >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.