Re[6]: Привет, МШ и его жене :)!
От: Ligen Украина http://zone-of-ambiguity.blogspot.com/
Дата: 01.11.06 12:28
Оценка: :)
Здравствуйте, remark, Вы писали:

R>У нас тоже был один препод, который любил считать "так, значит у списка в этом случае вычислительная сложность будет O(1), значит используем список", эх, профайлер бы ему в руки


Кстати, не так уж он был направ — зависит от требований к масштабируемости, imho
Viva el Junta Militar! Viva el Presidente!
Re[2]: Как нужно сейчас программировать на C++ ?
От: Alex Alexandrov США  
Дата: 18.11.06 10:40
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


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

А>ИМХО, "стратегии", "паттерны" так бешенно популярны, потому как осилить все мировые запасы информации на эту тему проще, чем одну главу у Кнута. Потом ходишь и слова разные такие умные говоришь, все уважают. А какой прок от Кнута? (шучу, разумеется).

А>Положа руку на сердце — ведь то, что описано в любой лит-ре по дизайну/паттернам — доступно пониманию ребёнка. Берём для сравнения какую-нибудь книгу по, например, ЦОС, сжатию данных — упс — без определённой подготовки — далеко не уедешь.


А>Я не против паттернов, но: теоретическое знание паттернов — это то, что дёшего приобретают, но норовят дорого продавать. Спекуляцией попахивает. Любой нормальный программист с опытом от 3-5 лет и больше знает кучу паттернов, даже если никогда не штудировал эту тему специально. Пролистать соотств. лит-ру и такому не мешает, но каких либо великие откровения мало-мальски опытные программисты там вряд ли смогут обнаружить. Просьба не ссылатся на отдельных дебилов которые это утверждение якобы опровергают фактом своего существования.


Может быть и доступно пониманию ребенка СЕЙЧАС, но надо иметь в виду, что "Паттерны" Банды Четырех были выпущены в 1995 году, а написаны еще раньше. В то время многие в этой стране и не задумывались о том, что такое Наблюдатели, Посетители, Фабрики и прочее. Как никак этим идеям уже почти 12 лет, так что восхищаться и бить себя кулаком в грудь по поводу паттернов как-то глупо. Это просто классика, общий язык — и его надо знать.
It's kind of fun to do the impossible (Walt Disney)
Re: Как нужно сейчас программировать на C++ ?
От: D.Lans Россия  
Дата: 19.11.06 16:19
Оценка:
Здравствуйте, Аноним, Вы писали:

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

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

Х. Дейтел, П. Дейтел. Все понятно, доходчиво, структурировано. Кул и маст хэв.
Re[2]: Чем хороша книжка Александреску
От: MasterZiv СССР  
Дата: 20.11.06 09:27
Оценка:
Здравствуйте, Erop, Вы писали:

E>3) Ещё Александреску конечно очень хорошо показал, что шаблоны C++ можно использовать как очень плохую и неудобную и практически неолаживаемую версию языка Prolog. Но совсем не раскрыл тему "зачем так извращаться?" Может лучше пролог заботать да и писать макеты на нём, ну а в реализации это всё скорее всего не нужно будет


Не Prolog только конечно, а LISP. LISP — это "отец" функционального и обобщенного программирования.
Re[3]: Как нужно сейчас программировать на C++ ?
От: LaptevVV Россия  
Дата: 20.11.06 09:32
Оценка:
Здравствуйте, Alex Alexandrov, Вы писали:

AA>Может быть и доступно пониманию ребенка СЕЙЧАС, но надо иметь в виду, что "Паттерны" Банды Четырех были выпущены в 1995 году, а написаны еще раньше. В то время многие в этой стране и не задумывались о том, что такое Наблюдатели, Посетители, Фабрики и прочее. Как никак этим идеям уже почти 12 лет, так что восхищаться и бить себя кулаком в грудь по поводу паттернов как-то глупо. Это просто классика, общий язык — и его надо знать.

Паттерны во многом по идеям Коплиена написаны... А он свою книжку выпустил в 1992 году.. Значит, думал — еще раньше...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Как нужно сейчас программировать на C++ ?
От: ArtemGorikov Австралия жж
Дата: 20.11.06 09:43
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>ИМХО, "стратегии", "паттерны" так бешенно популярны, потому как осилить все мировые запасы информации на эту тему проще, чем одну главу у Кнута. Потом ходишь и слова разные такие умные говоришь, все уважают. А какой прок от Кнута? (шучу, разумеется).


А>Положа руку на сердце — ведь то, что описано в любой лит-ре по дизайну/паттернам — доступно пониманию ребёнка. Берём для сравнения какую-нибудь книгу по, например, ЦОС, сжатию данных — упс — без определённой подготовки — далеко не уедешь.


А>Я не против паттернов, но: теоретическое знание паттернов — это то, что дёшего приобретают, но норовят дорого продавать. Спекуляцией попахивает. Любой нормальный программист с опытом от 3-5 лет и больше знает кучу паттернов, даже если никогда не штудировал эту тему специально. Пролистать соотств. лит-ру и такому не мешает, но каких либо великие откровения мало-мальски опытные программисты там вряд ли смогут обнаружить. Просьба не ссылатся на отдельных дебилов которые это утверждение якобы опровергают фактом своего существования.


Супер! А то развели истерию- паттерны, шаблоны проектирования, мы крутые раз можем писать шаблонный код и имеем "шаблонное" мышление. А задачи для школьников 6-го класса (математического) никто решить не может. Реально сложные вещи- алгоритмы и логические задачи. В С++ и шаблонах/паттернах/whatever ничего сложного нет.
Re[3]: Как нужно сейчас программировать на C++ ?
От: Alex Alexandrov США  
Дата: 20.11.06 10:53
Оценка: +1
Здравствуйте, ArtemGorikov, Вы писали:

AG>Здравствуйте, Аноним, Вы писали:


AG>Супер! А то развели истерию- паттерны, шаблоны проектирования, мы крутые раз можем писать шаблонный код и имеем "шаблонное" мышление. А задачи для школьников 6-го класса (математического) никто решить не может. Реально сложные вещи- алгоритмы и логические задачи. В С++ и шаблонах/паттернах/whatever ничего сложного нет.


Какой ты предлагаешь сделать вывод из сказанного тобой? Что одно нужно, а другое нет? Что надо учить алгоритмы, а паттерны нафиг? Боюсь свести беседу к банальностям, но тем не менее: алгоритмы — средство решения сложных вычислительных задач, а паттерны — средство локализации процесса решения сложных задач. Написать расширяемую, легко поддерживаемую систему на одних алгоритмах не получится.
It's kind of fun to do the impossible (Walt Disney)
Re[4]: Получится, но не у всех :) (-)
От: Erop Россия  
Дата: 21.11.06 12:03
Оценка: -1
Здравствуйте, Alex Alexandrov, Вы писали:

AA>Какой ты предлагаешь сделать вывод из сказанного тобой? Что одно нужно, а другое нет? Что надо учить алгоритмы, а паттерны нафиг? Боюсь свести беседу к банальностям, но тем не менее: алгоритмы — средство решения сложных вычислительных задач, а паттерны — средство локализации процесса решения сложных задач. Написать расширяемую, легко поддерживаемую систему на одних алгоритмах не получится.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Чем хороша книжка Александреску
От: Erop Россия  
Дата: 21.11.06 16:56
Оценка:
Здравствуйте, MasterZiv, Вы писали:

E>>3) Ещё Александреску конечно очень хорошо показал, что шаблоны C++ можно использовать как очень плохую и неудобную и практически неолаживаемую версию языка Prolog. Но совсем не раскрыл тему "зачем так извращаться?" Может лучше пролог заботать да и писать макеты на нём, ну а в реализации это всё скорее всего не нужно будет


MZ>Не Prolog только конечно, а LISP. LISP — это "отец" функционального и обобщенного программирования.


Это тут где-то уже обсуждалось и даже спорили. Не могу найти.
В принципе обе версии имеют шансы, но на пролог похоже таки больше
Ну просто обратное сопоставление шаблонов функций больше похоже на вывод теорем в прологе, чем на лисп
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[12]: Да имею я вашу смелость
От: Erop Россия  
Дата: 21.11.06 18:48
Оценка: -1
Здравствуйте, srggal, Вы писали:

S>ЗЫ Естественно, можно и глобальный объект сделать как PIMPL с IMPL, создающимся по требованию, но это уже Синглетон , хотя в паттернах нет явных границ, так что как хотите так и называйте.


А зачем это всё нужно?

Если речь идёт о объекте который создаётся где-то по ходу работы программы, то не ясно зачем такие громкие слова и какие-то хитрые паттерны.

А если речь идёт о создании статических объектов (обычно эта тема оказывается рядом с синглетонами ), то ИМХО от этого один только вред
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: LISP vs Prolog
От: Erop Россия  
Дата: 21.11.06 19:34
Оценка:
здесь
Автор: alexeiz
Дата: 15.04.06
и ниже по дереву
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[11]: Про шаблоны и цели
От: Erop Россия  
Дата: 21.11.06 20:09
Оценка:
Здравствуйте, remark, Вы писали:

R>Ну я надеюсь, что он хотя бы типобезопасный, а не на void* работает

R>И ещё надеюсь, что мне, что бы захранить в таком контейнере какой-то класс, не надо вначале реализовывать интерфейс IStorable
Спасибо за то, что надеешься, что у нас всё хорошо
И это так. Всё хорошо и довольно удобно. Лично мне нравится не всё, но намного лучше, чем stl::vector
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Получится, но не у всех :) (-)
От: Erop Россия  
Дата: 24.11.06 18:51
Оценка:
Quasi!
А ты не веришь что у кого-то получится?
Или что получится не у всех?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[14]: Направление прогресса
От: creatman Германия  
Дата: 25.11.06 17:26
Оценка: 6 (1)
R>>Я совершенно согласен, что мультиметоды вещь достаточно редкая, поэтому к ним такое и отношение. Но А тут совершенно ни при чём. Он лишь предложил достаточно хорошую реализацию мультиметодов. Но в том, что это редкая вещь, он не виноват.
E>Крнечно не виноват! Это его заслуга, что он смог придумать столь редкую задачу и решение для неё. Просто вся эта штука очень далека от реальной жизни
E>А виноват чувак, который решает внедрить мультиметоды туда, где они не нужны. Потому что так "покруче" будет

Назначение мультиметодов помоему хорошо описаны у Саттера (Правило 31 кажется). Я их лично использовал для реализации физики при разработке движка игры.


Re[15]: Направление прогресса
От: creatman Германия  
Дата: 25.11.06 17:33
Оценка:
Здравствуйте, creatman, Вы писали:

R>>>Я совершенно согласен, что мультиметоды вещь достаточно редкая, поэтому к ним такое и отношение. Но А тут совершенно ни при чём. Он лишь предложил достаточно хорошую реализацию мультиметодов. Но в том, что это редкая вещь, он не виноват.

E>>Крнечно не виноват! Это его заслуга, что он смог придумать столь редкую задачу и решение для неё. Просто вся эта штука очень далека от реальной жизни
E>>А виноват чувак, который решает внедрить мультиметоды туда, где они не нужны. Потому что так "покруче" будет

C>Назначение мультиметодов помоему хорошо описаны у Саттера (Правило 31 кажется). Я их лично использовал для реализации физики при разработке движка игры.


Поправка: не у Саттера а у Майерса (Наиболее эффективное использование C++). Там как раз раскрывается тема коллизии динамических объектов в компьютерных играх. На сколько мне не изменяет память, Александресску ссылался в своих мульти методах на Майерса и от себя добавлю, что А привел более удачное решение проблемы.


Re[16]: Спасибо за пример.
От: Erop Россия  
Дата: 26.11.06 09:52
Оценка:
Здравствуйте, creatman, Вы писали:

C>Поправка: не у Саттера а у Майерса (Наиболее эффективное использование C++). Там как раз раскрывается тема коллизии динамических объектов в компьютерных играх. На сколько мне не изменяет память, Александресску ссылался в своих мульти методах на Майерса и от себя добавлю, что А привел более удачное решение проблемы.


Типа для выбора обработчика столконовения?
Что будет, если пуля типа 8 попадает в монстра типа 13?

В принципе я соглачен, что там мультиметоды могут быть уместны.
Правда у меня в анологичной задаче (правда не из области игрушек ) было не совсем так.
Было так, что есть пара типовых реакций. И есть ещё штуки три нетиповых.
Соответсвенно хорошо получается с двойной диспечеризацией, что довольно похоже на мультиметоды, в принципе, но и с if'ами в таком раскладе всё выгляди т не особо плохо.

Скажем в моей задаче, если продолжать аналогию, большинство монстров реагирует на столкновене с пулей одинаково, есть один монстр, который на пулю № 7 реагирует особо и есть одна пуля № 12, которая совсем иначе сталкивается с каждым из монстров.

Ну и соответсвенно в обработчике стокновения с пулей № 7 стоит if на тип монстра, и специальная обработка на эту тему, и в обработчике столкновения с пулей № 12 стоит двойная диспечерезация (у монстра вызывают метод ProcessBullet12 )

Смысл в том, что все обработчики просто ищутся. Всё, что нужно знать про эту конструкцию, это то, что столкновение обрабатывает пуля.

Хотя, конечно, и мультиметоды тут были бы более или менее уместны, просто слегка сложнее бы всё смотрелось.
Если бы, скажем, пуль, вроде пули №12 было бы побольше, то я бы, пожалуй и не спорил. Но вот такой задачи так и не возникло

(На самом деле задача совсем другая, чем игры. Типа процесс сопоставления одной из можеделей из списка с разными объектами. Некий перебор AI-гипотез, короче говоря)
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[17]: Спасибо за пример.
От: remark Россия http://www.1024cores.net/
Дата: 26.11.06 12:12
Оценка:
Здравствуйте, Erop, Вы писали:

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


C>>Поправка: не у Саттера а у Майерса (Наиболее эффективное использование C++). Там как раз раскрывается тема коллизии динамических объектов в компьютерных играх. На сколько мне не изменяет память, Александресску ссылался в своих мульти методах на Майерса и от себя добавлю, что А привел более удачное решение проблемы.


E>Типа для выбора обработчика столконовения?

E>Что будет, если пуля типа 8 попадает в монстра типа 13?

E>В принципе я соглачен, что там мультиметоды могут быть уместны.

E>Правда у меня в анологичной задаче (правда не из области игрушек ) было не совсем так.
E>Было так, что есть пара типовых реакций. И есть ещё штуки три нетиповых.
E>Соответсвенно хорошо получается с двойной диспечеризацией, что довольно похоже на мультиметоды, в принципе, но и с if'ами в таком раскладе всё выгляди т не особо плохо.

Двойная диспетчеризация — есть способ реализации мультиметодов. Так же как switch-on-type есть способ реализации динамического полиморфизма.
Если есть 2 или более типов и код, который необходимо выполнить, зависит от этих типов, то это мультиметод. По определению. А как их реализовывать — это уже другой вопрос. С помощью if'ов, двойной диспетчеризации, шаблонных наворотов, или с помощью поддержки в языке.



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[18]: о чём бишь спич
От: Erop Россия  
Дата: 26.11.06 12:40
Оценка:
Здравствуйте, remark, Вы писали:

R>Двойная диспетчеризация — есть способ реализации мультиметодов. Так же как switch-on-type есть способ реализации динамического полиморфизма.

R>Если есть 2 или более типов и код, который необходимо выполнить, зависит от этих типов, то это мультиметод. По определению. А как их реализовывать — это уже другой вопрос. С помощью if'ов, двойной диспетчеризации, шаблонных наворотов, или с помощью поддержки в языке.

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

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

Собственно мне кажется, что специальная сложная реализация этой матрицы, которая умеет делать всё хорошо для случая невырожденной матрицы, оказывается излишней в случае вырожденной. Про это речь собсвтенно
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: О программистских ценностях
От: greenya Украина  
Дата: 26.11.06 14:41
Оценка:
Здравствуйте, igna, Вы писали:

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


E>>... стоит сменить C++ на что-нибудь менее простое и более непонятное.



I>Так ведь нет ничего такого...


машинные коды еще никто не отменял
там и Хелов Ворлд будет выглядеть крайне круто и закручено
Re[19]: о чём бишь спич
От: remark Россия http://www.1024cores.net/
Дата: 27.11.06 09:06
Оценка:
Здравствуйте, Erop, Вы писали:

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


R>>Двойная диспетчеризация — есть способ реализации мультиметодов. Так же как switch-on-type есть способ реализации динамического полиморфизма.

R>>Если есть 2 или более типов и код, который необходимо выполнить, зависит от этих типов, то это мультиметод. По определению. А как их реализовывать — это уже другой вопрос. С помощью if'ов, двойной диспетчеризации, шаблонных наворотов, или с помощью поддержки в языке.

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


E>Ну типа там почти во всех клетках был дефолтный какой-то обработчик, и какой-то столбик или строка были заполнены.

E>Ну и ещё где-то в нескольких местах были другие обработчики.

E>Собственно мне кажется, что специальная сложная реализация этой матрицы, которая умеет делать всё хорошо для случая невырожденной матрицы, оказывается излишней в случае вырожденной. Про это речь собсвтенно



Матрица здесь действительно возможно не к месту. Ну а причём здесь матрица?
Имхо адекватная реализация мультиметодов должна быть как реализация просто виртуальных методов. Когда у тебя есть дефолтная реализация в базовом классе. А где надо ты её перекрываешь.
И для твоего примера с пулями подходит хорошо. Т.е. делаешь дефолтную реализацию. И перекрываешь для пули №7 и монстра №18. И для пули № 21 и всех монстров.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.