MS -> Google -> MS
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 02.07.08 11:45
Оценка: 34 (5)
привет! думаю многие этот блог читают сами, но для тех, кто не видел может показатьи интересным
Сергей Соляник:
http://1-800-magic.blogspot.com/2008/06/back-to-microsoft.html
... << RSDN@Home 1.2.0 alpha 4 rev. 1067>>
Re: MS -> Google -> MS
От: Handie  
Дата: 02.07.08 12:41
Оценка:
Здравствуйте, Denis, Вы писали:

D>привет! думаю многие этот блог читают сами, но для тех, кто не видел может показатьи интересным

D>Сергей Соляник:
D>http://1-800-magic.blogspot.com/2008/06/back-to-microsoft.html

Там внизу ссылка на "Google C++ Style Guide"

Оказывается, в Google нельзя использовать exceptions:
We do not use C++ exceptions.
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Exceptions
Типа, exceptions сильно сложны и непонятны

Или вот например dynamic_cast объявлен вселенским злом:
Do not use dynamic_cast except in test code. If you need to know type information at runtime in this way outside of a unittest, you probably have a design flaw.
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Casting
Хотя это стандартный способ определить тип класса имея ссылку или указатель на базовый класс (иногда это надо)

В общем, слегка архаичный документ, типа тех что используются в "корпорациях старого типа".
Re[2]: MS -> Google -> MS
От: Vintik_69 Швейцария  
Дата: 02.07.08 12:48
Оценка:
Здравствуйте, Handie, Вы писали:

H>Типа, exceptions сильно сложны и непонятны


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

H>Хотя это стандартный способ определить тип класса имея ссылку или указатель на базовый класс (иногда это надо)


Это надо очень-очень-очень редко.
Re: MS -> Google -> MS
От: Igor Sukhov  
Дата: 02.07.08 12:48
Оценка: :))) :))) :))) :))) :)
Здравствуйте, Denis, Вы писали:

D>привет! думаю многие этот блог читают сами, но для тех, кто не видел может показатьи интересным


Короче говоря, приводят к Буденному перебежчика. Белого. Так, мол, и так, Семен Михайлович, постиг я в мгновение ока происходящее, дошла до меня безысходность белого движения. Чуять начинаю за три версты красоту ваших кавалерийских идей, возьмите к себе воевать. Хорошо. Переодели, переобули, дали красавца гнедого. Повоевал немного белый, но вдруг показалось ему, что снова постиг он в мгновенье ока происходящее и слинял к Деникину. Мужественно явился и говорит Самому: так, мол, и так, ошибся я. Буденный – полное говно, вокруг него мерзкий плебс, большей вони и совершенней лжи, чем советская власть, вообразить себе невозможно, и лучше уж, ваше превосходительство, смерть в наших безысходных рядах, чем торжество в смрадном каре обманутых маньяками плебеев. Простите великодушно. Время у нас смутное, возможен, согласитесь, поиск душой верного пути. Деникин не стал дискутировать на эту тему. Он отдал дважды перебежчика обратно Буденному. Белый стал втолковывать этой тупой усатой мандавше, что он не подлец, а человек ищущий, и наконец, в последней попытке спасти шкуру, брякнул что то насчет раздвоения личности. Буденный вынимает саблю, пробует отточку клинка на коготище и врезает красно белому по темечку. До самой жопы его расколол, а дальше тот сам рассыпался. «Мы – большевики, – говорит Буденный, – проблему раздвоения личности решаем по своему: сабелькой!»

-Юз Алешковский, Рука

* thriving in a production environment *
дело всетаки в объяснениях :)
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 02.07.08 13:04
Оценка:
Здравствуйте, Vintik_69, Вы писали:

H>>Типа, exceptions сильно сложны и непонятны


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


с этим сложно несогласиться, НО их объяснение это перл просто: "“The availability of exceptions may encourage developers to throw them when they are not appropriate”" я думаю нужно пол-С++ запретить... там такого можно натворить
... << RSDN@Home 1.2.0 alpha 4 rev. 1067>>
Re: дело всетаки в объяснениях :)
От: Handie  
Дата: 02.07.08 13:07
Оценка:
>с этим сложно несогласиться, НО их объяснение это перл просто: "“The availability of exceptions may encourage developers to throw them when they are not appropriate”" я думаю нужно пол-С++ запретить... там такого можно натворить

Ну, видимо apropriate style — это проверять код возврата всех функций и оператор new вернул не NULL.
Re[2]: дело всетаки в объяснениях :)
От: sux Земля  
Дата: 02.07.08 14:00
Оценка:
Здравствуйте, Handie, Вы писали:

H>Ну, видимо apropriate style — это проверять код возврата всех функций и оператор new вернул не NULL.


т.е. ООП тоже не применяется ввиду того, что конструкторы не имеют кодов возврата и исключение — это единственный способ
ну разве SetLastError юзают
Re[3]: дело всетаки в объяснениях :)
От: Handie  
Дата: 02.07.08 14:11
Оценка: 2 (1) +2
sux>т.е. ООП тоже не применяется ввиду того, что конструкторы не имеют кодов возврата и исключение — это единственный способ
sux>ну разве SetLastError юзают

Согласно их правилам, конструктор должен быть максимально простым и делать очень простой и lazy инит. А реальный конструктор — это функция(метод) с волшебным названием Init()

В этом есть доля мудрости, так как никогда не знаешь где и когда создается объект, например статические объекты создаются до входа в main, поэтому выкидывать исключения оттуда несколько рискованно...
Re[4]: дело всетаки в объяснениях :)
От: NiJazz Австралия  
Дата: 02.07.08 14:44
Оценка:
Здравствуйте, Handie, Вы писали:

H>В этом есть доля мудрости, так как никогда не знаешь где и когда создается объект, например статические объекты создаются до входа в main, поэтому выкидывать исключения оттуда несколько рискованно...


Но они, как я понял, почти запретили использование глобальных объектов.
Re[4]: дело всетаки в объяснениях :)
От: sux Земля  
Дата: 02.07.08 16:14
Оценка: +1
Здравствуйте, Handie, Вы писали:

H>Согласно их правилам, конструктор должен быть максимально простым и делать очень простой и lazy инит. А реальный конструктор — это функция(метод) с волшебным названием Init()

имхо изменяется принцип ООП разработки (что, имхо, так ли иначе приводит в кривому дизайну)

H>В этом есть доля мудрости, так как никогда не знаешь где и когда создается объект, например статические объекты создаются до входа в main, поэтому выкидывать исключения оттуда несколько рискованно...

синглтоны с отложенной инициализацией — им помогут ))
Re[5]: дело всетаки в объяснениях :)
От: WolfHound  
Дата: 02.07.08 16:54
Оценка:
Здравствуйте, NiJazz, Вы писали:

NJ>Но они, как я понял, почти запретили использование глобальных объектов.

Слабаки.
Полностью запрещать нужно.

Единственное исключение если их требует кривой легаси код.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: дело всетаки в объяснениях :)
От: WolfHound  
Дата: 02.07.08 16:54
Оценка:
Здравствуйте, sux, Вы писали:

sux>синглтоны с отложенной инициализацией — им помогут ))

Глобальное состояние вобще и синглетоны в частности зло.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: дело всетаки в объяснениях :)
От: sux Земля  
Дата: 02.07.08 16:59
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Глобальное состояние вобще и синглетоны в частности зло.


кто ж спорит, я предложил решение конкретной задачи
Re: дело всетаки в объяснениях :)
От: Nuseraro Россия  
Дата: 02.07.08 17:21
Оценка:
Здравствуйте, Denis, Вы писали:

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


D>я думаю нужно пол-С++ запретить... там такого можно натворить


А я кстати полностью согласен )
Homo Guglens
Re[2]: MS -> Google -> MS
От: dotidot Россия  
Дата: 02.07.08 21:06
Оценка:
Здравствуйте, Handie, Вы писали:

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

Зато в яве и питоне наверно можно, иначе я себе не представляю как на них вообще писать можно
А вдруг это они таким маневром хотят всех с С++ пересадить, чтоб не городили тонны кода, читать который через n<N лет будет некому?
Re[6]: дело всетаки в объяснениях :)
От: sergey2b ЮАР  
Дата: 03.07.08 06:26
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Слабаки.

WH>Полностью запрещать нужно.
и как можно избежать использования глобальных переменных в "C"? кроме их определения в main и передачи их параметрами в функции ?
Re[7]: дело всетаки в объяснениях :)
От: olegkr  
Дата: 03.07.08 16:58
Оценка: :)
Здравствуйте, sergey2b, Вы писали:

S>и как можно избежать использования глобальных переменных в "C"?

Использовать структуры и передавать их?
Re[8]: дело всетаки в объяснениях :)
От: sergey2b ЮАР  
Дата: 03.07.08 17:30
Оценка:
Здравствуйте, olegkr, Вы писали:

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


S>>и как можно избежать использования глобальных переменных в "C"?

O>Использовать структуры и передавать их?
я именно так и делаю, структура с вложенными подструктурами с глобальными переменными в функции передаю указатель

надеялся может есть еще варианты
Re[9]: дело всетаки в объяснениях :)
От: Handie  
Дата: 04.07.08 05:45
Оценка:
S>>>и как можно избежать использования глобальных переменных в "C"?
O>>Использовать структуры и передавать их?
S>я именно так и делаю, структура с вложенными подструктурами с глобальными переменными в функции передаю указатель

И у Вас есть только одна глобальная преременная типа gApplicationInstance?
И тогда мы получаем все конструкторы всех подобъектов вызываются до входа в main, что ограничивает использование исключений в конструкторах.

Кстати, если объект не может быть NULL, то передавать лучше по ссылке, ссылка не может быть NULL

S>надеялся может есть еще варианты


Полное отсутствие глобальных переменных:

int main()
{
   try
   {
     Application *pApp = new Application;
   
     pApp->Init();
     pApp->Run();
     pApp->Release();
   }
   catch(...)
   {
     // do something
   }

   return 0; 
}


Полная гараннтия того, что все исключения будут отловлены и отработаны.
Хотя теперь я чаще делаю lazy init — минимум работы в конструкторе и никаких аллокаций
Re[10]: дело всетаки в объяснениях :)
От: sergey2b ЮАР  
Дата: 07.07.08 18:14
Оценка:
Здравствуйте, Handie, Вы писали:

H>И у Вас есть только одна глобальная преременная типа gApplicationInstance?

H>И тогда мы получаем все конструкторы всех подобъектов вызываются до входа в main, что ограничивает использование исключений в конструкторах.

нет есть одна gApplicationInstance переменная в main которая передаеться во все функции которые вызывает main и во все вложенные подфункции

H>Полное отсутствие глобальных переменных:

мы не можем использовать объекты только анси C.

H>Хотя теперь я чаще делаю lazy init — минимум работы в конструкторе и никаких аллокаций

если не секрет почему вы стали использовать lazy init?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.