Здравствуйте, гость ( Вход | Регистрация )
|
Red Devil |
20.7.2008, 11:27
Сообщение
#1
|
![]() Студент ![]() Группа: Участник Сообщений: 68 Регистрация: 6.6.2008 Из: Saint-Petersburg Пользователь №: 194 Спасибо сказали: 1 раз(а) Репутация: 3
|
Я согласен с автором в том, что опен соурс программисты слишком непрофиссионально относятся к работе. В большенстве своем пишут на Си, те кто пишут на С++ используют его неправильно.
Стоит хотя бы исходные коды посмотреть, ужас, ужас. Естественно все будет тормозить, когда циклы не оптимизируется, пишется i++, вместо ++i, функция вызыова размерности вызывается каждый при проходе цикла, вместо того чтобы ее сохранить при начале проходе и сравнивать значение. Лишние переменные с неопределенными сроком жизни, отсуствие применения паттернов проектирования - это я его могу продолжать еще долго. Привычка пихать все в классы, ничего не разделяя. На первый взгляд кажется что типа это дело автора опен соурс, но это напрямую влияет на архитуктуру проекта и того кто будет в дальшнейшем его развивать. Большенство проектов умирают, потому что никто не хочет поддерживать тот убогий код, который был заложен автором при разработке, в том числе и сам автор. Статью читал где-то месяц назад, про программистов во всем согласен, что там написано. Сообщение отредактировал Red Devil - 20.7.2008, 11:29 |
|
|
|
![]() |
|
Red Devil |
23.7.2008, 7:34
Сообщение
#2
|
![]() Студент ![]() Группа: Участник Сообщений: 68 Регистрация: 6.6.2008 Из: Saint-Petersburg Пользователь №: 194 Спасибо сказали: 1 раз(а) Репутация: 3
|
Цитата(Andrew Selivanov @ 22.7.2008, 16:09) Link Рискуя нарваться на крики негодования, но все же: Инженерный подход: так, оно должно нормально работать по алгоритму M, доделаю, нужно будет еще модули X, Y, Z Программистский подход: как же мне написать, ++i или i++? как будет быстрее?.. я выиграю 0,01мс/3 байта или нет? (спустя три часа) дада, да, я понял, ++i гораздо лучше, i++ нужно нахрен убрать из языка! Это отличиает программиста от не программиста. И если ты не знаешь таких базовых понятий, что любая операция в цикле дорогостоящая - говорить вообще не о чем. Программист вообще от думать не должен, в цикле всегда должен быть оператор ++i. Цитата(AD @ 22.7.2008, 16:25) Link Не совсем так. Для твоего примера, нормальный современный компилятор, сообразит, что возвращаемое значение не используется - значит его можно выкинуть. Естественно, это в случае, когда включена хоть какая-то оптимизация. Цитата(Red Devil @ 22.7.2008, 14:56) Link Когда же операторы ++ определены программистом (а это обычно итераторы) - компилятор не знает разницы, может программист по своему реализовал оператор ++ и у них асболютно разная логика, поэтому он ничего не может оптимизировать. И дело тут не в том, что используется возращаемое значение или нет, потому что даже если оно не используется, оно все равно будет возращено и код для него отработает. Сообщение отредактировал Red Devil - 23.7.2008, 7:38 |
|
|
|
|
Tonal |
23.7.2008, 11:10
Сообщение
#3
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17
|
Цитата(Red Devil @ 23.7.2008, 11:34) Link Цитата Не совсем так. Для твоего примера, нормальный современный компилятор, сообразит, что возвращаемое значение не используется - значит его можно выкинуть. Естественно, это в случае, когда включена хоть какая-то оптимизация. Цитата(Red Devil @ 22.7.2008, 14:56) Link Когда же операторы ++ определены программистом (а это обычно итераторы) - компилятор не знает разницы, может программист по своему реализовал оператор ++ и у них асболютно разная логика, поэтому он ничего не может оптимизировать. И дело тут не в том, что используется возращаемое значение или нет, потому что даже если оно не используется, оно все равно будет возращено и код для него отработает. Я же привёл плюсовый код с совмещением (перегрузкой) инкремента, и асмовый листинг. Покажи, пожалуйста, код, в функции f2 (в асме __Z2f21ARKS_), который отвечает за создание неиспользуемого экземпляра и его возврат. Его нет. Дело в том, что если у действия нет побочных эффектов, и его результат нигде не используется, его можно смело выкидывать из программы. Именно это и делает оптимизатор. Причём там всё ещё несколько сложнее, т.к. оптимизатор работает не с языковыми конструкциями, не с деревом разбора, а работает он с промежуточным объектным кодом, на уровне которого уже никакого С++ или там Ada нет - есть инструкции некоторой универсальной машины, которые потом, после оптимизации, преобразуются в объектный код. Почитай например "Красного дракона" (Ахо А., Сети Р., Ульман Дж. Компиляторы. Принципы, технологии, инструменты) Там всё это подробно изложено. Это не агитация за то, чтобы убрать постинкремет из языка. Я довольно хорошо понимаю разницу между этими операторами, и сам всегда пишу for (...; ++i). Просто не нужно создавать мифы и догмы, нужно аккуратно пользоваться доступным инструментарием. |
|
|
|
Red Devil i++ против ++i 20.7.2008, 11:27
Litkevich Yuriy Цитата(Red Devil @ 20.7.2008, 15:27) пише... 20.7.2008, 15:53
Red Devil Цитата(Litkevich Yuriy @ 20.7.2008, 16:53... 20.7.2008, 17:13
Litkevich Yuriy по опыту написания программ на ассемблере для конт... 20.7.2008, 17:22
void* Цитата(Litkevich Yuriy @ 20.7.2008, 15:53... 21.7.2008, 8:56
Red Devil Помимо этого в первом случае возращается ссылка, а... 21.7.2008, 10:53
AD ЦитатаПомимо этого в первом случае возращается ссы... 21.7.2008, 11:01
Litkevich Yuriy я говорил о вменяемом компиляторе, но не бесплатно... 21.7.2008, 11:43
Сафи Вот вас понесло... 21.7.2008, 11:46
Litkevich Yuriy для первого варианта псевдо ассемблер так выглядит... 21.7.2008, 12:03
Red Devil Цитатаif (++i > k)
goto 1branch
else
goto... 21.7.2008, 16:54
AD ЦитатаДля итераторов есть и очень существенная, пр... 21.7.2008, 18:14
void* Цитата(AD @ 21.7.2008, 18:14) STL во встр... 21.7.2008, 18:43
AD Цитата(void* @ 21.7.2008, 19:43) прикольн... 21.7.2008, 19:40
Litkevich Yuriy во встроенном ПО стандартных библиотек избегают по... 21.7.2008, 19:42
AD Цитата(Litkevich Yuriy @ 21.7.2008, 20:42... 21.7.2008, 19:44
Litkevich Yuriy Цитата(AD @ 21.7.2008, 23:44) Ее боятся
П... 21.7.2008, 19:51
Novak Цитата(Red Devil @ 21.7.2008, 17:54) Этот... 22.7.2008, 5:25
void* Цитата(Novak @ 22.7.2008, 5:25) Нормальны... 22.7.2008, 9:05
Red Devil Цитата(Novak @ 22.7.2008, 5:25) Нормальны... 22.7.2008, 13:56
Andrew Selivanov Рискуя нарваться на крики негодования, но все же:
... 22.7.2008, 15:09
Litkevich Yuriy RE: i++ против ++i 22.7.2008, 15:14
AD Andrew Selivanov, логично! 22.7.2008, 15:25
Tonal Не совсем так. Для твоего примера, нормальный совр... 22.7.2008, 21:25
ЙаМайскЫйПчОЛ Посвящается вечному спору)
Инкремент постфиксный(i... 23.7.2008, 9:16
AD Цитата(ЙаМайскЫйПчОЛ @ 23.7.2008, 10:16) ... 23.7.2008, 9:39
ЙаМайскЫйПчОЛ Цитата(AD @ 23.7.2008, 10:39) Про статику... 23.7.2008, 9:59
AD Цитата(ЙаМайскЫйПчОЛ @ 23.7.2008, 10:59) ... 23.7.2008, 10:13
Litkevich Yuriy Цитата(ЙаМайскЫйПчОЛ @ 23.7.2008, 13:16) ... 23.7.2008, 12:06
ЙаМайскЫйПчОЛ кстати, забыл сказать, что использование цикла for... 23.7.2008, 12:11
Litkevich Yuriy Цитата(ЙаМайскЫйПчОЛ @ 23.7.2008, 16:11) ... 23.7.2008, 12:16
ЙаМайскЫйПчОЛ Litkevich Yuriy, В чем вопрос?
Ты все правильно ра... 23.7.2008, 12:20
void* Цитата(ЙаМайскЫйПчОЛ @ 23.7.2008, 12:11) ... 23.7.2008, 12:50![]() ![]() |
|
Текстовая версия | Сейчас: 16.12.2025, 4:56 |