Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Как стать программистом: часть первая, нравоучительная

Ответить
Настройки темы
Как стать программистом: часть первая, нравоучительная

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


http://www.kalinin.ru/programming/ab...15_02_02.shtml

Не со всем я там согласен, но всё же очень уважаю Андрея Калинина -- его заметки достаточно сильно повлияли на моё программисткое мировозрение (я ведь, по сути, ещё совсем новичёк).

Кстати, он там организовал небольшоё дайджест -- часто попадаются интересные ссылки (хотя бы про перегрузку пробела в C++), обычно хотя бы частично вязанные с программированием.

Добавлено:

Цитата:
хотя бы частично вязанные с программированием.
Ну вы меня поняли.

-------
http://ivank.ru


Отправлено: 23:51, 22-02-2002

 

Мичуринский ученик


Сообщения: 740
Благодарности: 1

Профиль | Отправить PM | Цитировать


ivank Не а не понял!

-------
Apis.NET@oszone.net


Отправлено: 10:35, 25-02-2002 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


изверг


Сообщения: 39
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
Вообще, на мой взгляд возможность переопределения операторов (таких, как сложение или умножение) скорее недостаток языка, чем достоинство: от всех этих изысков крыша у программиста, читающего исходник, сносится практически мгновенно
это не так, имхо.
приятнее читать запись типа c = a + b * d, нежели c = a.Add(b.Mul(d))

единтсвенно, перегрузку нестандартная, тогда да, но не всегда :D

хотя страница у него хорошая, часто посматриваю

Apis.NET
Цитата:
ivank Не а не понял!
а ты переопредели оператор понимая, сразу догонишь

-------
RTFM, RTFM и потом опять RTFM
http://vudz.tk


Отправлено: 01:09, 02-03-2002 | #3


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


VuDZ
Цитата:
хотя страница у него хорошая, часто посматриваю
А кто тебе на него ссылку дал? Уж не я ли?

Цитата:
приятнее читать запись типа c = a + b * d, нежели c = a.Add(b.Mul(d))
На само деле, второй вариант, обычно производительнее. Т.к. тогда можно самому контролировать создание временных объектов:
Код: Выделить весь код
c = a + b * d;
Два временных объекта: (b*d) и (a + (тут первый временный объект)).

В случае:
Код: Выделить весь код
Assign( &c, Add( a, Mul( b, d ) ) );
тоже два временных объекта: то что вернйт Mul( b, d ) и что вернёт Add( a, Mul( b, d ) )

Но мы можем это прооптимайзить это ручками:
Код: Выделить весь код
Assign( &c, Multiply_Add( b, d, a ) )
Уже один временный объект. Или дальше:
Код: Выделить весь код
Multiply_Add_Assign( b, d, a, &c );
Ни одного. Т.е. они скорее всего будут, но будут спрятаны внутри этой функции, и скорее всего, как-то прооптимизированы программистом.

С операторами такое не прокатит. Хотя, я недавно прочитал "Дизай и эволюци C++" by Straustrup, так он хотел ввести перегрузку нескольких операторов сразу. Т. ечто-то вроде этого:
Код: Выделить весь код
class some_class
{
    some_class & operator = + * ( const some_class & a,
                                  const some_class & b,
                                  const some_class & d );
}
И теперь c = a + b * d будет полным аналогом Multiply_Add_Assign( b, d, a, &c ); Только гораздо приятнее выглядеть... Не помню почему это отклонили, но предложение интересное.

Добавлено:

Что-то я увлёкся -- в тему "Как стать программистом..." это не катит

-------
http://ivank.ru


Отправлено: 01:36, 02-03-2002 | #4


изверг


Сообщения: 39
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


тэкс... что-то мне начали читать лекции по оптимизации кода :<

ivank
Цитата:
А кто тебе на него ссылку дал? Уж не я ли?
не-а... если помнишь статью у меня на сайте о правилах преобразования выражений типа int (*(*(*fptr)())[3])();
то она была раньше

-------
RTFM, RTFM и потом опять RTFM
http://vudz.tk


Отправлено: 01:54, 02-03-2002 | #5


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
не-а... если помнишь статью у меня на сайте о правилах преобразования выражений типа int (*(*(*fptr)())[3])();
Это вообще Наумочкин , правда его Калинин перепечатывал. Так вот, ссылку на авторские проекты (и на Калинина в том чисе) я тебе давал ещё до того, как ты сделала страницу. Можешь хистори в асе посмотреть.

Цитата:
тэкс... что-то мне начали читать лекции по оптимизации кода :<
Ну ты мб (скорее, точно) это знаешь, а вот остальные... А вот про перегрузку нескольких операторов ты наверняка не знал

-------
http://ivank.ru


Отправлено: 02:22, 02-03-2002 | #6


изверг


Сообщения: 39
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
Ну ты мб (скорее, точно) это знаешь, а вот остальные... А вот про перегрузку нескольких операторов ты наверняка не знал
да, не знал, так как не сталкивался, да и особого смысла в этом нет

оффтопик: склероз, всё возможно

на счёт операции c = a + b * d;
1. temp = b * d;
2. c = temp + a;

как вилишь, тут особо оптимизировать нечего, ну да ладно.

[s]PS так как там поживают holywars?[/s]

-------
RTFM, RTFM и потом опять RTFM
http://vudz.tk


Отправлено: 02:36, 02-03-2002 | #7


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Как нечего? Допустим, у нас есть гипотетичесский оператор
Код: Выделить весь код
class some_class
{
 * * some_class & operator = + * ( const some_class & a,
 * * * * * * * * * * * * * * * * * const some_class & b,
 * * * * * * * * * * * * * * * * * const some_class & d );
}
Реализация номер 1:
Код: Выделить весь код
*this = a + b * d;
два временных объекта.
Реализация номер 2:
Код: Выделить весь код
*this = b;
*this *= d;
*this += a;
Ни одного временного объекта.

Добавлено:

Цитата:
PS так как там поживают holywars?
Прекрасно

-------
http://ivank.ru


Отправлено: 02:54, 02-03-2002 | #8


изверг


Сообщения: 39
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


ты знаешь, можно ведь использовать и +=, если данные не важны:

b *= c;
a += b;

и всё :>

-------
RTFM, RTFM и потом опять RTFM
http://vudz.tk


Отправлено: 03:03, 02-03-2002 | #9


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


VuDZ
Если написать
Код: Выделить весь код
b *= c; 
a += b; 
c = a;
То ты получшишь, тот же резульятат, что и:
Код: Выделить весь код
c = b;
c *= d;
c += a;
Только ещё и b и a попортишь.

Если б можно было перегружать последовательность операторов, то c = a + b * d; смотрелось бы лучше (привычнее), а эффективно было бы так же.

-------
http://ivank.ru


Отправлено: 11:05, 02-03-2002 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Как стать программистом: часть первая, нравоучительная

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Платформа 2010: фото-видео отчет. Часть первая OSZone News Новости и события Microsoft 9 17-11-2009 23:21
Как стать модератором??? Anatoliy2004 О сайте и форуме 1 13-08-2007 18:51
Как организации стать LargeAccountResellerом lekhalver Лицензирование продуктов Microsoft 5 26-06-2007 10:34
как стать хостером ??? Petya Хочу все знать 10 21-03-2005 23:37
Как стать модером? [mzd] О сайте и форуме 23 26-01-2005 18:31




 
Переход