хорошее повтори и еще раз повтори
May. 10th, 2013 12:40 pmНа работе есть внутренняя библиотека на C++, у которой есть популярный интерфейс. Некоторое время назад в интерфейсе обнаружился хитрый баг, который вытекает из самого дизайна. Соответственно этот API заменили на другой, но сам код просто так удалить пока не смогли, слишком много пользователей, которые еще не мигрировали. В результате файл .h сейчас начинается так:
// See [omitted] and [omitted] instead.
//
// There is a known bug in this implementation of [omitted]
// that can cause deadlock.
//
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// See [omitted] and [omitted] instead.
//
// There is a known bug in this implementation of [omitted]
// that can cause deadlock.
//
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
// deprecated deprecated deprecated deprecated deprecated deprecated
no subject
Date: 2013-05-10 10:05 am (UTC)no subject
Date: 2013-05-10 10:19 am (UTC)no subject
Date: 2013-05-10 10:31 am (UTC)Но есть нестандартные:
#warning "Do not use ABC, which is deprecated. Use XYZ instead."
#pragma message("Do not use ABC, which is deprecated. Use XYZ instead.")
no subject
Date: 2013-05-10 10:43 am (UTC)no subject
Date: 2013-05-10 10:46 am (UTC)no subject
Date: 2013-05-10 10:51 am (UTC)no subject
Date: 2013-05-10 11:32 am (UTC)no subject
Date: 2013-05-10 11:55 am (UTC)no subject
Date: 2013-05-10 12:03 pm (UTC)#pragma deprecated
?
Гугл молодая компания
Date: 2013-05-10 12:13 pm (UTC)Инетересно было бы узнать как будут обстоять дела через 10 лет.
no subject
Date: 2013-05-10 12:14 pm (UTC)no subject
Date: 2013-05-10 12:31 pm (UTC)A preprocessing directive of the form
# pragma pp-tokensopt new-line
causes the implementation to behave in an implementation-defined manner.
no subject
Date: 2013-05-10 12:38 pm (UTC)no subject
Date: 2013-05-10 12:41 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-10 04:37 pm (UTC)no subject
Date: 2013-05-10 05:38 pm (UTC)no subject
Date: 2013-05-10 07:07 pm (UTC)Вообще, коллективный разум c.l.c++.m уже много лет назад установил, что вполне стандартный компилятор C++ мог бы на всё, что ему не нравится, прерывать компиляцию и печатать единственный знак "?" (или любой другой, по вкусу). Это было бы абсолютно по стандарту.
Re: Гугл молодая компания
Date: 2013-05-10 07:09 pm (UTC)no subject
Date: 2013-05-10 07:11 pm (UTC)относится ли следующий deprecated к предыдущему deprecated, здесь есть о чём помедитировать. Устаревание данной функции устарело, во как.
Re: Гугл молодая компания
Date: 2013-05-10 07:12 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-10 07:37 pm (UTC)Многое вытекает из запрещения исключений, например, http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Doing_Work_in_Constructors. Избегать вызова виртуальных методов в конструкторе - по-моему, не style guide, а абсолютное правило.
Вспомнил: второе - запрет RTTI. В идеальном мире хорошо было бы обходиться, как положено, исключительно механизмом виртуальных функций; вот только C++ как язык пока что не пролезает в идеальный мир. Рад бы в рай, да грехи не пускают.
Вообще, я читал это довольно давно, более чем несколько лет назад, во всяком случае, тогда там не было ничего ни про boost, ни про C++11. Там, в общем, много и полезного, но любой, запрещающий исключения, не может считаться мною разумным.
no subject
Date: 2013-05-10 08:27 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-10 08:59 pm (UTC):)
no subject
Date: 2013-05-11 04:05 am (UTC)no subject
Date: 2013-05-11 08:00 am (UTC)// not yet ready! not yet ready! not yet ready! not yet ready! not yet ready!
// not yet ready! not yet ready! not yet ready! not yet ready! not yet ready!
// not yet ready! not yet ready! not yet ready! not yet ready! not yet ready!
// not yet ready! not yet ready! not yet ready! not yet ready! not yet ready!
// not yet ready! not yet ready! not yet ready! not yet ready! not yet ready!
// not yet ready! not yet ready! not yet ready! not yet ready! not yet ready!
// not yet ready! not yet ready! not yet ready! not yet ready! not yet ready!
...
no subject
Date: 2013-05-11 08:02 am (UTC)no subject
Date: 2013-05-11 08:04 am (UTC)Re: Гугл молодая компания
Date: 2013-05-11 11:20 am (UTC)Re: Гугл молодая компания
Date: 2013-05-11 01:14 pm (UTC)Про исключения, на мой взгляд, тоже правильно написано - есть отличные механизмы, полностью их заменяющие и при этом не херящие к чертям собачьим control flow. Чем они вам так дороги?
Re: Гугл молодая компания
Date: 2013-05-11 03:53 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-11 06:01 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-11 07:54 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-11 08:24 pm (UTC)И да, с таким подходом именно что получается человеческий, легко читаемый и простой в поддержке и рефакторинге код.
Re: Гугл молодая компания
Date: 2013-05-11 09:19 pm (UTC)no subject
Date: 2013-05-12 06:45 am (UTC)no subject
Date: 2013-05-12 09:10 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-13 07:27 pm (UTC)no subject
Date: 2013-05-13 07:28 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-13 07:31 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-13 07:36 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-13 08:00 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-13 08:16 pm (UTC)Про c++0x я сам тогда, можно сказать, не знал - знал только об идеях и дискуссиях, но не о том, что в конце концов это оформится в стандарт.
Re: Гугл молодая компания
Date: 2013-05-13 08:25 pm (UTC)Никто не спорит с тем, что на исключениях можно написать хороший C++шный код. Но во-первых этот код будет чуть хуже читаем, так как проверки при каждом чихе работают в том числе как документация, а порядок исполнения всегда очевиден, и во-вторых значительно опаснее при рефакторинге, так как весь синтаксис про исключения в C++ так и остался если не во временах Ритчи, то в молодости Страуструпа точно. Победоносное введение в C++11 nothrow ничего не изменило - всё так же нельзя с уверенностью сказать ни где исключение может или не может возникнуть, ни где и кем оно будет обработано.
Ну и, в конце концов, если хочется писать как на яве - возможно лучше тогда писать на яве?
Re: Гугл молодая компания
Date: 2013-05-13 08:29 pm (UTC)у нас с вами была дискуссиямы с вами вели эту дискуссию лет 10 назад, то я доказал бы вам ваше заблуждение.К сожалению, в настоящее время я 1) окончательно удостоверился, что нет такого технического решения, в правильности которого можно было бы убедить всех, 2) взгляды людей на "правильность" control flow сильно различаются, мягко говоря, 3) бизнес-успех проектов определяется в основном не этим.
Re: Гугл молодая компания
Date: 2013-05-13 08:40 pm (UTC)Re: Гугл молодая компания
Date: 2013-05-14 10:36 am (UTC)