Почему C++ - не просто язык ООП
От: Кодт Россия  
Дата: 12.11.02 20:24
Оценка: 7 (1)
Надеюсь, что не развяжу очередной карибский кризис.
Попалась мне статья в "Открытых Системах": интервью с Бьярном Страуструпом.

Вывод, к которому я пришел (году приблизительно в 1980-м или около того), можно сформулировать так: всякий язык программирования общего назначения обязан поддерживать сразу множество парадигм, и каждая парадигма должна быть реализована хорошо, обеспечивая близкое к оптимальному время выполнения и распределение памяти.

Перекуём баги на фичи!
Re: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.11.02 22:25
Оценка:
Здравствуйте Кодт, Вы писали:

К>Надеюсь, что не развяжу очередной карибский кризис.

К>Попалась мне статья в "Открытых Системах": интервью с Бьярном Страуструпом.

К>

К>Вывод, к которому я пришел (году приблизительно в 1980-м или около того), можно сформулировать так: всякий язык программирования общего назначения обязан поддерживать сразу множество парадигм, и каждая парадигма должна быть реализована хорошо, обеспечивая близкое к оптимальному время выполнения и распределение памяти.


Тогда расскажи как С++ поддерживает парадигмы:

Компонентного программирования.
Атрибутного (декларативного) программирования.
Ну и аспектно ориентированного программирования.

В общем устарел этот самы С++, а менять его очень не хотят.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1045.25875 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Почему C++ - не просто язык ООП
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 12.11.02 22:56
Оценка:
Здравствуйте Кодт, Вы писали:

К>Надеюсь, что не развяжу очередной карибский кризис.


...но танки подкатим. Тут вон внимание международной общественности отвлечено на COM/DCOM/COM+

К>Попалась мне статья в "Открытых Системах": интервью с Бьярном Страуструпом.


К>

К>Вывод, к которому я пришел (году приблизительно в 1980-м или около того), можно сформулировать так: всякий язык программирования общего назначения обязан поддерживать сразу множество парадигм, и каждая парадигма должна быть реализована хорошо, обеспечивая близкое к оптимальному время выполнения и распределение памяти.


Всё правильно, C++ — язык для решения проблем. То есть — сугубо практический инструмент для решения практических задач, которые подчас приходится решать эклектичными с точки зрения "теории" способами. В то же время, он позволяет реализовать и вполне себе "чистый" подход к разработке софта для любителей той или иной парадигмы. Ну так на то он и "язык общего назначения"! Кстати, потому он и "рулить" будет ещё очень-очень долго.

Ну а про то, что с ним в угоду манагёрам и маркетологам делают — сам знаешь...
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: Почему C++ - не просто язык ООП
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 13.11.02 01:01
Оценка: 21 (1) -1
Здравствуйте VladD2, Вы писали:

VD>Здравствуйте Кодт, Вы писали:


[...]

VD>Тогда расскажи как С++ поддерживает парадигмы:


А давай-ка ты дашь внятное определение представленным парадигмам (в крайнем случае подойдут отсылки к первоисточникам, но так, чтобы там было написано: "Парадигма такая-то: Определение. ..." или "Программирование такое-то, это..."). Вот тогда и рассмотрим.

VD>Компонентного программирования.

VD>Атрибутного (декларативного) программирования.
VD>Ну и аспектно ориентированного программирования.

VD>В общем устарел этот самы С++, а менять его очень не хотят.


Батарея, товсь!!! Его не менять надо, а пользоваться научиться и за пулями серебряными бегать перестать.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: Почему C++ - не просто язык ООП
От: Vi2 Удмуртия http://www.adem.ru
Дата: 13.11.02 08:14
Оценка:
Здравствуйте Кодт, Вы писали:

К>Надеюсь, что не развяжу очередной карибский кризис.


Я вот вообще нашел цитату
Inside C# / Tom Archer, 2nd ed

Therefore, the majority of programmers simply accept the fact that they have two categories of types and that the intrinsic types aren’t compatible—and they learn to live with that. By the way, this is why most scholars will tell you that C++ isn’t an object-oriented language but instead is an object-based language

.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 13.11.02 12:34
Оценка:
Здравствуйте VladD2, Вы писали:

К>>Надеюсь, что не развяжу очередной карибский кризис.

К>>Попалась мне статья в "Открытых Системах": интервью с Бьярном Страуструпом.

К>>

К>>Вывод, к которому я пришел (году приблизительно в 1980-м или около того), можно сформулировать так: всякий язык программирования общего назначения обязан поддерживать сразу множество парадигм, и каждая парадигма должна быть реализована хорошо, обеспечивая близкое к оптимальному время выполнения и распределение памяти.


VD>Тогда расскажи как С++ поддерживает парадигмы:


VD>Компонентного программирования.


Он ему не мешает, по крайней мере.

VD>Атрибутного (декларативного) программирования.


Это как? Признавайся, ты сам придумал новую парадигму, и никому не говоришь? Это, IMHO, не парадигма, а так, техника программирования. По крайней мере, гугл на запрос "Attribute programming" paradigm выдает 3 ссылки, и все не про то.

VD>Ну и аспектно ориентированного программирования.


Во, Александреску как раз про ето на OOPSLA 4 ноября лекцию читал. Че он там прочитал, я не знаю, но в аннотации написано — "This tutorial presents the weaving approach in C++, discusses some drawbacks of weaving and then presents in-depth the use of policy classes to implement cross-cutting concerns in an AOP way."

VD>В общем устарел этот самы С++, а менять его очень не хотят.


Гы Лучше то все равно пока ничего не придумали.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[3]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.11.02 18:30
Оценка:
Здравствуйте Sergey, Вы писали:

VD>>Компонентного программирования.


S>Он ему не мешает, по крайней мере.


Еще как мешает. КОМ (единственная выжившая компонентная модель на С++) сложна и запутана при реализации на С++.

VD>>Атрибутного (декларативного) программирования.


S>Это как? Признавайся, ты сам придумал новую парадигму, и никому не говоришь? Это, IMHO, не парадигма, а так, техника программирования. По крайней мере, гугл на запрос "Attribute programming" paradigm выдает 3 ссылки, и все не про то.


ПАРАДИГМА, -ы, ж. 1. Образец, тип, модель (книжн.).

Атрибуты позволяют задавать логику приложения не создавая фактически кода. Это позволяет достигать многих результатов избегая процесс отладки, тестирования, кодирования...

VD>>В общем устарел этот самы С++, а менять его очень не хотят.


S>Гы Лучше то все равно пока ничего не придумали.


Ага. Именно по этому ищут изо всех сил ему замену. Т.е. все эти Шарпы, Явы и т.п. просто так появились.

Можно долго и нудно уговаривать и себя и других что С++ кул форева, но это уже давно не так. Его давно пора реформировать. К сожалению этого скорее всего не произойдет. Или произойдет, но поздно.

Когда в Шарпе и Яве появятся шаблоны, (а это уже точно произойдет) и когда оптимизация в нет несколько улучшится, падет последний фиговый листок этого, без сомнения, заслуженного языка.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1045.25875 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.11.02 18:30
Оценка:
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>А давай-ка ты дашь внятное определение представленным парадигмам (в крайнем случае подойдут отсылки к первоисточникам, но так, чтобы там было написано: "Парадигма такая-то: Определение. ..." или "Программирование такое-то, это..."). Вот тогда и рассмотрим.


ГВ>Батарея, товсь!!! Его не менять надо, а пользоваться научиться и за пулями серебряными бегать перестать.


Куда нам лаптям... это ж для особо "крутых".
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1045.25875 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Почему C++ - не просто язык ООП
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 14.11.02 00:31
Оценка:
Здравствуйте VladD2, Вы писали:

ГВ>>Батарея, товсь!!! Его не менять надо, а пользоваться научиться и за пулями серебряными бегать перестать.


VD>Куда нам лаптям... это ж для особо "крутых".


Допустим. И всё-таки, будь добр, ответь по существу. Напоминаю вопрос:

А давай-ка ты дашь внятное определение представленным парадигмам (в крайнем случае подойдут отсылки к первоисточникам, но так, чтобы там было написано: "Парадигма такая-то: Определение. ..." или "Программирование такое-то, это..."). Вот тогда и рассмотрим.

VD>Компонентного программирования.
VD>Атрибутного (декларативного) программирования.
VD>Ну и аспектно ориентированного программирования.


Как вариант ответа подойдут высказывания "Не знаю", "Чёткого определения нет, но это примерно...". Определение желательно давать, используя существительные (а не глаголы).

Извини, но ответ, данный в соседней ветке трудно считать определением какого-либо "образца, типа, модели":

ПАРАДИГМА, -ы, ж. 1. Образец, тип, модель (книжн.).

Атрибуты позволяют задавать логику приложения не создавая фактически кода. Это позволяет достигать многих результатов избегая процесс отладки, тестирования, кодирования...


Эти два абзаца попросту никак не связаны друг с другом. Второй уместен для пояснения чего-либо, но вот чего?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 14.11.02 08:05
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Еще как мешает. КОМ (единственная выжившая компонентная модель на С++) сложна и запутана при реализации на С++.


VD>>>Атрибутного (декларативного) программирования.


S>>Это как? Признавайся, ты сам придумал новую парадигму, и никому не говоришь? Это, IMHO, не парадигма, а так, техника программирования. По крайней мере, гугл на запрос "Attribute programming" paradigm выдает 3 ссылки, и все не про то.


VD>ПАРАДИГМА, -ы, ж. 1. Образец, тип, модель (книжн.).


VD>Атрибуты позволяют задавать логику приложения не создавая фактически кода. Это позволяет достигать многих результатов избегая процесс отладки, тестирования, кодирования...


В С++ это называется множественное наследование.

VD>>>В общем устарел этот самы С++, а менять его очень не хотят.


S>>Гы Лучше то все равно пока ничего не придумали.


VD>Ага. Именно по этому ищут изо всех сил ему замену. Т.е. все эти Шарпы, Явы и т.п. просто так появились.


Не просто так. Появились они в силу объективных причин, но, к сожалению, в некоторых отношениях являются шагом назад по сравнению с С++.

VD>Можно долго и нудно уговаривать и себя и других что С++ кул форева, но это уже давно не так. Его давно пора реформировать. К сожалению этого скорее всего не произойдет. Или произойдет, но поздно.


VD>Когда в Шарпе и Яве появятся шаблоны, (а это уже точно произойдет) и когда оптимизация в нет несколько улучшится, падет последний фиговый листок этого, без сомнения, заслуженного языка.


Там, кроме шаблонов, дофига всего другого не хватает.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[5]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.11.02 19:27
Оценка:
Здравствуйте Sergey, Вы писали:

VD>>Атрибуты позволяют задавать логику приложения не создавая фактически кода. Это позволяет достигать многих результатов избегая процесс отладки, тестирования, кодирования...


S>В С++ это называется множественное наследование.


А ну да. А я тгда Карлсон.

S>Не просто так. Появились они в силу объективных причин, но, к сожалению, в некоторых отношениях являются шагом назад по сравнению с С++.


Вот если бы С++ развивался, то и замену ему искать не пришлось бы.

S>Там, кроме шаблонов, дофига всего другого не хватает.


Например? Множественное наследование спокойно на шаблонах обходится. Больше я ничего не заметил.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1048.39941 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.11.02 19:43
Оценка:
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Допустим. И всё-таки, будь добр, ответь по существу. Напоминаю вопрос:


ГВ>

ГВ>А давай-ка ты дашь внятное определение представленным парадигмам (в крайнем случае подойдут отсылки к первоисточникам, но так, чтобы там было написано: "Парадигма такая-то: Определение. ..." или "Программирование такое-то, это..."). Вот тогда и рассмотрим.

VD>>Компонентного программирования.
VD>>Атрибутного (декларативного) программирования.
VD>>Ну и аспектно ориентированного программирования.


Я что толковый словарь?

Ну могу попробывать, но за качество не отвечаю...

Компонентного программирования — программирование основанное на компонентах, т.е. сборка ПО из готовых блоков. Нечто вроде сборки помпьютеров из комплектующих, но для ПО.

Атрибутное (декларативное) программирование — программирование где многие логические аспекты не прописываются в коде, а задаются в виде атрибутов. В Шарпе это выглядит так:
[MyAtrybut(MyValue)]
void MyMethod(){}

Ну и аспектно ориентированного программирования. Ну это к Мишке.EJB Он много про него в форумах писал.

ГВ>Как вариант ответа подойдут высказывания "Не знаю", "Чёткого определения нет, но это примерно...". Определение желательно давать, используя существительные (а не глаголы).


Слушай! Тебе надо, ты и ищи эти определения. Мне не надо...

ГВ>Эти два абзаца попросту никак не связаны друг с другом. Второй уместен для пояснения чего-либо, но вот чего?


Ты чего от меня хочешь? Что бы я тебе дал энцеклопедические определения понятий которым книги посвещают?

Давай местами поменяемся? Дай вот определение термину программирования ну или еще какому нибудь.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1048.39941 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Почему C++ - не просто язык ООП
От: IT Россия linq2db.com
Дата: 15.11.02 01:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я что толковый словарь?


А шо, бестолковый?

VD>Ну могу попробывать, но за качество не отвечаю...


VD>Компонентного программирования — программирование основанное на компонентах, т.е. сборка ПО из готовых блоков. Нечто вроде сборки помпьютеров из комплектующих, но для ПО.


Компонентом можно упрощённо считать набор связанных классов, реализованных как функционально законченный модуль.

VD>Атрибутное (декларативное) программирование — программирование где многие логические аспекты не прописываются в коде, а задаются в виде атрибутов.


Типа того.

VD>Ну и аспектно ориентированного программирования. Ну это к Мишке.EJB Он много про него в форумах писал.


Этот термин ещё толком не сформулировался. Основная идея заключается в отделении мух от котлет. Если алгоритм занимается вычислением логарифма, то ему желательно ничего не знать о транзакциях, модели синхронизации и/или обработки исключений. К тому же эти операции как правило повторяются от раза к разу в различных алгоритмах. Аспектный подход позволяет отделить подобные служебные функции и выделить их в отдельный класс задач. Одним из способов реализации AOP являются атрибуты. К тому же в .NET существует механизм создания классов, все публичные методы которых будут перехватываться специальными обработчиками, которые могут выполнять определённые служебные функции.
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Почему C++ - не просто язык ООП
От: Aquila http://www.wasm.ru
Дата: 15.11.02 09:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Когда в Шарпе и Яве появятся шаблоны, (а это уже точно произойдет) и когда оптимизация в нет несколько улучшится,


И когда у большинства пользователей будет стоять операционная система со встроенным фреймворком. Раньше ничего не выйдет.

VD>падет последний фиговый листок этого, без сомнения, заслуженного языка.
Re[6]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 15.11.02 09:46
Оценка: 10 (1)
Здравствуйте, VladD2, Вы писали:

VD>>>Атрибуты позволяют задавать логику приложения не создавая фактически кода. Это позволяет достигать многих результатов избегая процесс отладки, тестирования, кодирования...


S>>В С++ это называется множественное наследование.


VD>А ну да. А я тгда Карлсон.


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

S>>Не просто так. Появились они в силу объективных причин, но, к сожалению, в некоторых отношениях являются шагом назад по сравнению с С++.


VD>Вот если бы С++ развивался, то и замену ему искать не пришлось бы.


Ну давай теперь флеймить на тему, является ли Java заменой C++ или дополнением и зачем MS выпустила .Net Сразу скажу, я не считаю, что причинами появления Java и .Net является несовершенство С++. Другие были причины, совсем другие.

S>>Там, кроме шаблонов, дофига всего другого не хватает.


VD>Например? Множественное наследование спокойно на шаблонах обходится. Больше я ничего не заметил.


Ключевое слово — обходится. На ассемблере вообще все обходится, только вот не человеческое это дело, на ассемблере большие программы писать... Кстати, покажи, как именно обходится — че то в удобство такого метода не очень верится.
А не хватает, например, нормальных деструкторов, argument-dependent name lookup, директивы using внутри функций — эти козлы ничего умнее, чем считать ее там за using statement не придумали. Что стоило для using statement другой синтаксис придумать? Привязки параметров в делегатах не хватает, причем, в отличие от C++, руками ее не напишешь. Возможности написать ручной распределитель памяти для конкретного класса не хватает. Наледования для структур. Внутренней непротиворечивости, в конце концов, не хватает — взять хотя бы исключения в деструкторах или в finally. В общем, чем дальше в лес, тем чудесатее и чудесатее. Сырой язык.

Да, и что из шаблонных фич будет в С#? Неужто class template partial specialization и partial ordering of function templates собираются поддерживать? С ними шаблоны — мощное средство кодогенерации, позволяющее писать программы (только рекурсивные правда), выполняемые компилятором, без них — всего лишь типизированные макросы
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[7]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.11.02 20:51
Оценка:
Здравствуйте Sergey, Вы писали:

S>Чтоб не флеймить зря, покажи, как на C# реализуется эта самая парадигма — тогда можно будет предметно обсудить, чего в С++ не хватает.


Вот пример из соседнего формума:
[assembly: Guid("49E484AE-02C4-4c77-A36E-7B4ED0BCE11F")]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationID("49E484AE-02C4-4c77-FFFF-7B4ED0BCE11F")]
[assembly: AssemblyDescription("Test AssemblyDescription")]
[assembly: ApplicationName("TestNetComPlusServer")]
// Обратите внимание на то, что версия сборки задана явно!
// Т.е. без использования знака *. Это позволяет отучить VS
// излишне беспокоиться о "правильности" версии сборки. 
// И тем самым снять проблему постоянной перерегистрации
// COM+-приложения, COM+-прокси и перекомпиляции клиента.
[assembly: AssemblyVersion("1.1.100.200")]
[assembly: AssemblyDelaySign(false)]
// Строгое имя (а именно так лучше переводить "strong name") 
// нужно создать утилитой Sn.exe
[assembly: AssemblyKeyFile("..\\..\\TestNetComPlusServer.snk")]
[assembly: AssemblyKeyName("")]


using System;
using System.EnterpriseServices;
using System.Runtime.InteropServices;

namespace TestNetComPlusServer
{

    [GuidAttribute("FBEAA7C9-06D2-40a3-A3B7-ABC769DDA589")]
    // Ип интерфейса: Dual, IDispatch или IUnknown
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IServer
    {
        void Method1();
    };

    
    // Переключает галочку "Component supports e&vents and statistics",
    // тем самым позволяя следить за активностью компонента в Component Services
    [EventTrackingEnabledAttribute(true)]
    // CLSID. Сногие думают что так задается IID дефолтного интрфейса, но это не так.
    [Guid("676C8C4F-7178-4023-863F-BC13658B8688")]
    [ClassInterface(ClassInterfaceType.None)]
    // Тут же можно задать кучу дургих атрибутов.
    //[Transaction(TransactionOption.Disabled)]
    public class Server: System.EnterpriseServices.ServicedComponent, IServer
    {
        public Server(){}

        // Лдя методов тоже можно задавать атрибуты.
        //[AutoComplete]
        void IServer.Method1()
        {
            // Метод ком объекта.
            int i = 0;
            i = i;
        }
    }
}


Это COM+-объект созданный на C#. Без применения атрибутов мне прилось бы создать отдельный idl-файл с описанием интерфейсов, ко-классов и библиотеки типов. Это — раз. Ну и при регистрации пришлось бы задать все параметры вручную или написать нехилый скрипт для их задания. Тут же я обхожусь заданием атрибутов.

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

VD>>Вот если бы С++ развивался, то и замену ему искать не пришлось бы.


S>Ну давай теперь флеймить на тему, является ли Java заменой C++ или дополнением и зачем MS выпустила .Net Сразу скажу, я не считаю, что причинами появления Java и .Net является несовершенство С++. Другие были причины, совсем другие.


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

VD>>Например? Множественное наследование спокойно на шаблонах обходится. Больше я ничего не заметил.


S>Ключевое слово — обходится. На ассемблере вообще все обходится, только вот не человеческое это дело, на ассемблере большие программы писать... Кстати, покажи, как именно обходится — че то в удобство такого метода не очень верится.


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

В С++ главная проблема — это непомерная сложность. Да на нем можно все. Но какй цено! В .NET же я могу писть основной костяк программы на простом и удобном языке, а когда нужно использовать С++. Правд практика показывает, что обычно это использование ограничивается созданием оберток над разыми нэйтив-АПИ.

S>А не хватает, например, нормальных деструкторов,


Мне в первое время тоже не хватало. Но во времением понимаешь, что это вобщем-то просто привычка. Хотя для вэлью-типов можно было бы добавить.

S>argument-dependent name lookup,


Это я вообще не понял, что такое?

S> директивы using внутри функций


Никогда не испытывал необходимости. И не помню чтобы такое было в С++. Уж лучще добавить With как в VB. Чтобы к членам объектов можно было обращаться через одну точку.

S> — эти козлы ничего умнее, чем считать ее там за using statement не придумали.


using — это как раз замена тем самым деструкторам. Блок контролирующий освобождение ресурсов.

S>Что стоило для using statement другой синтаксис придумать?


Я сперва тоже юсинг за виз принял. Но потом быстро привык.

S>Привязки параметров в делегатах не хватает, причем, в отличие от C++, руками ее не напишешь.


Опять же не понял о чем идет речь? Уж делегаты то в нэте куда лучше уродливых указателей на методы класса в С++. Локанично и эффективно.

S>Возможности написать ручной распределитель памяти для конкретного класса не хватает.


Опять же на С++ это обхдится. Да и на Шарпе в ансэйф-режиме тоже. Но практика показывает, что в этом просто нет нужды.

S>Наледования для структур.


Ну, это я не знаю зачем они сделали, но опять же на практике не мешает.

S>Внутренней непротиворечивости, в конце концов, не хватает — взять хотя бы исключения в деструкторах или в finally.


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

S>В общем, чем дальше в лес, тем чудесатее и чудесатее. Сырой язык.


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

S>Да, и что из шаблонных фич будет в С#? Неужто class template partial specialization и partial ordering of function templates собираются поддерживать?


Я так понял шаблонным хотят сделать почти все. Но конкретно не разбирался. Ссно тольк одно они будут делать наиболее просто вариант. Просто в смысле простоты использования, а не реализации. Кстити вроде хотят избавиться от дублирования кода. На протатип можно посмотреть скачав хакнутый вариант CLI (здесь ftp://rsdn.ru/CLI/Generic/gyro20020823[1].tar.gz). Там есть примеры можешь посмотреть.

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

S>С ними шаблоны — мощное средство кодогенерации, позволяющее писать программы (только рекурсивные правда), выполняемые компилятором, без них — всего лишь типизированные макросы


В нэте шаблоны называются дженирик, т.е. подрозумевается что их раскрытие будет производиться не компилятором, а CLR. Насклоько они будут мощны я пока не знаю. Но даже если они будут на уровне VC6, меня это устроит.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.11.02 20:57
Оценка: 11 (2)
Здравствуйте VladD2, Вы писали:

Я вот для простоты распаковал примеры от шаблонного CLI:

ftp://rsdn.ru/CLI/Generic/Samles
ftp://rsdn.ru/CLI/Generic/Samles/generics.html — описания

Орати внимаене на забавные вещи типа параметризованных делегатов (они их называют протометоды) ftp://rsdn.ru/CLI/Generic/Samles/Memoization/Memoization.html

Вот это тоеж забавно ftp://rsdn.ru/CLI/Generic/Samles/Polynomial/Polynomial.html
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.11.02 21:01
Оценка:
Здравствуйте Aquila, Вы писали:

A>И когда у большинства пользователей будет стоять операционная система со встроенным фреймворком. Раньше ничего не выйдет.


Рантай думаю проблемой не будет. Качают же новые версии IE и обнавления к нему размером в десякти, а то и сотни мегобайт...
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.11.02 21:07
Оценка:
Здравствуйте IT, Вы писали:

IT>Компонентом можно упрощённо считать набор связанных классов, реализованных как функционально законченный модуль.


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

IT>Этот термин ещё толком не сформулировался.


Да это мы с тобой не можем кратко сформулировать овновную идею.

IT>Основная идея заключается в отделении мух от котлет. Если алгоритм занимается вычислением логарифма, то ему желательно ничего не знать о транзакциях, модели синхронизации и/или обработки исключений. К тому же эти операции как правило повторяются от раза к разу в различных алгоритмах. Аспектный подход позволяет отделить подобные служебные функции и выделить их в отдельный класс задач. Одним из способов реализации AOP являются атрибуты. К тому же в .NET существует механизм создания классов, все публичные методы которых будут перехватываться специальными обработчиками, которые могут выполнять определённые служебные функции.


Дык речь то о С++. К сожалению всего этого похоже уже никогда не появится в С++.

В общем С++ мертв. Он как бревно которое еще долго можно будет использовать, но зеленых листиков на нем уже не увидить.

А жаль.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Почему C++ - не просто язык ООП
От: Aquila http://www.wasm.ru
Дата: 15.11.02 21:16
Оценка:
Здравствуйте, VladD2, Вы писали:

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


A>>И когда у большинства пользователей будет стоять операционная система со встроенным фреймворком. Раньше ничего не выйдет.

VD>Рантай думаю проблемой не будет. Качают же новые версии IE и обнавления к нему размером в десякти, а то и сотни мегобайт...

Это большая проблема. Качают, конечно, люди многомегами, но что касается IE, то это, во-первых, для многих достаточно важное приложение, в отличии от фреймворка, во-вторых, качают далеко не все (зачем?), а в-третьих — далеко не каждый пользователь может произвести такую сложную операцию, как скачку многомега и ее последующую установку. Да и зачем? Все программы, которые нужны, работают и безо всякого фреймворка, а если они требуют какие-то длл, то значит они просто кривые... Так рассуждают многие... Нет, это серьезная проблема для массовых программ.
Re[7]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.11.02 21:42
Оценка:
Здравствуйте Aquila, Вы писали:

A>...то это, во-первых, для многих достаточно важное приложение, в отличии от фреймворка


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

A>во-вторых, качают далеко не все (зачем?),


Статистика показывает что большинство перешло на 6-й эксплорер. А он ни в одну ОСь не ваходит.

A>а в-третьих — далеко не каждый пользователь может произвести такую сложную операцию, как скачку многомега и ее последующую установку. Да и зачем? Все программы, которые нужны, работают и безо всякого фреймворка, а если они требуют какие-то длл, то значит они просто кривые... Так рассуждают многие... Нет, это серьезная проблема для массовых программ.


Ну в общем ты сам к моим выводам пришел. Главное чтобы программа была нужна, а фрймворк дело десятое. 20 мег можно и по модему скачать.

Возми тот же янус. Тебе придется скачать 20 мег + 1. Но зато потом проблемы с просмотром в офлайне того же рсдн-а не будет. Думаю что оно того стоит. Тем более что пользователь Януса сам программист и фреймворк у него скорее всего уже есть. Ну а пользователи пользователя возмут фреймоврк у пользователя.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Почему C++ - не просто язык ООП
От: Aquila http://www.wasm.ru
Дата: 15.11.02 22:11
Оценка:
Здравствуйте, VladD2, Вы писали:

A>>...то это, во-первых, для многих достаточно важное приложение, в отличии от фреймворка

VD>Вот тут то собачка и порылась. Как только людям нужно будет приложение на нэте сделаное, то тут же и скачают. Так что главное чтобы твое приложение было людям нужно.

Проблема в том, что они могут предпочесть менее гмм.. требовательное решение.

A>>во-вторых, качают далеко не все (зачем?),

VD>Статистика показывает что большинство перешло на 6-й эксплорер. А он ни в одну ОСь не ваходит.

Что за статистика такая? Мои шпионы говорят, что это не так .

A>>а в-третьих — далеко не каждый пользователь может произвести такую сложную операцию, как скачку многомега и ее последующую установку. Да и зачем? Все программы, которые нужны, работают и безо всякого фреймворка, а если они требуют какие-то длл, то значит они просто кривые... Так рассуждают многие... Нет, это серьезная проблема для массовых программ.


VD>Ну в общем ты сам к моим выводам пришел. Главное чтобы программа была нужна, а фрймворк дело десятое. 20 мег можно и по модему скачать.


Нет. Программа должна установиться и работать. Если она не работает, то ее снесут и поставят другую .

VD>Возми тот же янус. Тебе придется скачать 20 мег + 1. Но зато потом проблемы с просмотром в офлайне того же рсдн-а не будет. Думаю что оно того стоит.


Нет, не стоит . Выбор .NET в качестве платформы для почтового клиента был большой ошибкой. Если говорить в общем — это изрядно сократит количество пользователей этой, вполне возможно, замечательной во всех других отношениях программы. Если говорить о конкретном (моем) случае — то .NET-платформа просто неприемлима. На моем домашнем компьютере стоит Win98 и система после установки фреймворка ведет себя довольно странно, впрочем, как и сам фреймворк и .NET-приложения. Мне не понравилось и пришлось снести все это. К тому же .NET-приложения мне показались медленными и прожорливыми. Смена операционной системы неприемлима .

VD>Тем более что пользователь Януса сам программист и фреймворк у него скорее всего уже есть.


Специфический таргет-групп — но во многих случаях в настоящее время использование .NET пока не оправданно. Впрочем, через 3-6 лет все, вероятно, изменится.
Re[8]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.11.02 22:25
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Статистика показывает что большинство перешло на 6-й эксплорер. А он ни в одну ОСь не ваходит.


В ХР входит. Впрочем это дела не меняет, пользователей ХР заметно меньше чем тех у кого IE6.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[9]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.11.02 22:29
Оценка:
Здравствуйте Aquila, Вы писали:

A>Нет, не стоит . Выбор .NET в качестве платформы для почтового клиента был большой ошибкой. Если говорить в общем — это изрядно сократит количество пользователей этой, вполне возможно, замечательной во всех других отношениях программы. Если говорить о конкретном (моем) случае — то .NET-платформа просто неприемлима. На моем домашнем компьютере стоит Win98 и система после установки фреймворка ведет себя довольно странно, впрочем, как и сам фреймворк и .NET-приложения. Мне не понравилось и пришлось снести все это. К тому же .NET-приложения мне показались медленными и прожорливыми. Смена операционной системы неприемлима .


Первый запускающийся и что то делающий вариант я накидал за 4 дня. На С++ я бы ковырялся недели две. А до теперешнего состояния он бы скорее всего не дожил. Да и потом, на выбор платформы повлияло не только то сколько народу им пользоваться будет.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[9]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.11.02 22:58
Оценка:
Здравствуйте Aquila, Вы писали:

A>Проблема в том, что они могут предпочесть менее гмм.. требовательное решение.


Значит твое решение хреновое. Ведь рантайм тебе дает кардбланш. И если твое решение ничем не лучше чем аналогичное на обычном С++, значит ты валял дурака или взялся не за то.

A>Что за статистика такая? Мои шпионы говорят, что это не так .


На хотлоге.

A>Нет. Программа должна установиться и работать. Если она не работает, то ее снесут и поставят другую .


Дык другие еще писаться будут.

A>Нет, не стоит . Выбор .NET в качестве платформы для почтового клиента был большой ошибкой.


Посмотрим. Пока что эта ошибка дала возможность обогнать конкурирующую (хе-хе) разработку на плюсах. Причем объем работ просто несравним.

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


Опять таки увидим.

A>Если говорить о конкретном (моем) случае — то .NET-платформа просто неприемлима. На моем домашнем компьютере стоит Win98 и система после установки фреймворка ведет себя довольно странно, впрочем, как и сам фреймворк и .NET-приложения.


Значит криво установлена. Сам фрймворк не может оказывать влияния на внешние приложения.

A>Мне не понравилось и пришлось снести все это. К тому же .NET-приложения мне показались медленными и прожорливыми. Смена операционной системы неприемлима .


Интересно почему неприемлима? Ну а про меденность это наговоры. Правда про прожорливаость — чистая правда.

A>Специфический таргет-групп — но во многих случаях в настоящее время использование .NET пока не оправданно. Впрочем, через 3-6 лет все, вероятно, изменится.


Думаю что после выхода релиза Януса (бжта выдет в бижайшее время) сам увидишь как народ будет качать фрймворк.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Почему C++ - не просто язык ООП
От: Aquila http://www.wasm.ru
Дата: 15.11.02 23:20
Оценка:
Здравствуйте, VladD2, Вы писали:

A>>Нет, не стоит . Выбор .NET в качестве платформы для почтового клиента был большой ошибкой.

VD>Посмотрим. Пока что эта ошибка дала возможность обогнать конкурирующую (хе-хе) разработку на плюсах. Причем объем работ просто несравним.

Скорость — это, безусловно, плюс. Но перевешивает ли он минусы, которых немало?

A>>Если говорить о конкретном (моем) случае — то .NET-платформа просто неприемлима. На моем домашнем компьютере стоит Win98 и система после установки фреймворка ведет себя довольно странно, впрочем, как и сам фреймворк и .NET-приложения.

VD>Значит криво установлена. Сам фрймворк не может оказывать влияния на внешние приложения.

Ты думаешь? На внешние приложения он, вполнне вероятно, оказывать влияния не может, но вот на систему оказывает и еще как .

A>>Смена операционной системы неприемлима .

VD>Интересно почему неприемлима?

i) Производительность Win2k (а тем паче WinXP) на моем компьютере (Duron 800/384) меня не устраивает.
ii) Многие программы, к которым я привык и от чьего использования отказываться не намерен, не работают или работают неверно.

A>>Специфический таргет-групп — но во многих случаях в настоящее время использование .NET пока не оправданно. Впрочем, через 3-6 лет все, вероятно, изменится.

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

Не забудьте встроить в Янус упаковку почты .
Re[11]: Почему C++ - не просто язык ООП
От: PSP Беларусь  
Дата: 16.11.02 09:09
Оценка:
A>>>Смена операционной системы неприемлима .
VD>>Интересно почему неприемлима?

A>i) Производительность Win2k (а тем паче WinXP) на моем компьютере (Duron 800/384) меня не устраивает.

A>ii) Многие программы, к которым я привык и от чьего использования отказываться не намерен, не работают или работают неверно.

Согласен. У меня на работе многие смеялись, когда у меня NT 4.0 стояла, а у всех 2k. А я смеялся, когда они вижуал переставляли. Даже от начальника скрывал факт наличия в к-ве оснвной ос NT 4.0.

После второго сервис пака глюков конечно меньше стало. Несравнимо меньше. Но вижуал продолжает подглюкивать, хотя всё остальное вроде нормально работает.
Всегда Ваш, PSP.
Re[11]: Производительность Win2k на Duron 800/384...
От: Хитрик Денис Россия RSDN
Дата: 16.11.02 09:27
Оценка:
Здравствуйте, Aquila, Вы писали:

A>>>Смена операционной системы неприемлима .

VD>>Интересно почему неприемлима?
A>i) Производительность Win2k (а тем паче WinXP) на моем компьютере (Duron 800/384) меня не устраивает.

Бедняга! По секрету скажу, что дома у меня стоял Celeron 333(o/c 500) с 64МБ памяти! Когда поставил вместо Win98SE Win2k (без всяких сервиспаков, их просто ещё не было), то сразу поразился субъективно возросшей производительности и объективно повысившейся устойчивости!
И сколько после этого мне ни говорили про то, что мол, Win2k начинает шевелиться от 128МБ, я только улыбался в ответ!
В это самое время писался курсовик (веб-сайт) так вОт, одновременно у меня тогда работали Photoshop, DreamWeaver4, FrontPage и HomeSite. Естественно отдельно висели IE, WinCmd, но это Не надо издеваться по поводу такого изобилия средств -- дело не в этом. Дело в том, что меня вполне устраивало время отклика каждой из этих програм при переключении между ними.

Может что-нибудь в консерватории подправить?
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[7]: Почему C++ - не просто язык ООП
От: old->*Plutonia_Experiment() Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.11.02 09:39
Оценка:
Здравствуйте, IT, Вы писали:

VD>>Компонентного программирования — программирование основанное на компонентах, т.е. сборка ПО из готовых блоков. Нечто вроде сборки помпьютеров из комплектующих, но для ПО.


IT>Компонентом можно упрощённо считать набор связанных классов, реализованных как функционально законченный модуль.


Это уже другие компоненты.
Функционально законченный — это необходимо, но еще недостаточно.
Re[12]: Производительность Win2k на Duron 800/384...
От: Aquila http://www.wasm.ru
Дата: 16.11.02 09:46
Оценка:
Здравствуйте, Хитрик Денис, Вы писали:

ХД>В это самое время писался курсовик (веб-сайт) так вОт, одновременно у меня тогда работали Photoshop, DreamWeaver4, FrontPage и HomeSite. Естественно отдельно висели IE, WinCmd, но это Не надо издеваться по поводу такого изобилия средств -- дело не в этом. Дело в том, что меня вполне устраивало время отклика каждой из этих програм при переключении между ними.


В свое время у меня был 486/24, на котором я гонял CBuilder 4. Меня тоже устраивало "время отклика". Ну и что? Тебя устраивало, а я тормоза не люблю. Был бы компьютер побыстрее, поставил бы Win2k, но не вижу никакого смысла , чтобы тратить деньги на апгрейд только ради этого.

ХД>Может что-нибудь в консерватории подправить?


Зачем привыкать к тормозам? К тому же второй пункт (о том, что не работают нужные мне программы) играет не меньшую роль. Конечно, можно попробовать найти им замену, но... зачем? Зачем напрягаться, когда и так все работает, как нужно? Я люблю научнотехнический прогресс, но не за счет моих денег и времени и не вижу никакого смысла ставить новые версии ОС, если они не могут обеспечить того, что есть у меня уже сейчас .
Re[12]: Почему C++ - не просто язык ООП
От: old->*Plutonia_Experiment() Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.11.02 10:09
Оценка:
Здравствуйте, PSP, Вы писали:

PSP>Согласен. У меня на работе многие смеялись, когда у меня NT 4.0 стояла, а у всех 2k. А я смеялся, когда они вижуал переставляли. Даже от начальника скрывал факт наличия в к-ве оснвной ос NT 4.0.


PSP>После второго сервис пака глюков конечно меньше стало. Несравнимо меньше. Но вижуал продолжает подглюкивать, хотя всё остальное вроде нормально работает.


Что за гнилые, блин, базары ?
Садись за Юникс или Линукс и ковыряйся в консоли, шоб не падоло ничего.
Или запусти для сравнения KDeveloper там же.
Re[13]: Почему C++ - не просто язык ООП
От: PSP Беларусь  
Дата: 16.11.02 10:31
Оценка:
Здравствуйте, old->*Plutonia_Experiment(), Вы писали:

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


PSP>>Согласен. У меня на работе многие смеялись, когда у меня NT 4.0 стояла, а у всех 2k. А я смеялся, когда они вижуал переставляли. Даже от начальника скрывал факт наличия в к-ве оснвной ос NT 4.0.


PSP>>После второго сервис пака глюков конечно меньше стало. Несравнимо меньше. Но вижуал продолжает подглюкивать, хотя всё остальное вроде нормально работает.


OE>Что за гнилые, блин, базары ?

OE>Садись за Юникс или Линукс и ковыряйся в консоли, шоб не падоло ничего.
OE>Или запусти для сравнения KDeveloper там же.

Я принципиально против таких рассуждений. Если вижуал одинаковый и там и там, нахрен мне глюки иметь. А совместимость всё равно идёт снизу вверх, если я прилаги писать буду под NT4, то под 2k они тем более работать будут..
Всегда Ваш, PSP.
Re[13]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.11.02 19:25
Оценка:
Здравствуйте Aquila, Вы писали:

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


Знаешь, утверждение что W2K на 384М памяти работает меленней 98 мягко говоря неверно.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[2]: Re: Почему C++ - не просто язык ООП
От: Аноним  
Дата: 16.11.02 19:45
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В общем устарел этот самы С++, а менять его очень не хотят.


Ну всем и так ясно, что не любишь ты C++.

Есть известный анекдот по этому поводу: "... ну не люблю я тебя мужик!..."
Re[14]: Производительность Win2k на Duron 800/384...
От: WolfHound  
Дата: 16.11.02 20:02
Оценка:
Здравствуйте AndrewVK, Вы писали:

AVK>Знаешь, утверждение что W2K на 384М памяти работает меленней 98 мягко говоря неверно.


Полностью согласен. У меня до недавнего времени стоял PIII733/384 с 98 и 2K, 2K работал быстрее и надежнее но грузился немного медленней, а если учесть чо 98 падал от каждого чиха... После замены 2K, XP произошли резкие изменения XP грузился быстрее 98, а производительность (после вырубания понтов) выросла относительно 2K надежность тоже. После того как я обнаружил что все программы ради которых я держал 98 после небольших уговоров работают в XP... бедный 98. Плюс у XP есть система востановления после кривых прог и дровдва раза перезагрузился и работаешь дальше, а 2K про 98 я вобще молчу пришлось бы переустонавливать со всеми вытекающими.

ЗЫ на K6 500/128 XP быстрее 98.

2Aquila факты говоря что новые винды быстрее
... << RSDN@Home 1.0 alpha 12 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[15]: Производительность Win2k на Duron 800/384...
От: Aquila http://www.wasm.ru
Дата: 17.11.02 11:11
Оценка: -1
Здравствуйте, WolfHound, Вы писали:

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

WH>ЗЫ на K6 500/128 XP быстрее 98.

Грузится, говоришь, быстрее? А я еще и программы запускаю.
Re[8]: Определения, попытка N1
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.02 14:54
Оценка: 79 (7)
Коллеги, я почитал ваши мнения (Vlad2, IT, old->*Plutonia_Experiment() ), добавил своих измышлизмов и кое-чего, почерпнутого из сайтов. Теперь попробую обоснованно вывести определения (В конце постинга). Если оппоненты согласны, то дальше будем дискутировать, опираясь на эти определения. Если нет, то попрошу аргументированно оспорить предложенные определения и предложить свои формулировки.

Компонентное программирование

VD> Компонентного программирования — программирование основанное на компонентах, т.е. сборка ПО из готовых блоков. Нечто вроде сборки компьютеров из комплектующих, но для ПО.

IT> Компонентом можно упрощённо считать набор связанных классов, реализованных как функционально законченный модуль.
OE> Это уже другие компоненты.
OE> Функционально законченный — это необходимо, но еще недостаточно.
VD> В компонентах главное, что это отчуждаемые модули. Т.е. они должны быть самодостаточны и не требовать наличия исходного кода для своего использования.

OK, так или иначе, но определение компонента есть. ИМХО, не сказали только, что компонент без компонентной инфраструктуры – суть ноль без палочки.

Попробую пояснить свою мысль и сделать кое-какие выводы.

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

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

Модуль, который реализует требования, накладываемые инфраструктурой (а они неизбежно есть), называется компонентом, а сама инфраструктура — компонентной инфраструктурой.

Компонент, удовлетворяющий требованиям инфраструктуры, тем не менее может предъявлять определённые требования к другим компонентам, с которыми он взаимодействует. (Как это справедливо заметил old->*Plutonia_Experiment() )

Другой аспект — отчуждаемость компонента, т.е., компонент, в принципе, может быть помещён в любое окружение, отвечающее спецификации компонентной инфраструктуры. (Приблизительный “железячный”аналог – установка платы на исптытательный стенд).

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

Теперь о компонентно-ориентированном программировании (собственно, о нём, первоначально речь и была).

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

Атрибутное (декларативное) программирование

VD> Атрибутное (декларативное) программирование — программирование где многие логические аспекты не прописываются в коде, а задаются в виде атрибутов. В Шарпе это выглядит так:



VD>
VD>[MyAtrybut(MyValue)]
VD>void MyMethod(){}
VD>


VD> Вообще атрибуты — это методанные которые могут анализироваться неким кодом (от компилятора, до утилит регисрации) и на базе них можно принимать те или иные решиния.


OK. Значит, атрибуты – суть данные, которые могут анализироваться какими-то внешними средствами, будь то компилятор, утилиты регистрации, браузеры (вероятно) всех мастей и т.п. Атрибуты, вероятно, характеризуются именем, и типом значения. Кстати, о декларативном программировании – декларативное программирование подразумевает наличие какой-то системы, интерпретирующей декларации. SQL, Prolog – это тоже декларативные языки, подразумевающие наличие системы, обрабатывающей декларации.

Так что, важнейшая деталь, ИМХО, это система интерпретации семантики атрибутов. Внешние средства обязаны располагать информацией о семантике атрибутов, чтобы адекватно их использовать. Иначе, атрибуты – ноль без палочки, как и компоненты. Поэтому в определении я убрал слово "декларативное", оставив только "атрибутное".

Итак, сухой остаток – атрибутное программирование, суть программирование в терминах какой-либо инфраструктуры, которая располагает информацией об использовании атрибутов.

Аспектно-ориентированное программирование

IT> Этот термин ещё толком не сформулировался. Основная идея заключается в отделении мух от котлет. Если алгоритм занимается вычислением логарифма, то ему желательно ничего не знать о транзакциях, модели синхронизации и/или обработки исключений. К тому же эти операции как правило повторяются от раза к разу в различных алгоритмах. Аспектный подход позволяет отделить подобные служебные функции и выделить их в отдельный класс задач. Одним из способов реализации AOP являются атрибуты. К тому же в .NET существует механизм создания классов, все публичные методы которых будут перехватываться специальными обработчиками, которые могут выполнять определённые служебные функции.


OK. На мой взгляд, твоё определение достаточно ясно выделяет главное – “подход”. Я покопался на aosd.net и пришёл к тому, что аспектное программирование (если точнее – то software design) можно в каком-то смысле назвать «гиперкомпонентным» программированием.

Вот ещё, интересный, на мой взгляд, фрагмент введения к документу "Declarative aspect-oriented programming", взятый с сайта:

Aspect-oriented programming addresses the problem that the implementation of some properties such as error handling and optimization tends to cross-cut the basic functionality. To overcome that problem special languages are used to specify such properties---the so-called aspects---in isolation. The software application is obtained by weaving the aspect code and the implementation of properties corresponding to basic functionality---the so-called components. This paper investigates the suitability of functional meta-programs to specify aspects and to perform weaving. The proposal focuses on the declarative paradigm (logic programming, attribute grammars, natural semantics, constructive algebraic specification etc.) as far as components are concerned, whereas aspects are represented by program transformations. Weaving is regarded as a program composition returning a combination of the components satisfying all the aspects. The computational behaviour of the components is preserved during weaving. The proposal improves reusability of declarative programs. The approach is generic in the sense that it is applicable to several representatives of the declarative paradigm. Several roles of aspect code are defined and analysed.


AOP нацелено на проблему реализации таких свойств как обработка ошибок и оптимизация, пронизывающих основную функциональность [программы]. Для решения этой проблемы используются специальные языки, независимо определяющие эти свойства (так называемые — аспекты). Прикладная программа обрабатывается «сшиванием» [weaving] аспектного кода и реализаций указанных свойств в соответствии с базовой функциональностью (т.н. — компоненты). Настоящий документ исследует пригодность функционального метапрограммирования для специфицирования аспектов и выполнения «сшивания». Предложение фокусируется на декларативной парадигме (логическое программирование, атрибутные грамматики, естественные семантики, конструктивные алгебраические спецификации и т.п.) и компонентах, тогда как аспекты представлены трансформацией программы. «Сшивание» представляется композицией, являющейся комбинацией компонентов, удовлетворяющих всем аспектам. Вычислительное поведение компонента после «сшивания» сохраняется неизменным. Предложение повышает степень повторного использования декларативных программ. Подход, по сути является обобщённым, поскольку применим к разным представлениям [representatives] декларативной парадигмы. Определён и проанализирован ряд ролевых функций аспектного кода.

Значит, таким образом, цепочка замыкается – от AOP (цель) к атрибутам и компонентам(средство).

*****************************************************************
Итак, попробую дать определения для различных «программирований».
*****************************************************************

Компонентно-ориентированное программирование.

Подход к разработке, ориентированный на использование разных языков программирования, в рамках какой-либо компонентной инфраструктуры. Подход, в основном, нацелен на реализацию независмого распространения компонентов.
Примеры инфраструктур: COM, Corba Component Model (CCM), Любые plug-ins – тоже, в сущности, компоненты.

Атрибутное программирование.

Атрибутное программирование – описание свойств в терминах какой-либо инфраструктуры (атрибутах), располагающей информацией об использовании атрибутов.

Аспектно-ориентированное программирование.

Совокупность подходов и средств, предусматривающих независимую реализовацию различной, например — прикладной и инфраструктурной [часто встречающийся термин "cross-cutting" я перевёл как «пронизывающей»] функциональности системы. Такие реализации называются аспектами. Подразумевает наличие средства, компонующего [weaving] аспекты в единое целое. Наличие такого средства требует, чтобы аспекты были снабжены определёнными декларациями, на основе которых выполняется компоновка.

Ну вот так или примерно так. Теперь жду ваших мнений.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[9]: Терминология (weaving, separation of concerns)
От: Anton V. Kolotaev  
Дата: 17.11.02 15:11
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали, и мне понравилось как

Меня интересует вопрос, как следует переводить термины weaving code и separation of concerns.
Для weaving code мне кажется улачгым переводом модет послужить сотканный, сплетенный или переплетенный код. Сответственно weaving как процесс можно перевести как "сплетение".

Насчет SoC я ни до чего путного недодумался.

Понятно, что у решаемой задачи есть различные стороны (аспекты), которым следует уделить внимание ("побеспокоиться"). В AOP культивируется техника их разделения, вследствие их относительной независимости, с последующим переплетением (weaving). Так как следет переводить этот термин???
Re[9]: Определения, попытка N1
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.11.02 20:22
Оценка: 12 (1)
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Коллеги, я почитал ваши мнения (Vlad2, IT, old->*Plutonia_Experiment() ), добавил своих измышлизмов и кое-чего, почерпнутого из сайтов. Теперь попробую обоснованно вывести определения (В конце постинга). Если оппоненты согласны, то дальше будем дискутировать, опираясь на эти определения. Если нет, то попрошу аргументированно оспорить предложенные определения и предложить свои формулировки.


Провокатор?

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


Почему именно бинарной? Корба или веб-сервисы как то без обходиться. И никаких согласователей там не наблюдается.

ГВ>Третий аспект — любой компонент может быть заменён своим функциональным аналогом, возможно, написанным на другом языке, что не должно повлечь за собой необходимости замены других компонентов системы.


Это совершенно не обязательно. Или ты Дельфи или джаве отказываешь в компонентности?

ГВ>В сухом остатке, получается, что компонентно-ориентированное программирование – это, прежде всего, подход, ориентированный на использование разных языков программирования, но ограниченный при этом одной-единственной компонентной инфраструктурой. Подход, в основном, упирает на независмый deployment компонентов.


Про языки см. выше.

VD>> Атрибутное (декларативное) программирование — программирование где многие логические аспекты не прописываются в коде, а задаются в виде атрибутов. В Шарпе это выглядит так:


На определение не катит. Атрибуты тоже прописываются в коде. И еще — Атрибутное ... — ... ввиде атрибутов. Это как:
Что такое компилятор? Эта такая программа которая компилирует. А что такое компилировать? Это то что делает компилятор.
Есть нормальное определение в документации — атрибуты это метаданные, структура которых определяется пользователем.

ГВ>OK. Значит, атрибуты – суть данные, которые могут анализироваться какими-то внешними средствами, будь то компилятор, утилиты регистрации, браузеры (вероятно) всех мастей и т.п.


Прежде всего внутренними. Компилятор шарпа кстати тоже написан на шарпе и работает в CLR.

ГВ>Атрибуты, вероятно, характеризуются именем, и типом значения.


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

ГВ>SQL, Prolog – это тоже декларативные языки, подразумевающие наличие системы, обрабатывающей декларации.


Пролог не декларативный, в отличие от SQL92. Это продукционный язык. Более известный аналог — язык шаблонов XSLT. Да и sql декларативный только то что в стандарте. Реальные языки, вроде transact sql или pl/sql имеют как декларативную так и экзекутивную часть.

ГВ>Так что, важнейшая деталь, ИМХО, это система интерпретации семантики атрибутов. Внешние средства обязаны располагать информацией о семантике атрибутов, чтобы адекватно их использовать. Иначе, атрибуты – ноль без палочки, как и компоненты. Поэтому в определении я убрал слово "декларативное", оставив только "атрибутное".


Что ты понимаешь под семантикой атрибутов?

ГВ>Итак, сухой остаток – атрибутное программирование, суть программирование в терминах какой-либо инфраструктуры, которая располагает информацией об использовании атрибутов.


Это можно сказать про очень много видов программирования. Не в этом изюминка атрибутов. Атрибутное программирование это прежде всего программирование метаданных. Другой вид такого программированиия — часть Reflection.Emit, так которая не касается собственно IL опкодов.

ГВ>OK. На мой взгляд, твоё определение достаточно ясно выделяет главное – “подход”. Я покопался на aosd.net и пришёл к тому, что аспектное программирование (если точнее – то software design) можно в каком-то смысле назвать «гиперкомпонентным» программированием.


Непонятно.

ГВ>

ГВ>Aspect-oriented programming addresses the problem that the implementation of some properties such as error handling and optimization tends to cross-cut the basic functionality.


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


ГВ>Компонентно-ориентированное программирование.


ГВ>Подход к разработке, ориентированный на использование разных языков программирования,


Как я уже говорил — в корне неверно

ГВ>Corba Component Model (CCM)


Это неофициальный термин по моему. Официально CORBA 3.

Остальное вроде бы правильно.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[10]: Терминология (weaving, separation of concerns)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.11.02 20:24
Оценка:
Здравствуйте Anton V. Kolotaev, Вы писали:

AVK>Меня интересует вопрос, как следует переводить термины weaving code и separation of concerns.

AVK>Для weaving code мне кажется улачгым переводом модет послужить сотканный, сплетенный или переплетенный код. Сответственно weaving как процесс можно перевести как "сплетение".

Сращивание
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[10]: Определения, попытка N1
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.11.02 20:25
Оценка:
Здравствуйте AndrewVK, Вы писали:

Чего за прикол? Все смайлики покоцались.

Смайлики были у слова провокатор и про определение компилятора.

еще раз попробую
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[11]: Терминология (weaving, separation of concerns)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.02 21:59
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте Anton V. Kolotaev, Вы писали:


AVK>>Меня интересует вопрос, как следует переводить термины weaving code и separation of concerns.

AVK>>Для weaving code мне кажется улачгым переводом модет послужить сотканный, сплетенный или переплетенный код. Сответственно weaving как процесс можно перевести как "сплетение".

AVK>Сращивание


Во! Кажется нашёл — "слияние".

Правда, вот что делать с SoC пока толком не представляю. По идее, если буквально перевести, то получится "Разделение озабоченностей". Наверное, что-то вроде "Разделения соглашений". Вобщем, надо думать...
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[11]: Определения, попытка N1
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.02 22:01
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Чего за прикол? Все смайлики покоцались.

AVK>Смайлики были у слова провокатор и про определение компилятора.

AVK>еще раз попробую

AVK>

Да ладно, я не обиделся
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[10]: Определения, попытка N1
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.02 22:46
Оценка:
Здравствуйте, AndrewVK, Вы писали:

ГВ>>Коллеги, я почитал ваши мнения (Vlad2, IT, old->*Plutonia_Experiment() ), добавил своих измышлизмов и кое-чего, почерпнутого из сайтов. Теперь попробую обоснованно вывести определения.

[...]

AVK>Провокатор?


Да нет, просто на самом деле, жду формулировок от оппонентов. Поскольку они молчат, то решил предложить свои формулировки.

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


AVK>Почему именно бинарной? Корба или веб-сервисы как то без обходиться. И никаких согласователей там не наблюдается.


Собственно говря, поскольку в неё всё в конечном итоге упирается. Самое "прозрачное" совмещение компонентов возможно при их бинарной совместимости. Приняв такую модель совместимости за "предел совершенства", я и сформулировал тезис. На мой взгляд, он достаточно правомерен.

ГВ>>Третий аспект — любой компонент может быть заменён своим функциональным аналогом, возможно, написанным на другом языке, что не должно повлечь за собой необходимости замены других компонентов системы.


AVK>Это совершенно не обязательно. Или ты Дельфи или джаве отказываешь в компонентности?


Ни в коем случае. Я сказал — возможно.

ГВ>>В сухом остатке, получается, что компонентно-ориентированное программирование – это, прежде всего, подход, ориентированный на использование разных языков программирования, но ограниченный при этом одной-единственной компонентной инфраструктурой. Подход, в основном, упирает на независмый deployment компонентов.


AVK>Про языки см. выше.


Пожалуй, что ты прав. В определении акцент, вероятно, следует сделать на инфраструктурную составляющую.

VD>>> Атрибутное (декларативное) программирование — программирование где многие логические аспекты не прописываются в коде, а задаются в виде атрибутов. В Шарпе это выглядит так:


AVK>На определение не катит. Атрибуты тоже прописываются в коде. И еще — Атрибутное ... — ... ввиде атрибутов. Это как:

AVK>Что такое компилятор? Эта такая программа которая компилирует. А что такое компилировать? Это то что делает компилятор.
AVK>Есть нормальное определение в документации — атрибуты это метаданные, структура которых определяется пользователем.

ГВ>>OK. Значит, атрибуты – суть данные, которые могут анализироваться какими-то внешними средствами, будь то компилятор, утилиты регистрации, браузеры (вероятно) всех мастей и т.п.


AVK>Прежде всего внутренними. Компилятор шарпа кстати тоже написан на шарпе и работает в CLR.


OK, сократим формулировку до: "... могут анализироваться какими-то средствами ...".Справедливости ради, стоило ввести понятие "внутреннего" и "внешнего" средства.

ГВ>>Атрибуты, вероятно, характеризуются именем, и типом значения.


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


В сущности — класс атрибута это и есть тип его значения.

ГВ>>SQL, Prolog – это тоже декларативные языки, подразумевающие наличие системы, обрабатывающей декларации.

AVK>Пролог не декларативный, в отличие от SQL92. Это продукционный язык. Более известный аналог — язык шаблонов XSLT. Да и sql декларативный только то что в стандарте. Реальные языки, вроде transact sql или pl/sql имеют как декларативную так и экзекутивную часть.

OK, возможно, пример не совсем удачен, хотя замечу, что Prolog нередко называют декларативным языком. Ну да не в примере дело в конце-концов.

ГВ>>Так что, важнейшая деталь, ИМХО, это система интерпретации семантики атрибутов. Внешние средства обязаны располагать информацией о семантике атрибутов, чтобы адекватно их использовать. Иначе, атрибуты – ноль без палочки, как и компоненты. Поэтому в определении я убрал слово "декларативное", оставив только "атрибутное".


AVK>Что ты понимаешь под семантикой атрибутов?


Смысловую нагрузку. Простейший пример — атрибут Guid(...) имеет вполне ясный смысл для компилятора IDL, или C#. Его семантика достаточно ясная — он определяет значение "глобально уникального идентификатора" класса.

ГВ>>Итак, сухой остаток – атрибутное программирование, суть программирование в терминах какой-либо инфраструктуры, которая располагает информацией об использовании атрибутов.


AVK>Это можно сказать про очень много видов программирования. Не в этом изюминка атрибутов. Атрибутное программирование это прежде всего программирование метаданных. Другой вид такого программированиия — часть Reflection.Emit, так которая не касается собственно IL опкодов.


Хм... Ну, вообще-то Reflection.Emit и есть та самая инфраструктура, которая интерпретирует атрибуты.

ГВ>>OK. На мой взгляд, твоё определение достаточно ясно выделяет главное – “подход”. Я покопался на aosd.net и пришёл к тому, что аспектное программирование (если точнее – то software design) можно в каком-то смысле назвать «гиперкомпонентным» программированием.


AVK>Непонятно.


Ну, может быть и не очень удачный термин. Эмоции, понимаешь. Собственно, на определение само по себе это не повлияло.

ГВ>>

ГВ>>Aspect-oriented programming addresses the problem that the implementation of some properties such as error handling and optimization tends to cross-cut the basic functionality.


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


Ничего не поделаешь, поиск, сам понимаешь...

ГВ>>Компонентно-ориентированное программирование.


ГВ>>Подход к разработке, ориентированный на использование разных языков программирования,


AVK>Как я уже говорил — в корне неверно


OK, я согласен с твоим доводом. Компонентное программирование акцентировано на поддерживающей компоненты инфраструктуре. Многоязычие можно считать частным случаем развития инфраструктуры компонентного программирования.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[10]: Спасибо за критику
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.02 22:48
Оценка:
В особенности, за её конструктивную составляющую.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[11]: Определения, попытка N1
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.11.02 23:32
Оценка:
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Собственно говря, поскольку в неё всё в конечном итоге упирается. Самое "прозрачное" совмещение компонентов возможно при их бинарной совместимости. Приняв такую модель совместимости за "предел совершенства", я и сформулировал тезис. На мой взгляд, он достаточно правомерен.


Не вижу никакой принципиальной разницы между бинарной и текстовой совместимостью.

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


ГВ>В сущности — класс атрибута это и есть тип его значения.


Не стоит все же упрощать атрибут до именованного значения. К примеру в конструкторе атрибут может произвести какие то действия (при компиляции!). Какие то значения могут вычисляться (опять же — и при компиляции и при чтении), значения могут подгружаться из внешнего источника. Да при желании много чего можно наворотить вроде АОП для атрибутов. Все же называть полноценный класс парой имя-значение несколько некорректно.

ГВ>OK, возможно, пример не совсем удачен, хотя замечу, что Prolog нередко называют декларативным языком. Ну да не в примере дело в конце-концов.


Какой он нафик декларативный если в теле продукции совсем недекларативные конструкции. Он декларативный только на верхнем уровне — наборе продукций (правил), а точнее их условной части.


AVK>>Что ты понимаешь под семантикой атрибутов?


ГВ>Смысловую нагрузку. Простейший пример — атрибут Guid(...) имеет вполне ясный смысл для компилятора IDL, или C#. Его семантика достаточно ясная — он определяет значение "глобально уникального идентификатора" класса.


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

ГВ>Хм... Ну, вообще-то Reflection.Emit и есть та самая инфраструктура, которая интерпретирует атрибуты.


Ничего подобного. Атрибуты это отдельно, может внутри они и через рефлекшен достаются, но генерационная часть точно не рефлекшена. В программе же интерпретацией занимается совершенно отдельный класс. Эмит же вобще ничего не интерпретирует, он занимается генерацией метаданных и кода. Вот та часть которая генерирует близка по духу к атрибутам.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[12]: Определения, попытка N1
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.11.02 00:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте Геннадий Васильев, Вы писали:


ГВ>>Собственно говря, поскольку в неё всё в конечном итоге упирается. Самое "прозрачное" совмещение компонентов возможно при их бинарной совместимости. Приняв такую модель совместимости за "предел совершенства", я и сформулировал тезис. На мой взгляд, он достаточно правомерен.


AVK>Не вижу никакой принципиальной разницы между бинарной и текстовой совместимостью.


В каком-то смысле я тоже не вижу разницы. Вот потому я и выбрал термин "бинарная" как более общий. Здесь, ИМХО, правомерно утверждение, что "текстовая совместимость" — ипостась "бинарной совместимости". То есть, хорошо бы иметь бинарную, но за неимением такой возможности сойдёт и "текстовая". На самом деле, ИМХО, что бинарная, что текстовая совместимости — просто способы реализации инфраструктуры, обеспечивающей взаимодействие.

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


ГВ>>В сущности — класс атрибута это и есть тип его значения.


AVK>Не стоит все же упрощать атрибут до именованного значения. К примеру в конструкторе атрибут может произвести какие то действия (при компиляции!). Какие то значения могут вычисляться (опять же — и при компиляции и при чтении), значения могут подгружаться из внешнего источника. Да при желании много чего можно наворотить вроде АОП для атрибутов. Все же называть полноценный класс парой имя-значение несколько некорректно.


Сам по себе класс называть такой парой действительно некорректно, но атрибут по отношению к атрибутируемому классу (даже если этот атрибут сам по себе является классом) — это всё равно пара имя-значение. Значение может зависеть от разных факторов (например, состояния экземпляра, которому сопоставлен атрибут), оно может иметь какой-то непростой тип, вычисление значения может повлечь за собой ещё вагон других действий и т.п. Вобщем-то, вызов метода атрибута, это получение части его значения.

Хотя, знаешь, идея! Можно заменить определение "имя-значение" (кстати, я говорил о паре "имя-тип") фразой "сопутствующий объект, с которым могут взаимодействовать как объекты программы, так и внешние по отношению к программе средства (в частности — компилятор)".

ГВ>>OK, возможно, пример не совсем удачен, хотя замечу, что Prolog нередко называют декларативным языком. Ну да не в примере дело в конце-концов.


AVK>Какой он нафик декларативный если в теле продукции совсем недекларативные конструкции. Он декларативный только на верхнем уровне — наборе продукций (правил), а точнее их условной части.


OK, Prolog — не полностью декларативный язык. И давай завяжем с ним.

AVK>

AVK>>>Что ты понимаешь под семантикой атрибутов?

ГВ>>Смысловую нагрузку. Простейший пример — атрибут Guid(...) имеет вполне ясный смысл для компилятора IDL, или C#. Его семантика достаточно ясная — он определяет значение "глобально уникального идентификатора" класса.


AVK>Атрибут в общем случае может не иметь семантики и сам по себе производить какие то действия. См. выше примеры.


Вот эти действия и есть его семантика.

ГВ>>Хм... Ну, вообще-то Reflection.Emit и есть та самая инфраструктура, которая интерпретирует атрибуты.


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


Хорошо, назовём .NET инфраструктурой, а Emit — её частью. По-моему — справделиво.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[8]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 18.11.02 09:22
Оценка: 44 (3)
Здравствуйте, VladD2, Вы писали:

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


S>>Чтоб не флеймить зря, покажи, как на C# реализуется эта самая парадигма — тогда можно будет предметно обсудить, чего в С++ не хватает.


VD>Вот пример из соседнего формума:

VD>
   Пример поскипан.
VD>


VD>Это COM+-объект созданный на C#. Без применения атрибутов мне прилось бы создать отдельный idl-файл с описанием интерфейсов, ко-классов и библиотеки типов. Это — раз. Ну и при регистрации пришлось бы задать все параметры вручную или написать нехилый скрипт для их задания. Тут же я обхожусь заданием атрибутов.


Этот пример говорит только о том, что модель COM (а именно, расширенная динамическая информация о типах в стиле IDispatch) плохо стыкуется со статически типизированным C++. Никакой новой парадигмой тут и не пахнет. Грубо говоря, если мне в плюсовом коде у класса A нужен атрибут GUID, я пишу:

struct ClassWithGUIDBase
{
virtual bool HasGUID() const = 0;
virtual void GetGUID(GUID &id) const = 0;
};

class ClassWithGUID : public ClassWithGUIDBase
{
GUID _id;
public:
ClassWithGUID(const GUID& id) : _id(id) {}
virtual bool HasGUID() const
{ return true; }
virtual void GetGUID(GUID &id) const
{ id = _id; }
};

class ClassWithoutGUID : public ClassWithGUIDBase
{
public:
virtual bool HasGUID() const
{ return false; }
virtual void GetGUID(GUID &id) const
{ throw std::runtime_error("Да нет у меня гуида"); }
};

class A : ClassWithGUID
{
public:
A() : ClassWithGUID(&some_id)
{
...
}
}

Те же атрибуты, только типизация — статическая.

VD>Вообще атрибуты — это методанные которые могут анализироваться неким кодом (от компилятора, до утилит регисрации) и на базе них можно принимать те или иные решиния.


Ну, метаданными в C++ является только информация о типах. Компилятор эту информацию вполне может анализировать, сторонние утилиты — нет, но и необходимости в этом почти не возникает. Дело в том, что в примере, который ты привел, все атрибуты используются только для поддержки взаимодуйствия со средой выполнения и в случае C++ вполне могут быть заменены на все то же наследование библиотечных классов.

VD>>>Вот если бы С++ развивался, то и замену ему искать не пришлось бы.


S>>Ну давай теперь флеймить на тему, является ли Java заменой C++ или дополнением и зачем MS выпустила .Net Сразу скажу, я не считаю, что причинами появления Java и .Net является несовершенство С++. Другие были причины, совсем другие.


VD>А я считаю. Мне тоже многое в С++ нарвится больше. Но этот язык уже прогнулся от своей сложности. Я конечно понимаю, что шалоны на столько мощная вещь что ими можно закрыть почти все ошибки в проектировании языка, но это перекладывание обязанностей с разработчиков языка на прикладников. И к тому же в главной области — компонентном программировании со стороны С++ нет даже малейших потугов.


Неа. Это перекладывание обязанностей на разработчиков библиотек Я вот, например, не знаю в деталях, как boost::bind внутри устроен, но успешно его использую, поскольку эта функция куда удобней, чем вполне прозрачные, но убогие stl'ные bind1st и bind2nd. А компонентное программирование — COM меня почти устраивал, вот только библиотеки (да и мокрософтовский подход вообще) к нему уж больно убогие. Впрочем, учитывая ужасную поддержку шаблонов в основном "COM'овском" компиляторе и медленное развитие приемов метапрограммирования в С++ (ну тут уже не MS виновата), другого ожидать и не приходится.

VD>>>Например? Множественное наследование спокойно на шаблонах обходится. Больше я ничего не заметил.


S>>Ключевое слово — обходится. На ассемблере вообще все обходится, только вот не человеческое это дело, на ассемблере большие программы писать... Кстати, покажи, как именно обходится — че то в удобство такого метода не очень верится.


VD>И причем тут ассемблер? Демогогия одно слово.


Это не демагогия, а гипербола. Демагогия — это когда кто-то заявляет, что "множественное наследование спокойно на шаблонах обходится", а потом, когда его попросили пояснить, что он под этим понимает, делает вид, что он про это не говорил или его ни о чем не спрашивали.

VD>Множественное наследование хорошо только для одного дела — подключение готовых реализаций.


Именно. Оно для того и придумывалось. Конкретное средство для решения конкретной проблемы. Его отсутствие в C# — шаг назад, к C и ассемблеру

VD>В остальном от него только одни проблемы.


Какие именно? Проблемы я пока видел только от "бриллиантового" множественного наследования. Вот его вполне можно и из С++ исключить, хотя и для него есть вполне оправданная область применения.

VD>Я согласен, что ATL демонстрирует эффективность этго подхода.


ATL, IMHO, демонстрирует, что в команде его разработчиков максимум один человек более-менее проникся C++ и ООП, а остальные там махровые сишники.

VD>Но ведь для подключения реализаций можно пользоваться и более простыми методами.


Ну а я не считаю агрегацию более простым методом, чем множественное наследование.

VD>Мне, например, кажется что введение в язык агрегации (подключения внешних классов в качестве реализации интерфейсов) было решило бы эту проблему. Ну да об этом мы уже много дискутировали.


Поддержка агрегации компилятором (языком) может, и не помешала бы. Однако нафига иметь в языке два средства, делающие одно и то же?

VD>В С++ главная проблема — это непомерная сложность. Да на нем можно все. Но какй цено! В .NET же я могу писть основной костяк программы на простом и удобном языке, а когда нужно использовать С++. Правд практика показывает, что обычно это использование ограничивается созданием оберток над разыми нэйтив-АПИ.


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

S>>А не хватает, например, нормальных деструкторов,


VD>Мне в первое время тоже не хватало. Но во времением понимаешь, что это вобщем-то просто привычка. Хотя для вэлью-типов можно было бы добавить.


Это вопрос удобства, а не просто привычка. Ручная очистка ресурсов там, где раньше была автоматическая — шаг назад.

S>>argument-dependent name lookup,


VD>Это я вообще не понял, что такое?


В MSDN загляни, оно там описано.

S>> директивы using внутри функций


VD>Никогда не испытывал необходимости.


Когда один класс должен использовать одноименные классы из разных неймспейсов (особенно если внутри одной функции), просто необходимая вещь. Без него — только полная квалификация имен.

VD>И не помню чтобы такое было в С++.


Даже в VC 6.0 есть. using действует до конца области видимости — если оно не так, то это ошибак в компиляторе.

VD>Уж лучще добавить With как в VB. Чтобы к членам объектов можно было обращаться через одну точку.


Ну это дело вкуса. Хотя как быть с операторами?

S>> — эти козлы ничего умнее, чем считать ее там за using statement не придумали.


VD>using — это как раз замена тем самым деструкторам. Блок контролирующий освобождение ресурсов.


Вот-вот, совершенно другая вещь, а назвали так же (и тем самым запретили тот, другой using). Уроды.

S>>Привязки параметров в делегатах не хватает, причем, в отличие от C++, руками ее не напишешь.


VD>Опять же не понял о чем идет речь? Уж делегаты то в нэте куда лучше уродливых указателей на методы класса в С++. Локанично и эффективно.


Имеются в виду Loki::Functor, Loki::BindFirst или все тот же boost::bind. И что такого уродливого в указателях на методы класса? Совершенно логичная штука. Не, я не против, что бы в язык добавили чего-нибудь типа closure, но и без них не плохо.

S>>Возможности написать ручной распределитель памяти для конкретного класса не хватает.


VD>Опять же на С++ это обхдится. Да и на Шарпе в ансэйф-режиме тоже. Но практика показывает, что в этом просто нет нужды.


Это кому как. Если я знаю, что сейчас в вектор или стрим буду много-много мегабайт запихивать, а потом все освобожу одним куском, то ручной распределитель памяти дает ускорение иногда аж в 500-1000 раз (C++ код, 30 мег данных пишутся в стрим в памяти).

S>>Внутренней непротиворечивости, в конце концов, не хватает — взять хотя бы исключения в деструкторах или в finally.


VD>Да вызывай ты исключения в finally сколько влезит. Просто после этого все проблемы будут твои.


А все проблемы и так всегда мои, если программу пишу я, а не MS Мне надо что-то вроде C++'ного uncaught_exception в деструкторе и нормальные деструкторы вместо finally, который все ООП рушит нафиг.

S>>В общем, чем дальше в лес, тем чудесатее и чудесатее. Сырой язык.


VD>Ничего там сырого нет. Ты назвал все спорные места. Других нет.


Хе-хе, вон в C++ спорные места до сих пор находят, а ты говоришь, что я, практически незнакомый с C#, за один раз все спорные места в нем нашел

VD>Но и те что есть сделаны так не по недомыслию, а совершенно осознанно. Они как раз добивались той самой простоты программирования, которой как раз так нехватает в С++.


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

VD>В нэте шаблоны называются дженирик, т.е. подрозумевается что их раскрытие будет производиться не компилятором, а CLR.


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

VD>Насклоько они будут мощны я пока не знаю. Но даже если они будут на уровне VC6, меня это устроит.


А меня, к сожалению, нет.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[9]: Определение 2, попытка 2
От: Vi2 Удмуртия http://www.adem.ru
Дата: 18.11.02 10:46
Оценка: 12 (1)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Атрибутное программирование.
ГВ>Атрибутное программирование – описание свойств в терминах какой-либо инфраструктуры (атрибутах), располагающей информацией об использовании атрибутов.

Атрибутное программирование – это обрамление класса другими классами (без иерархии ИЛИ не составляющие с исходным классом никакой иерархии).

Я имею в виду, что никакой атрибут не может быть получен из иерархии объекта, а только через "левый" путь: через метаданные и т.п.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[11]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 18:12
Оценка:
Здравствуйте Aquila, Вы писали:

A>i) Производительность Win2k (а тем паче WinXP) на моем компьютере (Duron 800/384) меня не устраивает.


У меня сервер на PII 233 прилично работае... К тому же ХаРэ все одно на твоей машине будет шустрее чем 98-ые.

A>ii) Многие программы, к которым я привык и от чьего использования отказываться не намерен, не работают или работают неверно.


Например? У меня нормально работают 16-битная бухгалтения и Dave (старая досовская игрушка от id).

A>Не забудьте встроить в Янус упаковку почты .


Не понял?
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 18:12
Оценка:
Здравствуйте Aquila, Вы писали:

A>В свое время у меня был 486/24, на котором я гонял CBuilder 4. Меня тоже устраивало "время отклика". Ну и что? Тебя устраивало, а я тормоза не люблю. Был бы компьютер побыстрее, поставил бы Win2k, но не вижу никакого смысла , чтобы тратить деньги на апгрейд только ради этого.


Ты бы поставил, а потом трепался бы. На 300-х мегах W2k за всегда шустрее 98-х будет. Она эту память использовать умеет.

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


Их твоих слов видно только одно. W2k ты видил только у других. А ХаРэ вообще не видил.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Определение 2, попытка 2
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.11.02 18:22
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Здравствуйте, Геннадий Васильев, Вы писали:


Vi2>

ГВ>>Атрибутное программирование.
ГВ>>Атрибутное программирование – описание свойств в терминах какой-либо инфраструктуры (атрибутах), располагающей информацией об использовании атрибутов.

Vi2>Атрибутное программирование – это обрамление класса другими классами (без иерархии ИЛИ не составляющие с исходным классом никакой иерархии).

Ну, вероятно, не классами, а всё-таки — экземплярами.

Vi2>Я имею в виду, что никакой атрибут не может быть получен из иерархии объекта, а только через "левый" путь: через метаданные и т.п.


В смысле — приведением типа объекта к типу атрибута? Если так, то согласен. Как раз "левый" путь — это и есть обработка информации о типе.

OK, Thanx
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[11]: Определение 2, попытка 2
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.11.02 18:28
Оценка:
Здравствуйте Геннадий Васильев, Вы писали:

Vi2>>Атрибутное программирование – это обрамление класса другими классами (без иерархии ИЛИ не составляющие с исходным классом никакой иерархии).


ГВ>Ну, вероятно, не классами, а всё-таки — экземплярами.


Совершенно верно.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[16]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 18:29
Оценка:
Здравствуйте Aquila, Вы писали:

A>Грузится, говоришь, быстрее? А я еще и программы запускаю.


В общем, после твоих рассуждений о скорости, серьезно относиться к твоим рассужедениям о неприемлемости фреймворка нельзя.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 18:29
Оценка:
Здравствуйте PSP, Вы писали:

PSP>Я принципиально против таких рассуждений. Если вижуал одинаковый и там и там, нахрен мне глюки иметь. А совместимость всё равно идёт снизу вверх, если я прилаги писать буду под NT4, то под 2k они тем более работать будут..


Ты под "вижуалом" VC6 имееш в иду? Ну у меня под W2k это дело уже два года работает и ничего. Сейчас вот под ХаРэ работает. К тому же студия тоже новая появилась. Та так просто на 98-е уже не рассчитана.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 19:19
Оценка: 8 (1)
Здравствуйте Sergey, Вы писали:

S>Этот пример говорит только о том, что модель COM (а именно, расширенная динамическая информация о типах в стиле IDispatch) плохо стыкуется со статически типизированным C++. Никакой новой парадигмой тут и не пахнет.


Конечно не пахнет! Еще если хочешь чтобы чай стал сладким без сахара, говори себе "сахар, сахар, сахр, ...) и сразу станет легче.

S>Ну, метаданными в C++ является только информация о типах. Компилятор эту информацию вполне может анализировать, сторонние утилиты — нет, но и необходимости в этом почти не возникает.


Да это тоже полезно. Говориш себе "мне это не нужно, меня это не интересует" и сразу становится легче. Аутотренинг — вещь полезная!

S>Дело в том, что в примере, который ты привел, все атрибуты используются только для поддержки взаимодуйствия со средой выполнения и в случае C++ вполне могут быть заменены на все то же наследование библиотечных классов.


В случае С++ они могут быть заменены на килобайт скриптов. Больше ни на что. А про "поддержку взаимодуйствия со средой выполнения" это ты правильно подметил. В С++ этот намного лучше и удонее. Главное говорить сбе "вахар...).


S>Это не демагогия, а гипербола. Демагогия — это когда кто-то заявляет, что "множественное наследование спокойно на шаблонах обходится", а потом, когда его попросили пояснить, что он под этим понимает, делает вид, что он про это не говорил или его ни о чем не спрашивали.


Кто что делает? Ты перечитай еще разок мои постинги. А шаблоны действительно позволяют эмулировать множественное наследование.

class C : A< B< C > {};

Ну а демагогия — это 1. Основанное на намеренном извращении фактов воздействие на чувства, инстинкты малосознательной части масс. 2. Рассуждения или требования, основанные на грубо одностороннем истолковании чего-н.

VD>>Множественное наследование хорошо только для одного дела — подключение готовых реализаций.


S>Именно. Оно для того и придумывалось. Конкретное средство для решения конкретной проблемы. Его отсутствие в C# — шаг назад, к C и ассемблеру


В С а тем более асм-е наследования неблыло вообще. Так что не надо. К тому же ты прекрасно знаешь все проблемы множественного наледования.

S>Какие именно? Проблемы я пока видел только от "бриллиантового" множественного наследования. Вот его вполне можно и из С++ исключить, хотя и для него есть вполне оправданная область применения.


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

S>ATL, IMHO, демонстрирует, что в команде его разработчиков максимум один человек более-менее проникся C++ и ООП, а остальные там махровые сишники.


Ага. Я бы сказал бы ламеры. И почему только эти неотесанные программисты так его любят? Если серьезно, то вообще не ясно почему ATL нужно оценивать с точки зрения ОО (хотя и с этой точки зрения там все впорядке).

S>Ну а я не считаю агрегацию более простым методом, чем множественное наследование.


От нее нет таких проблем как от наследования. К тому же она может производиться в рантайме.

S>Поддержка агрегации компилятором (языком) может, и не помешала бы. Однако нафига иметь в языке два средства, делающие одно и то же?


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

S>Мало-мальски сложные алгоритмы на шарпе кодировать ну очень не удобно. Хотя может, я еще просто не научился. Ну и с шаблонами, даже самыми примитивными, полегче будет.


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

S>Это вопрос удобства, а не просто привычка. Ручная очистка ресурсов там, где раньше была автоматическая — шаг назад.


Для стековых переменных есть using. Так что жтого даже не замечаешь. Ну а для не стековых при наличии GC детерминированную финализацию обеспечить невозможно. Так что это компромис. Но я лично на своей шкуре прочуствовал насколько лучше такое решение чем "автоматическое" из С++. Дело в том, что память теряется куда чаще чем другие ресурсы. И ловить ее потери куда сложенее. Незарытый файл или хэндл проявляются довольно быстро, а вот утечки памяти — это бичь почти всех Win32-программ. К тому же с программиста как минимум снимается куча обязанностей по контролю.

S>>>argument-dependent name lookup,


VD>>Это я вообще не понял, что такое?


S>В MSDN загляни, оно там описано.


Где там? Что оно? Может по русски?

S>Когда один класс должен использовать одноименные классы из разных неймспейсов (особенно если внутри одной функции), просто необходимая вещь. Без него — только полная квалификация имен.


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

S>Даже в VC 6.0 есть. using действует до конца области видимости — если оно не так, то это ошибак в компиляторе.


Ты про using namspace?

VD>>Уж лучще добавить With как в VB. Чтобы к членам объектов можно было обращаться через одну точку.


S>Ну это дело вкуса.


Это дело смысла. Точка (та что в VB) догогого стоит. Вон в пскале без нее и получается фигня. Как перекрывающиеся имена отличать?

S>Хотя как быть с операторами?


Да просто пережить. В крайнем случае .operator()...

S>Вот-вот, совершенно другая вещь, а назвали так же (и тем самым запретили тот, другой using). Уроды.


В данном случае согласен. Могли бы придумать другое название. Но это они по Струструпу. Чтобы не создавать дополнительных ключевых слов. Помнишь историю про = 0 для абстрактных методов вместо слова abstract? Тоже по уродски было и аргументировалось так же.

S>И что такого уродливого в указателях на методы класса? Совершенно логичная штука. Не, я не против, что бы в язык добавили чего-нибудь типа closure, но и без них не плохо.


Ну тогда может ты приведешь мне пример отличный от эмуляции делегатов (что тоже делает через одно место). А? Уродливо именно то что из полезного и удобного средства в С указатели на функции превратились в безмолезные уродливые кострукции.

S>Это кому как. Если я знаю, что сейчас в вектор или стрим буду много-много мегабайт запихивать, а потом все освобожу одним куском, то ручной распределитель памяти дает ускорение иногда аж в 500-1000 раз (C++ код, 30 мег данных пишутся в стрим в памяти).


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

S>А все проблемы и так всегда мои, если программу пишу я, а не MS Мне надо что-то вроде C++'ного uncaught_exception в деструкторе и нормальные деструкторы вместо finally, который все ООП рушит нафиг.


Чего он рушит? Это в С++ уродство полное. Надо же было не включить в стадарт finally! Почти все компиляторы это дело встроили, а Страуструп не чешется. На практике обработка ошибок в .NET на порядок поще, логичнее и удобнее чем в С++. Причем это теперь стандарт, а не самопальщина компилторостроителей. В С++ исключение живет в пределах одного модуля, нельзя намисать код обрабоки на VC, а лволи на BCC.

S>Хе-хе, вон в C++ спорные места до сих пор находят,


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

S> а ты говоришь, что я, практически незнакомый с C#, за один раз все спорные места в нем нашел


А я тебе говрю, что в Шарпе все просто как три копейки. Для того он и делался.

S>И которая хуже воровства Ну не делаются сложные вещи простыми инструментами, и все тут. Вернее, делаются, он это сложнее, чем делать их более сложным инструментом.


И ты говоришь что это не демагогия?

VD>>Насклоько они будут мощны я пока не знаю. Но даже если они будут на уровне VC6, меня это устроит.


S>А меня, к сожалению, нет.


Дык првильно! Тебе же на них кривой язык переписывать. А мне просто не зависимые от конкретных типов алгортмы писать.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Определения, попытка N1
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 19:52
Оценка:
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Компонентно-ориентированное программирование.


ГВ>Подход к разработке, ориентированный на использование разных языков программирования


Использование разных языков программирования не является целью компонентной парадигмы. Так что "сборка ПО из готовых блоков." подходит больше.

ГВ>Примеры инфраструктур: COM, Corba Component Model (CCM), Любые plug-ins – тоже, в сущности, компоненты.


Я бы добавил Яву и .NET. В них компонентный подход вошел в общеупотребительную практику. По сути любой класс в этих системах является компонентом.

ГВ>Атрибутное программирование.


ГВ>Атрибутное программирование – описание свойств в терминах какой-либо инфраструктуры (атрибутах), располагающей информацией об использовании атрибутов.


Мое определение "декларативное) программирование — программирование где многие логические аспекты не прописываются в коде, а задаются в виде атрибутов" мне нравится больше.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Определение 2, попытка 2
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 19:52
Оценка:
Здравствуйте Vi2, Вы писали:

Vi2>

ГВ>>Атрибутное программирование.
ГВ>>Атрибутное программирование – описание свойств в терминах какой-либо инфраструктуры (атрибутах), располагающей информацией об использовании атрибутов.

Vi2>Атрибутное программирование – это обрамление класса другими классами (без иерархии ИЛИ не составляющие с исходным классом никакой иерархии).

Про классы явно надумано. В COM-е небыло никаких классов.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Производительность Win2k на Duron 800/384...
От: Aquila http://www.wasm.ru
Дата: 18.11.02 20:11
Оценка:
Здравствуйте, VladD2, Вы писали:

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


A>>Грузится, говоришь, быстрее? А я еще и программы запускаю.


VD>В общем, после твоих рассуждений о скорости, серьезно относиться к твоим рассужедениям о неприемлемости фреймворка нельзя.


В общем, после твоих рассуждений о скрости, с серьезно относиться к твоим рассужедениям о приемлемости фреймворка нельзя

Re[14]: Производительность Win2k на Duron 800/384...
От: Aquila http://www.wasm.ru
Дата: 18.11.02 20:12
Оценка:
Здравствуйте, VladD2, Вы писали:

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


A>>В свое время у меня был 486/24, на котором я гонял CBuilder 4. Меня тоже устраивало "время отклика". Ну и что? Тебя устраивало, а я тормоза не люблю. Был бы компьютер побыстрее, поставил бы Win2k, но не вижу никакого смысла , чтобы тратить деньги на апгрейд только ради этого.

VD>Ты бы поставил, а потом трепался бы. На 300-х мегах W2k за всегда шустрее 98-х будет. Она эту память использовать умеет.

Да ставил я ее. Не понравилось.

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

VD>Их твоих слов видно только одно. W2k ты видил только у других.

Я ее вижу каждый день на работе . Но там у меня компьютер побыстрее.

VD>А ХаРэ вообще не видил.


XPень я вообще ставить не буду. Большая, тормозная... Смысл ее ставить, если получаю тоже самое но с меньшими потерями?
Re[10]: Определения, попытка N1
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 20:21
Оценка:
Здравствуйте AndrewVK, Вы писали:

AVK>Почему именно бинарной? Корба или веб-сервисы как то без обходиться. И никаких согласователей там не наблюдается.


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

ГВ>>Третий аспект — любой компонент может быть заменён своим функциональным аналогом, возможно, написанным на другом языке, что не должно повлечь за собой необходимости замены других компонентов системы.


AVK>Это совершенно не обязательно. Или ты Дельфи или джаве отказываешь в компонентности?


А чем они не удовлетваряют? В них прекрасно можно подменять реализацию. Главное чтобы интерфейс совподал. Или ты про язык? С языком согласен. Но выражайся точней.

VD>>> Атрибутное (декларативное) программирование — программирование где многие логические аспекты не прописываются в коде, а задаются в виде атрибутов. В Шарпе это выглядит так:


AVK>На определение не катит. Атрибуты тоже прописываются в коде. И еще — Атрибутное ... — ... ввиде атрибутов. Это как:

AVK>Что такое компилятор? Эта такая программа которая компилирует. А что такое компилировать? Это то что делает компилятор.

Если детерминировать все термины, то определения дать невозможно.

AVK>Есть нормальное определение в документации — атрибуты это метаданные, структура которых определяется пользователем.


Это определение атрибутов. А товарищь просил определение атрибутного программирования, т.е. парадигмы.

AVK>Прежде всего внутренними. Компилятор шарпа кстати тоже написан на шарпе и работает в CLR.


Да какая разница как их называть? Внешние... внутренние. Вообще без разницы какимию. Главное что мы получаем профит с помощью простых декларативных средств.

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


Еще разок. Не зацикливайся на .NET. Атрибуты не в ней ролились и не в ней помрут. Ты же мам дал определение... (атрибуты это метаданные, структура которых определяется пользователем). Классы — это реализация в .NET. К делу это отношения не имеет.

ГВ>>Corba Component Model (CCM)


AVK>Это неофициальный термин по моему. Официально CORBA 3.


Думаю это раздел из CORBA 3.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.11.02 20:22
Оценка:
Здравствуйте VladD2, Вы писали:

S>>Какие именно? Проблемы я пока видел только от "бриллиантового" множественного наследования. Вот его вполне можно и из С++ исключить, хотя и для него есть вполне оправданная область применения.


VD>Дублирование наследников, проблемы при приведении типов, молопонятные сообщения компиляторов и еще много чего. А облость применения можно найти для любых извращений.


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

VD>Для стековых переменных есть using.


Я тут немножко поковырял кой чего. Оказалось что юзинг иногда даже лучше плюсовых автоматических деструкторов. Юзинг более гибок. Правда юзинг там использовался не по прямому назначению.

VD>Ну а для не стековых при наличии GC детерминированную финализацию обеспечить невозможно.


А для нестековых и С++ ничего предложить не может.

VD>Но я лично на своей шкуре прочуствовал насколько лучше такое решение чем "автоматическое" из С++.


Ура. А какие споры весной были IT не даст соврать. Пользуясь случаем передаю привет IT.

VD>Вот я тебе и горю. Надуманная проблема. В жизни не всречается. По крайнй мере мне не всретилать пока.


У меня тоже.

S>>Ну это дело вкуса.


VD>Это дело смысла. Точка (та что в VB) догогого стоит. Вон в пскале без нее и получается фигня. Как перекрывающиеся имена отличать?


with все же поудобнее будет, поскольку он не для имен типов а для экзепляров. Плюс width это дополнительный хинт по оптимизации компилятору. Правда чем он поможет в случае CLR не знаю.

VD>В данном случае согласен. Могли бы придумать другое название. Но это они по Струструпу. Чтобы не создавать дополнительных ключевых слов.


Это не по Страуструпу, это по Оккаму

VD>Дык по сравнению с GC никакого выигрыша не будет. Там попросту нет освобождения пмяти. Она только занимается. Процесс сборки мусора происходит редко и тоже делается одним махом. Причем всгде, а не только в некторых случаях. В общем — это уже точно привычка, а не разумное требование.


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

S>>А все проблемы и так всегда мои, если программу пишу я, а не MS Мне надо что-то вроде C++'ного uncaught_exception в деструкторе и нормальные деструкторы вместо finally, который все ООП рушит нафиг.


VD>Чего он рушит? Это в С++ уродство полное. Надо же было не включить в стадарт finally!


Это он наверное не про finally а про Finalize() ака деструктор в дотнете.

S>>И которая хуже воровства Ну не делаются сложные вещи простыми инструментами, и все тут. Вернее, делаются, он это сложнее, чем делать их более сложным инструментом.


VD>И ты говоришь что это не демагогия?


Что проще — досовский интерфейс с сотняти хоткеев или гуй?
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[15]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.11.02 20:27
Оценка:
Здравствуйте Aquila, Вы писали:

A>Да ставил я ее. Не понравилось.


Тебе не странно что куча людей поставила W2K или XP и считают что работает она быстрее даже 128М памяти? Ведь на самом деле 98 быстрее? Или они 98 не видели не разу?

A> Я ее вижу каждый день на работе . Но там у меня компьютер побыстрее.


Я конечно не знаю про новомодные W2K и XP, но NT4 было начхать на процессор, она прекрасно крутилась на 486Dx2 66. Небольшие провисания были только при обращении к реестру. Главное чтобы память была. И уж 384М ей выше крыши. У меня на работе 256, более чем хватает для студии, мейл-сервера, mssql, 1С, бата, фара и пары-тройки ie запущенных одновременно. И ничего не тормозит.

A>XPень я вообще ставить не буду. Большая, тормозная... Смысл ее ставить, если получаю тоже самое но с меньшими потерями?


Кому как. В W2K были кое какие глючки и недоделки которые мне мешали. В XP поправили. Правда я SP3 не видел.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[11]: Определения, попытка N1
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 20:33
Оценка:
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Да нет, просто на самом деле, жду формулировок от оппонентов. Поскольку они молчат, то решил предложить свои формулировки.


Вообще-то тебе дали формулировки (хотя их и легко было найти в Инете). Но ты видимо захотел их подправить так чтобы было удобее (тебе).

ГВ>OK, сократим формулировку до: "... могут анализироваться какими-то средствами ...".


Да. Так лучше.

ГВ>Справедливости ради, стоило ввести понятие "внутреннего" и "внешнего" средства.


А вот это лишнее. Отношения к делу не имеет.

ГВ>В сущности — класс атрибута это и есть тип его значения.


Не нужно привносить философию в простые вещи. Атрибут — это пользовательские методанные. Не больше не меньше.

ГВ>OK, возможно, пример не совсем удачен, хотя замечу, что Prolog нередко называют декларативным языком. Ну да не в примере дело в конце-концов.


Согласен. Но почему атрибутное программирование ты упорно не хочешь признать декларативным? По-моему — это очевидно. Мы задаем условия и получаем нужный нам результат (вместо того чтобы программировать путь его достижения).

ГВ>Хм... Ну, вообще-то Reflection.Emit и есть та самая инфраструктура, которая интерпретирует атрибуты.


Она вообще-то позволяет сгенерировать бинарный код.

ГВ>OK, я согласен с твоим доводом. Компонентное программирование акцентировано на поддерживающей компоненты инфраструктуре.




ГВ>Многоязычие можно считать частным случаем развития инфраструктуры компонентного программирования.


Я бы сказал следствием, да и то в некоторых случаях. Кстит, исключением является одна Ява. Дельфи делит компоненты с Билдером.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Определения, попытка N1
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.11.02 20:34
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Корба


CORBA 3

VD> и веб-сервисы не явлются компонентными технологимя. Это по сути ORPC.


ORPC это корба. Сервисы это нечто большее (WSDL, UDDI), котя на компонентную технологию может и не тянет.

VD>В любом случае даже в эих технологиях есть согласователи.


Где ты их там увидел?

AVK>>Это совершенно не обязательно. Или ты Дельфи или джаве отказываешь в компонентности?


VD>А чем они не удовлетваряют?


Ты вобще читаешь топик? В них нет многоязыковости.

VD> В них прекрасно можно подменять реализацию. Главное чтобы интерфейс совподал. Или ты про язык? С языком согласен. Но выражайся точней.


Я точно выразился. Точнее некуда.

VD>Если детерминировать все термины, то определения дать невозможно.


Надо ввести аксиомы.

AVK>>Есть нормальное определение в документации — атрибуты это метаданные, структура которых определяется пользователем.


VD>Это определение атрибутов. А товарищь просил определение атрибутного программирования, т.е. парадигмы.


Ну так атрибутное программирование это программирование с использованием атрибутов Главное атрибуту определение дать.

VD>Да какая разница как их называть? Внешние... внутренние. Вообще без разницы какимию. Главное что мы получаем профит с помощью простых декларативных средств.


В общем то да.

VD>Еще разок. Не зацикливайся на .NET. Атрибуты не в ней ролились и не в ней помрут.


Определение, подходящее для атрибутов дотнета и атрибутов кома одновременно будет расплывчатым и неточным — слишком мало общего и слишком важны отличия.


AVK>>Это неофициальный термин по моему. Официально CORBA 3.


VD>Думаю это раздел из CORBA 3.


Судя по тому что на их сайте это не раздел а именно она и есть. Хотя могу и ошибаться.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[12]: Определения, попытка N1
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.11.02 20:37
Оценка:
Здравствуйте AndrewVK, Вы писали:

VD>> и веб-сервисы не явлются компонентными технологимя. Это по сути ORPC.


AVK>ORPC это корба. Сервисы это нечто большее (WSDL, UDDI), котя на компонентную технологию может и не тянет.

Совсем записАлся. Читать ORPC это SOAP + SoapFormatter + прокси и стабы
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[12]: Определения, попытка N1
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.11.02 20:39
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Она вообще-то позволяет сгенерировать бинарный код.


Не только код! Метаданные тоже.

VD>Я бы сказал следствием, да и то в некоторых случаях. Кстит, исключением является одна Ява. Дельфи делит компоненты с Билдером.


Ну теоретически можно и для джавы другой язык использовать. Просто Дельфи под это изначально не проектировалась, поэтому я не думаю что Дельфи многоязыковой. В любом случаем — много это больше трех Два на много не катит.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[12]: Определения, попытка N1
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 20:42
Оценка:
Здравствуйте AndrewVK, Вы писали:

AVK>Не вижу никакой принципиальной разницы между бинарной и текстовой совместимостью.


Не бывает "текствых" компонентов. Это противоречит принципу потчужаемости. Приведи хотябы один пример текстовой совместимости.

AVK>Не стоит все же упрощать атрибут до именованного значения.


Только так их и можно понимать. Все остальное это особенности реализации в .NET.

ГВ>К примеру в конструкторе атрибут может произвести какие то действия (при компиляции!).


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

ГВ> Какие то значения могут вычисляться (опять же — и при компиляции и при чтении), значения могут подгружаться из внешнего источника.


Ты пробовал?

AVK>Какой он нафик декларативный если в теле продукции совсем недекларативные конструкции. Он декларативный только на верхнем уровне — наборе продукций (правил), а точнее их условной части.


Здесь про нет (в котором впрочем все тоже самое) речь не шла. Речь шла о декларативном программировании.

AVK>Атрибут в общем случае может не иметь семантики и сам по себе производить какие то действия. См. выше примеры.


Это уже не атрибут. Атибут есть выражение мысли запечатленное в метаданных.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Определения, попытка N1
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 20:59
Оценка:
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Хотя, знаешь, идея! Можно заменить определение "имя-значение" (кстати, я говорил о паре "имя-тип") фразой "сопутствующий объект, с которым могут взаимодействовать как объекты программы, так и внешние по отношению к программе средства (в частности — компилятор)".


И все же это зашивание на конкретную реализацию в .NET. Изначально атрибуты не подразумевали таких сложностей. Да и в .NET атрибуты интерпретируются без создания экземпляров (покрайней мере пока).

AVK>>Атрибут в общем случае может не иметь семантики и сам по себе производить какие то действия. См. выше примеры.


ГВ>Вот эти действия и есть его семантика.


Нет. Это просто заблуждение.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Определения, попытка N1
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.11.02 21:13
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Не бывает "текствых" компонентов. Это противоречит принципу потчужаемости. Приведи хотябы один пример текстовой совместимости.


Чем тебе веб сервисы не катят? В любом случае — что мне мешает сделать свою компонентную модель без бинарной совместимости?

AVK>>Не стоит все же упрощать атрибут до именованного значения.


VD>Только так их и можно понимать. Все остальное это особенности реализации в .NET.


Эти особенности реализации определяют само программирование. Цитату Дийкстры про то что средство программирования определяет стиль мышления я недавно приводил.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[13]: Определения, попытка N1
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 21:49
Оценка:
Здравствуйте AndrewVK, Вы писали:

AVK>Ну теоретически можно и для джавы другой язык использовать.


От чего же теоритически? Ведь же есть реальные продукты.

AVK>Просто Дельфи под это изначально не проектировалась, поэтому я не думаю что Дельфи многоязыковой. В любом случаем — много это больше трех Два на много не катит.


Много это больше одного. Если по классике. К тому же я и говорю следствие. Билдер тоже был пределан апосля.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Определения, попытка N1
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 21:51
Оценка:
Здравствуйте AndrewVK, Вы писали:

AVK>Чем тебе веб сервисы не катят? В любом случае — что мне мешает сделать свою компонентную модель без бинарной совместимости?


Только тем что они не имеют никакого отношения к компонентам и компонентным технологиям.

VD>>Только так их и можно понимать. Все остальное это особенности реализации в .NET.


AVK>Эти особенности реализации определяют само программирование. Цитату Дийкстры про то что средство программирования определяет стиль мышления я недавно приводил.


Атрибуты в общем случае всего лишь возможность расширения метаданных.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Определения, попытка N1
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 22:06
Оценка:
Здравствуйте AndrewVK, Вы писали:

VD>>В любом случае даже в эих технологиях есть согласователи.


AVK>Где ты их там увидел?


В корбе: idl, iiop, соглашения о именовании...

AVK>>>Это совершенно не обязательно. Или ты Дельфи или джаве отказываешь в компонентности?


VD>>А чем они не удовлетваряют?


AVK>Ты вобще читаешь топик? В них нет многоязыковости.


Читаю. Ты тоже читай что пишешь. И указывай конкретно что тебе не понравилось в чужих словах. К тому же компонентная модель Дельфи совместма с Билдером, а для Ява-машины тоже можно создавать компоненты на других языках.

VD>> В них прекрасно можно подменять реализацию. Главное чтобы интерфейс совподал. Или ты про язык? С языком согласен. Но выражайся точней.


AVK>Я точно выразился. Точнее некуда.


Тогда еще раз перечитай то что ты скзал:

ГВ>Третий аспект — любой компонент может быть заменён своим функциональным аналогом, возможно, написанным на другом языке, что не должно повлечь за собой необходимости замены других компонентов системы.


AVK>Это совершенно не обязательно. Или ты Дельфи или джаве отказываешь в компонентности?


Про языки тут сказано "возможно", т.е. не обязательно. Я так понмаю что "Это совершенно не обязательно." отностся к "любой компонент может быть заменён своим функциональным аналогом".

VD>>Если детерминировать все термины, то определения дать невозможно.


AVK>Надо ввести аксиомы.


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

AVK>Ну так атрибутное программирование это программирование с использованием атрибутов Главное атрибуту определение дать.


Вот и не нужно приплетать суда то что в нэте это классы. Это детали.

AVK>Определение, подходящее для атрибутов дотнета и атрибутов кома одновременно будет расплывчатым и неточным — слишком мало общего и слишком важны отличия.


Определение сущности не должно давать еще каких-то определений. Я уже дал простое определение: "программирование где многие логические аспекты не прописываются в коде, а задаются в виде атрибутов".
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 22:22
Оценка:
Здравствуйте Aquila, Вы писали:

VD>>Из твоих слов видно только одно. W2k ты видил только у других.


A> Я ее вижу каждый день на работе . Но там у меня компьютер побыстрее.


Твой примерно в 5 рабз превышает необходимый уровень.

VD>>А ХаРэ вообще не видил.


A>XPень я вообще ставить не буду. Большая, тормозная... Смысл ее ставить, если получаю тоже самое но с меньшими потерями?


Вот я и говорю — треп. ХаРэ на твоей памяти будет в разы быстрее чем 98-е. Ты просто привык к чему-то и не хочешь отвыкать. Когда нибудь тебе придется это делать так как 98-е развиваться не будут. Ну да может этот момент у тебя совподет с сменой железа.

В любом случае фрймворк работает на 98 ни чем не хуже.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 22:22
Оценка:
Здравствуйте AndrewVK, Вы писали:

AVK>Кому как. В W2K были кое какие глючки и недоделки которые мне мешали. В XP поправили. Правда я SP3 не видел.


Интересно какие? У меня с ХаРэ проблем оказалось значительно больше. Один только прикол с переводом экрана в 8 цветов при запуске 16-битного прложения для Вин 3.1...
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 22:23
Оценка:
Здравствуйте Aquila, Вы писали:

A>В общем, после твоих рассуждений о скрости, с серьезно относиться к твоим рассужедениям о приемлемости фреймворка нельзя


A>


Ну-ну. Здесь конечно все идиоты кроме тебя.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 22:28
Оценка:
Здравствуйте AndrewVK, Вы писали:

VD>>Ну а для не стековых при наличии GC детерминированную финализацию обеспечить невозможно.


Там есть статические объекты. Правда в Шарпе GC всегда срабатывает при выходе из программы, так что без разницы.

AVK>А для нестековых и С++ ничего предложить не может.


VD>>Но я лично на своей шкуре прочуствовал насколько лучше такое решение чем "автоматическое" из С++.


AVK>Ура. А какие споры весной были IT не даст соврать. Пользуясь случаем передаю привет IT.


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


VD>>Это дело смысла. Точка (та что в VB) догогого стоит. Вон в пскале без нее и получается фигня. Как перекрывающиеся имена отличать?


AVK>with все же поудобнее будет, поскольку он не для имен типов а для экзепляров. Плюс width это дополнительный хинт по оптимизации компилятору. Правда чем он поможет в случае CLR не знаю.


Да все темже. Я собственно за with и говорил, но в семантике VB. Там для доступа к with-нутым объектам нужно ставить точку:

with obj
  .Text ' Доступ к свойству obj.Text
  Text  ' Доступ к свойству Me.Text
end with


В Паскле с этим задница.

AVK>Это не по Страуструпу, это по Оккаму


Ну тебе видней.

AVK>Вот вот. Джава, при всех своих тормозах, имеет меньший оверхед при реализации всяких красивых паттернов чем С++, где приходится от красоты отказываться в пользу быстродействия.


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

S>>>А все проблемы и так всегда мои, если программу пишу я, а не MS Мне надо что-то вроде C++'ного uncaught_exception в деструкторе и нормальные деструкторы вместо finally, который все ООП рушит нафиг.


VD>>Чего он рушит? Это в С++ уродство полное. Надо же было не включить в стадарт finally!


AVK>Это он наверное не про finally а про Finalize() ака деструктор в дотнете.


Да вроде про finally (см. выше).

AVK>Что проще — досовский интерфейс с сотняти хоткеев или гуй?


Кому как. Это тоже не по делу.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Re: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 22:28
Оценка:
Здравствуйте <Аноним>, Вы писали:

VD>>В общем устарел этот самы С++, а менять его очень не хотят.


А>Ну всем и так ясно, что не любишь ты C++.


А>Есть известный анекдот по этому поводу: "... ну не люблю я тебя мужик!..."


Не то чтобы не люблю. Но то что он устарел и не хочет развиваться — это факт.

Пописал я на нем немало. В общем-то моей первый ОО язык.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.11.02 22:50
Оценка:
Здравствуйте VladD2, Вы писали:

VD>>>Ну а для не стековых при наличии GC детерминированную финализацию обеспечить невозможно.


AVK>>А для нестековых и С++ ничего предложить не может.


VD>Там есть статические объекты. Правда в Шарпе GC всегда срабатывает при выходе из программы, так что без разницы.


А если вспомнить о том что GC можно запустить принудительно в любой момент, например зацепив его на какой нибудь хелпер обрамленный юзингом ...

AVK>>Ура. А какие споры весной были IT не даст соврать. Пользуясь случаем передаю привет IT.


VD>Вобственно я и сейчас считаю, что деструкторы не помешали бы. Просто стоит подчеркнуть что в реальной зизни этот вопрос не стоит так остро.


Да нет, там не только про деструкторы было. Врочем неважно. Я просто заметил.

AVK>>with все же поудобнее будет, поскольку он не для имен типов а для экзепляров. Плюс width это дополнительный хинт по оптимизации компилятору. Правда чем он поможет в случае CLR не знаю.


VD>Да все темже. Я собственно за with и говорил, но в семантике VB. Там для доступа к with-нутым объектам нужно ставить точку:


VD>
VD>with obj
VD>  .Text ' Доступ к свойству obj.Text
VD>  Text  ' Доступ к свойству Me.Text
VD>end with
VD>


Очень правильно — в случае with конфликты имен бывают частенько. Плюс точка дает понять что это именно к with относиться. Единственный подводный камень with — ухудшение читаемости программы.

VD>В Паскле с этим задница.


С чем задница?

VD>Ну это ты зря. В плюсах есть шаблоны с их помощью многое можно сотворить.


Есть, я о них тоже подумал. Но в случае джавы и дотнета решение более кардинальное.


S>>>>А все проблемы и так всегда мои, если программу пишу я, а не MS Мне надо что-то вроде C++'ного uncaught_exception в деструкторе и нормальные деструкторы вместо finally, который все ООП рушит нафиг.


VD>>>Чего он рушит? Это в С++ уродство полное. Надо же было не включить в стадарт finally!


AVK>>Это он наверное не про finally а про Finalize() ака деструктор в дотнете.


VD>Да вроде про finally (см. выше).


Тогда как понять

нормальные деструкторы вместо finally

... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[10]: Стандарт, говоришь :)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.11.02 23:05
Оценка:
Здравствуйте, VladD2, Вы писали:

[ой, много чего писали ]

VD>На практике обработка ошибок в .NET на порядок поще, логичнее и удобнее чем в С++. Причем это теперь стандарт, а не самопальщина компилторостроителей.


Это ECMA-шный-то стандарт? Пока на этом стандарте не будет буковок "ANSI/ISO <ля-ля-ля>" — это фикция (ой, извините за неполиткорректность, это блестящий маркетинговый ход ), а не стандарт. Таких стандартов своих у любой фирмы — вагон и две телеги впридачу.

Специально напоминаю: Win16 API тоже был стандартизирован в ECMA. Кстати, я уже постил по этому поводу
Автор: Геннадий Васильев
Дата: 06.09.02
. Желающие могут проверить и скачать потрясающе интересные документы с сайта www.ecma.ch. Ёлки! Пока вместе с MS на одном поле не начнут играть киты типа IBM и Hewlett-Packard, все эти разговоры о "стандарте" — демагогия чистой воды.

Поясняю свою оценку. В принципе-то да, принятие стандарта позволяет клонировать разработку MS другим производителям, но оригинал улетит за это время ещё неизвестно куда, и неизвестно во что превратится. То есть в данном случае стабильность этого стандарта — от силы полгода-год. И шо це за стандарт?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[13]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 23:07
Оценка:
Здравствуйте AndrewVK, Вы писали:

VD>>В Паскле с этим задница.


AVK>С чем задница?


С точкой. Вернее без нее.

AVK>Есть, я о них тоже подумал. Но в случае джавы и дотнета решение более кардинальное.


И все же те же типизированные коллекции вручную делать очень геморойно. Шаблоны бы очень даже пригодились бы.

AVK>Тогда как понять

AVK>

нормальные деструкторы вместо finally


Да черт этих защитников С++ поймет.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Стандарт, говоришь :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 23:15
Оценка:
Здравствуйте Геннадий Васильев, Вы писали:

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


ГВ>[ой, много чего писали ]


VD>>На практике обработка ошибок в .NET на порядок поще, логичнее и удобнее чем в С++. Причем это теперь стандарт, а не самопальщина компилторостроителей.


ГВ>Это ECMA-шный-то стандарт?


В С++ нет и такого. Для меня MS — это уже стандарт. Врядли будут компиляторы для .NET не свместмые с .NET.

ГВ>Пока на этом стандарте не будет буковок "ANSI/ISO <ля-ля-ля>" — это фикция (ой, извините за неполиткорректность, это блестящий маркетинговый ход ), а не стандарт. Таких стандартов своих у любой фирмы — вагон и две телеги впридачу.


Правильно! Вот Штаты — это круто а европа — дерьмо. Только вот мне это хыть бы.

ГВ>Пока вместе с MS на одном поле не начнут играть киты типа IBM и Hewlett-Packard, все эти разговоры о "стандарте" — демагогия чистой воды.


Расслябься. Hewlett-Packard уже начал. IBM тоже попыжится и начнет. Кому охата бабки терять?

ГВ>Поясняю свою оценку. В принципе-то да, принятие стандарта позволяет клонировать разработку MS другим производителям, но оригинал улетит за это время ещё неизвестно куда, и неизвестно во что превратится. То есть в данном случае стабильность этого стандарта — от силы полгода-год. И шо це за стандарт?


Да плевать мне на опен сорс. Мне ешать нужно. Я стандарт имел в виду в том смысле, что в .NET определено как нужно обрабоатывать и генерировать исключения. И все языки будут делать это именно так. Причем даже не важно будет ли это соотвествать ECMA CLI или нет.

А вот в С++ с этим беда. Его создатели как черт ладана боятся говорить о рантайме. Принцип реализации исключений не определен и каждый лепит реализацию как хочет. А мир уже изменился. Сегданя совместимости на уровне исходников недосточно!
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Стандарт, говоришь :)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.11.02 23:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>На практике обработка ошибок в .NET на порядок поще, логичнее и удобнее чем в С++. Причем это теперь стандарт, а не самопальщина компилторостроителей.


ГВ>>Это ECMA-шный-то стандарт?


VD>В С++ нет и такого.


Да ну? А "ANSI/ISO-IEC 14882:1998" ? Единственно в чём ты прав, так это в том, что среди производителей компиляторов согласованности нет.

VD>Для меня MS — это уже стандарт. Врядли будут компиляторы для .NET не свместмые с .NET.


Тоже аргумент.

ГВ>>Пока на этом стандарте не будет буковок "ANSI/ISO <ля-ля-ля>" — это фикция (ой, извините за неполиткорректность, это блестящий маркетинговый ход ), а не стандарт. Таких стандартов своих у любой фирмы — вагон и две телеги впридачу.


VD>Правильно! Вот Штаты — это круто а европа — дерьмо. Только вот мне это хыть бы.


Да нет, просто в ANSI организаций-членов ( ) больше, чем в ECMA. Как я понимаю, раз эдак в тридцать...

ГВ>>Пока вместе с MS на одном поле не начнут играть киты типа IBM и Hewlett-Packard, все эти разговоры о "стандарте" — демагогия чистой воды.


VD>Расслябься. Hewlett-Packard уже начал. IBM тоже попыжится и начнет. Кому охата бабки терять?


Я бы так уверенно не говорил. IBM очень уж большие ставки на Java делает.

ГВ>>Поясняю свою оценку. В принципе-то да, принятие стандарта позволяет клонировать разработку MS другим производителям, но оригинал улетит за это время ещё неизвестно куда, и неизвестно во что превратится. То есть в данном случае стабильность этого стандарта — от силы полгода-год. И шо це за стандарт?


VD>Да плевать мне на опен сорс. Мне ешать нужно. Я стандарт имел в виду в том смысле, что в .NET определено как нужно обрабоатывать и генерировать исключения. И все языки будут делать это именно так. Причем даже не важно будет ли это соотвествать ECMA CLI или нет.


Ну вот я и говорю, что стандарт де-факто будет устанавливаться только MS, а не ECMA. Так что, не знаю, что там в размере крутизны Штатов супротив Европы, а вот ECMA супротив MS...

VD>А вот в С++ с этим беда. Его создатели как черт ладана боятся говорить о рантайме. Принцип реализации исключений не определен и каждый лепит реализацию как хочет. А мир уже изменился. Сегданя совместимости на уровне исходников недосточно!


Хорошо бы сначала её получить, а потом рассуждать о достаточности...
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[13]: Стандарт, говоришь :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.02 23:58
Оценка:
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Да ну? А "ANSI/ISO-IEC 14882:1998" ? Единственно в чём ты прав, так это в том, что среди производителей компиляторов согласованности нет.


У меня стандарта нет. Так что приведи пункты где говорится о обем бинарном формате. Плиз.

ГВ>Да нет, просто в ANSI организаций-членов ( ) больше, чем в ECMA. Как я понимаю, раз эдак в тридцать...


Ну и скорость реакции во столько же раз менше.

VD>>Расслябься. Hewlett-Packard уже начал. IBM тоже попыжится и начнет. Кому охата бабки терять?


ГВ>Я бы так уверенно не говорил. IBM очень уж большие ставки на Java делает.


Он и на полуось стаки далела. Они вообще теперь на все ствят. А про Хюлет — это уже 100%.

ГВ>Ну вот я и говорю, что стандарт де-факто будет устанавливаться только MS, а не ECMA. Так что, не знаю, что там в размере крутизны Штатов супротив Европы, а вот ECMA супротив MS...


А я хоть слово про ECMA вообще говорил? Хотя любая независимая стандартизация — это хорошо.

VD>>А вот в С++ с этим беда. Его создатели как черт ладана боятся говорить о рантайме. Принцип реализации исключений не определен и каждый лепит реализацию как хочет. А мир уже изменился. Сегданя совместимости на уровне исходников недосточно!


ГВ>Хорошо бы сначала её получить, а потом рассуждать о достаточности...


Я что-то не пойму что ты плучить не можешь? Я вот без проблем генерирую исключение в MC++ и ловлю в Шарпе.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1049.39258 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Стандарт, говоришь :)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 19.11.02 00:47
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте Геннадий Васильев, Вы писали:


ГВ>>Да ну? А "ANSI/ISO-IEC 14882:1998" ? Единственно в чём ты прав, так это в том, что среди производителей компиляторов согласованности нет.


VD>У меня стандарта нет. Так что приведи пункты где говорится о обем бинарном формате. Плиз.


А я ничего и не говорил о бинарном стандарте на C++. Да и откуда он возьмётся для языка высокого уровня? Я говорил о неправомерности апелляции к стандарту ECMA, как к документу, сохраняющему значимость на протяженном отрезке времени. Что называется, прочувствуйте разницу.

ГВ>>Да нет, просто в ANSI организаций-членов ( ) больше, чем в ECMA. Как я понимаю, раз эдак в тридцать...


VD>Ну и скорость реакции во столько же раз менше.


Вопрос: кому нужны стандарты, меняющиеся как погода осенью?

[...]

VD>Он [IBM] и на полуось стаки далела. Они вообще теперь на все ствят. А про Хюлет — это уже 100%.


Всё равно, пока что сомневаюсь, что IBM перейдёт в разряд адептов .NET. Ну, да это уже моё личное мнение. Что в IBM думают по этому поводу — .

ГВ>>Ну вот я и говорю, что стандарт де-факто будет устанавливаться только MS, а не ECMA. Так что, не знаю, что там в размере крутизны Штатов супротив Европы, а вот ECMA супротив MS...


VD>А я хоть слово про ECMA вообще говорил? Хотя любая независимая стандартизация — это хорошо.


Насколько я помню, стандарт CLI существует только в ECMA-шном исполнении. Отсюда при упоминании тобой термина "стандарт" я сразу и вспомнил про ECMA.

Про "независимую стандартизацию" в данном случае ничего определённого сказать не могу. Напоминаю только, что Win16 API...

ГВ>>Хорошо бы сначала её получить, а потом рассуждать о достаточности...


VD>Я что-то не пойму что ты плучить не можешь? Я вот без проблем генерирую исключение в MC++ и ловлю в Шарпе.


Было бы странно, если бы было иначе. А я хочу получить совместимость на уровне исходников (полную совместимость хотя бы для множества ANSI-C++!) для разных реализаций С++.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[11]: Определение 2, попытка 2
От: Vi2 Удмуртия http://www.adem.ru
Дата: 19.11.02 04:53
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Ну, вероятно, не классами, а всё-таки — экземплярами.

В начале я использовал "объект класса", потом оставил "класс". Под влиянием NET.

Конечно, атрибуты — это метаданные отдельного объекта класса. Причем, атрибуты отдельных объектов класса могут быть совершенно независимы и могут не иметь отношения к классу как таковому (в NET это не так).

Соответственно, описание метаданных должно быть привязано к отдельному объекту. А это уже неэффективно с точки зрения организации системы. Те же VB или Скрипты имеют TypeInfo на каждый свой объект.

Вообще, мне кажется, атрибутное программирование и компонентное — исключающие друг друга. Не находите?
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[10]: Простота ли
От: Vi2 Удмуртия http://www.adem.ru
Дата: 19.11.02 05:08
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Кодировать то на Шарпе удобно...
VD>А я тебе говорю, что в Шарпе все просто как три копейки. Для того он и делался.

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

Аналогия? Пожалуйста! Использование VB — легко и просто, Дельфи (которую все почему-то(?) ругают) — тоже. И вот теперь Шарп — легко и просто.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[10]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 19.11.02 09:38
Оценка:
Здравствуйте, VladD2, Вы писали:

[Эмоции поскипаны]

VD>Кто что делает? Ты перечитай еще разок мои постинги. А шаблоны действительно позволяют эмулировать множественное наследование.


VD>class C : A< B< C > {};


Не въехал. У меня есть два библиотечных (читай — неизменяемых) классов A1 и B1. У класса A есть функция a(), у B — b(). Мне надо, чтоб обе они были у C. Твой пример я понял так:

template <class Tb>
struct A : public A1
{
int a();
};

template <class Ta>
struct B : public B1
{
int b() const;
};

class C: public A< B<C> > {};

Но тут эмуляции множественного наследования нет, класс C имеет только функцию int a();

VD>В С а тем более асм-е наследования неблыло вообще. Так что не надо. К тому же ты прекрасно знаешь все проблемы множественного

наледования.

Угу, не было, в том числе и множественного не было. Поэтому его отсутствие — шаг назад, к тем языыкам, где его не было.

S>>Какие именно? Проблемы я пока видел только от "бриллиантового" множественного наследования. Вот его вполне можно и из С++ исключить, хотя и для него есть вполне оправданная область применения.


VD>Дублирование наследников, проблемы при приведении типов, молопонятные сообщения компиляторов и еще много чего. А облость применения можно найти для любых извращений.


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

S>>ATL, IMHO, демонстрирует, что в команде его разработчиков максимум один человек более-менее проникся C++ и ООП, а остальные там махровые сишники.


VD>Ага. Я бы сказал бы ламеры. И почему только эти неотесанные программисты так его любят? Если серьезно, то вообще не ясно почему ATL нужно оценивать с точки зрения ОО (хотя и с этой точки зрения там все впорядке).


Не охота ATL по второму разу обсуждать . Ну ладно — там полно "грязного" кода в сишном стиле, там куча ошибок и утечек (особенно в OLE DB шаблонах и в хосте для ActiveX контролов), премерзкая реализация синков событий (мля, ну обернули бы в класс, запасающий куку — нет, самому приходится делать). Половину генерированного визардом кода приходится переписывать руками. Включение макроса _ATL_DEBUG_INTERFACES приводит к появлению AV время от времени — Release обектов начинает производить обращение к уже освобожденной памяти, если страница успела выгрузиться — иммедиате кирдык. А любят этот глючный ATL только потому, что нет ничего лучшего да еще за большую, по сравнению с MFC, гибкость и удобство. На безрыбье, так сказать...

S>>Ну а я не считаю агрегацию более простым методом, чем множественное наследование.


VD>От нее нет таких проблем как от наследования. К тому же она может производиться в рантайме.


Ну тут как раз неразрешимое противоречие — или в рантайме, или C++. Мне удобнее, чтоб ошибки с типами компилятор искал. Если надо будет в рантайме, я выберу другой язык.

S>>Поддержка агрегации компилятором (языком) может, и не помешала бы. Однако нафига иметь в языке два средства, делающие одно и то же?


VD>Дык это не одно и тоже. У тебя получется с одной стороны дерево типов. С другой решается проблема повторного использования кода.


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

S>>Это вопрос удобства, а не просто привычка. Ручная очистка ресурсов там, где раньше была автоматическая — шаг назад.


VD>Для стековых переменных есть using. Так что жтого даже не замечаешь.


using, конечно, частично исправляет ситуацию. Но он вводит область видимости, что не всегда удобно.

VD>Ну а для не стековых при наличии GC детерминированную финализацию обеспечить невозможно. Так что это компромис. Но я лично на своей шкуре прочуствовал насколько лучше такое решение чем "автоматическое" из С++. Дело в том, что память теряется куда чаще чем другие ресурсы. И ловить ее потери куда сложенее. Незарытый файл или хэндл проявляются довольно быстро, а вот утечки памяти — это бичь почти всех Win32-программ. К тому же с программиста как минимум снимается куча обязанностей по контролю.


У меня несколько другой опыт — в C++ программах обычно вполне хватает рефкаутинга (умные указатели), при этом время жизни объекта остается детерменированным. Я уже не помню, когда последний раз в своем коде утечки памяти искал. А вот утечки хэндлов зачастую проявляются тогда, когда про код, в котором они возникают, все и думать забыли. Поэтому мне GC не нравится в принципе. Если уж даже Страуструп утверждает, что когда в С++ появится GC (причем добавляет "когда, а не если"), деструкторы для коллектнутых объектов вызываться не будут, то нафиг мне такой GC не нужен.

S>>>>argument-dependent name lookup,


VD>>>Это я вообще не понял, что такое?


S>>В MSDN загляни, оно там описано.


VD>Где там? Что оно? Может по русски?


Там — это в MSDN. Оно — это argument-dependent name lookup. Задаешь поиск по фразе "argument-dependent name lookup", находишь в C++ language reference пункт 3.4.2 — Argument-Dependent Name Lookup. Объяснять, тем более по русски, долго.

S>>Когда один класс должен использовать одноименные классы из разных неймспейсов (особенно если внутри одной функции), просто необходимая вещь. Без него — только полная квалификация имен.


VD>Вот я тебе и горю. Надуманная проблема. В жизни не всречается. По крайнй мере мне не всретилать пока.


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

S>>Даже в VC 6.0 есть. using действует до конца области видимости — если оно не так, то это ошибак в компиляторе.


VD>Ты про using namspace?


И про using namspace тоже. Но в основном, конечно, про using Namespace_name::Name (типа using std::vector). using namspace опасен, поскольку открывает все имена из неймспайса, даже те, про которые ты не знаешь.

VD>>>Уж лучще добавить With как в VB. Чтобы к членам объектов можно было обращаться через одну точку.


S>>Вот-вот, совершенно другая вещь, а назвали так же (и тем самым запретили тот, другой using). Уроды.


VD>В данном случае согласен. Могли бы придумать другое название. Но это они по Струструпу. Чтобы не создавать дополнительных ключевых слов. Помнишь историю про = 0 для абстрактных методов вместо слова abstract? Тоже по уродски было и аргументировалось так же.


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

S>>И что такого уродливого в указателях на методы класса? Совершенно логичная штука. Не, я не против, что бы в язык добавили чего-нибудь типа closure, но и без них не плохо.


VD>Ну тогда может ты приведешь мне пример отличный от эмуляции делегатов (что тоже делает через одно место). А? Уродливо именно то что из полезного и удобного средства в С указатели на функции превратились в безмолезные уродливые кострукции.


Ну были у меня ситуации, когда у класса функция должна делать разные вещи в зависимости от содержимого членов. Причем должна работать быстро (правило к таблице применить). Самым простым и прямым решением оказалось применение указателей на функции. Одно длинное сравнение, потом 10000 косвенных вызовов. Еще для эмуляции vtbl полезно — посмотреть можно здесь: http://oonumerics.org/tmpw01/alexandrescu.pdf. В общем, указатели на функции-члены нужны в случаях, когда применение виртуальных функций и иерархий классов затруднено, избыточно или чересчур дорого.

S>>Это кому как. Если я знаю, что сейчас в вектор или стрим буду много-много мегабайт запихивать, а потом все освобожу одним куском, то ручной распределитель памяти дает ускорение иногда аж в 500-1000 раз (C++ код, 30 мег данных пишутся в стрим в памяти).


VD>Дык по сравнению с GC никакого выигрыша не будет. Там попросту нет освобождения пмяти. Она только занимается. Процесс сборки мусора происходит редко и тоже делается одним махом. Причем всгде, а не только в некторых случаях. В общем — это уже точно привычка, а не разумное требование.


Не, к GC тот случай отношения не имеет. Я просто точно знал, как работает (конкретно — как именно выделяет и копирует память) стрим (это был мой стрим), поэтому мог применять VirtualAlloc и MoveMemory вместо хиповских функций. MoveMemory, насколько я понимаю, работает достаточно умно и в случае, если двигается целая страница, физического копирования не производит, а просто меняет таблицу дескрипторов памяти, подставляя одну физическую страницу по разным виртуальным адресам. Поскольку после копирования скопированная страница сразу освобождалась, никакого Copy-On-Write не было. За счет этого — гигансткий рост производительности.

S>>А все проблемы и так всегда мои, если программу пишу я, а не MS Мне надо что-то вроде C++'ного uncaught_exception в деструкторе и нормальные деструкторы вместо finally, который все ООП рушит нафиг.


VD>Чего он рушит? Это в С++ уродство полное. Надо же было не включить в стадарт finally! Почти все компиляторы это дело встроили, а Страуструп не чешется.


Деструкторы выглядят куда логичнее в ООП-языке. Вся очистка ресурсов делается классами-обертками. finally же поощряет не-ООПный стиль. Кроме того, если я в finally буду вызывать какие-то библиотечные функции, которые могут кинуть новое исключение, мне каждый такой вызов придется заворачивать в try/catch и код станет совершенно нечитаемым. В С++ я эти try/catch могу спрятать внутри деструкторов, вызов деструкторов руками прописывать не надо, кода меньше — ошибок меньше.

VD>На практике обработка ошибок в .NET на порядок поще, логичнее и удобнее чем в С++. Причем это теперь стандарт, а не самопальщина компилторостроителей.


Угу, это теперь самопальный стандарт. А простой и логичной обработки ошибок я пока не в одном языке не видел. Если этот долбаный рантам иногда молча глотает исключения (то ли в интеропе он это делает, то ли еще когда, я пока не разобрался), часть ошибок (все та же неочистка ресурсов, например) просачивается в релиз.

VD>В С++ исключение живет в пределах одного модуля, нельзя намисать код обрабоки на VC, а лволи на BCC.


Есть такая проблема. Без стандартизации рантайма не решается. Но рантайм нельзя стандартизировать в рамках языка общего назначения, максимум, что можно сделать — стандартизировать рантайм в рамках языка и платформы. Так что опять производители компиляторов и, конечно же, горячо любимая MS, виноваты — так и не договорились, падлы.

S>>Хе-хе, вон в C++ спорные места до сих пор находят,


VD>Нехрена было все так усложнять. Тогда и спорных мест не было бы.


Их иногда находят в самых простых местах

Как тебе такой пример:


int main()
{
   bool a;
   bool b = a;
   if (b == a)
      return 0;
   else
      return 1;
}


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

S>> а ты говоришь, что я, практически незнакомый с C#, за один раз все спорные места в нем нашел


VD>А я тебе говрю, что в Шарпе все просто как три копейки. Для того он и делался.


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

S>>И которая хуже воровства Ну не делаются сложные вещи простыми инструментами, и все тут. Вернее, делаются, он это сложнее, чем делать их более сложным инструментом.


VD>И ты говоришь что это не демагогия?


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

VD>>>Насклоько они будут мощны я пока не знаю. Но даже если они будут на уровне VC6, меня это устроит.


S>>А меня, к сожалению, нет.


VD>Дык првильно! Тебе же на них кривой язык переписывать. А мне просто не зависимые от конкретных типов алгортмы писать.


Я на них метапрограммировать хочу Это примерно как ты на С# подсел
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[11]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.11.02 19:00
Оценка:
Здравствуйте Sergey, Вы писали:

S>Угу, не было, в том числе и множественного не было. Поэтому его отсутствие — шаг назад, к тем языыкам, где его не было.


И джава и object паскаль моложе плюсов. У обоих множественного наследования нет. Что это все так дружно назад шагают, не знаешь?

S>Но даже при "бриллиантовом" наследовании дублирование контролируемое — с помощью виртуального наследования.


Это называется создаем себе проблемы а потом начинаем их решать.

S>using, конечно, частично исправляет ситуацию. Но он вводит область видимости, что не всегда удобно.


Не понял юмора. Так в плюсах тоже автоматические деструкторы работают по выходу из области видимости.

S>Там — это в MSDN. Оно — это argument-dependent name lookup. Задаешь поиск по фразе "argument-dependent name lookup", находишь в C++ language reference пункт 3.4.2 — Argument-Dependent Name Lookup. Объяснять, тем более по русски, долго.


Классная вещь наверное, что про русски объяснить что это такое очень сложно.

S>Угу, это теперь самопальный стандарт. А простой и логичной обработки ошибок я пока не в одном языке не видел. Если этот долбаный рантам иногда молча глотает исключения


Ни разу не сталкивался.

S>>>И которая хуже воровства Ну не делаются сложные вещи простыми инструментами, и все тут. Вернее, делаются, он это сложнее, чем делать их более сложным инструментом.


VD>>И ты говоришь что это не демагогия?


S>Это мое убеждение, основанное на личном опыте. Возможно, оно выглядит как демагогия, но обосновывать его чересчур долго и не интересно.


А мое убеждение, основанное на личном опыте, противоположное. Потому как когда из-за этих супер-пупер сложностей проект начинает захлебываться в собственной сложности то становиться не до наворотов. Могу тебе рассказать точку зрения с другой стороны, не программера а заказчика. Мне пофигу супер фичи. Мне главное чтобы продукт был написан быстро и при этом в нем не было глюков приводящих к неработоспособности, чтобы он был легко конфигурируем, причем чем больше автоматики тем лучше и легко модернизируем. И чтобы код был понятен даже недоучившемуся студенту. И в гробу я видал этот С++ с его множественным наследованием, крутыми указателями и прочия и прочия.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[11]: Стандарт, говоришь :)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.11.02 19:02
Оценка:
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Ёлки! Пока вместе с MS на одном поле не начнут играть киты типа IBM и Hewlett-Packard, все эти разговоры о "стандарте" — демагогия чистой воды.


Хрюклет где то с пару месяцев назад выпустил совместный с мсом пресс-релиз о полной и безоговорочной поддержке дотнета и начале совместных разработок.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[15]: Стандарт, говоришь :)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.11.02 19:12
Оценка: 8 (1)
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Вопрос: кому нужны стандарты, меняющиеся как погода осенью?


Поинтересуйся сановскими стандатртами для джавы. Они довольно часто меняются. И даже в ЕСМА не стандартизованы, только комитетом сана. Но это не мешает всему и вся в джава мире иметь между собой вполне приличную совместимость. Хотя и там ляпы случаются, но почти всегда из-за недоделанных стандартов, как это было с EJB 1.0.
Стандарт это не конфетка, не признак крутости и не вещь решающая все проблемы. Стандарт это такая штука которая позволяет продукту А работать совместно с продуктом В когда они созданы разными производителями. И мне пофигу кто круче — ANSI, ISO, IEEE, РСТ или ЕСМА. Главное что ни один производитель в зравом уме не будет писать продукты под дотнет не соответствующие этому стандарту.

ГВ>Было бы странно, если бы было иначе. А я хочу получить совместимость на уровне исходников (полную совместимость хотя бы для множества ANSI-C++!) для разных реализаций С++.


Ну жди. А мы пока по простому, на шарпе будем потихоньку.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[14]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.11.02 19:36
Оценка: 27 (2)
Здравствуйте VladD2, Вы писали:

VD>>>В Паскле с этим задница.


AVK>>С чем задница?


VD>С точкой. Вернее без нее.


А, ну да. Но это небольшая и ожидаемая задница.

Лирическое отступление: классификация задниц
Задницы подразделяются по следующим признакам:
1) По величине. Бывают задницы маленькие, задницы средние, задницы большие и полные задницы. Последние встречаются редко, но последствия при этом бывают весьма печальные. Чаще всего встречаются задницы маленькие, но к счастью они как правило не доставляют больших хлопот.
2) По неожиданности. Бывают ожидаемые и неожиданные задницы. Ожидаемая задница встречается редко, ходят они обычно по одиночке, имет свою территорию и редко выходит за ее пределы, при встрече с человеком стараются убежать или спрятаться. Неожиданные задницы, в противоположность, очень часто сбиваются в стаи, которые постоянно меняют свое местоположение. Интересно что в стае встречаются особи разных размеров и окраски. При встрече с человеком не убегают а напротив стараются на него напасть. Таким образом встреча с большой стаей неожиданных задниц очень опасна.
3) По настроению. Бывают радостные задницы, мрачные задницы, скучные задницы и агрессивные задницы. Радостные задницы это как правило особи небольших размеров. Доставляемые ими хлопоты обычно не приводят к плохим последствиям. Мрачные задницы обычно тоже малых или средних размеров, однако заметно более неприятны. Скучные задницы, как и две предыдущих разновидности, невелики по размерам. Их характерная особенность — они пасуться очень большими стаями и завидев человека начинают выпрашивать у него еду. Если вы отвернетесь то они могут и украсть вашу еду. Агрессивные задницы как правило средних и больших размеров. Большинство полных задниц относятся именно к этой разновидности.


AVK>>Есть, я о них тоже подумал. Но в случае джавы и дотнета решение более кардинальное.


VD>И все же те же типизированные коллекции вручную делать очень геморойно. Шаблоны бы очень даже пригодились бы.


Ну разве что в для этого, они для этого изначально и задумывались. А вот те извращения которые в плюсах воротят дотнету вряд ли нужны. А то наворотят, а потом возмущаются что компилеры между собой несовместимы.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[19]: Производительность Win2k на Duron 800/384...
От: Aquila http://www.wasm.ru
Дата: 19.11.02 19:48
Оценка:
Здравствуйте, VladD2, Вы писали:

A>>В общем, после твоих рассуждений о скрости, с серьезно относиться к твоим рассужедениям о приемлемости фреймворка нельзя

A>>
VD>Ну-ну. Здесь конечно все идиоты кроме тебя.

Ты сказал.
Re[16]: Стандарт, говоришь :)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 19.11.02 22:25
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте Геннадий Васильев, Вы писали:


ГВ>>Вопрос: кому нужны стандарты, меняющиеся как погода осенью?


AVK>Поинтересуйся сановскими стандатртами для джавы. Они довольно часто меняются. И даже в ЕСМА не стандартизованы, только комитетом сана. Но это не мешает всему и вся в джава мире иметь между собой вполне приличную совместимость. Хотя и там ляпы случаются, но почти всегда из-за недоделанных стандартов, как это было с EJB 1.0.


Согласен, я как раз о том и говорил, что таких стандартов у каждой фирмы — вагон и две телеги. Мне просто непонятно, почему MS особо отметила факт стандартизации в ECMA. ИМХО — она где-то чувствует себя неуверенно, а иначе зачем лишние траты?

AVK>Стандарт это не конфетка, не признак крутости и не вещь решающая все проблемы. Стандарт это такая штука которая позволяет продукту А работать совместно с продуктом В когда они созданы разными производителями. И мне пофигу кто круче — ANSI, ISO, IEEE, РСТ или ЕСМА. Главное что ни один производитель в зравом уме не будет писать продукты под дотнет не соответствующие этому стандарту.


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

Кстати, стандарт ещё и позволяет разрабатывать продукт А, имея ввиду, что разрабатываемый продукт Б тоже будет сооответствовать этому стандарту, а сам стандарт не изменится в неизвестном направлении к моменту окончания разработок А и Б.

ГВ>>Было бы странно, если бы было иначе. А я хочу получить совместимость на уровне исходников (полную совместимость хотя бы для множества ANSI-C++!) для разных реализаций С++.


AVK>Ну жди. А мы пока по простому, на шарпе будем потихоньку.


Ну так кто же возражает?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[15]: Стандарт, говоришь :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 00:15
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ> А я ничего и не говорил о бинарном стандарте на C++.


Вот ход рассуждений...

VD>>>На практике обработка ошибок в .NET на порядок поще, логичнее и удобнее чем в С++. Причем это теперь стандарт, а не самопальщина компилторостроителей.


VD>>В С++ нет и такого. Для меня MS — это уже стандарт. Врядли будут компиляторы для .NET не свместмые с .NET.


ГВ>Да ну? А "ANSI/ISO-IEC 14882:1998" ? Единственно в чём ты прав, так это в том, что среди производителей компиляторов согласованности нет.


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

Вот я тебе и говрю, что нет никакого стандарта. Стандарт — общие разплывчатые слова о том как должна вести себя обработка исключений. Но про то как это реализовывать там ничего не сказано. Я это и без стандарта прекрасно понимаю. Дело в том что С++ вообще избегает всего что связано с физической совместимостью. Этот стандарт подразумевает что есть только одна программа и что она состоит из одного модуля. Т.е. речь идет только о бинарной совместимости и только о стическом связывании. Даже библиотеки уже не выдерживают никакой критики. Попробуй на одном комиляторе создать библиотеку которая генерирует исключения, а на другом ее использовать. От сюда и все навороты КОМ-а. Все эти HRESULT вместо исключений и другая дрибидень. В .NET это все устрнено. Можно смело пользоваться всеми возможностями языка так как они гарантируются исполняющей средой.


ГВ>Да и откуда он возьмётся для языка высокого уровня?


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

ГВ>Я говорил о неправомерности апелляции к стандарту ECMA,


Еще раз тебе говорю, что слова про ECMA сказал ты. Так что это чисто воды демагогия.
Я говорил о том, что .NET это стандарт по которому будут делаться все совместимые с ним языки. Что же касается отрезка времени, то MS ясно дала понять, что будут разные версии CLR. При этом с каждой из них можно будет быть совместимым. А тот факт что разные версии CLR могут жить на одной машине не даст коду независимых фирм умереть от смены версий. И кстити продукты именно MS обладают очень высокой степенью обратной совместимости. До сих пор под NT прекрасно работают досовские игры и т.п.

ГВ>Вопрос: кому нужны стандарты, меняющиеся как погода осенью?


Пример привести можешь? Или лиш бы наехать?

ГВ>Всё равно, пока что сомневаюсь, что IBM перейдёт в разряд адептов .NET. Ну, да это уже моё личное мнение. Что в IBM думают по этому поводу — .


IBM большая рыночная контора. Рынок PC она упускать не будет. Как только .NET завоюет серьезную чатьс этого рынка IBM будет вынуждена поддержать эту платформу, как в свое время поддержала NT бросив свою полуось.

ГВ>Насколько я помню, стандарт CLI существует только в ECMA-шном исполнении. Отсюда при упоминании тобой термина "стандарт" я сразу и вспомнил про ECMA.


А кто говорил про CLI? Я говрю о самом .NET как о стандарте де-факто.

ГВ>Было бы странно, если бы было иначе.


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

ГВ>А я хочу получить совместимость на уровне исходников (полную совместимость хотя бы для множества ANSI-C++!) для разных реализаций С++.


А по исключеним совместмость полная. К тому же если ты напшешь код для VC6 без использвания специфичных для MS фич, то получишь полную совместимость с другими компиляторами. Но все это пустые слова. Если тебе нужна переносимость, то ты скорее всего просто скомпилируешь все под gcc, а если ты работаешь для виндовс, то под VC или Intel. Меня лично совместмость компиляторов не трогает. А вот бенароной или компонентной совместмости мне (как и многим) нехватет. Это как раз веление времени. И С++ здесь на сегодня в пролете. Хотя очень заль. (МС++ по большому счету уже не С++-компилятор).
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Стандарт, говоришь :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 00:27
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Согласен, я как раз о том и говорил, что таких стандартов у каждой фирмы — вагон и две телеги. Мне просто непонятно, почему MS особо отметила факт стандартизации в ECMA. ИМХО — она где-то чувствует себя неуверенно, а иначе зачем лишние траты?


Таты эти для них ничтожны. А стандартизовались, чтобы все кому хочется понаезжать имели по меньще оргуменов. 90% назедов на MS имеют целью не указать на реальную пробему, а кольнуть по больнее, чтобы подпортить имидж. Ну вот ты даже к стандартизации прицепился хотя сам даже говоришь, что и без нее стандарт был бы. В общем эта тема вонует только тебя. Для меня важен сам факт наличия стандарта, а не формальная сторона вопроса.

ГВ>Не горячись , я не называл стандарт "конфеткой", "признаком крутости" и т.п. Вообще, здорово ты попытался опровергнуть довод, который сам же мне и приписал. Я говорил только о стабильности стандарта самого по себе и правомерности апелляции к стандарту с учётом стереотипа "стандарт — общепринятое стабильное решение".


По С++ стандарт существует уже наверное 30 лет, а компиляторы мжду собой так и не совместмы. .NET существует пол года, и нет ни одного нарушения этого стадарта, хотя компиляторов для него уже вагн и маленька тележка. Но это для тебя не довод. Потому как тебе просто безпричинно нравится это действительно неплохой но не иделатьный и сильно устаревший язык.

ГВ>Кстати, стандарт ещё и позволяет разрабатывать продукт А, имея ввиду, что разрабатываемый продукт Б тоже будет сооответствовать этому стандарту, а сам стандарт не изменится в неизвестном направлении к моменту окончания разработок А и Б.


Ну и к чему эта демогогия. Когда стадарты от MS изменялись да еще с ткой частотой? WinAPI до только расширяется и т.п. Да и другие продукты... Ты лучше обясни почему от С++ оуже песком попахивает? Не из-за того ли ревностного соблюдения неизменности стандарта?

Важна не консервативность которую ты называешь неизменностью стандарта, а обратная совместимость. Тот же С++ можно было спокойно обоготить современными возможностями без ущерба для обратной совместимости. Но делать этог не хотят. От сюда и рождаются все эит .NET, Явы и
D.AVK>>Ну жди. А мы пока по простому, на шарпе будем потихоньку.

ГВ>Ну так кто же возражает?


Вот в 7.1 MS обещает аж 89%-ую совместмость.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 00:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>ftp://rsdn.ru/CLI/Generic/Samles

VD>ftp://rsdn.ru/CLI/Generic/Samles/generics.html — описания

Кстити как рьяные поклаоники С++ и шаблонов оценивают шаблоны в .NET?
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 00:39
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Не въехал. У меня есть два библиотечных (читай — неизменяемых) классов A1 и B1. У класса A есть функция a(), у B — b(). Мне надо, чтоб обе они были у C. Твой пример я понял так:


S>template <class Tb>

S>struct A : public A1
S>{
S> int a();
S>};

S>template <class Ta>

S>struct B : public B1
S>{
S> int b() const;
S>};

S>class C: public A< B<C> > {};



Не так, а что-то вроде этого:

template <T>
class A : public T
{
   int a();
};

class <T>
struct B : T
{
    int b() const;
};

class A < B < C > > {};


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

PS

Кстати, в терминах шарпа писать примеры проще.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 00:44
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


Я бы скзал так. А елси будет очень нужно то возмем МС++ тотрый 80% С++-а поддерживает и сделаем те 2% кода которые не сможем сделать на Шарпе или VB. За то не будем трахаться с отладкой по пол года и отсуствием элементаных библиотек.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Простота ли
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 00:50
Оценка:
Здравствуйте, Vi2, Вы писали:


Vi2>Да уж, глядя на примеры в форуме NET я бы так с ходу не сказал, что просто и удобно.


А ты их на С++-ые аналоги замени. То-то посмеемся.

Хочешь например соревнемся с тобой в скорости создания и объеме полученного кода в области ком-объектов? Я уже не говрю про простоту модификации и поддежки...

Vi2>Аналогия? Пожалуйста! Использование VB — легко и просто, Дельфи (которую все почему-то(?) ругают) — тоже. И вот теперь Шарп — легко и просто.


Заметь VB и Дельфи ругают обычно очень упертые и недалекие люди. Даже сишники до мозга костей обычно просто отмалчиваются на эту тему. Это потому что в соих обостях (создание гуи и взаимодейсвтие с БД) они делают С++ с большим запасом. Шарп же дает непривзайденную универсальность, а простое взаимодейсвие с МС++ полную независимость и простоту разработки сложных решений.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 00:51
Оценка:
Здравствуйте, Aquila, Вы писали:

A>Ты сказал.


Тебе здесь уде все скзали, что рассуждения твои о ОС мягко говря не корректны. Отсуда я и делаю выводы что рассуждения о .NET тоже натянуты.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Определение 2, попытка 2
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 00:57
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Конечно, атрибуты — это метаданные отдельного объекта класса.


Вообще-то атрибуты — это метаданные. А метаданные относятся исключительно к типам, т.е. к классам. Ну и словом объект лучше вообще не пльзоваться, так как оно может выступать как в качетсве экземпляра, так и в качестве самого класса. Например, в КОМ обычно фраза "ком-объект" означает ко-класс...

Vi2>Причем, атрибуты отдельных объектов класса могут быть совершенно независимы и могут не иметь отношения к классу как таковому (в NET это не так).


А геде так? Тебе кстити само слово метаданные не смущает?

Vi2>Соответственно, описание метаданных должно быть привязано к отдельному объекту. А это уже неэффективно с точки зрения организации системы. Те же VB или Скрипты имеют TypeInfo на каждый свой объект.


Чё? Нда...

Vi2>Вообще, мне кажется, атрибутное программирование и компонентное — исключающие друг друга. Не находите?


Не. Попробуй вон на .NET попиши... и ты перестанешь находить.

Кстит, тебе в idl атрибуты не претят? Ты ведь компоненты описываешь!
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Почему C++ - не просто язык ООП
От: IT Россия linq2db.com
Дата: 20.11.02 01:25
Оценка:
Здравствуйте, VladD2, Вы писали:

S>>А не хватает, например, нормальных деструкторов,


VD>Мне в первое время тоже не хватало. Но во времением понимаешь, что это вобщем-то просто привычка. Хотя для вэлью-типов можно было бы добавить.


I can't believe it

S>>Что стоило для using statement другой синтаксис придумать?


VD>Я сперва тоже юсинг за виз принял. Но потом быстро привык.


Значит так. Тебе нужно ещё книжку по ADO.NET почитать и всё будет с тобой совсем хорошо
Если нам не помогут, то мы тоже никого не пощадим.
Re[9]: Почему C++ - не просто язык ООП
От: IT Россия linq2db.com
Дата: 20.11.02 01:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вот это тоеж забавно ftp://rsdn.ru/CLI/Generic/Samles/Polynomial/Polynomial.html


Мда, забавляются ребятки из мс-рисёч
Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 02:00
Оценка:
Здравствуйте, IT, Вы писали:

VD>>Вот это тоеж забавно ftp://rsdn.ru/CLI/Generic/Samles/Polynomial/Polynomial.html


IT>Мда, забавляются ребятки из мс-рисёч


Ты бы что разумного, доброго, вечного скзал. А то не ясно забавно глупые или забавно забавные.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 02:01
Оценка:
Здравствуйте, IT, Вы писали:

IT>I can't believe it


От своих слов про деструкторы про вэлью-типы не отрекаюсь.

VD>>Я сперва тоже юсинг за виз принял. Но потом быстро привык.


IT>Значит так. Тебе нужно ещё книжку по ADO.NET почитать и всё будет с тобой совсем хорошо


Я это дерьмо чуть ли под микроскопом изучил. Дерьмо оно и есть дерьмо. Хуже глючного дизайнера для веб-формсов.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Почему C++ - не просто язык ООП
От: IT Россия linq2db.com
Дата: 20.11.02 02:22
Оценка:
Здравствуйте, VladD2, Вы писали:

IT>>Мда, забавляются ребятки из мс-рисёч


VD>Ты бы что разумного, доброго, вечного скзал. А то не ясно забавно глупые или забавно забавные.


А что тут разумного можно сказать? Придётся опять в новом ковыряться...
В общем, с этим блин-дот-нетом, ближайшие пару-тройку лет журнал без статей не останется
Если нам не помогут, то мы тоже никого не пощадим.
Re[13]: Определение 2, попытка 2
От: Vi2 Удмуртия http://www.adem.ru
Дата: 20.11.02 07:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вообще-то атрибуты — это метаданные. А метаданные относятся исключительно к типам, т.е. к классам. Ну и словом объект лучше вообще не пльзоваться, так как оно может выступать как в качетсве экземпляра, так и в качестве самого класса. Например, в КОМ обычно фраза "ком-объект" означает ко-класс...

Единообразия, конечно, нет, но в моей области деятельности (3Д моделирование), предположим, поверхности являются объектами, на которых я могу написать мне нужные ремарки (пометки), как на чистом листе бумаги. Для чего? Для того, чтобы потом с ними что-либо сделать. Эти ремарки имеют смысл атрибута поверхности, однако к классу "Поверхность" они никакого отношения не имеют и из него не выводимы. Даже более того, за пределами моего приложения эти атрибуты не имеют смысла (хотя и видны примерно так же, как .NET-овские Type).

То, что в .NET это ограничено классом, не умаляет достоинств .NET, но не является единственной реализацией атрибутов (также как СОМ — не единственная компонентная модель).

VD>А где так? Тебя, кстати, само слово метаданные не смущает?

Ты, наверное, полностью в мире .NET: все, что за ним, уже не существует. Без наезда, просто как констатация. Это не плохо, это нормально.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[12]: Простота ли
От: Vi2 Удмуртия http://www.adem.ru
Дата: 20.11.02 07:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А ты их на С++-ые аналоги замени. То-то посмеемся.
VD>Хочешь, например, соревнемся с тобой в скорости создания и объеме полученного кода в области ком-объектов? Я уже не говорю про простоту модификации и поддержки...

Соревноваться мы не будем, ибо бесполезно. Есть же разница между автоматической генерацией отчетов по меняющимся данным или создание одного отчета и последующее ручное изменение данных в самом отчете! Если здесь уместна такая аналогия с Документооборотом.

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

Поэтому я и говорю о примерах, как о состязании в знаниях атрибутов. Знаешь атрибут — получишь результат, не знаешь — замучишься и спросить не у кого. Я не знаю, насколько доступна эта информация в самой IDE (как доступна, напрмер, информация о методах класса при IntelliSense). Это хорошо, что пока атрибутов мало — с десяток.

Или это все не является проблемой?
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[13]: Простота ли
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 07:29
Оценка:
Здравствуйте Vi2, Вы писали:

Vi2>Это хорошо, что пока атрибутов мало — с десяток.


Атрибутов с десяток? Пару ноликов можешь смело дописывать, не ошибешься.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[12]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 20.11.02 07:49
Оценка:
Здравствуйте, VladD2, Вы писали:

S>>Не въехал. У меня есть два библиотечных (читай — неизменяемых) классов A1 и B1. У класса A есть функция a(), у B — b(). Мне надо, чтоб обе они были у C. Твой пример я понял так:


S>>template <class Tb>

S>>struct A : public A1
S>>{
S>> int a();
S>>};

S>>template <class Ta>

S>>struct B : public B1
S>>{
S>> int b() const;
S>>};

S>>class C: public A< B<C> > {};


VD>

VD>Не так, а что-то вроде этого:

VD>
VD>template <T>
VD>class A : public T
VD>{
VD>   int a();
VD>};

VD>class <T>
VD>struct B : T
VD>{
VD>    int b() const;
VD>};

VD>class A < B < C > > {};
VD>


VD>Те мн. наследование разворачивается в последовательное одиночное. Кажное одиночное наследование добавляет нужную реализацию. По большему счету ведь пробема одиночного наследования заключается именно в том, что к классу нельзя добавить готовую реализацию некоторого интерфейса. Полиморфность (если таковая вообще нужна) может быть обеспечена путем множественного наследования интерфейсов. В шарпе кстит интерфейсы не переходят публичный (дефолтный) интерфейс класса. Объект можно будет привести к интерфейсу, но мтоды у него соотвествующие не появятся. Так что шаблоны решат эту проблему. Ну правда придется изменить несколько свои стереотипы.


Поменять придется не только стереотипы, но и библиотеки Твой метод хорош только если оба класса A и B пишешь сам. В случае, если их менять нельзя (и они не заточены изначально под такое "наследование"), можно с тем же успехом вызывать их методы напрямую из C — писанины даже меньше получиться.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[13]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 07:59
Оценка:
Здравствуйте Sergey, Вы писали:

S>Поменять придется не только стереотипы, но и библиотеки Твой метод хорош только если оба класса A и B пишешь сам. В случае, если их менять нельзя (и они не заточены изначально под такое "наследование"), можно с тем же успехом вызывать их методы напрямую из C — писанины даже меньше получиться.


Ты эта, поменьше цитируй, а то читать тяжело.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[12]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 20.11.02 08:15
Оценка: 3 (1)
Здравствуйте, AndrewVK, Вы писали:

S>>Угу, не было, в том числе и множественного не было. Поэтому его отсутствие — шаг назад, к тем языыкам, где его не было.


AVK>И джава и object паскаль моложе плюсов. У обоих множественного наследования нет. Что это все так дружно назад шагают, не знаешь?


Трудно реализовать, особенно в сочетании с полиморфизмом, вот и шагают.

S>>Но даже при "бриллиантовом" наследовании дублирование контролируемое — с помощью виртуального наследования.


AVK>Это называется создаем себе проблемы а потом начинаем их решать.


Ну, мне пару раз встречались ситуации, где без "брилиантового" наследования пришлось бы писать в полтора раза больше кода, со всеми вытекающими из этого последствиями. А с помощью "брилиантового" наследования все решилось настолько просто и изящно, насколько это вообще возможно.

S>>using, конечно, частично исправляет ситуацию. Но он вводит область видимости, что не всегда удобно.


AVK>Не понял юмора. Так в плюсах тоже автоматические деструкторы работают по выходу из области видимости.


В С++ создание автоматического объекта не приводит к созданию новой области видимости. Скобки там можно отдельно от создания объекта написать.

S>>Там — это в MSDN. Оно — это argument-dependent name lookup. Задаешь поиск по фразе "argument-dependent name lookup", находишь в C++ language reference пункт 3.4.2 — Argument-Dependent Name Lookup. Объяснять, тем более по русски, долго.


AVK>Классная вещь наверное, что про русски объяснить что это такое очень сложно.


Угу. А в MSDN или стандарте C++ прочитать — еще сложнее

S>>Угу, это теперь самопальный стандарт. А простой и логичной обработки ошибок я пока не в одном языке не видел. Если этот долбаный рантам иногда молча глотает исключения


AVK>Ни разу не сталкивался.


А я вот почти сразу столкнулся.

S>>>>И которая хуже воровства Ну не делаются сложные вещи простыми инструментами, и все тут. Вернее, делаются, он это сложнее, чем делать их более сложным инструментом.


VD>>>И ты говоришь что это не демагогия?


S>>Это мое убеждение, основанное на личном опыте. Возможно, оно выглядит как демагогия, но обосновывать его чересчур долго и не интересно.


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


Это все здорово, но верно только в том случае, если предметная область простая — морды к базам данных или бухгалтерия какая, к примеру. Для сложной же задачи решение ее простыми средствами приводит обычно к раздуванию исходных кодов, массированному применению Cut'n'Paste и в конечном счете к появлению плохо поддерживаемого продукта. Вот взять шаблоны например — сложное средство, так? По крайней мере, недоучившихся студентов обычно повергает в ступор Ну так их отсутствие в языке программирования сам знаешь к чему ведет — тот же двоичный поиск недоучившиеся студенты каждый раз будут вынуждены писать заново, причем сделают это пятью разными способами, и каждый влепит по своей индивидуальной и неповторимой ошибке. Хорошенькое упрощение получается. Или вот нет в С++ поддержки мультиметодов — каждый, кому они потребовались (а что делать, если предметная область такая), лепит их на свой лад, производя массу глючного трудноподдерживаемого кода. Причем чем проще он их реализует, тем труднее поддерживать код Да взять те же ассемблер или С (который K&R, не только без плюсов, но и без проверки типов при вызове функций) — средства проще некуда, и что в этом хорошего? Ни один здравомыслящий человек не станет на них в наши дни ничего серьезного писать. Не, что ни говори, а доски пилить электропилой удобнее и проще, чем ножом, хоть она и сложнее.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[21]: Производительность Win2k на Duron 800/384...
От: Aquila http://www.wasm.ru
Дата: 20.11.02 08:21
Оценка:
Здравствуйте, VladD2, Вы писали:

A>>Ты сказал.

VD>Тебе здесь уде все скзали,

Не все.

VD>что рассуждения твои о ОС мягко говря не корректны.


Аргументы моих уважаемых оппонентов в основном свелись к "Меня устраивает". А меня не устраивает.

VD>Отсуда я и делаю выводы что рассуждения о .NET тоже натянуты.


Ты делаешь ложные выводы из ложных посылок .
Re[14]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 20.11.02 08:23
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ты эта, поменьше цитируй, а то читать тяжело.


Когда с Владом разговариваешь, цитировать приходиться побольше А то он то ли забывает, о чем речь шла, то ли притворяется...
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[21]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 08:49
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Тебе здесь уде все скзали, что рассуждения твои о ОС мягко говря не корректны. Отсуда я и делаю выводы что рассуждения о .NET тоже натянуты.


Влад, да бог с ним, пускай работает на 98. Через пару лет все равно NT поставит. 95 не поддерживается, а 98, 98SE и ME отличаются только косметикой. Офис вон уже не работает. 7 студия тоже. Дальше будет только хуже.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[15]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 08:51
Оценка:
Здравствуйте Sergey, Вы писали:

AVK>>Ты эта, поменьше цитируй, а то читать тяжело.


S>Когда с Владом разговариваешь, цитировать приходиться побольше А то он то ли забывает, о чем речь шла, то ли притворяется...


Но не в таком же объеме.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[22]: Производительность Win2k на Duron 800/384...
От: Aquila http://www.wasm.ru
Дата: 20.11.02 09:14
Оценка:
Здравствуйте, AndrewVK, Вы писали:

VD>>Тебе здесь уде все скзали, что рассуждения твои о ОС мягко говря не корректны. Отсуда я и делаю выводы что рассуждения о .NET тоже натянуты.

AVK>Влад, да бог с ним, пускай работает на 98. Через пару лет все равно NT поставит.

Конечно. Если к тому времени новый комп соберу .

AVK>95 не поддерживается, а 98, 98SE и ME отличаются только косметикой. Офис вон уже не работает. 7 студия тоже.


А зачем на домашнем компе офис и 7-ая студия? .

AVK>Дальше будет только хуже.


А... Этих программ уже сейчас — как собак. Выбирай любую.
Re[13]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 09:15
Оценка:
Здравствуйте Sergey, Вы писали:

S>Трудно реализовать, особенно в сочетании с полиморфизмом, вот и шагают.


Ой ли. Не сложнее рефлекшена. Сотни мегабайт исходников, а множественное наследование трудно реализовать. Не смешно. А полиморфизм тут вобще не причем, множественное наследование интерфейсов есть и в джаве и в дотнете.

S>Ну, мне пару раз встречались ситуации, где без "брилиантового" наследования пришлось бы писать в полтора раза больше кода, со всеми вытекающими из этого последствиями. А с помощью "брилиантового" наследования все решилось настолько просто и изящно, насколько это вообще возможно.


Давай так — лично ты не смог найти решения. Если ты считаешь что твое решение было единственно правильным то описание твоей задачи в студию.
(Тут товарищи обижаться стали — я не имел ввиду что твоя квалификация недостаточна, может оно действительно так и было. Но приводить подобное в качестве аргумента некорректно, не правда ли?)

AVK>>Не понял юмора. Так в плюсах тоже автоматические деструкторы работают по выходу из области видимости.


S>В С++ создание автоматического объекта не приводит к созданию новой области видимости. Скобки там можно отдельно от создания объекта написать.


Так и в юзинге можно. Можешь объект создавать где угодно, иногда так и приходиться делать. Юзинг ограничивает опасную область. Вот такое вполне корректно

MyClass mc = new MyClass();
...
using(mc)
{
 ...
}

MyClass mc = null;
...
using(mc)
{
 ...
 mc = new MyClass();
 ...
}


S>>>Угу, это теперь самопальный стандарт. А простой и логичной обработки ошибок я пока не в одном языке не видел. Если этот долбаный рантам иногда молча глотает исключения


AVK>>Ни разу не сталкивался.


S>А я вот почти сразу столкнулся.


Поподробнее можно?


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


S>Это все здорово, но верно только в том случае, если предметная область простая — морды к базам данных или бухгалтерия какая, к примеру. Для сложной же задачи


О как, корпоративные системы стали уже простыми задачами? Как раз наоборот — это одни из самых сложных задач.

S> решение ее простыми средствами приводит обычно к раздуванию исходных кодов,


Исходные коды к примеру генерить можно. Еще можно много чего на лету создавать. В дотнете вобще очень много технологий направленных именно на уменьшение исходного кода. Рефлекшен позволяет кучу вещей делать автоматом а не писать код (в rsdn mag #3 наверное будет статья про конфигурирование, там очень хорошо это видно, добавление новой настройки начинается и заканчивается добавлением свойства к классу настроек. сохранение в xml и гуевый редактор подстраиваются автоматически). Эмиттинг кода позволяет отказаться от генерации всевозможных проксей и стабов, они генеряться на лету. Вот к примеру код создания удаленного объекта в ремоутинге
RemoteClass rc = new RemoteClass();

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

S> массированному применению Cut'n'Paste


Это от средства не зависит, это уже уродство дизайна.

S> и в конечном счете к появлению плохо поддерживаемого продукта.


По простоте поддержки и развития С++ с дотнетом и джавой даже рядом не стоял. Тут компоненты рулят.

S> Вот взять шаблоны например — сложное средство, так?


Да нет, не особо. Особенно когда его используют по прямому назначению а не для компенсации недостатков языка.

S>тот же двоичный поиск недоучившиеся студенты каждый раз будут вынуждены писать заново,


А вот в дотнете даже хеш-таблицы есть. А шаблонов пока нету. Шаманы наверное.

S> Или вот нет в С++ поддержки мультиметодов


Это кто ж такие, если не секрет?

S>Не, что ни говори, а доски пилить электропилой удобнее и проще, чем ножом, хоть она и сложнее.


Вот дотнет как раз по своим внутренностям несравненно сложнее С++, а вот пользоваться им проще и удобнее, как и электропилой. Так что очень правильная аналогия .
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[23]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 10:05
Оценка:
Здравствуйте Aquila, Вы писали:

AVK>>Влад, да бог с ним, пускай работает на 98. Через пару лет все равно NT поставит.


A>Конечно. Если к тому времени новый комп соберу .


Тебе и тепиерешнего хватит выше крыши. Я ж тебе пример привел компа под NT 4 на 486 процессоре. Очень неплохо работал.

AVK>>95 не поддерживается, а 98, 98SE и ME отличаются только косметикой. Офис вон уже не работает. 7 студия тоже.


A>А зачем на домашнем компе офис и 7-ая студия? .


Так комп то программиста. У меня к примеру есть. А офис — найди мне домашний компьютер без ворда. Очень редко встречаются, скажу тебе по секрету.

AVK>>Дальше будет только хуже.


A>А... Этих программ уже сейчас — как собак. Выбирай любую.


Каких программ? Офисов или студий?
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[22]: Производительность Win2k на Duron 800/384...
От: Аноним  
Дата: 20.11.02 10:12
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Влад, да бог с ним, пускай работает на 98. Через пару лет все равно NT поставит. 95 не поддерживается, а 98, 98SE и ME отличаются только косметикой. Офис вон уже не работает. 7 студия тоже. Дальше будет только хуже.


Насчет 98 и 98SE — не согласен. Очень существенные различия, например, в работе с сетью, и в SE много меньше ошибок. ME — просто дрянь, несмотря на косметику.
Re[23]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 10:21
Оценка:
Здравствуйте <Аноним>, Вы писали:

А>Насчет 98 и 98SE — не согласен. Очень существенные различия, например, в работе с сетью, и в SE много меньше ошибок. ME — просто дрянь, несмотря на осметику.


По сравнению с различиями NT4 и W2K сущая косметика. Как и XP впрочем.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[14]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 20.11.02 10:25
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>>Трудно реализовать, особенно в сочетании с полиморфизмом, вот и шагают.


AVK>Ой ли. Не сложнее рефлекшена. Сотни мегабайт исходников, а множественное наследование трудно реализовать. Не смешно.


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

AVK>А полиморфизм тут вобще не причем, множественное наследование интерфейсов есть и в джаве и в дотнете.


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

S>>Ну, мне пару раз встречались ситуации, где без "брилиантового" наследования пришлось бы писать в полтора раза больше кода, со всеми вытекающими из этого последствиями. А с помощью "брилиантового" наследования все решилось настолько просто и изящно, насколько это вообще возможно.


AVK>Давай так — лично ты не смог найти решения. Если ты считаешь что твое решение было единственно правильным то описание твоей задачи в студию.


Описание простое — по некоторому внутреннему представлению данных (оно здесь несущественно) надо формировать соответствующий PMML документ (с его спецификацией можно познакомиться на www.dmg.org) задаваемой юзером версии (1.0, 1.0 MS specific, 1.1). По существу, имеют место две несвязанные иерархии — различные PMML-модели (AssocRules, BivarStats, ClusteringModel и т.д.) одной веросии, имеющие между собой много общего, и иерархия из различных версий PMML, также имеющих между собой много общего. Разумеется, мое решение не является единственно правильным, но оно достаточно хорошо работает и было написано в разумные сроки.

AVK>(Тут товарищи обижаться стали — я не имел ввиду что твоя квалификация недостаточна, может оно действительно так и было. Но приводить подобное в качестве аргумента некорректно, не правда ли?)


Ну в квалификации Страуструпа сомневаться не приходиться, не правда ли? А он придерживается того же мнения — "бриллиантовое" множественное наследование иногда (достаточно редко, к счастью), является необходимым.

S>>В С++ создание автоматического объекта не приводит к созданию новой области видимости. Скобки там можно отдельно от создания объекта написать.


AVK>Так и в юзинге можно. Можешь объект создавать где угодно, иногда так и приходиться делать. Юзинг ограничивает опасную область. Вот такое вполне корректно


AVK>
AVK>MyClass mc = new MyClass();
AVK>...
AVK>using(mc)
AVK>{
AVK> ...
AVK>}

AVK>MyClass mc = null;
AVK>...
AVK>using(mc)
AVK>{
AVK> ...
AVK> mc = new MyClass();
AVK> ...
AVK>}
AVK>


Скобки все равно лишние. Хотя, конечно, привыкнуть можно, если придется.

S>>>>Угу, это теперь самопальный стандарт. А простой и логичной обработки ошибок я пока не в одном языке не видел. Если этот долбаный рантам иногда молча глотает исключения


AVK>>>Ни разу не сталкивался.


S>>А я вот почти сразу столкнулся.


AVK>Поподробнее можно?


Кода под рукой нет, извини Интернет на работе, эксперименты — дома. Кроме того, я пока до конца не понял, в чем там дело было.

AVK>Исходные коды к примеру генерить можно.


А это уже более сложное средство, чем имеющиеся в С++. Так что не катит.

AVK>Еще можно много чего на лету создавать. В дотнете вобще очень много технологий направленных именно на уменьшение исходного кода. Рефлекшен позволяет кучу вещей делать автоматом а не писать код (в rsdn mag #3 наверное будет статья про конфигурирование, там очень хорошо это видно, добавление новой настройки начинается и заканчивается добавлением свойства к классу настроек. сохранение в xml и гуевый редактор подстраиваются автоматически). Эмиттинг кода позволяет отказаться от генерации всевозможных проксей и стабов, они генеряться на лету. Вот к примеру код создания удаленного объекта в ремоутинге

AVK>
AVK>RemoteClass rc = new RemoteClass();
AVK>

AVK>Давай, напиши на С++ короче. И это не какая то внутренняя фича, так ты можешь сделать и для своей библиотеки.

Ты опять приводишь примеры более сложных средств, нежели имеющиеся в стандартном С++. Я ж не спорю, что рантайм в нете гораздо более сложный, чем в С++. Я говорил, что сам язык C# неоправдано простой. Так что твои аргументы только подкрепляют мое мнение. И кстати, compile-time аналог рефлекшена в C++ тоже был бы очень полезен, поскольку существующие средства позволяют осуществить автоматическую кодогенерацию на базе шаблонов основываясь только на информации о всем типе, но не о его составных частях (членах класса, например).

S>> массированному применению Cut'n'Paste


AVK>Это от средства не зависит, это уже уродство дизайна.


От средства тоже. Напиши-ка на ассемблере универсальный двоичный поиск, такой же удобный, как в С++? Херовенькое средство разработки автоматически требует либо более высокой квалификации разработчиков, либо ведет к уродливому дизайну.

AVK>По простоте поддержки и развития С++ с дотнетом и джавой даже рядом не стоял. Тут компоненты рулят.


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

AVK>А вот в дотнете даже хеш-таблицы есть. А шаблонов пока нету. Шаманы наверное.


Не понял. Ну так и для С++ полно реализаций хеш-таблиц, выбирай на любой вкус.

S>> Или вот нет в С++ поддержки мультиметодов


AVK>Это кто ж такие, если не секрет?


Это функции, виртуальные по отношению к более чем одному классу.

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


Я не про дотнет как рантайм говорил, а про убогий C# как язык программирования. Для C++ при желании можно найти (или написать) библиотеки, не уступающие или почти не уступающие по функциональности нету. Хотя кой-чего С++'у как языку, безусловно, не хватает, C# еще хуже.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[15]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 10:53
Оценка:
Здравствуйте Sergey, Вы писали:

S>Сотни мегабайт исходников транслятора C# или жабы Очень даже смешно. Даже компилятор C++ меньше занимает.


Нет там такого разделения как в С++. Рантайм и компиляторы неразделимы в принципе. А сам компилятор конечно небольшой. Только вот с точки зрения компиляции вобще не вижу никакой сложности в поддержке множественного наследования.

AVK>>А полиморфизм тут вобще не причем, множественное наследование интерфейсов есть и в джаве и в дотнете.


S>Я чет не понимаю — только что меня убеждали, что множественное наследование сложная


Сложная для понимания кода, но не для реализации.

AVK>>Давай так — лично ты не смог найти решения. Если ты считаешь что твое решение было единственно правильным то описание твоей задачи в студию.


S>Описание простое — по некоторому внутреннему представлению данных (оно здесь несущественно) надо формировать соответствующий PMML документ (с его спецификацией можно познакомиться на www.dmg.org) задаваемой юзером версии (1.0, 1.0 MS specific, 1.1). По существу, имеют место две несвязанные иерархии — различные PMML-модели (AssocRules, BivarStats, ClusteringModel и т.д.) одной веросии, имеющие между собой много общего, и иерархия из различных версий PMML, также имеющих между собой много общего. Разумеется, мое решение не является единственно правильным, но оно достаточно хорошо работает и было написано в разумные сроки.


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

S>Ну в квалификации Страуструпа сомневаться не приходиться, не правда ли? А он придерживается того же мнения — "бриллиантовое" множественное наследование иногда (достаточно редко, к счастью), является необходимым.


А он что, не может ошибаться в принципе?

AVK>>Так и в юзинге можно. Можешь объект создавать где угодно, иногда так и приходиться делать. Юзинг ограничивает опасную область. Вот такое вполне корректно


AVK>>
AVK>>MyClass mc = new MyClass();
AVK>>...
AVK>>using(mc)
AVK>>{
AVK>> ...
AVK>>}

AVK>>MyClass mc = null;
AVK>>...
AVK>>using(mc)
AVK>>{
AVK>> ...
AVK>> mc = new MyClass();
AVK>> ...
AVK>>}
AVK>>


S>Скобки все равно лишние. Хотя, конечно, привыкнуть можно, если придется.


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


AVK>>Поподробнее можно?


S>Кода под рукой нет, извини Интернет на работе, эксперименты — дома. Кроме того, я пока до конца не понял, в чем там дело было.


А если до конца не понял то не стоит и валить на дотнет.

AVK>>Исходные коды к примеру генерить можно.


S>А это уже более сложное средство, чем имеющиеся в С++. Так что не катит.


Почему не катит? В дотнете ведь есть такое? Да и в С++ при желании такое наворотить можно. А уж во всяких пхп сплош и рядом.

S>Ты опять приводишь примеры более сложных средств, нежели имеющиеся в стандартном С++. Я ж не спорю, что рантайм в нете гораздо более сложный, чем в С++. Я говорил, что сам язык C# неоправдано простой.


Как я уже устал повторять одно и тоже. Нет никакого такого разделения дотнета на компилятор шарпа и рантайм. Оно переплетено очень тесно. Язык шарп в отсутствии своего рантайма не имеет никакого смысла.

AVK>>А вот в дотнете даже хеш-таблицы есть. А шаблонов пока нету. Шаманы наверное.


S>Не понял. Ну так и для С++ полно реализаций хеш-таблиц, выбирай на любой вкус.


Не, ну поиск по хеш-таблице посложнее двоичного поиска будет. А ты утверждаешь что его каждый раз по новой писать приходиться.

AVK>>Это кто ж такие, если не секрет?


S>Это функции, виртуальные по отношению к более чем одному классу.


Не понял, если честно. Метод принадлежащий более чем одному классу? А зачем такое?

S>Я не про дотнет как рантайм говорил, а про убогий C# как язык программирования.


Повторяться не буду.

S> Для C++ при желании можно найти (или написать) библиотеки, не уступающие или почти не уступающие по функциональности нету.


Еще один Ты чего реализовывать будешь? GC? Делегатов? Или может еще чего?
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[24]: Производительность Win2k на Duron 800/384...
От: Аноним  
Дата: 20.11.02 11:03
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>По сравнению с различиями NT4 и W2K сущая косметика. Как и XP впрочем.


И это неправда. XP очень заметно переработан внутри.
Re[25]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 11:19
Оценка:
Здравствуйте <Аноним>, Вы писали:

AVK>>По сравнению с различиями NT4 и W2K сущая косметика. Как и XP впрочем.


А>И это неправда. XP очень заметно переработан внутри.


Да не так уж и переработан. Кое что с драйверами поправили, да с совместимостью поковырялись, вот по большому счету и все.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[16]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 20.11.02 12:01
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>>Сотни мегабайт исходников транслятора C# или жабы Очень даже смешно. Даже компилятор C++ меньше занимает.


AVK>Нет там такого разделения как в С++. Рантайм и компиляторы неразделимы в принципе. А сам компилятор конечно небольшой. Только вот с точки зрения компиляции вобще не вижу никакой сложности в поддержке множественного наследования.


А я вижу.

S>>Я чет не понимаю — только что меня убеждали, что множественное наследование сложная


AVK>Сложная для понимания кода, но не для реализации.


Что сложного для понимания в таком коде:

struct coords_pair
{
  coords_pair()  : x_(0), y_(0) {}
  int x_;
  int y_;
};
struct positioned
{
  void org(int x, int y)
  { org_.x_ = x; org_.y = y; }
  coords_pair org() const
  { return org_; }
private:
  coords_pair org_;
};

struct sized
{
  void size(int w, int h)
  { size_.x_ = w; size_.y = h; }
  coords_pair size() const
  { return size_; }
private:
  coords_pair size_;
};

struct shape : sized, positioned
{
};


Никто ведь не заставляет писать сложно там, где можно обойтись простыми средствами. Что, решение с шаблонами для C# будет более простым и читаемым?

AVK>>>Давай так — лично ты не смог найти решения. Если ты считаешь что твое решение было единственно правильным то описание твоей задачи в студию.


S>>Описание простое — по некоторому внутреннему представлению данных (оно здесь несущественно) надо формировать соответствующий PMML документ (с его спецификацией можно познакомиться на www.dmg.org) задаваемой юзером версии (1.0, 1.0 MS specific, 1.1). По существу, имеют место две несвязанные иерархии — различные PMML-модели (AssocRules, BivarStats, ClusteringModel и т.д.) одной веросии, имеющие между собой много общего, и иерархия из различных версий PMML, также имеющих между собой много общего. Разумеется, мое решение не является единственно правильным, но оно достаточно хорошо работает и было написано в разумные сроки.


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


IMHO, хуже получится.

AVK>Да и способ получить почти настоящее множественное наследование я в форум по дотнету кидал.


Попробуй применить его к библиотечным классам.

S>>Ну в квалификации Страуструпа сомневаться не приходиться, не правда ли? А он придерживается того же мнения — "бриллиантовое" множественное наследование иногда (достаточно редко, к счастью), является необходимым.


AVK>А он что, не может ошибаться в принципе?


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

S>>Скобки все равно лишние. Хотя, конечно, привыкнуть можно, если придется.


AVK>Как сказать. Очень повышают читаемость, хорошо видно область существования ресурса.


Ну, так можно договориться до того, что вокруг объявления каждой переменной скобки ставить.

S>>Кода под рукой нет, извини Интернет на работе, эксперименты — дома. Кроме того, я пока до конца не понял, в чем там дело было.


AVK>А если до конца не понял то не стоит и валить на дотнет.


То что исключение было и молча съелось — факт. В каких конкретно условиях это проявляется и управляется ли такое поведение как-нибудь, я пока не знаю. Впрочем, не хочешь — не верь.

AVK>>>Исходные коды к примеру генерить можно.


S>>А это уже более сложное средство, чем имеющиеся в С++. Так что не катит.


AVK>Почему не катит? В дотнете ведь есть такое? Да и в С++ при желании такое наворотить можно. А уж во всяких пхп сплош и рядом.


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

S>>Ты опять приводишь примеры более сложных средств, нежели имеющиеся в стандартном С++. Я ж не спорю, что рантайм в нете гораздо более сложный, чем в С++. Я говорил, что сам язык C# неоправдано простой.


AVK>Как я уже устал повторять одно и тоже. Нет никакого такого разделения дотнета на компилятор шарпа и рантайм. Оно переплетено очень тесно. Язык шарп в отсутствии своего рантайма не имеет никакого смысла.


Весьма странное утверждение, однако. Я вон слышал, что ML под дотнет портировали. И что, из-за этого исчезла разница между ML и C# как языками программирования, или ML перестал представлять интерес в отсутствии нетовского рантайма?

AVK>>>А вот в дотнете даже хеш-таблицы есть. А шаблонов пока нету. Шаманы наверное.


S>>Не понял. Ну так и для С++ полно реализаций хеш-таблиц, выбирай на любой вкус.


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


А, вон ты о чем. Так у них оверхед гигантский, и без шаблонов его не побороть. Или наследование от общего предка/коллбэки и неизбежные при этом тормоза, или шаблоны.

AVK>>>Это кто ж такие, если не секрет?


S>>Это функции, виртуальные по отношению к более чем одному классу.


AVK>Не понял, если честно. Метод принадлежащий более чем одному классу? А зачем такое?


Ну, допустим у нас есть такая иерархия: классы A1, A2, A3, A4 наследуются от A (и друг друга, произвольным образом). Требуется функция, (bool foo(A& a, A& b) которая принимает в качестве аргументов 2 (или больше) наследника класса A (по ссылке или указателю) и что-то с ними делает, основываясь на их фактическом типе. Т.е, на самом деле требуются от 1 (когда A и все его наследники обрабатываются одинаково) до 25 функций. Проблема состоит в том, что в течении жизненного цикла программы иерархия может расширяться. Если бы аргумент был один, подошли бы обычные виртуальные функции, а так — полная задница. Т.е. решения есть, но ни простыми, ни удобными их не назовешь.

S>> Для C++ при желании можно найти (или написать) библиотеки, не уступающие или почти не уступающие по функциональности нету.


AVK>Еще один Ты чего реализовывать будешь? GC? Делегатов? Или может еще чего?


GC и делегаты уже успели реализовать Причем делегатами в C++, IMHO, пользоваться удобнее, чем в C# (хотя потроха их реализации кому-то могут показаться весьма неприглядными). Сложность представляет реализация обобщенной сериализации. IMHO, в нынешнем C++ это невозможно. Хотя, про делегаты я тоже раньше так думал...
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[26]: Производительность Win2k на Duron 800/384...
От: Sergey Россия  
Дата: 20.11.02 12:17
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>>>По сравнению с различиями NT4 и W2K сущая косметика. Как и XP впрочем.


А>>И это неправда. XP очень заметно переработан внутри.


AVK>Да не так уж и переработан. Кое что с драйверами поправили, да с совместимостью поковырялись, вот по большому счету и все.


SEH, IMHO, совершенно новый.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[23]: Производительность Win2k на Duron 800/384...
От: Andre Украина  
Дата: 20.11.02 13:13
Оценка:
A>Конечно. Если к тому времени новый комп соберу .

Хм... Да нормальный у тебя комп для Win2k. Ты только после инсталяции немножко лишних сервисов убей и вообще красота будет
У меня дома Селерон 667 с 390 памяти. ПРи этом ПО куча. Apache+PHP+MySQL, VS 7, Delphi валяеться, MS SQL, вот Оракл даже временно пришлось взгромоздить. И все отлично работает. Главное не запускать все одновременно КОнечно дотнет подтормаживает там при запуске но это не смертельно. Вообще если не только играться, а хоть какой то разработкой заниматься даже в целях обучения непредставляю как можно сидеть на виндоус меньше Win2k.
... << RSDN@Home 1.0 alpha 12 >>
Я бы изменил мир — но Бог не даёт исходников...
Re[24]: Производительность Win2k на Duron 800/384...
От: Aquila http://www.wasm.ru
Дата: 20.11.02 13:35
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>>>Влад, да бог с ним, пускай работает на 98. Через пару лет все равно NT поставит.

A>>Конечно. Если к тому времени новый комп соберу .
AVK>Тебе и тепиерешнего хватит выше крыши. Я ж тебе пример привел компа под NT 4 на 486 процессоре. Очень неплохо работал.

Я понимаю, что для кого-то это нормально. Кто-то и XP гоняет на 128, да еще и какие-то приложения запускает. Но зачем мне такой eXPerience?

A>>А зачем на домашнем компе офис и 7-ая студия? .

AVK>Так комп то программиста. У меня к примеру есть. А офис — найди мне домашний компьютер без ворда. Очень редко встречаются, скажу тебе по секрету.

А, понял. Конечно, если бы мне студия 7 нужна была, я бы использовал 2000. Что касается офиса, то лично мне он не нужен, но на крайний случай у меня есть дистрибутивы 97 офиса, который прекрасно работает на 95 и 98. 2000-ый тоже под 98 работает. Необязательно же ставить последний ворд, чтобы сделать doc-файл или xls-файл, что, как правило, дома и требуется.

А все программерские пакеты, которые мне нужны, у меня прекрасно работают, начиная от PHP и заканчивая FASM'ом. Если потребуется поставить что-то, необходимое по работе, и идущее только под Win2k и выше, то я и поставлю это на рабочем компьютере .

AVK>>>Дальше будет только хуже.

A>>А... Этих программ уже сейчас — как собак. Выбирай любую.
AVK>Каких программ? Офисов или студий?

Разных. И офисов и студий .
Re[24]: Производительность Win2k на Duron 800/384...
От: Aquila http://www.wasm.ru
Дата: 20.11.02 13:37
Оценка:
Здравствуйте, Andre, Вы писали:

A>>Конечно. Если к тому времени новый комп соберу .

A>Хм... Да нормальный у тебя комп для Win2k. Ты только после инсталяции немножко лишних сервисов убей и вообще красота будет
A>Вообще если не только играться, а хоть какой то разработкой заниматься даже в целях обучения непредставляю как можно сидеть на виндоус меньше Win2k.

Легко.
Re[17]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 16:01
Оценка:
Здравствуйте Sergey, Вы писали:

AVK>>Нет там такого разделения как в С++. Рантайм и компиляторы неразделимы в принципе. А сам компилятор конечно небольшой. Только вот с точки зрения компиляции вобще не вижу никакой сложности в поддержке множественного наследования.


S>А я вижу.


А зря. Не забывай что очень много работы переложено на рантайм. Для поддержки множественного наследования компилятору достаточно определять его (даже синтаксис менять не надо) и генерировать соотв. семантику, чтобы сказать рантайму от кого класс отнаследован. А вот тот гимор с vtbl о котором ты поминал целиком ложиться на плечи CLR.
Не забывай что множественное наследование интерфейсов компилятор уже поддерживает, а до множественной реализации ему должно быть пофигу, это забота рантайма.

AVK>>Сложная для понимания кода, но не для реализации.


S>Что сложного для понимания в таком коде:


Я тебе могу такого с эти наследованием навернуть что черт голову сломит. А твой кусок кода не сложен для понимания.

S>Никто ведь не заставляет писать сложно там, где можно обойтись простыми средствами. Что, решение с шаблонами для C# будет более простым и читаемым?


Не знаю, как сделать. Я без шаблонов сделал множественную реализацию. Получилось просто и читаемо.

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


S> IMHO, хуже получится.


Ничего не могу сказать, зависит от специфики. Но не факт что хуже. Может и лучше. Лишние взаимосвязи никогда полезными не были. Решение же с МН очень сильно классы связывает.

AVK>>Да и способ получить почти настоящее множественное наследование я в форум по дотнету кидал.


S>Попробуй применить его к библиотечным классам.


Никаких проблем. Чем они принципиально отличаются от собственных?

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


А ты на каком основании говоришь за "значительную и далеко не худшую часть С++ сообщества"?

AVK>>Как сказать. Очень повышают читаемость, хорошо видно область существования ресурса.


S>Ну, так можно договориться до того, что вокруг объявления каждой переменной скобки ставить.


неуправляемые ресурсы не так уж часто встречаются и обычно не разбросаны по всему коду.

S>То что исключение было и молча съелось — факт.


Съесть его мог кто угодно из цепочки вызова.

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


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

AVK>>Как я уже устал повторять одно и тоже. Нет никакого такого разделения дотнета на компилятор шарпа и рантайм. Оно переплетено очень тесно. Язык шарп в отсутствии своего рантайма не имеет никакого смысла.


S>Весьма странное утверждение, однако. Я вон слышал, что ML под дотнет портировали. И что, из-за этого исчезла разница между ML и C# как языками программирования, или ML перестал представлять интерес в отсутствии нетовского рантайма?


Нет. Я говорю только про шарп. Шарп разрабатывался исключительно под CLR и очень сильно заточен именно под него. И рассматривать его в отрыве от рантайма бессмысленно. А то что старые языки можно выполнять в дотнете ничего не доказывает. Тут либо остаемся без части функциональности либо начинаем править язык (как VB). Правленый язык точно так же в отрыве от CLR смысла не имеет.

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


S>А, вон ты о чем. Так у них оверхед гигантский,


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

S> и без шаблонов его не побороть. Или наследование от общего предка/коллбэки и неизбежные при этом тормоза, или шаблоны.


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

AVK>>Не понял, если честно. Метод принадлежащий более чем одному классу? А зачем такое?


S>Ну, допустим у нас есть такая иерархия: классы A1, A2, A3, A4 наследуются от A (и друг друга, произвольным образом). Требуется функция, (bool foo(A& a, A& b) которая принимает в качестве аргументов 2 (или больше) наследника класса A (по ссылке или указателю) и что-то с ними делает, основываясь на их фактическом типе. Т.е, на самом деле требуются от 1 (когда A и все его наследники обрабатываются одинаково) до 25 функций. Проблема состоит в том, что в течении жизненного цикла программы иерархия может расширяться. Если бы аргумент был один, подошли бы обычные виртуальные функции, а так — полная задница. Т.е. решения есть, но ни простыми, ни удобными их не назовешь.


И чем тут тебе помогут общие для нескольких классов методы?

Да, на дотнете такое реализуемо. Сдергиваем код метода и генерим на его основе новый класс.

AVK>>Еще один Ты чего реализовывать будешь? GC? Делегатов? Или может еще чего?


S>GC и делегаты уже успели реализовать


Доктор, я жить буду? Будете, больной, но хреновооо!

S> Причем делегатами в C++, IMHO, пользоваться удобнее, чем в C# (хотя потроха их реализации кому-то могут показаться весьма неприглядными).


Ага, проще некуда. Я аж заплакал.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[25]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 16:05
Оценка:
Здравствуйте Aquila, Вы писали:

A>>>Конечно. Если к тому времени новый комп соберу .

A>>Хм... Да нормальный у тебя комп для Win2k. Ты только после инсталяции немножко лишних сервисов убей и вообще красота будет
A>>Вообще если не только играться, а хоть какой то разработкой заниматься даже в целях обучения непредставляю как можно сидеть на виндоус меньше Win2k.

A>Легко.


Я переполз на NT4 еще в 95 году, как только появились деньги 64М памяти. И работу в Дельфях в 95 вспоминаю только с содраганием. Малейшие ошибки с распределением памяти и перезагрузка. За час бывало раз по 10 приходилось перегружаться. А еще как то один товарищ, так же писавший на 95 решил у меня запустить свой проект, который он считал отлаженым. Когда посыпались ахесы виолатьены он был очень удивлен.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[25]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 16:09
Оценка:
Здравствуйте Aquila, Вы писали:

A>Я понимаю, что для кого-то это нормально. Кто-то и XP гоняет на 128, да еще и какие-то приложения запускает. Но зачем мне такой eXPerience?


При чем тут кто то? W2K будет быстрее 98 на 384М памяти на любой современной конфигурации. Тебе толпа народа говорит, а ты все никак не поверишь.

A>А, понял. Конечно, если бы мне студия 7 нужна была, я бы использовал 2000. Что касается офиса, то лично мне он не нужен, но на крайний случай у меня есть дистрибутивы 97 офиса, который прекрасно работает на 95 и 98. 2000-ый тоже под 98 работает. Необязательно же ставить последний ворд, чтобы сделать doc-файл или xls-файл, что, как правило, дома и требуется.


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

A>А все программерские пакеты, которые мне нужны, у меня прекрасно работают, начиная от PHP и заканчивая FASM'ом.


Это пока.

A> Если потребуется поставить что-то, необходимое по работе, и идущее только под Win2k и выше, то я и поставлю это на рабочем компьютере .


Все равно заставит тебя МС перейти на НТ, даже не сомневайся. Я думаю отдел разработки линейки 9Х они уже закрыли. И слава богу, меньше зоопарк.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[27]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 16:11
Оценка:
Здравствуйте Sergey, Вы писали:

AVK>>Да не так уж и переработан. Кое что с драйверами поправили, да с совместимостью поковырялись, вот по большому счету и все.


S>SEH, IMHO, совершенно новый.


Возможно. Но это все куски. Ничего кардинально нового. XP это скорее всего тот же W2K, но его выпустить торопились (сколько его лет делали?) и кое что осталось недоработанным. Они все что хотели доделали и выпустили ХР. В следующей версии опять обещают что то кардинально иное. К примеру файловую систему на sql server.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[18]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 20.11.02 17:00
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>А зря. Не забывай что очень много работы переложено на рантайм. Для поддержки множественного наследования компилятору достаточно определять его (даже синтаксис менять не надо) и генерировать соотв. семантику, чтобы сказать рантайму от кого класс отнаследован. А вот тот гимор с vtbl о котором ты поминал целиком ложиться на плечи CLR.

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

Не знаю, в исходники CLR пока не лазил. Может, ты и прав.

AVK>>>Сложная для понимания кода, но не для реализации.


S>>Что сложного для понимания в таком коде:


AVK>Я тебе могу такого с эти наследованием навернуть что черт голову сломит. А твой кусок кода не сложен для понимания.


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

S>>Никто ведь не заставляет писать сложно там, где можно обойтись простыми средствами. Что, решение с шаблонами для C# будет более простым и читаемым?


AVK>Не знаю, как сделать. Я без шаблонов сделал множественную реализацию. Получилось просто и читаемо.


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

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


S>> IMHO, хуже получится.


AVK>Ничего не могу сказать, зависит от специфики. Но не факт что хуже. Может и лучше. Лишние взаимосвязи никогда полезными не были. Решение же с МН очень сильно классы связывает.


Иногда это даже хорошо. В том случае, если most derived класс имеет смысл сам по себе, а его родительские классы самостоятельного смысла не имеют.

Ну вот маленький примерчик:

struct A
{
    A(std::ostream &f) : f_(f) {}
protected:
    virtual void CreateHeader() = 0;
    virtual void CreateBody() = 0;
    virtual void CreateFooter() = 0;
    ... И еще 33 функции
    void Generate()
    {
        CreateHeader();
        CreateBody();
        CreateFooter();
        ... На самом деле тут куда более хитрый алгоритм
    }
    std::ostream &f_;
    ... И еще 33 члена данных, которые используются виртуальными функциями.
};

struct V1 : virtual A
{
    V1(std::ostream &f) : A(f) {}
protected:
    virtual void CreateHeader();
    virtual void CreateFooter();
};

struct V2 : virtual A
{
    V2(std::ostream &f) : A(f) {}
protected:
    virtual void CreateHeader();
    virtual void CreateFooter();
};

struct M1 : virtual A
{
    M1(std::ostream &f) : A(f) {}
protected:
    virtual void CreateBody();
};

struct M2 : virtual A
{
    M2(std::ostream &f) : A(f) {}
protected:
    virtual void CreateBody();
};

struct M1V1 : virtual M1, virtual V1
{
    M1V1(std::ostream &f) : M1(f), V1(f) {}
};

struct M1V2 : virtual M1, virtual V2
{
    M1V2(std::ostream &f) : M1(f), V2(f) {}
};

struct M2V1 : virtual M2, virtual V1
{
    M2V1(std::ostream &f) : M2(f), V1(f) {}
    virtual void CreateHeader(); // Тут от нас другой хедер требуется
};

struct M2V2 : virtual M2, virtual V2
{
    M2V2(std::ostream &f) : M2(f), V2(f) {}
    virtual void CreateFooter(); // А тут - другой footer.
};


AVK>>>Да и способ получить почти настоящее множественное наследование я в форум по дотнету кидал.


S>>Попробуй применить его к библиотечным классам.


AVK>Никаких проблем. Чем они принципиально отличаются от собственных?


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

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


AVK>А ты на каком основании говоришь за "значительную и далеко не худшую часть С++ сообщества"?


А тебе не кажется, что говорить от чьего-то имени и ссылаться на чье-то мнение — это несколько разные вещи?

AVK>Съесть его мог кто угодно из цепочки вызова.


Во-во. Я не ел, кто-то съел по дороге, кто и на каком основании — не понятно.

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


AVK>Это уже демагогия чистой воды. Ты уж определись — сложный шарп инструмент или простой. А то можно конечно доказывать что на батниках тяжелее писать, так ведь с этим никто и не спорит. А то как шарп хуже так он простой, а как лучше так уже сразу и сложный.


Шарп как язык — черезмерно простой. Рантайм, который он использует — сложный. Так понятнее?

AVK>>>Как я уже устал повторять одно и тоже. Нет никакого такого разделения дотнета на компилятор шарпа и рантайм. Оно переплетено очень тесно. Язык шарп в отсутствии своего рантайма не имеет никакого смысла.


AVK>Нет. Я говорю только про шарп. Шарп разрабатывался исключительно под CLR и очень сильно заточен именно под него. И рассматривать его в отрыве от рантайма бессмысленно.


Бред. Язык он и есть язык. Что, если рантайм смениться, изменится синтаксис шарпа и семантика написанных на шарпе программ? Ты не путай язык с его реализацией. Допустим, мы выкидываем из языка шарпа using statement и требуем руками вызывать финалайз. Заточенность на рантайм сохранилась, язык стал хуже.

AVK>А то что старые языки можно выполнять в дотнете ничего не доказывает. Тут либо остаемся без части функциональности либо начинаем править язык (как VB). Правленый язык точно так же в отрыве от CLR смысла не имеет.


Без части функциональности чего? Языка? Не верю. Дотнета? Вполне, не всем она целиком нужна.

AVK>Не такой уж и гигантский на самом деле. Не забывай о том что оверхед на полиморфизме у CLR меньше чем у плюсов.


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

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


А нафига, спрашивается, создавать кучу мелких объектов там, где нужна скорость? А в С++ в критичных к производительности местах кучи мелких объектов принято создавать в специализированных кучах, а не в куче общего назначения.

S>> и без шаблонов его не побороть. Или наследование от общего предка/коллбэки и неизбежные при этом тормоза, или шаблоны.


AVK>Экий у тебя мир черно-белый. Либо либо. Дженериксы в дотнете это уже не плюсовые шаблоны, в отличие от шаблонов, которые по сути чисто синтаксические изыски, дженериксы в дотнете это реально существующие в рантайме сущности.


Значит, все еще хуже, чем я думал.

AVK>А способов еще туча. Можно к примеру генерить сортировщики налету. Там результат еще быстрее будет, можно соптимизироваться под реальные данные и выбрать в зависимости от них. И уж точно не медленней.


Ага, и средний недоучившийся студент в этом коде легко разберется (я уж не говорю про "напишет")...

AVK>>>Не понял, если честно. Метод принадлежащий более чем одному классу? А зачем такое?


S>>Ну, допустим у нас есть такая иерархия: классы A1, A2, A3, A4 наследуются от A (и друг друга, произвольным образом). Требуется функция, (bool foo(A& a, A& b) которая принимает в качестве аргументов 2 (или больше) наследника класса A (по ссылке или указателю) и что-то с ними делает, основываясь на их фактическом типе. Т.е, на самом деле требуются от 1 (когда A и все его наследники обрабатываются одинаково) до 25 функций. Проблема состоит в том, что в течении жизненного цикла программы иерархия может расширяться. Если бы аргумент был один, подошли бы обычные виртуальные функции, а так — полная задница. Т.е. решения есть, но ни простыми, ни удобными их не назовешь.


AVK>И чем тут тебе помогут общие для нескольких классов методы?


Где я говорил про "общие для нескольких классов методы"? Ты что-то не так понял.

AVK>Да, на дотнете такое реализуемо. Сдергиваем код метода и генерим на его основе новый класс.


Я чего-то идею не понял. Примерчик можно?

AVK>>>Еще один Ты чего реализовывать будешь? GC? Делегатов? Или может еще чего?


S>>GC и делегаты уже успели реализовать


AVK>Доктор, я жить буду? Будете, больной, но хреновооо!


Поясни.

S>> Причем делегатами в C++, IMHO, пользоваться удобнее, чем в C# (хотя потроха их реализации кому-то могут показаться весьма неприглядными).


AVK>Ага, проще некуда. Я аж заплакал.


Хм.. Ты их, наверное, просто не видел.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[22]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 17:07
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Влад, да бог с ним, пускай работает на 98. Через пару лет все равно NT поставит. 95 не поддерживается, а 98, 98SE и ME отличаются только косметикой. Офис вон уже не работает. 7 студия тоже. Дальше будет только хуже.


Да нет. И офис и студия работают. Сам пробывал. Вот только тормоза почище W2k. Эта уродливая ОС попросту не знает что делать с 256 мегами памяти. Ее же на 16-64 оптимизировали. 95 вообще 16 мег за благо считали.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 17:07
Оценка:
Здравствуйте, <Аноним>, Вы писали:

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


AVK>>Влад, да бог с ним, пускай работает на 98. Через пару лет все равно NT поставит. 95 не поддерживается, а 98, 98SE и ME отличаются только косметикой. Офис вон уже не работает. 7 студия тоже. Дальше будет только хуже.


А>Насчет 98 и 98SE — не согласен. Очень существенные различия, например, в работе с сетью, и в SE много меньше ошибок. ME — просто дрянь, несмотря на косметику.


Согласен, но это не оправдывает цепляние за эти устаревшие ОС. Даже 98SE — это полное дерьмо по сравнению даже с NT4 SP6. О W2k и ХаРэ вообще разговору быть не может. Ну а аргументация про тормоза вообще смешна. Машина с 800 мегагерцами и почти 400 мегами памяти видите ли слаба!
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 17:07
Оценка:
Здравствуйте, <Аноним>, Вы писали:

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


AVK>>По сравнению с различиями NT4 и W2K сущая косметика. Как и XP впрочем.


А>И это неправда. XP очень заметно переработан внутри.


А вот это уже фигня. Три сотни билдов. Нового только COM+1.5 и ГУИ.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 17:21
Оценка:
Здравствуйте, Aquila, Вы писали:

Что-то у меня к пхп начинает предвзятость пояляться. Как не встречу пхп-шника, так какой-то сумашедший дом сразу получается. 350 метров для ХаРэ мало. Нэт дерьмо. В общем нужно срочно что-то в филармонии править.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 17:27
Оценка:
Здравствуйте, Aquila, Вы писали:

VD>>Тебе здесь уде все скзали,

A>Не все.

И кто тебя поддержал?

A>Аргументы моих уважаемых оппонентов в основном свелись к "Меня устраивает". А меня не устраивает.


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

VD>>Отсуда я и делаю выводы что рассуждения о .NET тоже натянуты.


A>Ты делаешь ложные выводы из ложных посылок .


И что мне подсказывает что нет?
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 17:40
Оценка:
Здравствуйте, Sergey, Вы писали:

S>>>Угу, это теперь самопальный стандарт. А простой и логичной обработки ошибок я пока не в одном языке не видел. Если этот долбаный рантам иногда молча глотает исключения


AVK>>Ни разу не сталкивался.


S>А я вот почти сразу столкнулся.


Приведи, плиз, пример!

S>Это все здорово, но верно только в том случае, если предметная область простая — морды к базам данных или бухгалтерия какая, к примеру.


Нда. Думаю если бы ты попробывал что-нибудь путное в этой области создать, то такую ахинею не нес бы.

Остальное ввобще демагогия. Для каждой задачи можно подобрать оптимальное решение. Причем елси оно простое, то и славу богу. Нехрена городить сложности на ровном месте. Если проблема по простому не решается, то нужно выпендриваться.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 17:43
Оценка:
Здравствуйте Sergey, Вы писали:

AVK>>Не знаю, как сделать. Я без шаблонов сделал множественную реализацию. Получилось просто и читаемо.


S>Ну, если в каждом из наследуемых классов 25-30 функций, то во-первых, есть где ошибиться, во-вторых — эта работа не для человека, а для компилятора.


Ты смотрел то хоть? Какая разница сколько функций? А человек там работает один раз, дальше работает программа.

S>>>Попробуй применить его к библиотечным классам.


AVK>>Никаких проблем. Чем они принципиально отличаются от собственных?


S>Тем, что их нельзя менять.


А их и не надо менять. Нужно менять только класс который будет некоей оболочкой для наследника.

S> Или твое решение — не то, что Влад в этой ветке приводил (правда, с ашипками, как обычно)?


Не то. Там с шаблонами а у меня на теперешнем дотнете работает. Только сразу предупреждаю — это не МН, это автоматическая агрегация с подключением агрегируемых объектов наружу.

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


Зачем ручками? Само пусть оборачивается. Ты посмотри, потом обсуждать будем.

AVK>>А ты на каком основании говоришь за "значительную и далеко не худшую часть С++ сообщества"?


S>А тебе не кажется, что говорить от чьего-то имени и ссылаться на чье-то мнение — это несколько разные вещи?


Где посмотреть мнение "значительной и далеко не худшей части С++ сообщества", на которое ты ссылаешься? А те у кого мнение другое это уже незначительная и далеко не лучшая часть С++ сообщества?

AVK>>Съесть его мог кто угодно из цепочки вызова.


S>Во-во. Я не ел, кто-то съел по дороге, кто и на каком основании — не понятно.


Не понятно, а сразу дотнет виноват.

AVK>>Это уже демагогия чистой воды. Ты уж определись — сложный шарп инструмент или простой. А то можно конечно доказывать что на батниках тяжелее писать, так ведь с этим никто и не спорит. А то как шарп хуже так он простой, а как лучше так уже сразу и сложный.


S>Шарп как язык — черезмерно простой. Рантайм, который он использует — сложный. Так понятнее?


Я тебе уже сказал, нет никакого такого отдельного языка шарпа. И нечего его в отрыве от рантайма обсуждать. Говорим шарп подразумеваем рантайм. А без рантайма это дерьмо полное и никому не нужное, как и джава. Ты у машины оторви колесо и говори что колесо это плохое транспортное средство, потому что катится недалеко и недолго, и простое очень. Демагогия чистейшей воды. Как можно сравнивать шарп без рантайма с С++, если часть функций компилятора С++ вынесена в CLR?

AVK>>Нет. Я говорю только про шарп. Шарп разрабатывался исключительно под CLR и очень сильно заточен именно под него. И рассматривать его в отрыве от рантайма бессмысленно.


S>Бред. Язык он и есть язык.


Вот ты сначала разберись а потом делай такие заявления. В дотнете границы компилтайма и рантайма сильно размываются. Про генерацию прокси классов налету я тебе уже рассказывал. А С++ в случае того же кома это все делается спец. тулзами и компилятором. И дженериксы в дотнете будут практически целиком в рантайме, компилятор там почти ничего не делает, только код шаблона компилирует. Видишь как интересно — и там и там вроде шаблоны, только там компилятор, а там рантайм. И МН, буде оно в дотнете появиться, будет практически полностью в рантайме. На компилятор ляжет только необходимость прописать в метаданные его предков и проконтролировать корректность.
И при этом ты пытаешься сравнивать компилятор, который почти все делает сам и небольшой кусочек комплексной системы. Все еще мне не веришь?

Что, если рантайм смениться, изменится синтаксис шарпа и семантика написанных на шарпе программ? Ты не путай язык с его реализацией. Допустим, мы выкидываем из языка шарпа using statement и требуем руками вызывать финалайз. Заточенность на рантайм сохранилась, язык стал хуже.

AVK>>А то что старые языки можно выполнять в дотнете ничего не доказывает. Тут либо остаемся без части функциональности либо начинаем править язык (как VB). Правленый язык точно так же в отрыве от CLR смысла не имеет.


S>Без части функциональности чего? Языка? Не верю. Дотнета? Вполне, не всем она целиком нужна.


Дотнета конечно.

AVK>>Не такой уж и гигантский на самом деле. Не забывай о том что оверхед на полиморфизме у CLR меньше чем у плюсов.


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


S>А нафига, спрашивается, создавать кучу мелких объектов там, где нужна скорость? А в С++ в критичных к производительности местах кучи мелких объектов принято создавать в специализированных кучах, а не в куче общего назначения.


Заметь, я про кучи ничего не говорил. Где бы ты их не создавал, но процедура создания в С++ довольно дорогая. Поэтому там и такой оверхед на полиморфах для value-типов, их ведь в объекты заворачивать приходиться.

AVK>>Экий у тебя мир черно-белый. Либо либо. Дженериксы в дотнете это уже не плюсовые шаблоны, в отличие от шаблонов, которые по сути чисто синтаксические изыски, дженериксы в дотнете это реально существующие в рантайме сущности.


S>Значит, все еще хуже, чем я думал.


Или лучше.

AVK>>А способов еще туча. Можно к примеру генерить сортировщики налету. Там результат еще быстрее будет, можно соптимизироваться под реальные данные и выбрать в зависимости от них. И уж точно не медленней.


S>Ага, и средний недоучившийся студент в этом коде легко разберется (я уж не говорю про "напишет")...


В этом коде ему вобще то разбираться и не надо. Это библиотечный код. Студенту же нужно будет ковырять бизнес-логику.

AVK>>И чем тут тебе помогут общие для нескольких классов методы?


S>Где я говорил про "общие для нескольких классов методы"? Ты что-то не так понял.


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

AVK>>Да, на дотнете такое реализуемо. Сдергиваем код метода и генерим на его основе новый класс.


S>Я чего-то идею не понял. Примерчик можно?


Я как оказывается неправильно тебя понял. Так что давай попонятнее объясни что тебе надо.

S>>>GC и делегаты уже успели реализовать


AVK>>Доктор, я жить буду? Будете, больной, но хреновооо!


S>Поясни.


Делегаты в С++ есть? Есть, но хренооовые!

S>Хм.. Ты их, наверное, просто не видел.


Видел. Лучше чем до этого делали, но до шарпа еще очень далеко.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[26]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 17:47
Оценка:
Здравствуйте VladD2, Вы писали:

VD>А вот это уже фигня. Три сотни билдов. Нового только COM+1.5 и ГУИ.


Не, ну если 98 серьезно переработан, то XP просто на NT 6.0 тянет.

Да, для тех кто не в курсе — XP это не NT 6.0, даже не NT 5.5 а всего лишь NT 5.1. Даже МС считает что серьезных изменений нет. Просто поправленная W2K.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[24]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 17:49
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Согласен, но это не оправдывает цепляние за эти устаревшие ОС. Даже 98SE — это полное дерьмо по сравнению даже с NT4 SP6. О W2k и ХаРэ вообще разговору быть не может. Ну а аргументация про тормоза вообще смешна. Машина с 800 мегагерцами и почти 400 мегами памяти видите ли слаба!


Причем для ПХП слаба. Это мы всякие игрушки вроде седьмой студии пускаем, вот нам и хватает.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[23]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 17:51
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Да нет. И офис


11 не работает и работать не будет, официально заявлено.

VD> и студия работают.


Насколько я помню в требованиях к .NET Framework SDK недвусмысленно сказано NT. Как студия там будет работать?
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[23]: Производительность Win2k на Duron 800/384...
От: Aquila http://www.wasm.ru
Дата: 20.11.02 18:50
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>>>Тебе здесь уде все скзали,

A>>Не все.
VD>И кто тебя поддержал?

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

A>>Аргументы моих уважаемых оппонентов в основном свелись к "Меня устраивает". А меня не устраивает.

VD>Чесно говря мне на твою медитацию уже смотреть надоело. Тбе уже тонна народу сказала, что 98 для программиста — это идеотизм.

Что значит "сказали"? Мало ли кто что балаболит. Что-то, более менее похожее на аргументы — это были жалобы на глюки Дельфи под 95. Ну, прекрасно, я Дельфей не держу, у меня все, что нужно, прекрасно работает. Зачем тогда менять? Зачем лишние хлопоты?

VD>И скзали что ХаРэ на твоей машине чуть ли не в двое будет быстрее работать. Но ты все свое долдонишь.


Да и ты не отстаешь .

VD>Ну сиди трахайся с этим масдаем. Твои проблемы в конце ноцов.


Наконец-то ты понял.

VD>>>Отсуда я и делаю выводы что рассуждения о .NET тоже натянуты.

A>>Ты делаешь ложные выводы из ложных посылок .
VD>И что мне подсказывает что нет?

То же, что и раньше, поэтому ты снова ошибаешься .

P.S. А установка XPени в ближайшие 3-4 года вообще не входит в мои текущие (которые, безусловно, могут измениться) планы. В конце концов — есть W2k, достаточно приличная система, зачем эта XP?
Re[25]: Производительность Win2k на Duron 800/384...
От: Aquila http://www.wasm.ru
Дата: 20.11.02 18:50
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Причем для ПХП слаба. Это мы всякие игрушки вроде седьмой студии пускаем, вот нам и хватает.


Не, не для ПХП, а для ADOM'а!
Re[24]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.02 19:25
Оценка:
Здравствуйте Aquila, Вы писали:

A>Что значит "сказали"? Мало ли кто что балаболит. Что-то, более менее похожее на аргументы — это были жалобы на глюки Дельфи под 95. Ну, прекрасно, Дельфей не держу, у меня все, что нужно, прекрасно работает. Зачем тогда менять? Зачем лишние хлопоты?


Э нет, Дельфи тут не причем. Причем серьезные ошибки под отладкой. 95 от этого умирал.

A>P.S. А установка XPени в ближайшие 3-4 года вообще не входит в мои текущие (которые, безусловно, могут измениться) планы. В конце концов — есть W2k, достаточно приличная система, зачем эта XP?


А чем ХР хуже?
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[13]: Простота ли
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 22:11
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Соревноваться мы не будем, ибо бесполезно. Есть же разница между автоматической генерацией отчетов по меняющимся данным или создание одного отчета и последующее ручное изменение данных в самом отчете! Если здесь уместна такая аналогия с Документооборотом.


Дык я и говорю что на .NET удобнее.

Vi2>Поэтому я и говорю о примерах, как о состязании в знаниях атрибутов.


Ну я то о Шарп vs. обычный С++. Там то с атрибутами туго. Ну если не считать последних MS-овских наваротов.

Vi2>Я не знаю, насколько доступна эта информация в самой IDE (как доступна, напрмер, информация о методах класса при IntelliSense).


Полностью доступны и комплит-ворд и т.п. Но не всегда это нужно.

Vi2>Или это все не является проблемой?


Стал бы я с проблемами возиться.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 22:28
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Насколько я помню в требованиях к .NET Framework SDK недвусмысленно сказано NT. Как студия там будет работать?


Блин, где ты берешь эти требования? Я своими руками ставил. Все прекрасно работает. И фреймворк и студия.

Народ даже говорт что все это дело работает на 95-ых OSR2. Ну там эксплорер поставишь, ДКОМ 1.3 и все пучечком.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Определение 2, попытка 2
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.02 22:33
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Единообразия, конечно, нет, но в моей области деятельности


Мы вообще-то говорили о классическом понимании атрибутов. Атрибутов как методанных. У тебя же атрибут вступает в качестве свойтсва.

Vi2>То, что в .NET это ограничено классом, не умаляет достоинств .NET, но не является единственной реализацией атрибутов (также как СОМ — не единственная компонентная модель).


Ну я других с атрибутами не занаю.

Vi2>Ты, наверное, полностью в мире .NET: все, что за ним, уже не существует. Без наезда, просто как констатация. Это не плохо, это нормально.


Возможно. Но я говорил об программировании основанном на атрибутах именно изходя из своего понимания атрибутов. Видимо оно еще не привычно для окружающих.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 12.1.0.1053.34192 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 21.11.02 08:46
Оценка: 9 (1)
Здравствуйте, AndrewVK, Вы писали:

AVK>>>Не знаю, как сделать. Я без шаблонов сделал множественную реализацию. Получилось просто и читаемо.


S>>Ну, если в каждом из наследуемых классов 25-30 функций, то во-первых, есть где ошибиться, во-вторых — эта работа не для человека, а для компилятора.


AVK>Ты смотрел то хоть? Какая разница сколько функций? А человек там работает один раз, дальше работает программа.


Где смотреть? Я думал, это то решение, о котором Влад говорил. То — убогое.

S>> Или твое решение — не то, что Влад в этой ветке приводил (правда, с ашипками, как обычно)?


AVK>Не то. Там с шаблонами а у меня на теперешнем дотнете работает. Только сразу предупреждаю — это не МН, это автоматическая агрегация с подключением агрегируемых объектов наружу.


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

AVK>>>А ты на каком основании говоришь за "значительную и далеко не худшую часть С++ сообщества"?


S>>А тебе не кажется, что говорить от чьего-то имени и ссылаться на чье-то мнение — это несколько разные вещи?


AVK>Где посмотреть мнение "значительной и далеко не худшей части С++ сообщества", на которое ты ссылаешься?


В книгах и журналах — их авторы являются частью той группы, о которой я говорил. В стандарте языка С++ — комитет по стандартизации представляет интересы значительной части пользователей сообщества С++. В comp.lang.c++.moderated, в конце концов.

AVK>А те у кого мнение другое это уже незначительная и далеко не лучшая часть С++ сообщества?


А где можно посмотреть их мнение? Впрочем, тема достаточно скользкая. Если тебя не устраивает мнение Страуструпа, могу сослаться на Буча. Если Бучу не веришь, буду ссылаться на других уважаемых людей персонально, дабы не апеллировать к мнению непонятно какого сообщества.

AVK>>>Это уже демагогия чистой воды. Ты уж определись — сложный шарп инструмент или простой. А то можно конечно доказывать что на батниках тяжелее писать, так ведь с этим никто и не спорит. А то как шарп хуже так он простой, а как лучше так уже сразу и сложный.


S>>Шарп как язык — черезмерно простой. Рантайм, который он использует — сложный. Так понятнее?


AVK>Я тебе уже сказал, нет никакого такого отдельного языка шарпа. И нечего его в отрыве от рантайма обсуждать. Говорим шарп подразумеваем рантайм. А без рантайма это дерьмо полное и никому не нужное, как и джава. Ты у машины оторви колесо и говори что колесо это плохое транспортное средство, потому что катится недалеко и недолго, и простое очень. Демагогия чистейшей воды. Как можно сравнивать шарп без рантайма с С++, если часть функций компилятора С++ вынесена в CLR?


Да причем здесь компилятор вообще? Я говорю о языке как о средстве выражения мыслей программиста. Не хочешь сравнивать С# и С++ — давай сравнивать C# и MSIL, попробуй меня убедить, что MSIL лучше, потому что проще

AVK>>>Нет. Я говорю только про шарп. Шарп разрабатывался исключительно под CLR и очень сильно заточен именно под него. И рассматривать его в отрыве от рантайма бессмысленно.


S>>Бред. Язык он и есть язык.


AVK>Вот ты сначала разберись а потом делай такие заявления. В дотнете границы компилтайма и рантайма сильно размываются.


Да будь он полностью интерпретируемый — что это меняет? При чем здесь вообще границы компилтайма? Мне абсолютно пофигу, где там реализуется множественное наследование — в компиляторе или в CLR. Главное, чтобы оно вообще поддерживалось и могло быть легко записано на языке, на котором я программирую.

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


Ну и что с того? Какое это отношение имеет к языку, на котором пишутся программы?

AVK>И при этом ты пытаешься сравнивать компилятор, который почти все делает сам и небольшой кусочек комплексной системы. Все еще мне не веришь?


Я сравниваю не компилятор, а язык для записи решения задач в форме, понятной транслятору. В этом отношении шарп много теряет из-за отсутствия в нем кое-каких полезных конструкций.

S>> Что, если рантайм смениться, изменится синтаксис шарпа и семантика написанных на шарпе программ? Ты не путай язык с его реализацией. Допустим, мы выкидываем из языка шарпа using statement и требуем руками вызывать финалайз. Заточенность на рантайм сохранилась, язык стал хуже.


Да, и если добавим в C# множественное наследование — язык станет лучше. И рантайм тут совершенно не причем, он влияет только на принципиальную возможность реализации той или иной языковой фичи, а не на то, реализована ли она на самом деле и насколько удобен для программиста ее синтаксис.

AVK>>>А то что старые языки можно выполнять в дотнете ничего не доказывает. Тут либо остаемся без части функциональности либо начинаем править язык (как VB). Правленый язык точно так же в отрыве от CLR смысла не имеет.


S>>Без части функциональности чего? Языка? Не верю. Дотнета? Вполне, не всем она целиком нужна.


AVK>Дотнета конечно.


Ну так не нужно это просто в ML.

AVK>>>Не такой уж и гигантский на самом деле. Не забывай о том что оверхед на полиморфизме у CLR меньше чем у плюсов.


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


S>>А нафига, спрашивается, создавать кучу мелких объектов там, где нужна скорость? А в С++ в критичных к производительности местах кучи мелких объектов принято создавать в специализированных кучах, а не в куче общего назначения.


AVK>Заметь, я про кучи ничего не говорил. Где бы ты их не создавал, но процедура создания в С++ довольно дорогая.


Объект на стеке создать — дорого?

AVK>Поэтому там и такой оверхед на полиморфах для value-типов, их ведь в объекты заворачивать приходиться.


В С++ нет value-типов. Ты вообще о чем?

AVK>>>А способов еще туча. Можно к примеру генерить сортировщики налету. Там результат еще быстрее будет, можно соптимизироваться под реальные данные и выбрать в зависимости от них. И уж точно не медленней.


S>>Ага, и средний недоучившийся студент в этом коде легко разберется (я уж не говорю про "напишет")...


AVK>В этом коде ему вобще то разбираться и не надо. Это библиотечный код. Студенту же нужно будет ковырять бизнес-логику.


AVK>>>И чем тут тебе помогут общие для нескольких классов методы?


S>>Где я говорил про "общие для нескольких классов методы"? Ты что-то не так понял.


AVK>Тогда я не понял до сих пор что такое твои мультиметоды. Проблему ты вроде описал, а вот способ решения нет.


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

AVK>Я как оказывается неправильно тебя понял. Так что давай попонятнее объясни что тебе надо.


Мультиметоды — диспетчеризация вызова функции в зависимости от типов нескольких объектов. Например, у нас есть три класса:

class A {};
class B : public A {};
class C : public B {};


И есть функция bool foo(A& arg1, A& arg2);. Мы хотим, чтобы, если ее аргумент arg1 имеет фактический тип B, а arg2 — тип С, вызывалась функция bool fooimpl(B& arg1, C& arg2), буде таковая определена. Если функции bool fooimpl(B& arg1, C& arg2) нет, должна вызываться функция bool fooimpl(B& arg1, B& arg2), если она существует, и т.д. Дополнительно, конечно, следует детально определить правила разрешения типов. Например, считать run-time ошибкой ситуацию, когда оба аргумента имеют тип С, но функции bool fooimpl(С& arg1, C& arg2) нет, зато есть bool fooimpl(B& arg1, C& arg2) и bool fooimpl(С& arg1, B& arg2) (неоднозначный вызов), и т.д. Отдельно следует рассматривать ситуацию, когда требуется, чтобы foo была симметрична по отношению к своим аргументам — т.е. вызовы bool fooimpl(B& arg1, C& arg2) и bool fooimpl(С& arg1, B& arg2) должны быть эквивалентны.

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

AVK>Делегаты в С++ есть? Есть, но хренооовые!


S>>Хм.. Ты их, наверное, просто не видел.


AVK>Видел. Лучше чем до этого делали, но до шарпа еще очень далеко.


Хорошо, тогда перечисли пожалуйста известные тебе недостатки Loki::Functor — я таковых на пока не заметил. Или тебе не понравилась реализация делегатов у Шаргина или Геннадия Васильева? Так я не про них говорил.
И, кстати, как на шарпе реализовать функциональность комбинации Loki::Functor и Loki::BindFirst?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[25]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.11.02 09:52
Оценка:
Здравствуйте VladD2, Вы писали:

AVK>>Насколько я помню в требованиях к .NET Framework SDK недвусмысленно сказано NT. Как студия там будет работать?


VD>Блин, где ты берешь эти требования? Я своими руками ставил. Все прекрасно работает. И фреймворк и студия.


Я ж не говорил что не ставиться. Просто МС этого не обещает. Так что если у тебя чего заглючит то ты сам себе злобный буратина.

VD>Народ даже говорт что все это дело работает на 95-ых OSR2. Ну там эксплорер поставишь, ДКОМ 1.3 и все пучечком.


Это я говорил. И говорил не про SDK а про рантайм. SDK я туда вкрячить не пытался. B 98 для рантайма поддерживается.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[18]: Стандарт, говоришь :)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 21.11.02 11:40
Оценка: 19 (2)
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>Согласен, я как раз о том и говорил, что таких стандартов у каждой фирмы — вагон и две телеги. Мне просто непонятно, почему MS особо отметила факт стандартизации в ECMA. ИМХО — она где-то чувствует себя неуверенно, а иначе зачем лишние траты?


VD>Таты эти для них ничтожны. А стандартизовались, чтобы все кому хочется понаезжать имели по меньще оргуменов. 90% назедов на MS имеют целью не указать на реальную пробему, а кольнуть по больнее, чтобы подпортить имидж. Ну вот ты даже к стандартизации прицепился хотя сам даже говоришь, что и без нее стандарт был бы. В общем эта тема вонует только тебя. Для меня важен сам факт наличия стандарта, а не формальная сторона вопроса.


Если бы MS не подсуетилась вовремя в ECMA, то сейчас слова "стандарт" не фигурировало бы. Говорили бы про очередную версию системы или API (чем по сути такая конструкция и является). С одной стороны, так было бы честнее, с другой стороны — менее значимо с точки зрения маркетинга. Ну версия и версия, а так — "стандарт"! Большинству же нет дела до того, что на самом деле это — буффонада в чистом виде.

Кстати, такой "стандартизацией" MS только спровоцировала дополнительные наезды на себя (и не только с моей стороны ).

ГВ>>Не горячись , я не называл стандарт "конфеткой", "признаком крутости" и т.п. Вообще, здорово ты попытался опровергнуть довод, который сам же мне и приписал. Я говорил только о стабильности стандарта самого по себе и правомерности апелляции к стандарту с учётом стереотипа "стандарт — общепринятое стабильное решение".


VD>По С++ стандарт существует уже наверное 30 лет, а компиляторы мжду собой так и не совместмы. .NET существует пол года, и нет ни одного нарушения этого стадарта, хотя компиляторов для него уже вагн и маленька тележка. Но это для тебя не довод. Потому как тебе просто безпричинно нравится это действительно неплохой но не иделатьный и сильно устаревший язык.


Ну смешал одно с другим... Извини.

Стандарту C++ всего-то 4 года от роду. Я имею ввиду — стандарту, принятому несколькими производителями а не стандарту, фактически принадлежащему кому-то одному. Это раз.

Неправомерно сравнивать C++ и .NET. .NET — платформа, C++ — язык, а не инфраструктура. На нём можно сделать инфраструктуру, но языком он от этого быть не перестаёт. Правомерно сравнивать C++ <-> C#. Это два.

О каких компиляторах речь? Если это компиляторы, генерирующие MSIL, то они и не могут нарушить функционирования самого интерпретатора MSIL. Так что это — не аргумент. Вот когда появятся полностью независмые от MS реализации .NET, числом эдак штук 10 — тогда и посмотрим, с какой версией устаревшего на тот момент API они будут совместимы. Это три.

C++ мне (и не только мне) нравится именно как язык, как средство выражения мыслей человека. Если завтра C++ в полном виде появится на .NET (в полном! а не в managed-трансформации), то я двумя руками буду "за" развитие .NET (наверное). Конкуренция платформ не является объектом моих интересов. Но когда вместо языка подсовывают букет библиотечных вызовов, утверждая, что это и есть "современный e-объектный e-язык e-бизнеса" на который нужно равняться C++... Влад, это даже не смешно...

ГВ>>Кстати, стандарт ещё и позволяет разрабатывать продукт А, имея ввиду, что разрабатываемый продукт Б тоже будет сооответствовать этому стандарту, а сам стандарт не изменится в неизвестном направлении к моменту окончания разработок А и Б.


VD>Ну и к чему эта демогогия. Когда стадарты от MS изменялись да еще с ткой частотой? WinAPI до только расширяется и т.п. Да и другие продукты... Ты лучше обясни почему от С++ оуже песком попахивает? Не из-за того ли ревностного соблюдения неизменности стандарта?


В смысле отношения к стандарту, любые изменения (и расширения) — суть нестандартные расширения. Дальше доказывать? Из этого следует, что MS-овские стандарты фактически меняются как погода осенью, что прямо выбивает почву из-под ног потенциальных конкурентов.

Сначала нужно доказать, что от C++ "пахнет песком". Влад, ты поднимал эту тему в самом начале этой ветки. Поскольку формулирование определений ещё не закончено (тобой, кстати), то отвечать в данном постинге по существу я не могу.

VD>Важна не консервативность которую ты называешь неизменностью стандарта, а обратная совместимость. Тот же С++ можно было спокойно обоготить современными возможностями без ущерба для обратной совместимости. Но делать этог не хотят. От сюда и рождаются все эит .NET, Явы и


Про современные возможности я уже говорил. Давай определения, тогда и прооппонирую по существу.

D.AVK>>>Ну жди. А мы пока по простому, на шарпе будем потихоньку.


ГВ>>Ну так кто же возражает?


VD>Вот в 7.1 MS обещает аж 89%-ую совместмость.


Ну и отлично!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[21]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.11.02 13:33
Оценка:
Здравствуйте Sergey, Вы писали:

S>Где смотреть? Я думал, это то решение, о котором Влад говорил. То — убогое.


В форуме по дотнету.
А, вспомнил. Посмотри в статистике по количесву сообщений помещенных в фавориты, там должно быть то, с исходниками. А там всю ветку посмотришь.

AVK>>Не то. Там с шаблонами а у меня на теперешнем дотнете работает. Только сразу предупреждаю — это не МН, это автоматическая агрегация с подключением агрегируемых объектов наружу.


S>Ну так бы сразу и сказал. А тот примерчик с виртуальным наследрованием, что я кидал, на твое решение ложиться?


Это который?

AVK>>А те у кого мнение другое это уже незначительная и далеко не лучшая часть С++ сообщества?


S>А где можно посмотреть их мнение?


Там же

S>Впрочем, тема достаточно скользкая. Если тебя не устраивает мнение Страуструпа, могу сослаться на Буча. Если Бучу не веришь, буду ссылаться на других уважаемых людей персонально, дабы не апеллировать к мнению непонятно какого сообщества.


Ну хорошо, считай что убедил. МН в С++ может быть полезным.

S>Да причем здесь компилятор вообще? Я говорю о языке как о средстве выражения мыслей программиста.


Тогда нечего отметать рантайм. Это тоже язык.

S>Не хочешь сравнивать С# и С++ — давай сравнивать C# и MSIL, попробуй меня убедить, что MSIL лучше, потому что проще


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

AVK>>Вот ты сначала разберись а потом делай такие заявления. В дотнете границы компилтайма и рантайма сильно размываются.


S>Да будь он полностью интерпретируемый — что это меняет? При чем здесь вообще границы компилтайма? Мне абсолютно пофигу, где там реализуется множественное наследование — в компиляторе или в CLR. Главное, чтобы оно вообще поддерживалось и могло быть легко записано на языке, на котором я программирую.


Тогда на каком основании ты отрываешь от шарпа его рантайм и пытаешься его в этом виде сравнивать с С++?

S>Ну и что с того? Какое это отношение имеет к языку, на котором пишутся программы?


Непосредственное. Я могу так сделать на шатрпе а ты на С++ не можешь. Вот и вся сказка.

S>Я сравниваю не компилятор, а язык для записи решения задач в форме, понятной транслятору. В этом отношении шарп много теряет из-за отсутствия в нем кое-каких полезных конструкций.


Знаешь, в С++ тоже много чего нет, что есть в дотнете.

S>Да, и если добавим в C# множественное наследование — язык станет лучше.


Вот, опять начинаешь. МН вызовет много лишних проблем, не в языке, нет, а в том самом рантайме который ты пытаешся оторвать. Только отрывается он вместе с мясом. Меняешь язык сказывается на рантайме, меняешь рантайм, сказывается на языке. Плохо это или хорошо это отдельный вопрос, но так оно есть.

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


AVK>>Заметь, я про кучи ничего не говорил. Где бы ты их не создавал, но процедура создания в С++ довольно дорогая.


S>Объект на стеке создать — дорого?


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

AVK>>Поэтому там и такой оверхед на полиморфах для value-типов, их ведь в объекты заворачивать приходиться.


S>В С++ нет value-типов. Ты вообще о чем?


Описался. Я имел ввиду всякие int, byte и иже с ними. Простыми по моему называются.



AVK>>Я как оказывается неправильно тебя понял. Так что давай попонятнее объясни что тебе надо.


S>Мультиметоды — диспетчеризация вызова функции в зависимости от типов нескольких объектов. Например, у нас есть три класса:


S>
S>class A {};
S>class B : public A {};
S>class C : public B {};
S>


S>И есть функция bool foo(A& arg1, A& arg2);. Мы хотим, чтобы, если ее аргумент arg1 имеет фактический тип B, а arg2 — тип С, вызывалась функция bool fooimpl(B& arg1, C& arg2), буде таковая определена. Если функции bool fooimpl(B& arg1, C& arg2) нет, должна вызываться функция bool fooimpl(B& arg1, B& arg2), если она существует, и т.д. Дополнительно, конечно, следует детально определить правила разрешения типов. Например, считать run-time ошибкой ситуацию, когда оба аргумента имеют тип С, но функции bool fooimpl(С& arg1, C& arg2) нет, зато есть bool fooimpl(B& arg1, C& arg2) и bool fooimpl(С& arg1, B& arg2) (неоднозначный вызов), и т.д. Отдельно следует рассматривать ситуацию, когда требуется, чтобы foo была симметрична по отношению к своим аргументам — т.е. вызовы bool fooimpl(B& arg1, C& arg2) и bool fooimpl(С& arg1, B& arg2) должны быть эквивалентны.


Теперь понятно. Такая задачка решается на шарпе элементарно, без всяких извращений. Рефлекшена вполне достаточно. Пишешь класс который в конструкторе перебирает свои методы (лучше их пометить атрибутами, чтобы он перебирал только те что нужно, или придумать какое нибудь соглашение об именовании, вроде как если основная функция foo() то все ее подфункции foo1() foo2() и т.д.). На основании этих методов составляешь табличку (лучше хеш-табличку, чтобы искать побыстрее). Ну а при вызове функции находишь в хеше подходящий метод и вызываешь его. Все, теперь осталось только дописывать свои функции. Всякие доп. фичи легко описать при помощи атрибутов.

И обрати внимание — используются отнюдь не фичи языка, а исключительно рантайма. Понятно почему нельзя рассматривать шарп сам по себе?
А без рантайма это фигня полная, никому не нужное извратство.

S>Хорошо, тогда перечисли пожалуйста известные тебе недостатки Loki::Functor — я таковых на пока не заметил. Или тебе не понравилась реализация делегатов у Шаргина или Геннадия Васильева? Так я не про них говорил.


А про что?

S>И, кстати, как на шарпе реализовать функциональность комбинации Loki::Functor и Loki::BindFirst?


Э, ты мне про их функциональность расскажи, а я уж как нибудь.
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[22]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 21.11.02 14:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>>Где смотреть? Я думал, это то решение, о котором Влад говорил. То — убогое.


AVK>В форуме по дотнету.

AVK>А, вспомнил. Посмотри в статистике по количесву сообщений помещенных в фавориты, там должно быть то, с исходниками. А там всю ветку посмотришь.

Это где? Я в основном через ньюсы форумы смотри и насчет новых фич не в курсе.

AVK>>>Не то. Там с шаблонами а у меня на теперешнем дотнете работает. Только сразу предупреждаю — это не МН, это автоматическая агрегация с подключением агрегируемых объектов наружу.


Хе-хе, в С++ (в одной из промежуточных версий Cfront) агрегация с подключением агрегируемых объектов наружу была когда-то (делегированием называлась), выкинули нафиг в виду чрезмерной сложности использования и вместо нее вставили множественное наследование

S>>Ну так бы сразу и сказал. А тот примерчик с виртуальным наследрованием, что я кидал, на твое решение ложиться?


AVK>Это который?


Это про CreateHeader/CreateFooter и т.д. Несколько мессаг назад было.

S>>Да причем здесь компилятор вообще? Я говорю о языке как о средстве выражения мыслей программиста.


AVK>Тогда нечего отметать рантайм. Это тоже язык.


Неа. Вот рантай как раз не имеет самостоятельной ценности без языков, умеющих использовать его фичи.

AVK>При чем здесь мсил? Ты передергиваешь. Я же не говорил что все что проще лучше. Я говорил о конкретном — для моих задач простота шарпа лучше сложности С++.


Ну и постепенно выясняется, что не все там так просто и не все лучше
А я говорил о том, что в шарпе не хватаем многих языковых фич, которые есть в С++. Грубо говоря, если ты утверждаешь, что можешь эмулировать множественное наследование на шарпе, то из этого автоматически следует, что рантаймом МН так или иначе поддерживается. Возникает вопрос — а какого хрена поддержку МН не внесли в язык?

S>>Да будь он полностью интерпретируемый — что это меняет? При чем здесь вообще границы компилтайма? Мне абсолютно пофигу, где там реализуется множественное наследование — в компиляторе или в CLR. Главное, чтобы оно вообще поддерживалось и могло быть легко записано на языке, на котором я программирую.


AVK>Тогда на каком основании ты отрываешь от шарпа его рантайм и пытаешься его в этом виде сравнивать с С++?


Мля, опять сказка про белого бычка по третьему кругу. На таком основании, что конструкцию, которая легко и просто выражается на С++ я вынужден не просто записывать, а эмулировать в шарпе. Что сложнее, хуже понимается и поддерживается и т.д.

S>>Ну и что с того? Какое это отношение имеет к языку, на котором пишутся программы?


AVK>Непосредственное. Я могу так сделать на шатрпе а ты на С++ не можешь. Вот и вся сказка.


Проксю на лету сгенерить? А надо? Чем хуже сгенерить ее перед компиляцией специальной тулзой?

S>>Я сравниваю не компилятор, а язык для записи решения задач в форме, понятной транслятору. В этом отношении шарп много теряет из-за отсутствия в нем кое-каких полезных конструкций.


AVK>Знаешь, в С++ тоже много чего нет, что есть в дотнете.


А я с этим и не спорю.

S>>Да, и если добавим в C# множественное наследование — язык станет лучше.


AVK>Вот, опять начинаешь. МН вызовет много лишних проблем, не в языке, нет, а в том самом рантайме который ты пытаешся оторвать. Только отрывается он вместе с мясом. Меняешь язык сказывается на рантайме, меняешь рантайм, сказывается на языке. Плохо это или хорошо это отдельный вопрос, но так оно есть.


Ты ж говорил — ты нашел способ МН эмулировать? Или твой способ тоже приводит к проблемам в рантайме?

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


AVK>>>Заметь, я про кучи ничего не говорил. Где бы ты их не создавал, но процедура создания в С++ довольно дорогая.


S>>Объект на стеке создать — дорого?


AVK>Ты будешь создавать на стеке объекты для полиморфных списков? Ну ну.


Что такое полиморфный список и зачем он нужен? А если и правда надо много объектов создать, для них делается специальная куча, которая работает на порядки быстрее общей.

AVK>>>Поэтому там и такой оверхед на полиморфах для value-типов, их ведь в объекты заворачивать приходиться.


S>>В С++ нет value-типов. Ты вообще о чем?


AVK>Описался. Я имел ввиду всякие int, byte и иже с ними. Простыми по моему называются.


Тогда совсем не понимаю. Зачем их в объекты заворачивать? Или ты не про С++ говоришь?

S>>Мультиметоды — диспетчеризация вызова функции в зависимости от типов нескольких объектов. Например, у нас есть три класса:


S>>
S>>class A {};
S>>class B : public A {};
S>>class C : public B {};
S>>


S>>И есть функция bool foo(A& arg1, A& arg2);. Мы хотим, чтобы, если ее аргумент arg1 имеет фактический тип B, а arg2 — тип С, вызывалась функция bool fooimpl(B& arg1, C& arg2), буде таковая определена. Если функции bool fooimpl(B& arg1, C& arg2) нет, должна вызываться функция bool fooimpl(B& arg1, B& arg2), если она существует, и т.д. Дополнительно, конечно, следует детально определить правила разрешения типов. Например, считать run-time ошибкой ситуацию, когда оба аргумента имеют тип С, но функции bool fooimpl(С& arg1, C& arg2) нет, зато есть bool fooimpl(B& arg1, C& arg2) и bool fooimpl(С& arg1, B& arg2) (неоднозначный вызов), и т.д. Отдельно следует рассматривать ситуацию, когда требуется, чтобы foo была симметрична по отношению к своим аргументам — т.е. вызовы bool fooimpl(B& arg1, C& arg2) и bool fooimpl(С& arg1, B& arg2) должны быть эквивалентны.


AVK>Теперь понятно. Такая задачка решается на шарпе элементарно, без всяких извращений. Рефлекшена вполне достаточно. Пишешь класс который в конструкторе перебирает свои методы (лучше их пометить атрибутами, чтобы он перебирал только те что нужно, или придумать какое нибудь соглашение об именовании, вроде как если основная функция foo() то все ее подфункции foo1() foo2() и т.д.). На основании этих методов составляешь табличку (лучше хеш-табличку, чтобы искать побыстрее). Ну а при вызове функции находишь в хеше подходящий метод и вызываешь его. Все, теперь осталось только дописывать свои функции. Всякие доп. фичи легко описать при помощи атрибутов.


Код, пожалуйста. Интересно посмотреть, насколько кривее/прямее это решение, чем известные мне С++'ные решения. У некоторых из них, кстати, только один существенный недостаток — низкая производительность.

AVK>И обрати внимание — используются отнюдь не фичи языка, а исключительно рантайма. Понятно почему нельзя рассматривать шарп сам по себе?


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

AVK>А без рантайма это фигня полная, никому не нужное извратство.


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

S>>Хорошо, тогда перечисли пожалуйста известные тебе недостатки Loki::Functor — я таковых на пока не заметил. Или тебе не понравилась реализация делегатов у Шаргина или Геннадия Васильева? Так я не про них говорил.


AVK>А про что?


Я ж говорю — про Loki::Functor. Или boost::bind, дополняющий Loki::Functor там, где не обязательно иметь возможность удобно записать тип делегата, но нужна более высокая производительность.

S>>И, кстати, как на шарпе реализовать функциональность комбинации Loki::Functor и Loki::BindFirst?


AVK>Э, ты мне про их функциональность расскажи, а я уж как нибудь.


А функциональность у них очень простая — Functor является делегатом для вызова метода класса или функции с произвольным количеством параметров и возвращаемым типом, BindFirst — функция, принимающая два параметра (Functor и что-нибудь еще) и возвращающая новый Functor, имеющий на один параметр меньше, чем исходный. При вызове нового функтора будет вызываться исходный, в качестве первого параметра которого подставиться переданное в BindFirst значение. Применяется это куда проще, чем описывается:


struct A
{
   void foo(int a, int b);
};

void f()
{
  A a;
  Functor<void, TYPELIST_2(int, int)> cmd1(&a, &A::foo);
  Functor<void, int> cmd2(BindFirst(cmd1, 10));
  cmd2(20); // то же самое, что и a.foo(10, 20)
  Functor<void> cmd3(BindFirst(cmd2, 30));
  cmd3(); // эквивалентно a.foo(10, 30)
}
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[23]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.11.02 16:31
Оценка:
Здравствуйте Sergey, Вы писали:

S>Это где? Я в основном через ньюсы форумы смотри и насчет новых фич не в курсе.


Посмотри начиная отсюда
http://www.rsdn.ru/Forum/?mid=115539
Автор: AndrewVK
Дата: 16.10.02


S>Хе-хе, в С++ (в одной из промежуточных версий Cfront) агрегация с подключением агрегируемых объектов наружу была когда-то (делегированием называлась), выкинули нафиг в виду чрезмерной сложности использования и вместо нее вставили множественное наследование


Теперешний дотнет это не тогдашний С++.

AVK>>Это который?


S>Это про CreateHeader/CreateFooter и т.д. Несколько мессаг назад было.


Ссылку дай, а то там много сообщений было.

AVK>>При чем здесь мсил? Ты передергиваешь. Я же не говорил что все что проще лучше. Я говорил о конкретном — для моих задач простота шарпа лучше сложности С++.


S>Ну и постепенно выясняется, что не все там так просто и не все лучше


В этом мире вобще редко что бывает безоговорочно лучше или хуже. Что то приобретаем, в чем то проигрываем. Главное чтобы первого было больше.

S>А я говорил о том, что в шарпе не хватаем многих языковых фич, которые есть в С++.


Давай так — тебе не хватает. А вот мне хватает. Эту самую хитрую эмуляцию подключения реализаций я наваял примерно в таком же топике. Нужды в ней я ни разу не испытал.

S> Грубо говоря, если ты утверждаешь, что можешь эмулировать множественное наследование на шарпе, то из этого автоматически следует, что рантаймом МН так или иначе поддерживается.


Нет

S>Возникает вопрос — а какого хрена поддержку МН не внесли в язык?


Ох и надоело мне уже тебе по сотому разу одно и то же говорить — в рантайм поддерку нужно вносить, прежде всего в рантайм. В языке его можно только эмулировать, как к примеру сделали в Эйфеле.

AVK>>Тогда на каком основании ты отрываешь от шарпа его рантайм и пытаешься его в этом виде сравнивать с С++?


S>Мля, опять сказка про белого бычка по третьему кругу. На таком основании, что конструкцию, которая легко и просто выражается на С++ я вынужден не просто записывать, а эмулировать в шарпе. Что сложнее, хуже понимается и поддерживается и т.д.


Тьфу ты блин, с тобой невозможно спорить. Я тебе про фому а ты мне про ерему? Ну нафига вносить фичу в язык если она поддерживается рантаймом? Просто шоб было? Есть в рантайме делегаты, но нам мало, надо еще в язык что то похожее воткнуть. И пофигу что это только внутри сборки будет доступно, зато язык теперь стал крут немеряно. Это точно как плюсовые эксепшены, которые Влад поминал. Надо рантайм было стандартизовать, так нет же, воткнули исключения в язык. Теперь у нас С++ поддерживает исключения! А толку то? Один фиг в коме свое эмулировать приходиться.

AVK>>Непосредственное. Я могу так сделать на шатрпе а ты на С++ не можешь. Вот и вся сказка.


S>Проксю на лету сгенерить? А надо? Чем хуже сгенерить ее перед компиляцией специальной тулзой?


А если заранее не известен конкретный тип удаленного объекта? Будешь с собой тулзу таскать?

AVK>>Знаешь, в С++ тоже много чего нет, что есть в дотнете.


S>А я с этим и не спорю.


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

S>>>Да, и если добавим в C# множественное наследование — язык станет лучше.


AVK>>Вот, опять начинаешь. МН вызовет много лишних проблем, не в языке, нет, а в том самом рантайме который ты пытаешся оторвать. Только отрывается он вместе с мясом. Меняешь язык сказывается на рантайме, меняешь рантайм, сказывается на языке. Плохо это или хорошо это отдельный вопрос, но так оно есть.


S>Ты ж говорил — ты нашел способ МН эмулировать? Или твой способ тоже приводит к проблемам в рантайме?


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

AVK>>Ты будешь создавать на стеке объекты для полиморфных списков? Ну ну.


S>Что такое полиморфный список и зачем он нужен?


А ты что, звезды на небе полиморфно сортировать собрался?

AVK>>Описался. Я имел ввиду всякие int, byte и иже с ними. Простыми по моему называются.


S>Тогда совсем не понимаю. Зачем их в объекты заворачивать? Или ты не про С++ говоришь?


Затем чтобы с ними работать полиморфными алгоритмами, мы ведь о полиморфных алгоритмах говорим? Или ты знаешь другой способ?

AVK>>Теперь понятно. Такая задачка решается на шарпе элементарно, без всяких извращений. Рефлекшена вполне достаточно. Пишешь класс который в конструкторе перебирает свои методы (лучше их пометить атрибутами, чтобы он перебирал только те что нужно, или придумать какое нибудь соглашение об именовании, вроде как если основная функция foo() то все ее подфункции foo1() foo2() и т.д.). На основании этих методов составляешь табличку (лучше хеш-табличку, чтобы искать побыстрее). Ну а при вызове функции находишь в хеше подходящий метод и вызываешь его. Все, теперь осталось только дописывать свои функции. Всякие доп. фичи легко описать при помощи атрибутов.


S>Код, пожалуйста.


Ну нифига себе. Давай я тебе только пример использования напишу, а то что это можно реализовать ты поверишь мне на слово?

public class TestClass : MultiMethodClass
{
 //Можно кстати вобще без этого метода
 //генерим на лету потомка и вписываем ему
 //но я обещал без извратств, поэтому сделаем попроще
 [MultiMethodMain("Foo")]
 public void Foo(params object[] pobj)
 {
  //Этот метод наследуется от базового класса
  InvokeMultiMethod(pobj);
 }

  //Можно объявить и пабликом, тогда, когда ты точно знаешь тип параметров можно вызвать напрямую.
 [MultiMethodSub("Foo")]
 private void FooA(ClassA p)
 {
  Console.WriteLine("Only ClassA");
 }

 [MultiMethodSub("Foo")]
 private void FooB(ClassB p)
 {
  Console.WriteLine("Only ClassB");
 }

 [MultiMethodSub("Foo")]
 private void FooAB(ClassA p1, ClassB p2)
 {
  Console.WriteLine("Both classes");
 }

 ...

}

...

ClassA a = new ClassA();
ClassB b = new ClassB();
object[] oa = new object[]{a,b};
TestClass tc = new TestClass();
tc.Foo(a); //Print "Only ClassA"
tc.Foo(b); //Print "Only ClassB"
tc.Foo(a,b); //Print "Both classes"
tc.Foo(oa); //Print "Both classes"


S> Интересно посмотреть, насколько кривее/прямее это решение, чем известные мне С++'ные решения. У некоторых из них, кстати, только один существенный недостаток — низкая производительность.


А ты как хотел? За все надо платить. В данном случае производительность потеряется на поиске и одном лишнем вызове. Т.е. сначала вызов основного метода, определение типа параметров,потом поиск в хеше нужного метода и наконец вызов того что нашли. Но вобще то сама постановка задачи предполагает определенный оверхед, любой способ все равно приведет к примерно такой же последовательности действий.

S>Неа. Я смотрю на это с другой точки зрения — язык имеет синтаксис для доступа к атрибутам, а уж как оно там внутри реализовано, дотнетовским рантаймом или еще как — это дело десятое.


Типичный подход сишника. Для дотнета не катит хотя бы потому что компиляторов много, а вот классы должны быть совместимы. Посему мне плевать какой там есть синтаксис. Если язык CLS-compliant то значит он, этот синтаксис, обязан быть. Главный здесь рантайм.

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


Не, мне уже смешно. С++ разрабатывался как самостоятельный язык. Шарп как примочка к дотнетовскому рантайму. Совсем разницы не ощущаешь?

AVK>>А без рантайма это фигня полная, никому не нужное извратство.


S>А никто и не спорит с тем, что фичи, имеющиеся в языке, должны быть каким-то образом реализованы.


Да наоборот все. Фичи есть у рантайма, а язык их должен реализовывать. Обрати внимание — все ведь говорят что шаблоны добавили в .NET, а не в С#, хотя первое время он похоже будет единственным языком, их поддерживающим. Как ты думаешь, почему говорят именно так?

S> Но вот как именно они там внутри тикают, не суть важно при обсуждении свойств языка.


Я счас кричать начну. С# НЕЛЬЗЯ ОБСУЖДАТЬ В ОТРЫВЕ ОТ РАНТАЙМА, ОНИ НЕРАЗДЕЛИМО СВЯЗАНЫ, ОДИН ЯВЛЯЕТСЯ ПРОДОЛЖЕНИЕМ ДРУГОГО. Ну как можно говорить о характеристиках самолета в целом, имея при этом только его кокпит к примеру? Давай оторвем от С++ рантайм и скажем что по сравнению с рантаймом дотнета это полнейшее дерьмо, что такой рантайм никуда не годится, что ничего сложного с таким рантаймом не сделаешь.

AVK>>А про что?


S>Я ж говорю — про Loki::Functor. Или boost::bind, дополняющий Loki::Functor там, где не обязательно иметь возможность удобно записать тип делегата, но нужна более высокая производительность.


Давай ситуацию немножко проясним — последний раз что то серьезное на С++ я писал лет 5 назад наверное. Поэтому "Loki::Functor или boost::bind" мне ни о чем не говорят.


AVK>>Э, ты мне про их функциональность расскажи, а я уж как нибудь.


S>А функциональность у них очень простая — Functor является делегатом для вызова метода класса или функции с произвольным количеством параметров и возвращаемым типом, BindFirst — функция, принимающая два параметра (Functor и что-нибудь еще) и возвращающая новый Functor, имеющий на один параметр меньше, чем исходный. При вызове нового функтора будет вызываться исходный, в качестве первого параметра которого подставиться переданное в BindFirst значение. Применяется это куда проще, чем описывается:


S>

S>
S>struct A
S>{
S>   void foo(int a, int b);
S>};

S>void f()
S>{
S>  A a;
S>  Functor<void, TYPELIST_2(int, int)> cmd1(&a, &A::foo);
S>  Functor<void, int> cmd2(BindFirst(cmd1, 10));
S>  cmd2(20); // то же самое, что и a.foo(10, 20)
S>  Functor<void> cmd3(BindFirst(cmd2, 30));
S>  cmd3(); // эквивалентно a.foo(10, 30)
S>}
S>


Мда
1) Запись куда более монстроидальна чем то что в шарпе, а главное намного хуже читается, поскольку неочевидна.
2) Небезопасно, т.е. получается некая цепочка. Если произошел сбой в каком то звене то все остальные получат шиш.
3) А отцепить что нибудь можно, так чтобы остальные остались?
4) Как с потокобезопасностью?
5) А если функтор создать в одной dll, а вызывать методы в другой, работать будет?
6) А если эти дллели еще к тому же скомпилированы разными компиляторами?
7) А вот еще в шарпе есть такая штука как переменное количество параметров. С этим я понимаю вобще писец. printf и иже с ними то есть так не вызовешь.

Короче это еще хуже того что я видел.

2Влад — может я чего не понимаю? Ты как старый сишник скажи — это действительно круче делегатов?
... << RSDN@Home 1.0 alpha 12 (developers build)>>
AVK Blog
Re[15]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.11.02 23:38
Оценка:
Здравствуйте AndrewVK, Вы писали:

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


VD>>>>В Паскле с этим задница.


AVK>>>С чем задница?


VD>>С точкой. Вернее без нее.


AVK>А, ну да. Но это небольшая и ожидаемая задница.


AVK>

AVK>Лирическое отступление: классификация задниц
AVK>Задницы подразделяются по следующим признакам:
AVK>1) По величине. Бывают задницы маленькие, задницы средние, задницы большие и полные задницы. Последние встречаются редко, но последствия при этом бывают весьма печальные. Чаще всего встречаются задницы маленькие, но к счастью они как правило не доставляют больших хлопот.
AVK>2) По неожиданности. Бывают ожидаемые и неожиданные задницы. Ожидаемая задница встречается редко, ходят они обычно по одиночке, имет свою территорию и редко выходит за ее пределы, при встрече с человеком стараются убежать или спрятаться. Неожиданные задницы, в противоположность, очень часто сбиваются в стаи, которые постоянно меняют свое местоположение. Интересно что в стае встречаются особи разных размеров и окраски. При встрече с человеком не убегают а напротив стараются на него напасть. Таким образом встреча с большой стаей неожиданных задниц очень опасна.
AVK>3) По настроению. Бывают радостные задницы, мрачные задницы, скучные задницы и агрессивные задницы. Радостные задницы это как правило особи небольших размеров. Доставляемые ими хлопоты обычно не приводят к плохим последствиям. Мрачные задницы обычно тоже малых или средних размеров, однако заметно более неприятны. Скучные задницы, как и две предыдущих разновидности, невелики по размерам. Их характерная особенность — они пасуться очень большими стаями и завидев человека начинают выпрашивать у него еду. Если вы отвернетесь то они могут и украсть вашу еду. Агрессивные задницы как правило средних и больших размеров. Большинство полных задниц относятся именно к этой разновидности.


AVK>>>Есть, я о них тоже подумал. Но в случае джавы и дотнета решение более кардинальное.


VD>>И все же те же типизированные коллекции вручную делать очень геморойно. Шаблоны бы очень даже пригодились бы.


AVK>Ну разве что в для этого, они для этого изначально и задумывались. А вот те извращения которые в плюсах воротят дотнету вряд ли нужны. А то наворотят, а потом возмущаются что компилеры между собой несовместимы.
... << RSDN@Home 1.0 alpha 13 (developers build)>>
AVK Blog
Re[24]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 22.11.02 09:07
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


S>>Это где? Я в основном через ньюсы форумы смотри и насчет новых фич не в курсе.


AVK>Посмотри начиная отсюда

AVK>http://www.rsdn.ru/Forum/?mid=115539
Автор: AndrewVK
Дата: 16.10.02


Да, видно невооруженным глазом, что на шарпе оно получилось куда проще и понятней, чем на С++ И, помоему, ситуация, когда в наследнике есть функции с теми же именами, не обрабатывается (хотя я может просто не понял).
Равно как и не допускается вызов виртуальных функций "потомка" из "предков". Т.е. это действительно не наследование.

S>>Хе-хе, в С++ (в одной из промежуточных версий Cfront) агрегация с подключением агрегируемых объектов наружу была когда-то (делегированием называлась), выкинули нафиг в виду чрезмерной сложности использования и вместо нее вставили множественное наследование


AVK>Теперешний дотнет это не тогдашний С++.


Это ничего не меняет.

AVK>>>Это который?


AVK>Ссылку дай, а то там много сообщений было.


http://www.rsdn.ru/forum/?mid=135832
Автор: Sergey
Дата: 20.11.02


S>>Ну и постепенно выясняется, что не все там так просто и не все лучше


AVK>В этом мире вобще редко что бывает безоговорочно лучше или хуже. Что то приобретаем, в чем то проигрываем. Главное чтобы первого было больше.


А второго — поменьше. Просто, на мой взгляд, в данном случае проигрываем неоправданно много.

S>>А я говорил о том, что в шарпе не хватаем многих языковых фич, которые есть в С++.


AVK>Давай так — тебе не хватает. А вот мне хватает. Эту самую хитрую эмуляцию подключения реализаций я наваял примерно в таком же топике. Нужды в ней я ни разу не испытал.


Не, я все таки прицитирую Буча: "Множественное наследование — как парашют; необязательно пользоваться им часто. Зато, когда возникает необходимость, без него не обойтись".

S>>Возникает вопрос — а какого хрена поддержку МН не внесли в язык?


AVK>Ох и надоело мне уже тебе по сотому разу одно и то же говорить — в рантайм поддерку нужно вносить, прежде всего в рантайм. В языке его можно только эмулировать, как к примеру сделали в Эйфеле.


Ну и замечательно. Эмулировать, так эмулировать. Главное, чтоб оно было и работало.

AVK>>>Тогда на каком основании ты отрываешь от шарпа его рантайм и пытаешься его в этом виде сравнивать с С++?


S>>Мля, опять сказка про белого бычка по третьему кругу. На таком основании, что конструкцию, которая легко и просто выражается на С++ я вынужден не просто записывать, а эмулировать в шарпе. Что сложнее, хуже понимается и поддерживается и т.д.


AVK>Тьфу ты блин, с тобой невозможно спорить. Я тебе про фому а ты мне про ерему? Ну нафига вносить фичу в язык если она поддерживается рантаймом? Просто шоб было?


Не шоб было, а шоб можно было этой фичей пользоваться.

AVK>Есть в рантайме делегаты, но нам мало, надо еще в язык что то похожее воткнуть.


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

AVK>И пофигу что это только внутри сборки будет доступно, зато язык теперь стал крут немеряно.


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

AVK>Это точно как плюсовые эксепшены, которые Влад поминал. Надо рантайм было стандартизовать, так нет же, воткнули исключения в язык.


А ты предпочел бы видеть С++ без исключений? А я — нет.

AVK>Теперь у нас С++ поддерживает исключения! А толку то?


Толк есть.

AVK>Один фиг в коме свое эмулировать приходиться.


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

AVK>>>Непосредственное. Я могу так сделать на шатрпе а ты на С++ не можешь. Вот и вся сказка.


S>>Проксю на лету сгенерить? А надо? Чем хуже сгенерить ее перед компиляцией специальной тулзой?


AVK>А если заранее не известен конкретный тип удаленного объекта?


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

AVK>Будешь с собой тулзу таскать?


Зачем? Толку от нее все равно не будет.

AVK>Да нет, твоя фраза была что мол на шарпе нельзя делать сложные вещи потому как сам он слишком простой. А то что в чем то мы потеряли, переходя на дотнет я как бы в курсе. Причем таких вещей заметно больше чем ты тут поминал. Но вот положительных вещей заметно больше.


S>>>>Да, и если добавим в C# множественное наследование — язык станет лучше.


AVK>>>Вот, опять начинаешь. МН вызовет много лишних проблем, не в языке, нет, а в том самом рантайме который ты пытаешся оторвать.


Ты ж утверждал, что не видишь никаких трудностей в реализации поддержки МН рантаймом:

"S>Трудно реализовать, особенно в сочетании с полиморфизмом, вот и шагают.

AVK>>>Ой ли. Не сложнее рефлекшена. Сотни мегабайт исходников, а множественное наследование трудно реализовать. Не смешно. А AVK>>>полиморфизм тут вобще не причем, множественное наследование интерфейсов есть и в джаве и в дотнете.

"

AVK>>>Только отрывается он вместе с мясом. Меняешь язык сказывается на рантайме, меняешь рантайм, сказывается на языке. Плохо это или хорошо это отдельный вопрос, но так оно есть.


Ну-ну. В Эйфеле, значит, МН реализовали, и на рантайме это не сказалось, а вот если в шарпе реализуем, так все развалится

AVK>>>Ты будешь создавать на стеке объекты для полиморфных списков? Ну ну.


S>>Что такое полиморфный список и зачем он нужен?


AVK>А ты что, звезды на небе полиморфно сортировать собрался?


Я вообще не понимаю, при чем тут полиморфизм.

AVK>>>Описался. Я имел ввиду всякие int, byte и иже с ними. Простыми по моему называются.


S>>Тогда совсем не понимаю. Зачем их в объекты заворачивать? Или ты не про С++ говоришь?


AVK>Затем чтобы с ними работать полиморфными алгоритмами, мы ведь о полиморфных алгоритмах говорим?


Мы вроде говорили об обобщенных (generic) алгоритмах, а вовсе не о полиморфных.

AVK>Или ты знаешь другой способ?


Конечно. Шаблоны.

AVK>>>Теперь понятно. Такая задачка решается на шарпе элементарно, без всяких извращений. Рефлекшена вполне достаточно. Пишешь класс который в конструкторе перебирает свои методы (лучше их пометить атрибутами, чтобы он перебирал только те что нужно, или придумать какое нибудь соглашение об именовании, вроде как если основная функция foo() то все ее подфункции foo1() foo2() и т.д.). На основании этих методов составляешь табличку (лучше хеш-табличку, чтобы искать побыстрее). Ну а при вызове функции находишь в хеше подходящий метод и вызываешь его. Все, теперь осталось только дописывать свои функции. Всякие доп. фичи легко описать при помощи атрибутов.


S>>Код, пожалуйста.


AVK>Ну нифига себе. Давай я тебе только пример использования напишу, а то что это можно реализовать ты поверишь мне на слово?


Да я верю. Это и на VB можно реализовать, вопрос в качестве реализации. А пример использования ты не по теме привел.

S>> Интересно посмотреть, насколько кривее/прямее это решение, чем известные мне С++'ные решения. У некоторых из них, кстати, только один существенный недостаток — низкая производительность.


AVK>А ты как хотел? За все надо платить. В данном случае производительность потеряется на поиске и одном лишнем вызове. Т.е. сначала вызов основного метода, определение типа параметров,потом поиск в хеше нужного метода и наконец вызов того что нашли. Но вобще то сама постановка задачи предполагает определенный оверхед, любой способ все равно приведет к примерно такой же последовательности действий.


Не обязательно. В С++ ситуация с мультиметодами такова — либо требуется модифицировать всю иерархию при добавлении в нее нового класса (плохая пооддерживаемость кода, большая вероятность появления ошибок), но при этом почти никакого оверхеда, либо оверхед там, где его можно было бы избежать.

S>>Неа. Я смотрю на это с другой точки зрения — язык имеет синтаксис для доступа к атрибутам, а уж как оно там внутри реализовано, дотнетовским рантаймом или еще как — это дело десятое.


AVK>Типичный подход сишника. Для дотнета не катит хотя бы потому что компиляторов много, а вот классы должны быть совместимы. Посему мне плевать какой там есть синтаксис. Если язык CLS-compliant то значит он, этот синтаксис, обязан быть. Главный здесь рантайм.


Да, блин... Если мне в некоем спецаилизированном языке атрибуты нафиг не нужны, зачем мне для них иметь синтаксис?

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


AVK>Не, мне уже смешно. С++ разрабатывался как самостоятельный язык. Шарп как примочка к дотнетовскому рантайму. Совсем разницы не ощущаешь?


Очень уж у тебя узкий взгляд на вещи.

AVK>>>А без рантайма это фигня полная, никому не нужное извратство.


AVK>Я счас кричать начну. С# НЕЛЬЗЯ ОБСУЖДАТЬ В ОТРЫВЕ ОТ РАНТАЙМА, ОНИ НЕРАЗДЕЛИМО СВЯЗАНЫ, ОДИН ЯВЛЯЕТСЯ ПРОДОЛЖЕНИЕМ ДРУГОГО.


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

AVK>Ну как можно говорить о характеристиках самолета в целом, имея при этом только его кокпит к примеру?


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

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


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

AVK>>>А про что?


S>>Я ж говорю — про Loki::Functor. Или boost::bind, дополняющий Loki::Functor там, где не обязательно иметь возможность удобно записать тип делегата, но нужна более высокая производительность.


AVK>Давай ситуацию немножко проясним — последний раз что то серьезное на С++ я писал лет 5 назад наверное. Поэтому "Loki::Functor или boost::bind" мне ни о чем не говорят.


Пять лет назад о делегатах никто и не заикался. На каком основании ты утверждаешь, что С++ реализации делегатов — полное дерьмо, если с ними не знаком?

S>>А функциональность у них очень простая — Functor является делегатом для вызова метода класса или функции с произвольным количеством параметров и возвращаемым типом, BindFirst — функция, принимающая два параметра (Functor и что-нибудь еще) и возвращающая новый Functor, имеющий на один параметр меньше, чем исходный. При вызове нового функтора будет вызываться исходный, в качестве первого параметра которого подставиться переданное в BindFirst значение. Применяется это куда проще, чем описывается:


S>>

S>>
S>>struct A
S>>{
S>>   void foo(int a, int b);
S>>};

S>>void f()
S>>{
S>>  A a;
S>>  Functor<void, TYPELIST_2(int, int)> cmd1(&a, &A::foo);
S>>  Functor<void, int> cmd2(BindFirst(cmd1, 10));
S>>  cmd2(20); // то же самое, что и a.foo(10, 20)
S>>  Functor<void> cmd3(BindFirst(cmd2, 30));
S>>  cmd3(); // эквивалентно a.foo(10, 30)
S>>}
S>>


AVK>Мда

AVK>1) Запись куда более монстроидальна чем то что в шарпе, а главное намного хуже читается, поскольку неочевидна.

Для любого человека, знающего С++ и библиотеку Loki, такая запись вполне очевидна. Хотя, конечно, синтаксис не подарок.

AVK>2) Небезопасно, т.е. получается некая цепочка. Если произошел сбой в каком то звене то все остальные получат шиш.


Нет тут никакой цепочки. Строка Functor<void, int> cmd2(BindFirst(cmd1, 10)); просто обеспечивает передачу числа 10 в качестве первого аргумента cmd1 при вызове cmd2. Для цепочек другие конструкции используются. А, кстати, как себя поведет цепочка шарповских делегатов, если в одном из ее звеньев кинут исключение?

AVK>3) А отцепить что нибудь можно, так чтобы остальные остались?


А зачем, если можно не прицеплять? Надо тебе вызывать делегат с двумя параметрами — используй cmd1.

AVK>4) Как с потокобезопасностью?


Нормально. Класс Functor имеет шаблонный параметр, отвечающий за стратегию потокобезопасности. Если нужна какая-то особо хитрая блокировка, можешь для нее свой класс написать. В библиотеке есть три класса блокировок, реализующие 99% процентов повседневных потребностей — полное отсутствие всяческой синхронизации, блокировка критическими секциями (если говорить про Win32) и двойная блокировка.

AVK>5) А если функтор создать в одной dll, а вызывать методы в другой, работать будет?


Почему нет?

AVK>6) А если эти дллели еще к тому же скомпилированы разными компиляторами?


Тут действуют обычные для разных компиляторов С++ правила

AVK>7) А вот еще в шарпе есть такая штука как переменное количество параметров. С этим я понимаю вобще писец. printf и иже с ними то есть так не вызовешь.


Шарповское "переменное количество параметров" — это вообще курам на смех, они же одного типа обязаны быть. В С++ вместо этого в качестве параметра можно передать любой подходящий контейнер.

AVK>Короче это еще хуже того что я видел.




AVK>2Влад — может я чего не понимаю? Ты как старый сишник скажи — это действительно круче делегатов?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[25]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.11.02 10:08
Оценка:
Здравствуйте Sergey, Вы писали:

S>Да, видно невооруженным глазом, что на шарпе оно получилось куда проще и понятней, чем на С++


Эта штука погибче и понавороченней будет. К примеру можно хуки повставлять на методы, какую нибудь статистику посчитать, добавить на вызов методов делегаты, очень гибко управлять перекрытием методов (к примеру если есть одноименные методы в обоих классах то если имя метода начинается с буквы то берем метод из первого класса, а если с символа _ то из второго) и т.д. Да практически что угодно — ситуация на 100% под нашим контролем.
А потом — ты на реализацию не смотри — она один раз пишется. А использование не сильно сложнее множественного наследования в плюсах.
Обертку тоже теоретически тоже можно сделать прозрачной, т.е. создавать объект сразу new.

S> И, помоему, ситуация, когда в наследнике есть функции с теми же именами, не обрабатывается (хотя я может просто не понял).


Не обрабатывается. Там много чего не обрабатывается. Я же написал — это демонстрация возможности, лично мне необходимости в таком пока не было.

S>Равно как и не допускается вызов виртуальных функций "потомка" из "предков". Т.е. это действительно не наследование.


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

AVK>>Теперешний дотнет это не тогдашний С++.


S>Это ничего не меняет.


Меняет. Другие технологии, другие к ним требования, совсем другое железо.

AVK>>Ссылку дай, а то там много сообщений было.


S>http://www.rsdn.ru/forum/?mid=135832
Автор: Sergey
Дата: 20.11.02


В текущем состоянии нельзя. Доделать чтобы можно было вполне реально.

S>А второго — поменьше. Просто, на мой взгляд, в данном случае проигрываем неоправданно много.


Мне так не кажется. Пару месяцев назад был топик с Геннадием Васильевым, там я списочек приводил, что есть в дотнете и чего нет в С++. Шаблоны и МН перевещивает с большим запасом. По большому счету одного рефлекшена достаточно, с ним получаются очень красивые, полностью автоматические решения. На С++ такое недостижимо принципиально.

S>Не, я все таки прицитирую Буча: "Множественное наследование — как парашют; необязательно пользоваться им часто. Зато, когда возникает необходимость, без него не обойтись".


Блин, задолбали уже этой цитатой. Не вижу я смысла вводить поддержку МН из-за очень редких случаев. Я ж говорю — это в С++ компилятор этим занимается, поэтому когда им не пользуешься МН не мешает, в дотнете же придется вводить МН в рантайм, а это усложнение рантайма, неизбежный оверхед и много других нехороших вещей. И потом — нет МН нет и таких извращений каким была плюсовая Turbo Vision. Не, не хочу МН. Вот множественная реализация была бы полезна.

S>Ну и замечательно. Эмулировать, так эмулировать. Главное, чтоб оно было и работало.


То есть ты жить без МН не можешь?

AVK>>Тьфу ты блин, с тобой невозможно спорить. Я тебе про фому а ты мне про ерему? Ну нафига вносить фичу в язык если она поддерживается рантаймом? Просто шоб было?


S>Не шоб было, а шоб можно было этой фичей пользоваться.


Не уходи от разговора. Разговор о неотделимости шарпа от рантайма.


AVK>>Это точно как плюсовые эксепшены, которые Влад поминал. Надо рантайм было стандартизовать, так нет же, воткнули исключения в язык.


S>А ты предпочел бы видеть С++ без исключений? А я — нет.


Я бы предпочел видеть в С++ нормальный рантайм.

S>Толк есть.


Зачем тогда в коме свой механизм сделали?

AVK>>Один фиг в коме свое эмулировать приходиться.


S>Это говорит только о том, что библиотеки поддержки кома для С++ плохо спроектированы и еще хуже реализованы.


Еще один. Блин, ну все сплошь гении. Тока чего то ничего лучше кома для С++ я пока не вижу.
КОМ значит уроды делали. Корбу наверное тоже.

AVK>>А если заранее не известен конкретный тип удаленного объекта?


S>То этот объект нельзя использовать из С++. Вот и весь сказ.


Мда, нормально. За то МН есть

S>Интерфейс объекта должен быть извесен на этапе компиляции, это принципиальное ограничение С++.


И это похуже отстутствия МН будет, намного похуже.

AVK>>>>Вот, опять начинаешь. МН вызовет много лишних проблем, не в языке, нет, а в том самом рантайме который ты пытаешся оторвать.


S>Ты ж утверждал, что не видишь никаких трудностей в реализации поддержки МН рантаймом:


Я говорил про язык.

S>Ну-ну. В Эйфеле, значит, МН реализовали, и на рантайме это не сказалось, а вот если в шарпе реализуем, так все развалится


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

AVK>>А ты что, звезды на небе полиморфно сортировать собрался?


S>Я вообще не понимаю, при чем тут полиморфизм.


Ты же сказал что двоичный поиск без шаблонов надо каждый раз переписывать.

AVK>>Ну нифига себе. Давай я тебе только пример использования напишу, а то что это можно реализовать ты поверишь мне на слово?


S>Да я верю. Это и на VB можно реализовать, вопрос в качестве реализации. А пример использования ты не по теме привел.


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

S>Не обязательно. В С++ ситуация с мультиметодами такова — либо требуется модифицировать всю иерархию при добавлении в нее нового класса (плохая пооддерживаемость кода, большая вероятность появления ошибок), но при этом почти никакого оверхеда, либо оверхед там, где его можно было бы избежать.


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

AVK>>Типичный подход сишника. Для дотнета не катит хотя бы потому что компиляторов много, а вот классы должны быть совместимы. Посему мне плевать какой там есть синтаксис. Если язык CLS-compliant то значит он, этот синтаксис, обязан быть. Главный здесь рантайм.


S>Да, блин... Если мне в некоем спецаилизированном языке атрибуты нафиг не нужны, зачем мне для них иметь синтаксис?


Значит он не будет CLS-compliant. В стандарте явно оговорено подможество, обязательное к реализации.

AVK>>Не, мне уже смешно. С++ разрабатывался как самостоятельный язык. Шарп как примочка к дотнетовскому рантайму. Совсем разницы не ощущаешь?


S>Очень уж у тебя узкий взгляд на вещи.


Это у тебя узкий. Ты ко всему подходишь с точки зрения С++. Если в С++ так то значит и везде так.

AVK>>Я счас кричать начну. С# НЕЛЬЗЯ ОБСУЖДАТЬ В ОТРЫВЕ ОТ РАНТАЙМА, ОНИ НЕРАЗДЕЛИМО СВЯЗАНЫ, ОДИН ЯВЛЯЕТСЯ ПРОДОЛЖЕНИЕМ ДРУГОГО.


S>Не хочешь — не обсуждай. Ну а я обсуждал и не вижу причин, по которым мне не следовало бы этого делать.


Твои выводы не имеют смысла.

AVK>>Ну как можно говорить о характеристиках самолета в целом, имея при этом только его кокпит к примеру?


S>Неуместная аналогия. Давай лучше говорить об удобстве управления самолетом, не принимая во внимание, какие у него двигатели и крылья.


Очень даже уместная. Давай другую, пусть будет управление. Представь что на одном самолете все управление сосредоточено у пилота. А на другом распределено между всем экипажем. Можно в этом случае сравнивать управление пилота на одном и другом самолете? Я думаю нет. Рантайм дотнета берет на себя часть работы языка С++.

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


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


Вот вот. В С++ мощный язык, в дотнете рантайм. Акценты смещены. Поэтому и оценивать их можно только в комплексе. И говорить о том что шарп никуда не годится, не принимая во внимание его рантайм мягко говоря некорректно, так же как некорректно говорить о том что в С++ никуда не годный рантайм не принимая во внимание сам язык.

AVK>>Давай ситуацию немножко проясним — последний раз что то серьезное на С++ я писал лет 5 назад наверное. Поэтому "Loki::Functor или boost::bind" мне ни о чем не говорят.


S>Пять лет назад о делегатах никто и не заикался. На каком основании ты утверждаешь, что С++ реализации делегатов — полное дерьмо, если с ними не знаком?


С некоторыми я знаком.

AVK>>Мда

AVK>>1) Запись куда более монстроидальна чем то что в шарпе, а главное намного хуже читается, поскольку неочевидна.

S>Для любого человека, знающего С++ и библиотеку Loki, такая запись вполне очевидна. Хотя, конечно, синтаксис не подарок.


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

AVK>>2) Небезопасно, т.е. получается некая цепочка. Если произошел сбой в каком то звене то все остальные получат шиш.


S>Нет тут никакой цепочки. Строка Functor<void, int> cmd2(BindFirst(cmd1, 10)); просто обеспечивает передачу числа 10 в качестве первого аргумента cmd1 при вызове cmd2. Для цепочек другие конструкции используются. А, кстати, как себя поведет цепочка шарповских делегатов, если в одном из ее звеньев кинут исключение?


В шарпе не совсем цепочка. Там похитрее. И я имел ввиду сбои не при вызове, а при добавлении, т.е. ошибка при добавлении метода может поставить раком остальные.
Да, в шарпе можно на добавление/удаление повесить хуки и наворотить там что угодно, к примеру не всех добавлять или держать делегатов в хештаблице, чтобы не создавать кучу полей. Здесь как?

AVK>>3) А отцепить что нибудь можно, так чтобы остальные остались?


S>А зачем, если можно не прицеплять? Надо тебе вызывать делегат с двумя параметрами — используй cmd1.


Э, тут ты совсем не прав. Вот к примеру зацепил ты некий делегат на обновление чего нибудь. А тут тебе нужно все почистить и набить по новой. И по обновлению тебе ничего делать не надо. С делегатами просто — взял да удалил временно, сделал что тебе надо, а потом опять добавил. А здесь? А если не всех надо отрубать, а только каких то конкретных?

AVK>>5) А если функтор создать в одной dll, а вызывать методы в другой, работать будет?


S>Почему нет?


Потому что шаблоны в рантайме у С++ отсутствуют.

AVK>>6) А если эти дллели еще к тому же скомпилированы разными компиляторами?


S>Тут действуют обычные для разных компиляторов С++ правила


То есть работать не будет.

AVK>>7) А вот еще в шарпе есть такая штука как переменное количество параметров. С этим я понимаю вобще писец. printf и иже с ними то есть так не вызовешь.


S>Шарповское "переменное количество параметров" — это вообще курам на смех, они же одного типа обязаны быть.


Кто тебе такую фигню сказал? В качестве параметров ты можешь передавать все что угодно.

S> В С++ вместо этого в качестве параметра можно передать любой подходящий контейнер.


Да контейнер и в шарпе можно. Я про printf, помнишь?

AVK>>Короче это еще хуже того что я видел.


S>


Вот и мне смешно.
... << RSDN@Home 1.0 alpha 13 (developers build)>>
AVK Blog
Re[26]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 22.11.02 12:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


S>>Да, видно невооруженным глазом, что на шарпе оно получилось куда проще и понятней, чем на С++


AVK>Эта штука погибче и понавороченней будет. К примеру можно хуки повставлять на методы, какую нибудь статистику посчитать, добавить на вызов методов делегаты, очень гибко управлять перекрытием методов (к примеру если есть одноименные методы в обоих классах то если имя метода начинается с буквы то берем метод из первого класса, а если с символа _ то из второго) и т.д. Да практически что угодно — ситуация на 100% под нашим контролем.

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

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

AVK>Это агрегация. Но можно сделать чтобы допускалось, только это уже будет посложнее, придеться вводить дополнительный класс-коннектор (при использовании все останется так же, там ничего усложнять не надо).


Ну и замечательно. МН реализуется без поддержки рантайма — в чем проблема ввести его в язык? Что каждый не изобретал свой велосипед, а пользовался общепринятым.

AVK>Меняет. Другие технологии, другие к ним требования, совсем другое железо.


Угу. Только мозги у человеков все те же остались, не лучше и не худше. Если какой-то фичей было трудно пользоваться в 1985 году, с чего бы ей стало легче пользоваться в 2002?

S>>А второго — поменьше. Просто, на мой взгляд, в данном случае проигрываем неоправданно много.


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


Лично мне решения с применением рефлекшена красивыми не кажутся.

AVK>Блин, задолбали уже этой цитатой. Не вижу я смысла вводить поддержку МН из-за очень редких случаев. Я ж говорю — это в С++ компилятор этим занимается, поэтому когда им не пользуешься МН не мешает, в дотнете же придется вводить МН в рантайм, а это усложнение рантайма, неизбежный оверхед и много других нехороших вещей. И потом — нет МН нет и таких извращений каким была плюсовая Turbo Vision. Не, не хочу МН. Вот множественная реализация была бы полезна.


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

AVK>То есть ты жить без МН не можешь?


Иногда парашют просто необходим

AVK>>>Тьфу ты блин, с тобой невозможно спорить. Я тебе про фому а ты мне про ерему? Ну нафига вносить фичу в язык если она поддерживается рантаймом? Просто шоб было?


S>>Не шоб было, а шоб можно было этой фичей пользоваться.


AVK>Не уходи от разговора. Разговор о неотделимости шарпа от рантайма.


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

S>>А ты предпочел бы видеть С++ без исключений? А я — нет.


AVK>Я бы предпочел видеть в С++ нормальный рантайм.


Я, как ни странно, тоже. Но я, в отличие от тебя считаю, что язык первичен, а рантайм должен только обеспечивать корректную реализацию языка. Было бы очень не плохо, если бы производители компиляторов С++ под Win32 договорились и стандартизировали рантайм. То, что они этого не сделали, большое свинство с их стороны. Хорошо, что хоть язык-то стандартизировали, и теперь даже ленивая и сверхнаплевательски относящаяся к С++ программистам MS рвется делать ANSI/ISO совместимый компилятор С++.

AVK>Зачем тогда в коме свой механизм сделали?


Не вижу противоречия. Ком задумывался как бинарный стандарт и обязан был обеспечивать поддержку исключений вне языковых рамок. А вот делать нормальную библиотеку поддержки с трансляцией плюсовых исключений в комовские и обратно никто не стал, решили что и так перетопчутся.

AVK>>>Один фиг в коме свое эмулировать приходиться.


S>>Это говорит только о том, что библиотеки поддержки кома для С++ плохо спроектированы и еще хуже реализованы.


AVK>Еще один. Блин, ну все сплошь гении. Тока чего то ничего лучше кома для С++ я пока не вижу.

AVK>КОМ значит уроды делали. Корбу наверное тоже.

Ком эволюционировал, поэтому в нем неизбежно накапливались компромиссные (читай — кривые) решения, нужные только для обеспечения совместимости с ранее написанным кодом. Как и в С++, кстати. Кроме того, я говорил не о КОМе как таковом, а о библиотеках сопряжения С++ и КОМ. Например, об ATL. Вот его точно либо уроды писали, либо уроды его писателям дали слишком малый бюджет.

AVK>>>А если заранее не известен конкретный тип удаленного объекта?


S>>То этот объект нельзя использовать из С++. Вот и весь сказ.


AVK>Мда, нормально. За то МН есть


Нормально. Зато ошибки несоответствия типов проверяются на этапе компиляции.

S>>Интерфейс объекта должен быть извесен на этапе компиляции, это принципиальное ограничение С++.


AVK>И это похуже отстутствия МН будет, намного похуже.


Когда как. Иногда проверка типов компилятором нужнее.

AVK>>>>>Вот, опять начинаешь. МН вызовет много лишних проблем, не в языке, нет, а в том самом рантайме который ты пытаешся оторвать.


S>>Ты ж утверждал, что не видишь никаких трудностей в реализации поддержки МН рантаймом:


AVK>Я говорил про язык.


S>>Ну-ну. В Эйфеле, значит, МН реализовали, и на рантайме это не сказалось, а вот если в шарпе реализуем, так все развалится


AVK>В эйфеле реализовано ровно настолько чтобы он оставался эйфелем. Так можно и на шарпе сделать, не меняя языка.


Ну так за чем дело стало-то? Реализовали бы, никто б и вопросов не задавал.

AVK>Ты же сказал что двоичный поиск без шаблонов надо каждый раз переписывать.


Ну так или оверхед, связанный с полиморфизмом, или шаблоны.

S>>Да я верю. Это и на VB можно реализовать, вопрос в качестве реализации. А пример использования ты не по теме привел.


AVK>То есть? Я тебе показал как может выглядеть реализация столь необходимых тебе мультиметодов на шарпе.


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

AVK>Как это может быть реализовано я тебе тоже расписал.


Черт, как обычно, прячется в деталях.

AVK>А ты подумай о том что тип параметров тебе заранее не исзвестен — и сразу окажется что оверхеда будет море. Типы входных параметров определять надо? Надо.


Угу. Вызов виртуальной функции или dynamic_cast, не очень дорого.

AVK>Где то искать адрес соответствующего метода надо? Надо.


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

AVK>Вызывать этот метод, перекидывая ему параметры и забирая результат надо? Надо. Все, другого оверхеда в шарпе не будет.


Я и говорю — ничего нового по сравнения с плюсами шарп для реализации мультиметодов не предлагает.

AVK>>>Типичный подход сишника. Для дотнета не катит хотя бы потому что компиляторов много, а вот классы должны быть совместимы. Посему мне плевать какой там есть синтаксис. Если язык CLS-compliant то значит он, этот синтаксис, обязан быть. Главный здесь рантайм.


S>>Да, блин... Если мне в некоем спецаилизированном языке атрибуты нафиг не нужны, зачем мне для них иметь синтаксис?


AVK>Значит он не будет CLS-compliant. В стандарте явно оговорено подможество, обязательное к реализации.


Ну, допустем, будут там независимо от программиста какие-то предопределенные атрибуты генериться, доступа из языка к ним не будет ввиду отсутствия необходимости. Классы будут получаться CLS-compliant. Какие проблемы?

S>>Очень уж у тебя узкий взгляд на вещи.


AVK>Это у тебя узкий. Ты ко всему подходишь с точки зрения С++. Если в С++ так то значит и везде так.


Наоборот

S>>Не хочешь — не обсуждай. Ну а я обсуждал и не вижу причин, по которым мне не следовало бы этого делать.


AVK>Твои выводы не имеют смысла.


Твои тоже

AVK>Очень даже уместная. Давай другую, пусть будет управление. Представь что на одном самолете все управление сосредоточено у пилота. А на другом распределено между всем экипажем. Можно в этом случае сравнивать управление пилота на одном и другом самолете? Я думаю нет. Рантайм дотнета берет на себя часть работы языка С++.


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

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


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


AVK>Вот вот. В С++ мощный язык, в дотнете рантайм. Акценты смещены. Поэтому и оценивать их можно только в комплексе. И говорить о том что шарп никуда не годится, не принимая во внимание его рантайм мягко говоря некорректно, так же как некорректно говорить о том что в С++ никуда не годный рантайм не принимая во внимание сам язык.


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

AVK>>>Мда

AVK>>>1) Запись куда более монстроидальна чем то что в шарпе, а главное намного хуже читается, поскольку неочевидна.

S>>Для любого человека, знающего С++ и библиотеку Loki, такая запись вполне очевидна. Хотя, конечно, синтаксис не подарок.


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


А исходники библиотек для пользования библиотеками знать не обязательно, равно как и потроха дотнета для пользования делегатами. Я вот, например, не знаю, как boost::bind внутри устроен, но вполне успешно его использую.

AVK>>>2) Небезопасно, т.е. получается некая цепочка. Если произошел сбой в каком то звене то все остальные получат шиш.


S>>Нет тут никакой цепочки. Строка Functor<void, int> cmd2(BindFirst(cmd1, 10)); просто обеспечивает передачу числа 10 в качестве первого аргумента cmd1 при вызове cmd2. Для цепочек другие конструкции используются. А, кстати, как себя поведет цепочка шарповских делегатов, если в одном из ее звеньев кинут исключение?


AVK>В шарпе не совсем цепочка. Там похитрее. И я имел ввиду сбои не при вызове, а при добавлении, т.е. ошибка при добавлении метода может поставить раком остальные.


Любое исключение всегда может поставить раком все остальное, если возможность его возникновения не предусмотрена программистом. Поскольку в данном примере никаких завязок на слабо детерминированный рантайм нет, то и ошибка может быть только одна — нехватка памяти, и уж она-то гарантированно поставит раком все на свете. Кинет исключение, если сможешь на него адекватно отреагировать — (освободить часть памяти и вызвать f по-новой), не сможешь — все плохо. И все-таки, как себя ведет цепочка шарповских делегатов, если в одном из них возникает исключение?

AVK>Да, в шарпе можно на добавление/удаление повесить хуки и наворотить там что угодно, к примеру не всех добавлять или держать делегатов в хештаблице, чтобы не создавать кучу полей. Здесь как?


Еще раз повторяю — в этом примере никакого добавления/удаления не было, этот пример почти аналогичен тому, что приведен в MSDN в описании delegate keyword. Просто создание и вызов нескольких делегатов.

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

AVK>Э, тут ты совсем не прав. Вот к примеру зацепил ты некий делегат на обновление чего нибудь. А тут тебе нужно все почистить и набить по новой. И по обновлению тебе ничего делать не надо. С делегатами просто — взял да удалил временно, сделал что тебе надо, а потом опять добавил. А здесь? А если не всех надо отрубать, а только каких то конкретных?


В этом примере такого "прицепления" не было. Но, в принципе, можно.

AVK>>>5) А если функтор создать в одной dll, а вызывать методы в другой, работать будет?


S>>Почему нет?


AVK>Потому что шаблоны в рантайме у С++ отсутствуют.


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

AVK>>>6) А если эти дллели еще к тому же скомпилированы разными компиляторами?


S>>Тут действуют обычные для разных компиляторов С++ правила


AVK>То есть работать не будет.


Когда как.

AVK>>>7) А вот еще в шарпе есть такая штука как переменное количество параметров. С этим я понимаю вобще писец. printf и иже с ними то есть так не вызовешь.


S>>Шарповское "переменное количество параметров" — это вообще курам на смех, они же одного типа обязаны быть.


AVK>Кто тебе такую фигню сказал? В качестве параметров ты можешь передавать все что угодно.


Ну это просто неявный боксинг, в сочетании с тем фактом, что все объекты имеют общего предка. Это и на С++ эмулируется без проблем. Нотация, конечно, будет менее удобная.

S>> В С++ вместо этого в качестве параметра можно передать любой подходящий контейнер.


AVK>Да контейнер и в шарпе можно. Я про printf, помнишь?


Напрямую такое, естественно, не делается. Но при необходимости эмулируется.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[27]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.11.02 13:18
Оценка:
Здравствуйте Sergey, Вы писали:

S>Пока нет реализации и не сформулированы правила пользования, говорить о простоте использования вообще смысла нет


Реализовывать я не буду. Принципы я тебе описал.

S>Ну и замечательно. МН реализуется без поддержки рантайма — в чем проблема ввести его в язык?


Потому что МН без поддержки рантайма никому не нужна.

Извини, но конструктив теряется а письма пухнут, поэтому буду отвечать не на все.


S>Да не обязательно все в рантайм тащить. Если тебе что-то нужно сделать внутри, а наружу показать только результат работы, зачем выставлять наружу сам способ, которым работа выполняется.


Затем что языков в дотнете много. И есть еще такие технологии как ремоутинг.

AVK>>То есть ты жить без МН не можешь?


S>Иногда парашют просто необходим


Нет в случае МН таких случаев когда кроме него других способов нет.

AVK>>Не уходи от разговора. Разговор о неотделимости шарпа от рантайма.


S>А тут у нас в принципе разные позиции. Я не виже способа убедить тебя в том, что язык — это нечто большее, чем рантайм и не вижу способа, которым ты бы мог убедить меня в обратном. Соответственно, и разговор о неотделимости шарпа от рантайма смысла не имеет.


Тогда не имеет смысла наш разговор вобще. Завязываем?


AVK>>Я бы предпочел видеть в С++ нормальный рантайм.


S>Я, как ни странно, тоже. Но я, в отличие от тебя считаю, что язык первичен, а рантайм должен только обеспечивать корректную реализацию языка. Было бы очень не плохо, если бы производители компиляторов С++ под Win32 договорились и стандартизировали рантайм. То, что они этого не сделали, большое свинство с их стороны. Хорошо, что хоть язык-то стандартизировали, и теперь даже ленивая и сверхнаплевательски относящаяся к С++ программистам MS рвется делать ANSI/ISO совместимый компилятор С++.


А если попытаться понять причины этого?

AVK>>И это похуже отстутствия МН будет, намного похуже.


S>Когда как. Иногда проверка типов компилятором нужнее.


Ее в шарпе нет?

S>Ну так за чем дело стало-то? Реализовали бы, никто б и вопросов не задавал.


Видать не нужно никому. Мне по крайней мере точно не нужно.

AVK>>Ты же сказал что двоичный поиск без шаблонов надо каждый раз переписывать.


S>Ну так или оверхед, связанный с полиморфизмом, или шаблоны.


Да


S>Ну, во первых, это не реализация, а использование непонятно какой реализации. Код, который ты привел, совершенно неинформативен. Проще говоря, его-то как раз можно было и не писать . Если тебе это не интересно обсуждать, ради бога — не обсуждай, никто ведь не заставляет.


Я тебе алгоритм реализации описал. Недостаточно? Большего не будет.

S>Черт, как обычно, прячется в деталях.


Знаешь сколько я подобных схем реализовывал? Детали мне известны. В данном случае никаких извратств нет, все штатно.

AVK>>А ты подумай о том что тип параметров тебе заранее не исзвестен — и сразу окажется что оверхеда будет море. Типы входных параметров определять надо? Надо.


S>Угу. Вызов виртуальной функции или dynamic_cast, не очень дорого.


А кто говорил что дорого? Но по сравнению с простым call немаленький оверхед, тем больший чем больше параметров.

S>Тут уже возможны варианты — в "грубом" подходе соответствующая функция явно прописывается в коде (минус — глубокие зависимости между классами),


Не выйдет — типы параметров при компиляции не известны, значит и адрес станет известен только в момент вызова. Так что надо искать.

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


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

S> Альтернатива — поиск нужной функции в массиве или другом контейнере (за логарифмичекое время).


Так я и предлагал в хеш-таблице хранить. Сильно быстрее вряд ли что есть.

AVK>>Вызывать этот метод, перекидывая ему параметры и забирая результат надо? Надо. Все, другого оверхеда в шарпе не будет.


S>Я и говорю — ничего нового по сравнения с плюсами шарп для реализации мультиметодов не предлагает.


При чем здесь шарп. Ничего лучше тебе никто не предложит. Шарп просто обеспечивает более красивый и удобный код.

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


Я же говорил — правомерность тесной интеграции шарпа с его рантаймом я здесь не обсуждаю. Это есть. Так давай от этого и плясать.

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


Почти дословно — шарп слишком прост чтобы на нем можно было писать сложные системы.

S> Я возмущался необоснованным отсутствием в нем некоторых фич.


Ну да, чего то не хватает. Шаблоны добавят. Много чего еще добавят — анонимные методы, возможность разрезания исходника одного типа на несколько файлов.
Слава богу, в отличие от С++ он, как и джава эволюционирует с приемлемой скоростью.

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


S>А исходники библиотек для пользования библиотеками знать не обязательно, равно как и потроха дотнета для пользования делегатами.


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

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


Не, такое за отмазу не катит. Потенциальная небезопасность она и есть потенциальная небезопасность. И детерминированность компилятора не при чем.

S>и уж она-то гарантированно поставит раком все на свете. Кинет исключение, если сможешь на него адекватно отреагировать — (освободить часть памяти и вызвать f по-новой), не сможешь — все плохо. И все-таки, как себя ведет цепочка шарповских делегатов, если в одном из них возникает исключение?


Штатно вызов останавливается, исключение возвращается вызвавшему.

AVK>>Да, в шарпе можно на добавление/удаление повесить хуки и наворотить там что угодно, к примеру не всех добавлять или держать делегатов в хештаблице, чтобы не создавать кучу полей. Здесь как?


S>Еще раз повторяю — в этом примере никакого добавления/удаления не было, этот пример почти аналогичен тому, что приведен в MSDN в описании delegate keyword. Просто создание и вызов нескольких делегатов.


При чем здесь тот пример? Я спрашиваю — можно ли в локовском функторе повесить хуки на добавление и удаление новых методов. Да или нет?

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


Тогда какое отношение это имеет к мультикаст делегатам?

S>В этом примере такого "прицепления" не было. Но, в принципе, можно.


В принципе или можно?

AVK>>То есть работать не будет.


S>Когда как.


Когда как значит не будет, поскольку гарантии нет.


AVK>>Кто тебе такую фигню сказал? В качестве параметров ты можешь передавать все что угодно.


S>Ну это просто неявный боксинг,


Для value-типов. И что?

S> в сочетании с тем фактом, что все объекты имеют общего предка. Это и на С++ эмулируется без проблем. Нотация, конечно, будет менее удобная.


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

S>Напрямую такое, естественно, не делается. Но при необходимости эмулируется.


Вот видишь, не так уж все и хорошо в королевстве датском.
... << RSDN@Home 1.0 alpha 13 (developers build)>>
AVK Blog
Re[21]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.02 17:05
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Где смотреть? Я думал, это то решение, о котором Влад говорил. То — убогое.


И что, сможешь объяснить чем?
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1056.29394 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Стандарт, говоришь :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.02 17:56
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ECMAЕсли бы MS не подсуетилась вовремя в ECMA, то сейчас слова "стандарт" не фигурировало бы.

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

ECMAС одной стороны, так было бы честнее, с другой стороны — менее значимо с точки зрения маркетинга.

И чем это было бы чеснее? В твоих словах чуствуется какя-то обиженность. Но вот почему? Почему кгда кто-то стандартизирует свою работу — это не честно или плохо. Я это вижу так если отдать развитие языка и рантайма на сторону то рано или поздно получится та же фигня что с С++ (все начнет загибаться не отвечая велениям времени).


ГВ>Ну версия и версия, а так — "стандарт"! Большинству же нет дела до того, что на самом деле это — буффонада в чистом виде.


Эта бухонада уже привела к переносу нэта на 5 платформ и создании одной назависимой реализации. Можешь злопыхать сколько влезет, но от нее есть пользоа. Ну и можешь не слышать что тебе говорят, но стандартом нет не перестанет быть даже без формальной стандартизации.

ГВ>Кстати, такой "стандартизацией" MS только спровоцировала дополнительные наезды на себя (и не только с моей стороны ).


И с чей же еще? Наверно Моно наезжает.

ГВ>Стандарту C++ всего-то 4 года от роду. Я имею ввиду — стандарту, принятому несколькими производителями а не стандарту, фактически принадлежащему кому-то одному. Это раз.


Ну это демагогия. Стандарт — это не комунистическая идилия, а сего лишь формализованные ограничительные рамки.

ГВ>Неправомерно сравнивать C++ и .NET. .NET — платформа, C++ — язык, а не инфраструктура. На нём можно сделать инфраструктуру, но языком он от этого быть не перестаёт. Правомерно сравнивать C++ <-> C#. Это два.


Очень даже правомерно. C# сравнивать можно только учитывая тот самый рантайм. Создать что-то на языке, без рантайма нельзя в приципе. Это будет рекламные лозунги. С++ так же неотделим от CRT, компиляторов и линкеров, как C# от CLR. И в виду того что на сегодня компонентые свойства языка в основном диктуются рантаймом, как раз и правомерно становится говрить о С++ vs. .NET. Пробема С++ в том что его разработчити пытаются уйти от рантайма и заниматься чистым искуством, но на сегодня это уже просто уход от ответственности. Именно из-за этого пояляется необходимость в КОМ-е и КОРБ-е. И именно из-за этого они выглядят так криво и распухши.


ГВ>О каких компиляторах речь? Если это компиляторы, генерирующие MSIL, то они и не могут нарушить функционирования самого интерпретатора MSIL.


Ну это просто некомпетентность. MSIL не интерпретироуется. И уж тем более не может содержать каких либо ограничений. MSIL это ассемблер вируальной машины. Перед исполнением он компилируется в машинный код. На MSIL можно скомпилировать любой С++-код. Другой вопрос, что МС++ —
то не просто компилятор порождающий MSIL. Это компилятор позволяющий писть программы для CLR. А это уже совсем другое дело. Вот там не соотвествий стандарту море.

ГВ>Так что это — не аргумент. Вот когда появятся полностью независмые от MS реализации .NET, числом эдак штук 10 — тогда и посмотрим, с какой версией устаревшего на тот момент API они будут совместимы. Это три.\


Одной достаточно. И она уже есть.

ГВ>C++ мне (и не только мне) нравится именно как язык, как средство выражения мыслей человека. Если завтра C++ в полном виде появится на .NET (в полном! а не в managed-трансформации), то я двумя руками буду "за" развитие .NET (наверное).


Я уже говорил, что МС++ позволяет скмпилировать любой С++-код. Ну естествненно соместимый с VC7. И разница только в том что на нем можно создавать GC-классы. Со всеми расширениями. Причем в нэт мошь С++ неимоверно повышается, так как ему становятся доступны все возомжности нэта. Но это уже получается совсем другой язык. Ну а если не использовать эти расширения, то получится то-же убогий С++ но скомпилированный в промежуточный байт-код. Что с этого толку?

ГВ>Но когда вместо языка подсовывают букет библиотечных вызовов, утверждая, что это и есть "современный e-объектный e-язык e-бизнеса" на который нужно равняться C++... Влад, это даже не смешно...


Да не смешно твое понимение нэта. Нэт — это не библиотека. Библиотекти конечно важны, но это еще не все.

ГВ>В смысле отношения к стандарту, любые изменения (и расширения) — суть нестандартные расширения. Дальше доказывать? Из этого следует, что MS-овские стандарты фактически меняются как погода осенью, что прямо выбивает почву из-под ног потенциальных конкурентов.


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

ГВ>Сначала нужно доказать, что от C++ "пахнет песком". Влад, ты поднимал эту тему в самом начале этой ветки. Поскольку формулирование определений ещё не закончено (тобой, кстати), то отвечать в данном постинге по существу я не могу.


Ну про отвественность речь и не идет. Но я так и непонял что нужно формулировать? И главное зачем? Вы (беззаветные поклонники С++) ведь не хотите видеть недостатков. Вы упираетесть в некоторые достоинства (мноие из которых спорны) отметая любую мысль способную ввергнуть в сомнения. Вы неиспользуете рантай так как этого требует современная ситуация на рынке софта и убеждаете что он на фиг не нужен. Самая частая фраза "а зачем его вообще рассмтиривать?". "С++ же язык! Давайте изолируем его от реального мира и...". Вот только мир от этого не изменяется. С++ сложен. Неимоверно сложен. Что с того что я могу писать и читать программы на нем. Ведь на том же Шарпе я тоже могу писать программы, но на порядок быстрей и надежней.

VD>>Важна не консервативность которую ты называешь неизменностью стандарта, а обратная совместимость. Тот же С++ можно было спокойно обоготить современными возможностями без ущерба для обратной совместимости. Но делать этог не хотят. От сюда и рождаются все эит .NET, Явы и


ГВ>Про современные возможности я уже говорил. Давай определения, тогда и прооппонирую по существу.


С чем?

ГВ>Ну и отлично!


Что отлично? 100% нибудет никогда и ни у кого. Сложность так велика, что малейший нюанс приводит к несовестимости. С++ нужно срочно реформировать. Нужно вводить давно наболешие рашения, изменять неказистые и т.п.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1056.29394 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Производительность Win2k на Duron 800/384...
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.02 17:58
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


Для 98-х обещает. Открой хелп — убедишсь сам.

AVK>Это я говорил. И говорил не про SDK а про рантайм. SDK я туда вкрячить не пытался. B 98 для рантайма поддерживается.


И SDK так везде работает. Я уже не раз слышел.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1056.29394 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Производительность Win2k на Duron 800/384...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.11.02 19:37
Оценка:
Здравствуйте VladD2, Вы писали:

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


VD>Для 98-х обещает. Открой хелп — убедишсь сам.


Рантайм.

AVK>>Это я говорил. И говорил не про SDK а про рантайм. SDK я туда вкрячить не пытался. B 98 для рантайма поддерживается.


VD>И SDK так везде работает. Я уже не раз слышел.


http://support.microsoft.com/default.aspx?xmlid=fh;EN-US;netframewk#sys_req

System Requirements
The .NET Framework SDK is supported on the following platforms with a minimum of Microsoft Internet Explorer 5.01 (Internet Explorer 6.0 is available on the installation CD):

Microsoft Windows 2000 with the latest Windows service pack and critical updates available from http://www.microsoft.com/security
Microsoft Windows XP
Microsoft Windows NT 4.0 (ASP.NET is not supported on Windows NT 4.0)
Microsoft Windows Millennium Edition (Windows Me) and Windows 98.
These platforms are only supported during run time. Although the SDK will not run on these platforms, you can build applications with the .NET Framework that will run on these platforms.


Не веришь мне поверь MS.
... << RSDN@Home 1.0 alpha 13 (developers build)>>
AVK Blog
Re[22]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 26.11.02 08:32
Оценка:
Здравствуйте, VladD2, Вы писали:

S>>Где смотреть? Я думал, это то решение, о котором Влад говорил. То — убогое.


VD>И что, сможешь объяснить чем?


Я думал, это очевидно Во-первых, оно не годится для библиотечных (неизменяемых) классов, во-вторых — для "бриллиантового" наследования. Хотя, конечно, и ему часто (в том числе на С++) находится применение.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[23]: Почему C++ - не просто язык ООП
От: jazzer Россия Skype: enerjazzer
Дата: 26.11.02 09:53
Оценка:
Здравствуйте, Sergey, Вы писали:

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


S>>>Где смотреть? Я думал, это то решение, о котором Влад говорил. То — убогое.


VD>>И что, сможешь объяснить чем?


S>Я думал, это очевидно :) Во-первых, оно не годится для библиотечных (неизменяемых) классов, во-вторых — для "бриллиантового" наследования. Хотя, конечно, и ему часто (в том числе на С++) находится применение.


Да и, в конце концов, "бриллиантовым" наследованием множественное наследование не исчерпывается ведь :)
А почему-то всегда при упоминании м.н. вспоминают его и начинают материть :))
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[23]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.02 11:16
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Я думал, это очевидно Во-первых, оно не годится для библиотечных (неизменяемых) классов, во-вторых — для "бриллиантового" наследования. Хотя, конечно, и ему часто (в том числе на С++) находится применение.


Прекрасно она подойдет для неизменяемых классов. Словосочетание то какое придумал! Ну а без бриллиантового переживем уж точно.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1060.25240 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.02 11:16
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Да и, в конце концов, "бриллиантовым" наследованием множественное наследование не исчерпывается ведь

J>А почему-то всегда при упоминании м.н. вспоминают его и начинают материть

И не зря начинают. МН это одина из састовляющих делающая С++ черезмерно сложным языком. Все эти Шарпы я Явы ставят перед собой задачу максимального упрощения при приемлимых возможностях.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1060.25240 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Почему C++ - не просто язык ООП
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 27.11.02 21:44
Оценка:
Здравствуйте, VladD2, Вы писали:

[Оверквотинг — давить!]

VD>И не зря начинают [материть]. МН это одина из састовляющих делающая С++ черезмерно сложным языком. Все эти Шарпы я Явы ставят перед собой задачу максимального упрощения при приемлимых возможностях.


Влад, извини, что вмешиваюсь, но не мог бы ты дать более ясное определение "чрезмерно сложного" языка. Каковы критерии такой оценки? И кто, когда и почему её накладывает?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[24]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 28.11.02 08:11
Оценка:
Здравствуйте, VladD2, Вы писали:

S>>Я думал, это очевидно Во-первых, оно не годится для библиотечных (неизменяемых) классов, во-вторых — для "бриллиантового" наследования. Хотя, конечно, и ему часто (в том числе на С++) находится применение.


VD>Прекрасно она подойдет для неизменяемых классов. Словосочетание то какое придумал!


Пример кода, пожалуйста. Есть два класса A и B (не шаблоны, а классы), менять которые нельзя. В каждом — по 30 открытых функций, имена не пересекаются. Нужен класс C, наследник от A и B, реализующий все 60 функций порядок наследования не важен. Вот и как его без "ручного" переопределения этих 30 функций на одних шаблонах забацать?

VD>Ну а без бриллиантового переживем уж точно.


Пример отсюда http://www.rsdn.ru/forum/Message.aspx?mid=135832
Автор: Sergey
Дата: 20.11.02
без бриллиантового наследования перепиши для начала, а там посмотрим, где больше недостатков получается.

PS:
че-то десктоп несколько сообщений проглотил, гад
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[25]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.11.02 16:09
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Пример кода, пожалуйста. Есть два класса A и B (не шаблоны, а классы), менять которые нельзя.


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

S>В каждом — по 30 открытых функций, имена не пересекаются. Нужен класс C, наследник от A и B, реализующий все 60 функций порядок наследования не важен. Вот и как его без "ручного" переопределения этих 30 функций на одних шаблонах забацать?


Да точно так же как в С++. Ты еще раз прочитай то что я прдлагал.

VD>>Ну а без бриллиантового переживем уж точно.


S>Пример отсюда http://www.rsdn.ru/forum/Message.aspx?mid=135832
Автор: Sergey
Дата: 20.11.02
без бриллиантового наследования перепиши для начала, а там посмотрим, где больше недостатков получается.


Два ифа поствишь и проблема решена.

S>PS:

S>че-то десктоп несколько сообщений проглотил, гад

Пользуйся хоумом, он не глатает.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1062.31616 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.11.02 16:14
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

VD>>И не зря начинают [материть]. МН это одина из састовляющих делающая С++ черезмерно сложным языком. Все эти Шарпы я Явы ставят перед собой задачу максимального упрощения при приемлимых возможностях.


ГВ>Влад, извини, что вмешиваюсь, но не мог бы ты дать более ясное определение "чрезмерно сложного" языка. Каковы критерии такой оценки? И кто, когда и почему её накладывает?


Да по жизни. Вот глянь, например:

// ascDispCorrectors.h : Declaration of the CascServer
/////////////////////////////////////////////////////////////////////////////

#if !defined(ASCDISPCORRECTORS_H)
#define ASCDISPCORRECTORS_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

// Корректор диспача для метода Execute
// В скриптовых языках вместо указателя на диспатчь предается 
// (VT_VARIANT | VT_BYREF). Это приводит к неправильной работе метода
// (выдаче сообщения "TypeMismatch"). Данный класс заменяет IDispatchImpl<>
// и производит коррекцию первого параметра метода с DISPID равным dispidExecute.
template <DISPID dispidExecute, class T, const IID* piid, const GUID* plibid = &CComModule::m_libid, WORD wMajor = 1,
WORD wMinor = 0, class tihclass = CComTypeInfoHolder>
class ATL_NO_VTABLE IDispatchImplSmartExec : 
    public IDispatchImpl<T, piid, plibid, wMajor, wMinor, tihclass>
{
public:
// IDispatch
    STDMETHOD(Invoke)(DISPID dispidMember, REFIID riid,
        LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult,
        EXCEPINFO* pexcepinfo, UINT* puArgErr)
    {
        if(dispidExecute == dispidMember)
        {
            // Проверить в варианте с именованными аргументами. OK
            ASC_RET_E_POINTER(pdispparams); // Явно неправильная ситуация.
            if(pdispparams->cArgs < 1) // Явно неправильная ситуация.
                return E_INVALIDARG;
            
            if(pdispparams->rgvarg[0].vt == (VT_VARIANT | VT_BYREF))
            {
                // Кешируем указатель на переданный в нулевом параметре 
                // (с именем Cursor) вариант для упрошения дальнейшей работы.
                VARIANT * pVar = pdispparams->rgvarg[0].pvarVal;

                // Для начала нам нужно убедится, что переданный в качесве параметра
                // VARIANT содержит типы данных, с которыми мы способны работать...
                if(pVar->vt == VT_EMPTY || (pVar->vt == VT_DISPATCH && pVar->pdispVal))
                {
                    // Нам необходимо вынуть из передаваемого по ссылке VARIANT-а
                    // указатель на диспачь в случае если он там лежит (vt != VT_EMPTY).
                    // И перезаложить его в нулевой параметр, указав тип диспатчь.
                    // Если переданный вариант содержит VT_EMPTY, то нам нужно создать
                    // временный указатель на вариант и поместить указатель на его 
                    // в нулевой параметр.

                    // Говорим что в нулевом параметре всегда передается 
                    // VT_DISPATCH | VT_BYREF. Если указать, что передается VT_DISPATCH
                    // (не по ссылке), то в случае когда курсор создается функцией Execute
                    // (а это происходит когда переданный параметр содержит VT_EMPTY).
                    
                    pdispparams->rgvarg[0].vt = VT_DISPATCH | VT_BYREF;
                    IDispatch * pIDispatch = NULL; // Указатель на случай VT_EMPTY
                    // Если поле vt переданного нам по ссылке вариана содердит VT_EMPTY, 
                    // то передаем в Execute указатель на временную переменную.
                    // Иначе передаем прямо двойной указатель на дисачь из варианта (pdispVal).
                    pdispparams->rgvarg[0].ppdispVal = pVar->vt == VT_EMPTY ? &pIDispatch : &pVar->pdispVal;
                    
                    // Вызываем стандартную реализацию диспача для дуал интерфейсов.
                    // Как в IDispatchImpl<>.
                    HRESULT hr = _tih.Invoke((IDispatch*)this, dispidMember, riid, lcid,
                        wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr);
                    
                    // Теперь необходимо восстановить содержимое параметра,
                    // засунув в него (если курсор успешно создан) указатель на 
                    // диспачь курсора.
                    if(pVar->vt == VT_EMPTY && hr == S_OK)
                    {
                        pVar->vt = VT_DISPATCH;
                        pVar->pdispVal = *pdispparams->rgvarg[0].ppdispVal;
                    }
                    pdispparams->rgvarg[0].pvarVal = pVar;
                    pdispparams->rgvarg[0].vt = VT_VARIANT | VT_BYREF;
                    return hr;
                }
            }
        }

        // В случае если это не метод Execute что-то нас не устраивает
        // передаем управление стандартной реализацию диспача для дуал 
        // интерфейсов. Как в IDispatchImpl<>. Пущай разбирается.
        return _tih.Invoke((IDispatch*)this, dispidMember, riid, lcid,
            wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr);
    }
};

#endif // !defined(ASCDISPCORRECTORS_H)


Любой код написаный на плюсах в разы сложнее аналогичного на том же Шарпе.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1062.31616 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Почему C++ - не просто язык ООП
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.11.02 21:43
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>И не зря начинают [материть]. МН это одина из састовляющих делающая С++ черезмерно сложным языком. Все эти Шарпы я Явы ставят перед собой задачу максимального упрощения при приемлимых возможностях.


ГВ>>Влад, извини, что вмешиваюсь, но не мог бы ты дать более ясное определение "чрезмерно сложного" языка. Каковы критерии такой оценки? И кто, когда и почему её накладывает?


VD>Да по жизни. Вот глянь, например:


Влад, а к чему пример-то?

[пример скипнут]

VD>Любой код написаный на плюсах в разы сложнее аналогичного на том же Шарпе.


Всё зависит от того, какими приёмами пользоваться для сокращения кода — от набора идиом, короче говоря, многое зависит. То, что ты привёл в качестве примера, отличная иллюстрация того, во что можно превратить программу на C++ (когда смешаны шаблоны, наследование, макросы и сугубо C-шный (процедурный) подход).

Манипуляции структурами, флагами, массивами и пр. Ну да, "чёрт ногу сломит", но это уж, извините, связано с тем, что выбран такой способ работы с такими структурами.

И как сей пример можно притянуть в качестве ответа на заданные вопросы?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.11.02 06:57
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Всё зависит от того, какими приёмами пользоваться для сокращения кода — от набора идиом, короче говоря, многое зависит.


Ну все, даю тебе 10 баксов если ты напишешь на плюсах конфиг, аналогичный по функциональности янусовскому, с объемом исходников хотя бы в два раза большим. Вот и посмотрим, много ли от идиом зависит.
... << RSDN@Home 1.0 alpha 13 (developer build) >>
AVK Blog
Re[26]: Почему C++ - не просто язык ООП
От: Sergey Россия  
Дата: 29.11.02 07:47
Оценка:
Здравствуйте, VladD2, Вы писали:

S>>В каждом — по 30 открытых функций, имена не пересекаются. Нужен класс C, наследник от A и B, реализующий все 60 функций порядок наследования не важен. Вот и как его без "ручного" переопределения этих 30 функций на одних шаблонах забацать?


VD>Да точно так же как в С++. Ты еще раз прочитай то что я прдлагал.


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

VD>>>Ну а без бриллиантового переживем уж точно.


S>>Пример отсюда http://www.rsdn.ru/forum/Message.aspx?mid=135832
Автор: Sergey
Дата: 20.11.02
без бриллиантового наследования перепиши для начала, а там посмотрим, где больше недостатков получается.


VD>Два ифа поствишь и проблема решена.


Угу, только не в примере, а в реальной программе потребуются 20 ифов Или 200.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[29]: Почему C++ - не просто язык ООП
От: Dima2  
Дата: 29.11.02 08:17
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну все, даю тебе 10 баксов если ты напишешь на плюсах конфиг, аналогичный по функциональности янусовскому, с объемом исходников хотя бы в два раза большим. Вот и посмотрим, много ли от идиом зависит.


Каждому !
Re[30]: Почему C++ - не просто язык ООП
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.11.02 10:17
Оценка:
Здравствуйте, Dima2, Вы писали:

AVK>>Ну все, даю тебе 10 баксов если ты напишешь на плюсах конфиг, аналогичный по функциональности янусовскому, с объемом исходников хотя бы в два раза большим. Вот и посмотрим, много ли от идиом зависит.


Ты тоже хочешь попробовать?
... << RSDN@Home 1.0 alpha 13 (developer build)>>
AVK Blog
Re[31]: Почему C++ - не просто язык ООП
От: Dima2  
Дата: 29.11.02 14:28
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>>>Ну все, даю тебе 10 баксов если ты напишешь на плюсах конфиг, аналогичный по функциональности янусовскому, с объемом исходников хотя бы в два раза большим. Вот и посмотрим, много ли от идиом зависит.


AVK>Ты тоже хочешь попробовать?


ноусэр.

Фильм смотрел, где Витцин, Никулин, Моргунов договаривались за сколько они склад спалят.

Заказчик — 300.....,
Моргунов — не это несереьзно, 330
Никулин — каждому !
Re[32]: Почему C++ - не просто язык ООП
От: Аноним  
Дата: 29.11.02 14:31
Оценка:
Здравствуйте, Dima2, Вы писали:

D>Фильм смотрел, где Витцин, Никулин, Моргунов договаривались за сколько они склад спалят.


D>Заказчик — 300.....,

D>Моргунов — не это несереьзно, 330
D>Никулин — каждому !

Плохо ты помнишь родное кино!
Re[32]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.11.02 16:01
Оценка:
Здравствуйте, Dima2, Вы писали:

D>Заказчик — 300.....,

D>Моргунов — не это несереьзно, 330
D>Никулин — каждому !

Нда. Вообще-то 330 как раз сказал Никулин, а каждому моргунов.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1062.36419 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.11.02 16:03
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Ты там всего-то пару кракозяблов нарисовал. Человек-то еще может догадается, что ты имел в виду, компилятор — ни в жисть


А ты что компилятор?

S>Угу, только не в примере, а в реальной программе потребуются 20 ифов Или 200.


На хоть 2000. Сложнее особо не станет.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1062.36419 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Почему C++ - не просто язык ООП
От: IT Россия linq2db.com
Дата: 30.11.02 07:11
Оценка:
Здравствуйте, VladD2, Вы писали:

D>>Заказчик — 300.....,

D>>Моргунов — не это несереьзно, 330
D>>Никулин — каждому !

VD>Нда. Вообще-то 330 как раз сказал Никулин, а каждому моргунов.


ИМХО Никулин сказал 333
Если нам не помогут, то мы тоже никого не пощадим.
Re[34]: Почему C++ - не просто язык ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.11.02 11:13
Оценка:
Здравствуйте, IT, Вы писали:

IT>ИМХО Никулин сказал 333


Гайдай был не идеот. Такое по сценарию мог сказать только балбес.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 14.1.0.1064.25408 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Определения, попытка N1
От: Sinclair Россия https://github.com/evilguest/
Дата: 01.12.02 22:11
Оценка: 12 (1)
Здравствуйте, VladD2, Вы писали:


AVK>>Определение, подходящее для атрибутов дотнета и атрибутов кома одновременно будет расплывчатым и неточным — слишком мало общего и слишком важны отличия.


VD>Определение сущности не должно давать еще каких-то определений. Я уже дал простое определение: "программирование где многие логические аспекты не прописываются в коде, а задаются в виде атрибутов".


А зачем, собственно, приплетать атрибуты? Ключевой момент декларативности — это отсутствие "глаголов", т.е. инструкций по выполнению каких-либо процедур. Т.е. выражение "c=b+a" может иметь процедурный смысл (выполнить операцию присваивания из результата операции сложения a и b в с), а может — декларативный (с эквивалентно сумме a и b). Как правило, декларативное программирование сводится к формулированию неких предикатов — т.е. выражений, результат которых суть булев. Практически все современные языки программирования предоставляют как процедурные, так и декларативные средства. Например, в с++ объявление класса указывает его предков. Оно как бы говорит "утверждение 'А есть потомок B' истинно". При этом семантика методов класса определяется их "содержимым", т.е. процедурно.
В том же SQL есть язык Data Definition Language, который полностью декларативен — он ничего не говорит о том, какие действия надо выполнять, и Data Manipulation Language.
Те же атрибуты в .NET принято рассматривать как декларативное программирование. Скорее всего потому, что их предполагалось использовать для формулирования некоторых утверждений об элементах объектной модели ("доступ к данному классу требует привилегии X"). До тех пор, пока мы не анализируем способ, которым достигается выполнение такого утверждения, программирование остается декларативным. Да, "внутри" все цифровое программирование процедурно. В силу архитектуры. Вообще говоря, атрибуты не являются единственным средством декларативного программирования, доступным в .NET. Все утверждения, которые можно сформулировать о программе или ее элементе, выразимые на .NET — это и есть декларативное программирование. Декларация void A(int B) — это декларативное программирование. Она эквивалентна двум утверждениям: "функция с именем A принимает один параметр типа int"; "функция с именем A не возвращает никакого результата". Все.
Атрибуты всего лишь предоставляют возможность формулировать утверждения, которые не укладываются напрямую в синтаксис языка. Их интерпретация — дело прикладного кода.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: Определения, попытка N1
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.12.02 23:31
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А зачем, собственно, приплетать атрибуты?


А за тем что они есть в Шарпе, и их удобно использовать. И их нет в плюсах, да и не будет видимо ни когда.

Философию пропускаю.
... << RSDN@Home 1.0 alpha 15 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: МН
От: jazzer Россия Skype: enerjazzer
Дата: 04.12.02 17:41
Оценка:
Здравствуйте, VladD2, Вы писали:

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


J>>Да и, в конце концов, "бриллиантовым" наследованием множественное наследование не исчерпывается ведь :)

J>>А почему-то всегда при упоминании м.н. вспоминают его и начинают материть :))

VD>И не зря начинают. МН это одина из састовляющих делающая С++ черезмерно сложным языком. Все эти Шарпы я Явы ставят перед собой задачу максимального упрощения при приемлимых возможностях.


МН — очень простая вещь.
Сложности начинаются при неправильном его использовании (злоупотребление бриллиантами — один из примеров).

МН, как часть ООП, призвана отражать реальный мир, в котором объекты редко являются представителями только одного класса. А язык как раз и должен предоставлять возможность выражать свои мысли непосредственно, а не извращаться через другие методы.
В общем-то, атрибуты в нете (насколько я их понимаю) служат примерно для того же самого.

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

У меня было достаточно примеров использования МН, и далеко не все из них можно было свести к редуцированному МН в форме наследования только интерфейсов.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[26]: МН
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.12.02 16:25
Оценка:
Здравствуйте, jazzer, Вы писали:

J>МН — очень простая вещь.

J>Сложности начинаются при неправильном его использовании (злоупотребление бриллиантами — один из примеров).

Тебе самому не смешно?
... << RSDN@Home 1.0 alpha 15 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: МН
От: jazzer Россия Skype: enerjazzer
Дата: 05.12.02 17:03
Оценка: 53 (5)
Здравствуйте, VladD2, Вы писали:

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


J>>МН — очень простая вещь.

J>>Сложности начинаются при неправильном его использовании (злоупотребление бриллиантами — один из примеров).

VD>Тебе самому не смешно?


Нет, не смешно.
Зато мне смешно было читать всякие аргументы в пользу нереализации тех или иных фич, например, перегрузки операторов в java (очень вольная цитата по памяти из одной какой-то очень уважаемой книжки по java, просто суть): "Перегрузка оперaторов — это очень плохо, потому что тогда можно определить у класса Student operator+=(int), который будет увеличивать возраст студента: посмотрите, какая лажа получается:
Student s;
s += 5;

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

Как будто нельзя определить метод add(int) и радостно писать s.add(5)...
Может, тогда заодно и функции запретить?

Любую идею, абсолютно любую, можно довести до абсурда и потом показывать: смотрите, какая лажа.
Кто мешает при этом этой идеей пользоваться корректно — непонятно.

А то сделают 2 класса с двумястами одинаковыми методами и разным двести первым, потом учинят над ними МН и начнут кричать, что, мол, теперь придется 200 методов переопределять, вот ведь хренова МН...
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Почему C++ - не просто язык ООП
От: _vovin http://www.pragmatic-architect.com
Дата: 07.12.02 17:34
Оценка: +1
К>>Надеюсь, что не развяжу очередной карибский кризис.

Vi2>Я вот вообще нашел цитату

Vi2>Inside C# / Tom Archer, 2nd ed
Vi2>

Vi2>Therefore, the majority of programmers simply accept the fact that they have two categories of types and that the intrinsic types aren’t compatible—and they learn to live with that. By the way, this is why most scholars will tell you that C++ isn’t an object-oriented language but instead is an object-based language

Vi2>.

Данный автор показывает свою полную безграмотность в этом вопросе.
Еще как-то, скрепя сердцем, C++ можно назвать объектно-ориентированным языком,
но чтобы object-based — это уже полная дичь.
Object-based называются языки, основанные на прототипах (prototype-based languages),
причем, как правило, они еще являются чисто объектно-ориентированными (pure object-oriented).
Отсюда и название — язык, основанный на объектах, т.е. только объекты, никаких классов
и примитивных типов данных.
Как о самом ярком придставителе семейства, советую почитать про Self, он упоминается
практически во всех серьезных работах про ООП или динамических компиляторах.
Re[28]: МН
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.02 20:50
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Любую идею, абсолютно любую, можно довести до абсурда и потом показывать: смотрите, какая лажа.


Согласен. Перегибы бывают. Но МН создает проблемы в реальной жизни. В тех же плюсах оно создает невираятную сложность при приведении типов. Я уже не говорю о трудноуловимых ошибках.

J>А то сделают 2 класса с двумястами одинаковыми методами и разным двести первым, потом учинят над ними МН и начнут кричать, что, мол, теперь придется 200 методов переопределять, вот ведь хренова МН...


Проблема в том что такие проблемы возникают в реальной жизни. Причем никто ничего специально не делает. Просто получается сообщение компилятора мол кирдык ребята. И чтобы понять что происходит нужно бошку раком поставить. МН нужно исключительно для добавляения реализации к лассу. А использование его эффектов не более чем хакерство. Это как шаблоны нужны для создания ообщенных алгоритмов, а не для обхода ограничений языка. Если бы в Шарпе появилась агрегация, меня бы это устроило. Она решила бы главную пролему. А остальные в шарпе и так решаются.
... << RSDN@Home 1.0 beta 3 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.