Re[6]: LSP, ДК, Вирт - поехали...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 11.07.05 15:25
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Следующим шагом мы вставляем XML в межмодульный интерфейс и пишем язык описания всего-что-угодно. И ничего хорошего не выходит.


Да, если довести до абсурда, то так и произойдет. А иногда и происходит, что характерно

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


Имхо, если под event_listener-ами будет пониматься такой широкий спектр понятий, то some_event будет всего лишь напоминать тот же самый wait_event_traits_map_t из моего примера. Только в моем случае some_event может быть скрыт от программиста и программист будет знать, что ему нужно сделать своего event_listener-а и поместить его в traits_map. Собственно то же самое, только traits_map, имхо, остается все же более гибким подходом. Чем-то напоминающим динамические языки программирования.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Что толку в Ада если Ариан 5 все равно упал
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 11.07.05 15:44
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Бесполезно.

AVC>Как сказал Вирт:
AVC>

AVC>некоторые вещи следует продумывать до, а не после.


Это много кто говорил. Собственно, C++ как раз этой парадигме соответствует: вместо конкретных решений даётся инструмент создания решений. Т.е., варианты применения продуманы "до" и выведена некая более или менее общая языковая основа. Что не так?

[skip про проверки]
AVC>>>Существует понятие программирования по контракту. (Мейер)
AVC>>>Главный принцип: не доверяй клиенту (вызывающему коду).
ГВ>>Всё хорошо в своём месте и в своё время. ООП само по себе тоже не всегда адекватно задачам. Так что, принцип программирования по контракту тоже не стоит распространять на все случаи программирования.
AVC>Разве принцип программирования по контракту применим только к ООП?
AVC>Это универсальный принцип, развитие идеи защитного программирования.

Да, он применим где угодно. Вопрос только в конечной цене применения.

AVC>>>В самом первом виртовском Обероне не было присоединенных процедур (=виртуальных функций).

AVC>>>Полиморфизм работал исключительно благодаря динамическому приведению типа.
AVC>>>Наверное, поэтому динамическое приведение типа реализовано так эффективно.
AVC>>>Например (опустив все лишнее):
ГВ>>[...]

ГВ>>Ну, я так понимаю, здесь влияет ещё и модель объектов паскаля, конкретно — строго одиночное наследование.


AVC>В Обероне (и других модульных языках) единица инкапсуляции не класс, а модуль.

AVC>Это существенно влияет на проектные решения.
AVC>Множественное наследование в Обероне просто не нужно (и рассматривается как вредное).

ИМХО — это глобальная парадигматическая ошибка. В ДНК.

AVC>Модули позволяют естественно реализовывать целые паттерны проектирования.

AVC>Множественное наследование в Си++ — заплата на отсутствии нормальных модулей.
AVC>Вот и пишут на Си++ программы, обращаясь сразу к "человеку и пароходу". (c) Маяковский

Э... высокая риторика, спору нет. Слог хорош! Кратко напоминаю содержание предыдущих серий: динамическое приведение типов в Обероне эффективно работает отчасти из-за строго одиночного наследования.

AVC>>>Опять-таки оптимизатор может устранить некоторые лишние проверки.

ГВ>>Здесь согласен. Хотя я бы не стал полагаться на оптимизатор...
AVC>В руководстве по компилятору XDS (в разделе об оптимизации) говорится:
AVC>

AVC>It is possible not to turn run-time checks off in the product versions of your programs,
AVC>because the code generator usually removes redundant checks. A typical
AVC>program runs only 10-15% faster with all run-time checks turned off (but the code
AVC>size is usually significantly smaller).

AVC>Здесь указана цена проверок: программа на 10-15% медленнее.
AVC>Разница в размере кода больше.

Ключевая фраза вот эта: "A typical program". Можно это загадочное определение раскрыть полнее? Почему цепляюсь — потому что уже где-то слышал про эти пресловутые 10-15%, вот и стало интересно.

ГВ>>>>Средствами C++ можно обойти type safety. Разумность такого решения — отдельный вопрос. Если голова на плечах есть — всмё будет в порядке, если с этим проблема, то runtime проверками дела не поправишь. Приведённый пример с NASA свидетельствует, скорее, не о бенефитах типобезопасности, а о том, что всем в NASA было настолько страшно взять ответственность на себя, что спихнули всё на "неправильную" фичу языка. Т.е., проблема не в языке, а в головах.

AVC>>>Согласен, что проблема — в головах.
AVC>>>Потому что именно из голов она попадает в языки.
ГВ>>В огороде бузина, а в трюме акулы...
AVC>Которые съели дядьку в Киеве?
AVC>А что, я сказал глупость?
Ага.

AVC>Может, я чего не знаю, и Си++ создавался не посредством головы?

И ещё одну. Потому что попытался применить "передёргивание". Вернее — приведение аргументов на основании одной только лексической аналогии (голова — голова). Забавно, спору нет, но это уже надоедает.

AVC>>>Забавно читать, что "средствами C++ можно обойти type safety".

AVC>>>Где бы найти в Си++ эту самую type safety...
ГВ>>Да есть она там, что тут можно сказать...
AVC>Ну разве что правду — что ее там нет.

Хм. Всё чудесатее и чудесатее. От повторения тезиса его истинность увеличивается? Не знал.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: LSP, ДК, Вирт - поехали...
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 11.07.05 15:44
Оценка: +1
Здравствуйте, eao197, Вы писали:

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

E>Имхо, если под event_listener-ами будет пониматься такой широкий спектр понятий, то some_event будет всего лишь напоминать тот же самый wait_event_traits_map_t из моего примера. Только в моем случае some_event может быть скрыт от программиста и программист будет знать, что ему нужно сделать своего event_listener-а и поместить его в traits_map. Собственно то же самое, только traits_map, имхо, остается все же более гибким подходом. Чем-то напоминающим динамические языки программирования.

Я бы резюимровал так: нужно покопаться в самой задаче и постановочных документах. Иной раз появление таких архитектурных решений позволяет найти глубокие глюки в постановочной части.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[8]: LSP, ДК, Вирт - поехали...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 11.07.05 16:02
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

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


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

E>>Имхо, если под event_listener-ами будет пониматься такой широкий спектр понятий, то some_event будет всего лишь напоминать тот же самый wait_event_traits_map_t из моего примера. Только в моем случае some_event может быть скрыт от программиста и программист будет знать, что ему нужно сделать своего event_listener-а и поместить его в traits_map. Собственно то же самое, только traits_map, имхо, остается все же более гибким подходом. Чем-то напоминающим динамические языки программирования.

ГВ>Я бы резюимровал так: нужно покопаться в самой задаче и постановочных документах. Иной раз появление таких архитектурных решений позволяет найти глубокие глюки в постановочной части.


Да, Геннадий, в принципе, все так и есть. Это очень здавый подход, когда при достижении органичений текущей версии архитектуры происходит перепроектирование и появляется новый набор согласованных, понятных, минималистических интерфейсов. Очень здорово, когда такая возможность есть. Тут главное, что появление новой архитектуры, как правило, делает старый код несовместимым с новыми версиями. Если затраты на правку старого кода вполне приемлимы, то перепроектирование -- самый разумный выход.

Но мне вот что интересно в последнее время. Мы у себя активно используем собственную технологию агентно-ориентированного программирования, в которой взаимодействие между агентами проиходит за счет обмена сообщениями. Причем отправитель сообщения даже не знает, какой точно интерфейс у агента-получателя сообщения. Чем-то это напоминает Smalltalk. Так же, после небольшого опыта использования Ruby, мне понравилась возможность, которую предоставляют динамические языки: в метод объекта нужно передать строгоопределенное количество аргументов, но их типы фикированны. Поэтому со временем, можно научить объект получать совсем другие аргументы, но и поддержать старую функциональность одновременно. Да, при разаботке такого метода трудозатраты несколько увеличиваются (хотя это сильно зависит, как говорится). Но вот у пользователей такого метода никакой головной боли -- очень прозрачный переход на новые версии. Частично эту тему я затрагивал вот здесь: Re[51]: Почему нельзя преподавать C#
Автор: eao197
Дата: 06.04.05
.

Т.е. я не говорю, что это однозначно хорошо. Но интересно, по крайней мере.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[31]: Что толку в Ада если Ариан 5 все равно упал
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 11.07.05 16:33
Оценка: 1 (1) +3
Здравствуйте, AVC, Вы писали:

AVC>В отношении непригодности языка для "масс" (или "масс" для языка?) мы, кажется, пришли к "консенсусу".

AVC>А ведь, между тем, что-то я не видел на книжках по Си++ надписей вроде: "Минздрав предупреждает".
AVC>Напротив: от "Освой Си++ за 21 день" до "Си++ для чайников".

Ключевое слово "Маркетинг".

AVC>>>Ведь в Оберон-системе информация о типах доступна в рантайме.

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

На самом деле, глубокая логическая ошибка зарыта в такой оценке самой по себе. Её суть — использование примитивного противопоставления "простой код — сложный код". Прикол здесь в том, что "простые вещи" зачастую оказываются простыми только на поверхностный взгляд. Ну, вот такой, отвлечённый пример. Возбмём стакан. Казалось бы, что может быть проще? Однако, артефакт стакан удовлетворяет таким требованиям:
— емкость;
— прочность стенок;
— вес в пределах от ... до ...;
— термостойкость;
— безопасность в смысле химической инертности.
И т.д., и т.п.

И когда дело доходит до "простейшего стакана" в коде, то выясняется, что представления о, например, параметре "прочность стенок" находятся у разных людей в разных, иной раз не пересекающихся областях. Всё бы ничего, об этом можно договориться. Но всё становится много хуже, когда под высказыванием "какой-нибудь стакан" подразумевается вполне конкретный набор допусков и ограничений. Ergo, их нужно уметь оговаривать, вот отсюда и "сложности". Вернее — вагоны конструкторской документации на простейшие, казалось бы, вещи.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[32]: Что толку в Ада если Ариан 5 все равно упал
От: AVC Россия  
Дата: 11.07.05 20:02
Оценка: 5 (2) +1
Здравствуйте, Геннадий Васильев, Вы писали:

AVC>>В отношении непригодности языка для "масс" (или "масс" для языка?) мы, кажется, пришли к "консенсусу".

AVC>>А ведь, между тем, что-то я не видел на книжках по Си++ надписей вроде: "Минздрав предупреждает".
AVC>>Напротив: от "Освой Си++ за 21 день" до "Си++ для чайников".

ГВ>Ключевое слово "Маркетинг".


Ключевое слово — "вранье" (в данном случае — маркетологов и издателей).
Я ничего не имею против авторов таких книг. Ясно, что начинающим Си++программистам тоже нужны книги.
К сожалению, современная цивилизация во многом стоит на вранье.
Конечно, сказанное — мое ИМХО. Но, черт побери, мне уже 41 год! Я могу еще многому научиться, но вряд ли сильно поумнею...
Я вырос в другой политической системе, пережил ряд политических и экономических потрясений, растил детей при пустых прилавках.
У меня есть своя точка зрениях на эти вопросы.
(Прошу прощения за, может быть, излишнюю эмоциональность. Но иначе я бы врал.)
Вот уже далекие студенческие годы. Гайдар пишет в своих воспоминаниях, что он ходил разгружать вагоны за деньги.
А к нам приходили в общежитие (ВМиК МГУ) и говорили: ребята, кто может, в Москве вагоны стоят неразгруженные, помогите. И мы шли и разгружали ночью вагоны бесплатно и считали, что это нормально. (Возможно, деньги шли Универу?)
И кто выручал Москву — "единоличники", вроде Гайдара, за деньги, или те, кто приходили целым курсом, бесплатно?
А, получается, Гайдар в своих воспоминаииях ставит себя в пример: вот я мужик, зарабатывал копейку, спасал Москву.
Сам не знаю, зачем я о наболевшем, очевидна ли связь? Просто вранье — везде вранье. Самые страшные беды — от вранья.
Никакой безопасности (ни ПО, ни в "большом мире") не будет, пока всякие там "маркетологи" будут врать.

AVC>>>>Ведь в Оберон-системе информация о типах доступна в рантайме.

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

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

ГВ>- емкость;
ГВ>- прочность стенок;
ГВ>- вес в пределах от ... до ...;
ГВ>- термостойкость;
ГВ>- безопасность в смысле химической инертности.
ГВ>И т.д., и т.п.

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


Во многом Вы правы.
Не всегда простое "просто".
Именно к обсуждению этих вопросов и хочется, наконец, перейти.
Что мы все "ломаем копья" вокруг явных дефектов Си++?!
Я не спорю с тем, что в Си++ много интересных идей. Но на базе совместимости с Си никогда не получится надежного языка. А тема legacy code — почти сплошное вранье. Старый код на Си и Си++ (если он действительно ценный, что редко) вполне можно использовать в DLL.

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
Re[34]: Что толку в Ада если Ариан 5 все равно упал
От: AVC Россия  
Дата: 11.07.05 20:17
Оценка:
Здравствуйте, CrystaX, Вы писали:

CX>Если для тебя так принципиально, чтобы указатель был проинициализирован нулем, обертка с нулевым оверхедом, которая просто при инициализации заносит 0 в инкапсулируемый указатель, пишется за 1 минуту и потом используется сколько угодно раз. Это, кстати, относится все к той же теме — не используй голые указатели, если только это тебе не нужно. Ты же все равно пытаешся их использовать. Вот скажи мне, какая разница для меня как программиста — использовать голый указатель или использовать объект с семантикой указателя, но обладающий дополнительными проверками/иницализацией? Почему нужно обязательно использовать именно голый указатель везде, где только вздумается? Только потому, что такая возможность есть в языке? Топором, например, можно себе ногу отрубить, но ведь нормальный человек никогда не станет этого делать. Откуда же это стремление использовать язык максимально опасным способом?


Дмитрий, помнишь, как у Чехова?
Если в первом акте на сцене висит ружье, в последнем оно выстрелит.

P.S. Моя "аська", оказывается, 228-705-993.

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
Re[12]: Что толку в Ада если Ариан 5 все равно упал
От: AVC Россия  
Дата: 11.07.05 22:07
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

AVC>>Бесполезно.

AVC>>Как сказал Вирт:
AVC>>

AVC>>некоторые вещи следует продумывать до, а не после.


ГВ>Это много кто говорил. Собственно, C++ как раз этой парадигме соответствует: вместо конкретных решений даётся инструмент создания решений. Т.е., варианты применения продуманы "до" и выведена некая более или менее общая языковая основа. Что не так?


Да все не так.
Не было продумывания "до", а был язык Си, Страуструпу ничем не обязанный.
Или его он тоже продумал "до" его создания?

ГВ>[skip про проверки]

AVC>>>>Существует понятие программирования по контракту. (Мейер)
AVC>>>>Главный принцип: не доверяй клиенту (вызывающему коду).
ГВ>>>Всё хорошо в своём месте и в своё время. ООП само по себе тоже не всегда адекватно задачам. Так что, принцип программирования по контракту тоже не стоит распространять на все случаи программирования.
AVC>>Разве принцип программирования по контракту применим только к ООП?
AVC>>Это универсальный принцип, развитие идеи защитного программирования.

ГВ>Да, он применим где угодно. Вопрос только в конечной цене применения.


Насчет цены. За годы с 1998 по 2002 годы число ЧП, вызванных ненадежностью ПО, выросло в 20 раз.

AVC>>>>В самом первом виртовском Обероне не было присоединенных процедур (=виртуальных функций).

AVC>>>>Полиморфизм работал исключительно благодаря динамическому приведению типа.
AVC>>>>Наверное, поэтому динамическое приведение типа реализовано так эффективно.
AVC>>>>Например (опустив все лишнее):
ГВ>>>[...]

ГВ>>>Ну, я так понимаю, здесь влияет ещё и модель объектов паскаля, конкретно — строго одиночное наследование.


AVC>>В Обероне (и других модульных языках) единица инкапсуляции не класс, а модуль.

AVC>>Это существенно влияет на проектные решения.
AVC>>Множественное наследование в Обероне просто не нужно (и рассматривается как вредное).

ГВ>ИМХО — это глобальная парадигматическая ошибка. В ДНК.


В разных местах на RSDN я говорил, что Си++программисты все объясняют двумя причинами: "кривыми ручками" и "ошибками в ДНК".
Вот очередное подтверждение.

AVC>>Модули позволяют естественно реализовывать целые паттерны проектирования.

AVC>>Множественное наследование в Си++ — заплата на отсутствии нормальных модулей.
AVC>>Вот и пишут на Си++ программы, обращаясь сразу к "человеку и пароходу". (c) Маяковский

ГВ>Э... высокая риторика, спору нет. Слог хорош! Кратко напоминаю содержание предыдущих серий: динамическое приведение типов в Обероне эффективно работает отчасти из-за строго одиночного наследования.


А еще в Обероне есть модульность, которой нет в Си++.
И поэтому нет кентавров.

AVC>>>>Опять-таки оптимизатор может устранить некоторые лишние проверки.

ГВ>>>Здесь согласен. Хотя я бы не стал полагаться на оптимизатор...
AVC>>В руководстве по компилятору XDS (в разделе об оптимизации) говорится:
AVC>>

AVC>>It is possible not to turn run-time checks off in the product versions of your programs,
AVC>>because the code generator usually removes redundant checks. A typical
AVC>>program runs only 10-15% faster with all run-time checks turned off (but the code
AVC>>size is usually significantly smaller).

AVC>>Здесь указана цена проверок: программа на 10-15% медленнее.
AVC>>Разница в размере кода больше.

ГВ>Ключевая фраза вот эта: "A typical program". Можно это загадочное определение раскрыть полнее? Почему цепляюсь — потому что уже где-то слышал про эти пресловутые 10-15%, вот и стало интересно.


Вопрос разумный.
Если Вы не доверяете данным Excelsior (XDS), то надо заниматься измерениями самостоятельно.
Найду время — "погоняю" разные программы, откомпилированные с разными опциями.
Пока что лично у меня получалось, что при полной оптимизации XDS (90-х годов) в три раза крыл Visual C++ 6.0.
Предположим, в "нетипичном" случае на проверки уйдет не 10-15%, а 20-30%. Это принципиально?

ГВ>>>>>Средствами C++ можно обойти type safety. Разумность такого решения — отдельный вопрос. Если голова на плечах есть — всмё будет в порядке, если с этим проблема, то runtime проверками дела не поправишь. Приведённый пример с NASA свидетельствует, скорее, не о бенефитах типобезопасности, а о том, что всем в NASA было настолько страшно взять ответственность на себя, что спихнули всё на "неправильную" фичу языка. Т.е., проблема не в языке, а в головах.

AVC>>>>Согласен, что проблема — в головах.
AVC>>>>Потому что именно из голов она попадает в языки.
ГВ>>>В огороде бузина, а в трюме акулы...
AVC>>Которые съели дядьку в Киеве?
AVC>>А что, я сказал глупость?
ГВ>Ага.

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

AVC>>Может, я чего не знаю, и Си++ создавался не посредством головы?

ГВ>И ещё одну. Потому что попытался применить "передёргивание". Вернее — приведение аргументов на основании одной только лексической аналогии (голова — голова). Забавно, спору нет, но это уже надоедает.

Ну, тогда "акулы в трюме" — неотразимый аргумент.
Поздравляю, Вас, Геннадий, с заслуженной победой.

AVC>>>>Забавно читать, что "средствами C++ можно обойти type safety".

AVC>>>>Где бы найти в Си++ эту самую type safety...
ГВ>>>Да есть она там, что тут можно сказать...
AVC>>Ну разве что правду — что ее там нет.

ГВ>Хм. Всё чудесатее и чудесатее. От повторения тезиса его истинность увеличивается? Не знал.


Это Вы о своем утверждении, что в Си++ есть (а не может быть при некоторых исключительных обстоятельствах) type safety?
А пока что самые разные источники твердят одно: в программах на Си++ ошибок больше, чем в программах на Си.
Уж если в Си++ есть type safety, то Си, наверное, — просто скала!

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
Re[33]: Что толку в Ада если Ариан 5 все равно упал
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.05 23:28
Оценка: :)
Здравствуйте, AVC, Вы писали:

AVC>Во многом Вы правы.

AVC>Не всегда простое "просто".
AVC>Именно к обсуждению этих вопросов и хочется, наконец, перейти.
AVC>Что мы все "ломаем копья" вокруг явных дефектов Си++?!
AVC>Я не спорю с тем, что в Си++ много интересных идей. Но на базе совместимости с Си никогда не получится надежного языка. А тема legacy code — почти сплошное вранье. Старый код на Си и Си++ (если он действительно ценный, что редко) вполне можно использовать в DLL.

+1000
... << RSDN@Home 1.1.4 beta 7 rev. 466>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Что толку в Ада если Ариан 5 все равно упал
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.05 23:28
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>Проблема в ASSERT-ах в том, что их видит автор f. Но не пользователь f! А предложенный Пашей подход как раз позволяет показать клиенту, что такой ASSERT внутри f присутствует.


Вот на столь важные вопросы и тратят время С++-программисты.
... << RSDN@Home 1.1.4 beta 7 rev. 466>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Что толку в Ада если Ариан 5 все равно упал
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.05 23:28
Оценка:
Здравствуйте, CrystaX, Вы писали:

CX>Видимо, ты все-таки невнимательно прочитал. C++ противопоставлялся в этой ветке языкам C#, Java, Oberon, Ada. Не лиспу! Вот еще один линк
Автор: CrystaX
Дата: 06.07.05
. На этом тему считаю закрытой.


Ну, почему же? В области типобезопасности действительно C#, Java, Oberon, Ada, а в области метапрограммирования ему противопоставляются R#, Java Syntactic Extender... и как раз ФЯ с мощьными препроцессорами вроде Lisp-а или Ocaml-а.
... << RSDN@Home 1.1.4 beta 7 rev. 466>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Что толку в Ада если Ариан 5 все равно упал
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.05 23:28
Оценка: 1 (1) +1
Здравствуйте, AVC, Вы писали:

AVC>Да все не так.

AVC>Не было продумывания "до", а был язык Си, Страуструпу ничем не обязанный.
AVC>Или его он тоже продумал "до" его создания?

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

Глупосью было завоевав олимп придерживаться этой совместимости и дальше. Разумным шагом было бы выделение опасных конструкций в уровень совместимости, и развитие языка в русло упрощения и типобезопасности.
... << RSDN@Home 1.1.4 beta 7 rev. 466>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: Что толку в Ада если Ариан 5 все равно упал
От: faulx  
Дата: 12.07.05 03:43
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

F>> Безотносительно к тому, о чем идет речь, и оправдано ли было такое решение, хочу сказать, что такие примеры меня всегда умиляют. Решения о включении того или иного свойства в язык принимают на основе того, что кто-то когда-то где-то смотрел на какие-то проекты "из полмиллиона строк" <...>


ПК>Ну, все-таки use cases анализировать надо... Если use case для некоторой языковой возможности не находится, то я слабо представляю, как ее можно спроектировать так, чтоб она в итоге оказалась удобной в использовании. По-моему, лучше отложить включение этой возможности до того, когда возникнет конкретный use case, не покрывающийся/покрывающийся плохо существующими возможностями языка, и вот тогда уже спроектировать ее как следует, чтоб она, действительно, выполняла свое предназначение.


Когда "use case" возникнет, может быть уже поздно. Вспоминается в связи с этим история с утилитой make. (Ссылку сейчас не найду). Автор изначальной версии make написал ее "на коленке" для друзей. Он спешил, и поэтому принял простое решение — использовать символы табуляции для обозначения начала команд (синтаксис Makefile'ов все знают и, надеюсь, понимают, о чем идет речь). Буквально через несколько дней он избавился от этого "хака" — но было уже поздно. Пользователи (их было не больше десятка) уже успели написать Makefile'ы с табуляциями и поленились переписывать их. И вот до сих пор, спустя десятиления, все ругаются, разбираясь, почему make собирает что-нибудь неправильно и обнаружив, что дело в том, что вместо табуляции каким-то образом оказались пробелы.

Что касается конкретной темы обсуждения, то речь о той странной ситуации, когда "use cases" из какого-либо языка программирования рассматриваются как аксиомы для совсем другого языка программирования. При этом совершенно неизвестно, насколько правильны и всеобъемлющи эти "use cases".

PS. А все-таки, неужели это правда, что в C++ могли быть Лисповские condition'ы?
Re[13]: Что толку в Ада если Ариан 5 все равно упал
От: FR  
Дата: 12.07.05 06:53
Оценка: +1
Здравствуйте, AVC, Вы писали:


ГВ>>Ключевая фраза вот эта: "A typical program". Можно это загадочное определение раскрыть полнее? Почему цепляюсь — потому что уже где-то слышал про эти пресловутые 10-15%, вот и стало интересно.


AVC>Вопрос разумный.

AVC>Если Вы не доверяете данным Excelsior (XDS), то надо заниматься измерениями самостоятельно.
AVC>Найду время — "погоняю" разные программы, откомпилированные с разными опциями.
AVC>Пока что лично у меня получалось, что при полной оптимизации XDS (90-х годов) в три раза крыл Visual C++ 6.0.

А можно посмотреть на этот пример где оберон в три раза обгоняет плюсы?
Re[19]: Что толку в Ада если Ариан 5 все равно упал
От: FR  
Дата: 12.07.05 06:53
Оценка: +2 :))) :)
Здравствуйте, VladD2, Вы писали:

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


CX>>Видимо, ты все-таки невнимательно прочитал. C++ противопоставлялся в этой ветке языкам C#, Java, Oberon, Ada. Не лиспу! Вот еще один линк
Автор: CrystaX
Дата: 06.07.05
. На этом тему считаю закрытой.


VD>Ну, почему же? В области типобезопасности действительно C#, Java, Oberon, Ada, а в области метапрограммирования ему противопоставляются R#, Java Syntactic Extender... и как раз ФЯ с мощьными препроцессорами вроде Lisp-а или Ocaml-а.


Угу семеро на одного.
Re[14]: Что толку в Ада если Ариан 5 все равно упал
От: AVC Россия  
Дата: 12.07.05 08:42
Оценка:
Здравствуйте, FR, Вы писали:

ГВ>>>Ключевая фраза вот эта: "A typical program". Можно это загадочное определение раскрыть полнее? Почему цепляюсь — потому что уже где-то слышал про эти пресловутые 10-15%, вот и стало интересно.


AVC>>Вопрос разумный.

AVC>>Если Вы не доверяете данным Excelsior (XDS), то надо заниматься измерениями самостоятельно.
AVC>>Найду время — "погоняю" разные программы, откомпилированные с разными опциями.
AVC>>Пока что лично у меня получалось, что при полной оптимизации XDS (90-х годов) в три раза крыл Visual C++ 6.0.

FR>А можно посмотреть на этот пример где оберон в три раза обгоняет плюсы?


Уф! Специально прошелся по старым постам, чтобы вспомнить, откуда "ноги растут".
На этот факт я случайно наткнулся еще в январе:
http://www.rsdn.ru/Forum/Message.aspx?mid=994706&amp;only=1
Автор: AVC
Дата: 19.01.05

и был удивлен (потому что в литературе где-то указывались 40% преимущества XDS над Visual C++ и 15% — над Watcom.).
Затем на вопрос, который задал Cyberax я дал ссылку, где взять XDS и тест drystone(это и есть ответ на Ваш вопрос, можно ли посмотреть и где):
http://www.rsdn.ru/Forum/Message.aspx?mid=994783&amp;only=1
Автор: AVC
Дата: 19.01.05

Затем у нас с Cyberax случилась, к сожалению, перепалка:
http://www.rsdn.ru/Forum/Message.aspx?mid=995194&amp;only=1
Автор: AVC
Дата: 19.01.05

http://www.rsdn.ru/Forum/Message.aspx?mid=1002684&amp;only=1
Автор: AVC
Дата: 25.01.05

Был задан вопрос о ключах компиляции:
http://www.rsdn.ru/Forum/Message.aspx?mid=1002993&amp;only=1
Автор: AVC
Дата: 25.01.05

Дальше "дедушка" Cyberax рассказывал сказки о Visual C++ 8 (beta), а я ему не верил:
http://www.rsdn.ru/Forum/Message.aspx?mid=1003033&amp;only=1
Автор: AVC
Дата: 25.01.05

http://www.rsdn.ru/Forum/Message.aspx?mid=1054838&amp;only=1
Автор: AVC
Дата: 03.03.05


Если у Вас дойдут руки проверить этот пример на Вашем компьютере и на Вашем компиляторе Си++, сообщите мне о результатах, пожалуйста.
А то они меня самого смущают (3 раза все-таки! ), но неизменно подтверждаются при запуске drystone.

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
Re[15]: Что толку в Ада если Ариан 5 все равно упал
От: Трурль  
Дата: 12.07.05 09:17
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Если у Вас дойдут руки проверить этот пример на Вашем компьютере и на Вашем компиляторе Си++, сообщите мне о результатах, пожалуйста.

AVC>А то они меня самого смущают (3 раза все-таки! ), но неизменно подтверждаются при запуске drystone.

3 раза — это слишком . Просто XDS слишком уж оптимизирует — выбрасывает нафиг большую часть кода. Весь смысл теста теряется.
Re[16]: drystone
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 12.07.05 12:05
Оценка:
Здравствуйте, Трурль, Вы писали:

Т> Просто XDS слишком уж оптимизирует — выбрасывает нафиг большую часть кода. Весь смысл теста теряется.


Если я не ошибаюсь, но если попробовать вручную "распутать" оригинальный тест drystone, то должен получиться пустой цикл.

То есть смысл этого теста как раз в том и состоит — хватит компилятору ума додуматься до этого или не очень...
Re[15]: Что толку в Ада если Ариан 5 все равно упал
От: FR  
Дата: 12.07.05 12:15
Оценка: 1 (1)
Здравствуйте, AVC, Вы писали:

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



FR>>А можно посмотреть на этот пример где оберон в три раза обгоняет плюсы?


AVC>Уф! Специально прошелся по старым постам, чтобы вспомнить, откуда "ноги растут".

AVC>На этот факт я случайно наткнулся еще в январе:
AVC>http://www.rsdn.ru/Forum/Message.aspx?mid=994706&amp;only=1
Автор: AVC
Дата: 19.01.05

AVC>и был удивлен (потому что в литературе где-то указывались 40% преимущества XDS над Visual C++ и 15% — над Watcom.).
AVC>Затем на вопрос, который задал Cyberax я дал ссылку, где взять XDS и тест drystone(это и есть ответ на Ваш вопрос, можно ли посмотреть и где):
AVC>http://www.rsdn.ru/Forum/Message.aspx?mid=994783&amp;only=1
Автор: AVC
Дата: 19.01.05

AVC>Затем у нас с Cyberax случилась, к сожалению, перепалка:
AVC>http://www.rsdn.ru/Forum/Message.aspx?mid=995194&amp;only=1
Автор: AVC
Дата: 19.01.05

AVC>http://www.rsdn.ru/Forum/Message.aspx?mid=1002684&amp;only=1
Автор: AVC
Дата: 25.01.05

AVC>Был задан вопрос о ключах компиляции:
AVC>http://www.rsdn.ru/Forum/Message.aspx?mid=1002993&amp;only=1
Автор: AVC
Дата: 25.01.05

AVC>Дальше "дедушка" Cyberax рассказывал сказки о Visual C++ 8 (beta), а я ему не верил:
AVC>http://www.rsdn.ru/Forum/Message.aspx?mid=1003033&amp;only=1
Автор: AVC
Дата: 25.01.05

AVC>http://www.rsdn.ru/Forum/Message.aspx?mid=1054838&amp;only=1
Автор: AVC
Дата: 03.03.05


AVC>Если у Вас дойдут руки проверить этот пример на Вашем компьютере и на Вашем компиляторе Си++, сообщите мне о результатах, пожалуйста.

AVC>А то они меня самого смущают (3 раза все-таки! ), но неизменно подтверждаются при запуске drystone.

В общем я посмотрел этот dry.c кошмар какой-то, написан на K&R си, много вещей (типа пустых циклов) которые просто выкидываются современными компиляторами в общем результаты тестирования такие:

XDS:
Dhrystone time for 40000000 passes = 12
This machine benchmarks at 3333333 dhrystones/second

vc6(cl /GX /O2 Dry_c.c):
Dhrystone time for 40000000 passes = 24
This machine benchmarks at 1666666 dhrystones/second

vc7.1(cl /GX /O2 Dry_c.c + #pragma auto_inline(on)):
Dhrystone time for 40000000 passes = 16
This machine benchmarks at 2500000 dhrystones/second

Два раза есть, но мне кажется тест полная подстава, меня очень смущают сообщения которые в процессе компиляции выдает XDS компилятор redundant code eliminated (к тому же внутри циклов). Мое мнение этот тест подстава, реально он не выполняет работу для которой предназначен. Вообще конечно я восхищен умением XDS выкидывать не влияющие на результат куски кода, но для реальных приложений которые все таки что-то считают это не дает преимуществ, что показывает рядом лежащий тест LINPACK на котором XDS уже немного отстает от VC.
Re[20]: Что толку в Ада если Ариан 5 все равно упал
От: Gaperton http://gaperton.livejournal.com
Дата: 12.07.05 12:18
Оценка:
Здравствуйте, FR, Вы писали:

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


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


CX>>>Видимо, ты все-таки невнимательно прочитал. C++ противопоставлялся в этой ветке языкам C#, Java, Oberon, Ada. Не лиспу! Вот еще один линк
Автор: CrystaX
Дата: 06.07.05
. На этом тему считаю закрытой.


VD>>Ну, почему же? В области типобезопасности действительно C#, Java, Oberon, Ada, а в области метапрограммирования ему противопоставляются R#, Java Syntactic Extender... и как раз ФЯ с мощьными препроцессорами вроде Lisp-а или Ocaml-а.


FR>Угу семеро на одного.

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

Видимо, ты все-таки невнимательно прочитал. C++ противопоставлялся в этой ветке языкам C#, Java, Oberon, Ada. Не лиспу!

Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.