crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> i++ против ++i, спор однако
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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
4 страниц V   1 2 3 > »   
Начать новую тему
Ответов (1 - 9)
Litkevich Yuriy
  опции профиля:
сообщение 20.7.2008, 15:53
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Red Devil @ 20.7.2008, 15:27) *
пишется i++, вместо ++i

я не знаток Си, но думаю во вменяемом компиляторе результат должен быть одинаковым.
А насчет професиональности OSS-програмеров согласен. У профана скорее всего времени не будет чем-то заниматься, конечно бывают исключения.
Например история про TortoiseSVN писали его несколько чуваков, пока не появился один и сказал, "блин, вас кто так софт писать научил" иначал все переделывать, теперь мы имеем, возможно, лучший SVN клиент под виндовоз, я ему как-то писал, чтобы он сделал и под линух, но он сказал, что нету времени тщательно изучать Линух, а не тщательно он делать не будет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Red Devil
  опции профиля:
сообщение 20.7.2008, 17:13
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 6.6.2008
Из: Saint-Petersburg
Пользователь №: 194

Спасибо сказали: 1 раз(а)




Репутация:   3  


Цитата(Litkevich Yuriy @ 20.7.2008, 16:53) *
я не знаток Си, но думаю во вменяемом компиляторе результат должен быть одинаковым.

нет, результат одинаковым не будет. Об этом уже многое говорилось и писалось в книгах таких авторов как Мейрс, Саттер, Джосьюттис.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.7.2008, 17:22
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


по опыту написания программ на ассемблере для контроллеров, а рание и для проца типа Z80, могу утверждать, что результат можно сделать по размеру кода и времени выполнения одинаковым, хотя интеловский проц редкостное говно, но я думаю и там это осуществимо. Просто у некоторых людей ума слихком много вот у них и получается как у класиков "Горе от ума"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 21.7.2008, 8:56
Сообщение #5


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


Цитата(Litkevich Yuriy @ 20.7.2008, 15:53) *
я не знаток Си, но думаю во вменяемом компиляторе результат должен быть одинаковым

разница есть, и довольно существенная, т.к. при использовании i++ расходуется памяти на sizeof(i) байт больше, т.к. создается временная копия объекта. Ниже два фрагмента кода, иллюстрирующие различия этих операторов(что происходит при их использовании):

++i
{
return i += 1;
}


i++
{ 
int temp = i; //создается временный объект, т.е. увеличивается расход памяти. P.S. тип int я взял только для примера, может  быть и другой тип
i += 1;
return temp; // (!) возвращается временный объект
}


Сообщение отредактировал void* - 21.7.2008, 8:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Red Devil
  опции профиля:
сообщение 21.7.2008, 10:53
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 68
Регистрация: 6.6.2008
Из: Saint-Petersburg
Пользователь №: 194

Спасибо сказали: 1 раз(а)




Репутация:   3  


Помимо этого в первом случае возращается ссылка, а во втором значение. Для простых типов между ссылкой и значением разницы еще не будет, а вот для итераторов - очень большая разница.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 21.7.2008, 11:01
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


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

Для целочисленного типа и простых итераторах для современных компиляторов разницы не будет, насколько я знаю от программистов, которые делают встроенное ПО для авиации! :) Я еще только учусь на такого программиста, но встроенное ПО пока что не доверяют.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.7.2008, 11:43
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


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

void*, пример неудачный т.к. он не объясняет причины копирования, выглядит не логично.
Надо с какой-нибудь допоперацией, например:
if (++i > k)
   goto 1branch
else
   goto 2branch


if (i++ > k)
   goto 1branch
else
   goto 2branch
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Багира
  опции профиля:
сообщение 21.7.2008, 11:46
Сообщение #9


Злоба_дня
***

Группа: Администратор
Сообщений: 314
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 2

Спасибо сказали: 16 раз(а)




Репутация:   4  


Вот вас понесло... :mocking:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.7.2008, 12:03
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


для первого варианта псевдо ассемблер так выглядит:
1.            inc i;
2.            comp i,k;  //если i>k, то пропускаем следующую команду
3.            goto 1branch;
4.            foo; //2-ая ветка
...
n. 1branch    foo; [i]1-ая ветка[/i]


для второго варианта псевдо ассемблер так выглядит:
1.            comp i,k;  //если i>k, то пропускаем следующую команду
2.            goto 1branch;
3.            inc i;  //2-ая ветка
...
n. 1branch    inc i; //1-ая ветка


и того один инкремент лишний. Если инкремент должен быть сложного типа данных вместо inc i вызывается функция.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 3:01