Re[10]: Об эффективности программ (уровень языка)
От: alexeiz  
Дата: 07.10.05 19:14
Оценка: 13 (2)
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Кстати, для C++ Степановым в свое время даже был написан набор их 13 тестов, меряющих так называемую abstraction penalty. Для современных компиляторов (Intel C++, Visual C++) abstraction penalty в соответствии с этим тестом, если и проявляется, то "плавает" в пределах единиц процентов.


Вот похожая штука для контейнеров в исполнении Страуструпа: http://groups.google.com/group/comp.lang.c++.moderated/msg/731a399cb149e0df
Re[9]: Об эффективности программ
От: Павел Кузнецов  
Дата: 07.10.05 19:29
Оценка: +3
mrozov,

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


> <...> Не думаю, что стоит вот так категорично говорить о том, что вам должны инструментальные средства.


"Они мне должны" в простом понимании: если средства не соответствуют упомянутому критерию, я им предпочитаю имеющиеся альтернативы, предоставляющие больше возможностей программистам, у которых с ДНК все в порядке, а не облегчающие жизнь тем, у кого в ДНК проблемы в ущерб первым.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[9]: Об эффективности программ
От: Павел Кузнецов  
Дата: 07.10.05 19:35
Оценка: 49 (3) :)
GlebZ,

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


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


Теперь осталось определить, в какой степени мне важны интересы первых при выборе инструментальных средств, и на этом можно будет поставить точку в этой дискуссии. Пожалуй, с чем я легко могу согласиться, так это с тем, что в высказывании, процитированном выше, мне следовало подчеркнуть, что речь идет о тех инструментах, которые интересуют меня лично. Об остальных у меня мнения, кроме того, что они мне неинтересны, нет.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[5]: Об эффективности программ
От: Павел Кузнецов  
Дата: 07.10.05 19:43
Оценка: 7 (1) -1
gear nuke,

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

>
> ПК>Только та, которая стоит дополнительного времени при разработке.
>
> ИМХО любая оптимизация будет стоить дополнительного времени, если проектировать и делать "абы работало".

Не любая. Например, есть выбор: написать сортировку "пузырьком" или использовать библиотечную std::sort. Первое делать дольше и в большинстве случаев работать будет медленнее, чем второе.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[3]: Об эффективности программ
От: Nickolay Ch  
Дата: 07.10.05 20:55
Оценка: -1
Здравствуйте, eao197, Вы писали:

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


pp2>>Маленький совет сочуствующим автору. Вы любите чистое творчество, сложные неординарные задачи, непаханные поля новых технологий? Уходите из программирования. Я имею ввиду не "телом", а "душой". Т.е. можно продолжать зарабатывать на этом поле деньги, а тем временем прорабатывать новые, хотя бы смежные, отрасли. Чертовски приятно видеть как происходит становление новой технологии! И там есть где разгуляться пока туда не нагрянули люди с огромными мешками денег и не началась грызня за эти самые мешки


E>Давайте это Ричарду Столлману (GCC, emacs), Линусу Торвальдсу (Linux), Тео да Радту (OpenBSD), Гвидо ван Россому (Python), Ларри Уоллу (Perl), Якиро Матцумото (Ruby), ...(список можно продолжать)..., раcскажем. А то мужики, право слово, фигней страдают. Надо их жизни-то научить.


E>


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


Т.к., в основном, в этом разделе пустой фелйм, то могу ответить Вам симметрично:
Если вы относитесь у программированию как к искусству, то и относиесь себе и дальше, советы давать то зачем
Мы с вами будем одинаково правы в подобных советах.
Я достатосно резко написал так потому, что исходный призыв был столь же эмоционален сколь и пуст.
"Пишите эффективно" — и Столлман пишет эффективно, и армия индусов в МС(или где там еще), просто "эффективность" у каждого своя...
Всех то стричь под одну гребенку зачем?
Re[6]: Об эффективности программ
От: gear nuke  
Дата: 08.10.05 01:14
Оценка: +1
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Например, есть выбор: написать сортировку "пузырьком" или использовать библиотечную std::sort. Первое делать дольше и в большинстве случаев работать будет медленнее, чем второе.


Вот, кстати, хороший пример Вы привели. А если человек не понимает, что и почему лучше, он запросто может реализовать то, что первое придёт в голову (пузырёк) .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[7]: Об эффективности программ
От: Павел Кузнецов  
Дата: 08.10.05 01:21
Оценка: +1
Cyberax,

>> Гм. Мне не хотелось бы прослыть человеком, приносящим дурные вести, но

>> ты только что продемонстрировал способ внести в программу buffer
>> overrun vulnerability.

> Вот политкорректный вариант:

>
> std::string res;
> res.reserve(100); //Разумное число
> for(int f=0;f<nStrings;f++)
>     str.append(szStrings[f]);
>

> Безопасно, причем если результирующая строка меньше 100 символов, то не
> будет лишних переаллокаций.

А при желании можно даже сохранить начальное выделение памяти в стеке для строк:
fast_buffer<char, 100> res;
for(int f=0; f < nStrings; f++)
     res.append(szStrings[f]);
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: Об эффективности программ
От: Павел Кузнецов  
Дата: 08.10.05 01:26
Оценка:
pp2,

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


> Ну и где тут рост качества кода? Бюллетени со знаком "критично" выходят почти каждый месяц — может это рост качества?


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

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


Совершенно верно. Еще ни одного релиза не было с момента, когда Майкрософт начали, действительно, заботиться о качестве кода. Только сервис-паки (XP SP2 и 2003 SP). Обещают в висте значительно улучшенное качество кода и безопасность. Поживем-увидим.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: Об эффективности программ
От: Зверёк Харьковский  
Дата: 08.10.05 02:03
Оценка:
Здравствуйте, McSeem2, Вы писали:

ЗХ>>Мда. Энтузиасты и вольные художники формируют эту индустрию.

ЗХ>>Ну да к вечеру вернется McSeem2, он тебе подробнее объяснит

ЗХ>>Конечно, а зачем?


MS>


Да, ориджин давно пора было сменить. Так лучше?
FAQ — це мiй ай-кью!
Re: Об эффективности программ
От: iZEN СССР  
Дата: 08.10.05 14:10
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Собрался наконец написать. Минусов мне за эти тезисы поставят, это уж точно. Ну

PD>что же — к счастью, я уже не в том возрасте, когда падение или рост рейтинга
PD>могут серьезно повлиять на самочувствие.

PD>Итак...

<...>
PD> Ну и к чему автор призывает, спросите Вы ? К поголовному возврату на
PD>ассемблер
PD>и к 64 Кбайтам ? К отказу от того пути, по которому сейчас пошло развитие ?

PD> Я не настолько наивен, чтобы к этому призывать. Просто одно скажу :

PD>Пишите свои программы эффективно, господа! По крайней мере настолько, насколько
PD>это возможно!

Есть такая парадигма: service-oriented architecture (SOA).
Она есть и успешно работает в MacOS X. Грубо — это когда пользователь вместо покупки программы за $400 с навороченным интерфейсом и ненужными (для него) фичами обходится мимтемным сервисом, но с нужной ему фичей за $25.
Сервис проверки орфографии ВО ВСЕХ текстовых полях, а не только в конкретном текстовом редакторе одной известной фирмы — вот одно из следствий такого подхода. Маленький и не тормозит.
Re[2]: Об эффективности программ
От: Cyberax Марс  
Дата: 08.10.05 14:12
Оценка: +1
iZEN wrote:

> Есть такая парадигма: service-oriented architecture (SOA).

> Она есть и успешно работает в MacOS X. Грубо — это когда пользователь
> вместо покупки программы за $400 с навороченным интерфейсом и
> ненужными (для него) фичами обходится мимтемным сервисом, но с нужной
> ему фичей за $25.
> Сервис проверки орфографии ВО ВСЕХ текстовых полях, а не только в
> конкретном текстовом редакторе одной известной фирмы — вот одно из
> следствий такого подхода. Маленький и не тормозит.

Надо сказать, что API для Вордовской системы проверки правописания
свободно доступны. У меня, например, они прикручены к Far'у.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[11]: Об эффективности программ
От: Nickolay Ch  
Дата: 08.10.05 14:25
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>GlebZ,


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


>> Все к этому движется. Только все медленнее и медленнее.


ПК>Это только в фантазиях. На практике разработка программ как была, так и осталась штучным производством. О каком серийном производстве может идти речь, если одной из типичных активностей является рефакторинг? Это скорее проектирование и разработка экспериментальных образцов.


Программы не все разные. Примеры:
семейство текстовых редакторов,
интеренет магазины
системы управления складами
электронные библиотеки
управление документооборотом

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

Хотелось бы, чтобы разработка шла по принципу сборки блоков, но действительно к этому не идем а еле ползем, чтож тут поделаешь, проблема индустрии, кстати очень интересная и заслуживающая отдельного обсуждения. Но, к примеру,
посмотрите на фреймворк 2.0 — сколько блоков там добавили И т.д.
Так что в идеале это производство, а то, что зачастую разработка вырождается в сборку штучных образцов — это не есть хорошо.
Безусловно, останутся области, где программы будут штучными(кстати и авто собирают иногда вручную на заказ), но это опять же не повод делать такие сильные обобщения, которые были в исходном посте.
Re[12]: Об эффективности программ
От: Павел Кузнецов  
Дата: 08.10.05 18:04
Оценка:
Nickolay Ch,

> ПК> Это только в фантазиях. На практике разработка программ как была, так и осталась штучным производством. О каком серийном производстве может идти речь, если одной из типичных активностей является рефакторинг? Это скорее проектирование и разработка экспериментальных образцов.


> Программы не все разные. Примеры:

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

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

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


"В теории нет разницы между практикой и теорией. На практике она есть."

Так или иначе, похоже, ты согласен, что на данный момент разработка программ серийным производством не является. А что будет в будущем -- вопрос очень открытый.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[14]: Об эффективности программ
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.10.05 20:53
Оценка:
Здравствуйте, srggal, Вы писали:

S>

S>Прочитав топик про С# 3.0 С# 3.0
S>меня посетило подозрение, что C# взрослеет, и скоро там тоже понадобяться раздельные наборы столовых приборов


S>здесь
Автор: srggal
Дата: 07.10.05


S>То что я написал — Вы не опровергли, а вместо этого согласились.


S>Соответсвенно вывод:


S> Разработчики инструментальных средств — считают так как Я и Павел Кузнецов ( Это ИМХО ), а не так как Вы .


Данный конкретный разработчик C# 3.0 считает, что его нововведения вполне безопасны и дружественны к новичкам.
... << RSDN@Home 1.2.0 alpha rev. 615 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[10]: Об эффективности программ
От: GlebZ Россия  
Дата: 09.10.05 22:35
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

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

Ну, смотря кем работаешь. Если в большой команде, то твой выбор должен совпадать с выбором первых.
Ну а если твоя работа — что-то типа системного программиста, то уже не обязательно. Тут уже как выбор, типа все на С#, а наиболее изощренные(например системщики) на C++/CLI. И на unmanagement иногда. И чтоб с JavaScript + Html могли людям помочь. И чтобы к БД, интерфейсик приделать. И чтоб.... Для такого человека язык не главное. Главное — голова на плечах, и доступ к информации о том, о чем они слышат в первый раз.
Ну и третий случай, когда небольшая команда высокопрофессиональных программистов. Здесь уже ничего предположить нельзя. Если внешний заказ, то выбор по требованиям к продукту.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Об эффективности программ
От: GlebZ Россия  
Дата: 09.10.05 22:35
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

Только что прочитал:

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

Понятно, что при использовании готовых строительных блоков возможны потери. Тем не менее потенциальная выгода за счет переиспользования просто колоссальна. В математике, где имеются точные оценки, показано, что длину доказательства (читай — программы) можно сократить в БАШНЮ ЭКСПОНЕНТ РАЗ без существенной потери эффективности лишь за счет введения лемм (читай — использования уже построенных программ).

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

Вторая ситуация — другая крайность. Программисту на Java потребовалось построить синтаксический анализ. На вопрос о том, как он это делает, получен ответ: «Зачем это знать? У меня есть пакет JavaCC, который все делает, как надо!» Вместе с тем, дальнейшие расспросы показали, что этот программист не представляет себе даже того, какого типа метод анализа поддерживает JavaCC, и, следовательно, ничего не может сказать о том, как задание грамматики для данного пакета связано с эффективностью анализа. Узнав возможные варианты, программист призадумался, но ничего менять не стал. Почему? Ответ простой: «Так ведь все уже работает!» Короче говоря, качество использования готовых компонентов системы зависит от знания о них.


(с)Стили и методы программирования
Автор: GlebZ
Дата: 10.10.05


С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Закон Мура умер
От: GlebZ Россия  
Дата: 09.10.05 22:35
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>С третьей задачей пролема такая: кеш сильно засоряется.

Опять кэш. Нету кэша. Есть область памяти которую загружает программа по полученным сведениям о своем выполнении во время компиляции и ресурсах компьютера в runtime.

GN>Возьмём обычную программу в 5 мегабайт, даже без данных. А кеш всего-то 128Кб на Celeron (на все процессы!). Вот и получим в результате, постоянный "swap" из кеша в оперативку .

Давай думать не про селерон, а про PIV с 2Mb. Или пересчитаем для Celeron. Если у нас 8 процов * 128 =1024Кб. Уже лучше.

GN>Как раз таки это близко к NP полной проблеме — кеш у каждого процессора по своему работает, да ещё и контроллер памяти вмешивается. Есть базовые правила, вроде выравнивания, но на современных процессорах это как раз не очень влияет. Говорить о хоть о какой-то автоматической оптимизации под кешь можно только относительно intel C++ compiler. здесь просто цыфры посмотрите, даже в код можно не вникать — "запросто" делается ускорение в 3 раза. Средний компилятор о таких трюках не знает совсем.

Мне не интересен сам вопрос про кэш. Кэш неуправляем и эвристичен. Я предполагаю более управляемую архитектуру.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Об эффективности программ
От: McSeem2 США http://www.antigrain.com
Дата: 09.10.05 23:05
Оценка: 9 (7) +3 :)
Здравствуйте, gear nuke, Вы писали:

GN>Вот, кстати, хороший пример Вы привели. А если человек не понимает, что и почему лучше, он запросто может реализовать то, что первое придёт в голову (пузырёк) .


Да, но есть случаи, когда этот "пузырек" побьет std::sort в разы или даже десятки раз (на почти отсортированных массивах). В моей практике такой случай был, причем очень хитрый. В 99% случаев данные были отсортированы. В 0.9 процентов случаев — почти отсортированы. В 0.1% случаев — практически в беспорядке. Решение таково: пишем bubble sort (да, именно ее). Данная сортировка, являясь "наитупейшей" обладает важным свойством — мы можем контролировать, насколько нам удалось продвинуться и сколько мы сделали перестановок. В 99% случаев она срабатывала без единой перестановки. Но как только количество перестановок превышало некий предел (подобранный эмпирически), мы все бросали и отдавали на съедение quick sort. Это эмпирическое знание позволило ускорить некий процесс обработки данных более чем вдвое, по сравнению с просто вызовом std::sort().

К чему я все это? — да ни к чему, просто случай из практики. Ну и к тому, что "ученье — свет", "инженер — это звучит гордо" (в качестве само-сарказма). А так же к тому, что пути оптимизации неисповедимы.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[5]: Неэффективности программ -- ДА!
От: McSeem2 США http://www.antigrain.com
Дата: 09.10.05 23:47
Оценка:
Здравствуйте, eao197, Вы писали:

E>А поиск в Janus я привел как пример распространенного подхода: сделать работоспособный вариант без учета его эффективности. А потом, когда это станет проблемой, оптимизировать.


E>Тут уже кто-то сказал, что это "потом" никогда не наступает.


Это был я
Но зададим себе вопрос — "а оно надо"? Может быть и не нужен поиск в Janus? Или нужен?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[11]: Закон Мура умер
От: gear nuke  
Дата: 10.10.05 01:45
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Опять кэш. Нету кэша. Есть область памяти которую загружает программа по полученным сведениям о своем выполнении во время компиляции и ресурсах компьютера в runtime.


Можно называть это как угодно, но с технической точки зрения это всё равно будет кэш.

GN>>Возьмём обычную программу в 5 мегабайт, даже без данных. А кеш всего-то 128Кб на Celeron (на все процессы!). Вот и получим в результате, постоянный "swap" из кеша в оперативку .

GZ>Давай думать не про селерон, а про PIV с 2Mb.

Это не сильно меняет ситуацию. Разница в размерах програм и размером кэша — порядок.

GZ>Или пересчитаем для Celeron. Если у нас 8 процов * 128 =1024Кб. Уже лучше.


Для каждого-то CPU всё равно останется 128.

GZ>Мне не интересен сам вопрос про кэш. Кэш неуправляем и эвристичен. Я предполагаю более управляемую архитектуру.


По сути, Вы предлагаете управляемый кэш. Это способно дать выигрыш. И сущесвующие методики работы с кэшем тоже дают выигрыш. Вопрос в том, почему до сих пор нет ни одного компилятора использующего это эффективно?
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.