avva: (moose)
[personal profile] avva
На работе есть внутренняя библиотека на 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

Date: 2013-05-10 10:05 am (UTC)
From: [identity profile] archaicos.livejournal.com
А где часть, которая выдаёт warning при использовании сего интерфейса?

Date: 2013-05-10 10:19 am (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
в c++ нет стандартного способа выдать предупреждение

Date: 2013-05-10 10:31 am (UTC)
From: [identity profile] archaicos.livejournal.com
Стандартного нет.

Но есть нестандартные:

#warning "Do not use ABC, which is deprecated. Use XYZ instead."

#pragma message("Do not use ABC, which is deprecated. Use XYZ instead.")

Date: 2013-05-10 10:43 am (UTC)
From: [identity profile] dimrub.livejournal.com
Есть такая штука, да. Но на уровне (условно говоря) мейкфайлов, а не на уровне кода. К сожалению, авторы процитированного кода этой возможностью не воспользовались.
Edited Date: 2013-05-10 10:45 am (UTC)

Date: 2013-05-10 10:46 am (UTC)
From: [identity profile] dimrub.livejournal.com
Полез искать где это, нашел еще 32 места в коде, где слово "deprecated" повторяется как минимум трижды подряд.

Date: 2013-05-10 10:51 am (UTC)
From: [identity profile] archaicos.livejournal.com
Ещё можно выводить сообщение во время исполнения программы. Некие сложности возникнут, если вывод или невиден или куда-то перенаправляется для дальнейшего разбора и там не ожидается подобного «мусора».

Date: 2013-05-10 11:32 am (UTC)
From: [identity profile] 109518.livejournal.com
Слушайте, если тут таки гугл-инсайдеры собрались, у меня вопрос: почему google maps api v2 и v3 такие разные?

Date: 2013-05-10 11:55 am (UTC)
From: [identity profile] valshooter.livejournal.com
This is sooooo deprecated.

Date: 2013-05-10 12:03 pm (UTC)
From: [identity profile] vadimbhai.livejournal.com
А как же
#pragma deprecated
?

Гугл молодая компания

Date: 2013-05-10 12:13 pm (UTC)
From: [identity profile] a r (from livejournal.com)
традиционно привлекавшая способных программистов - представляете что творится в компаниях постарше и с программистами похуже.

Инетересно было бы узнать как будут обстоять дела через 10 лет.



Date: 2013-05-10 12:14 pm (UTC)
From: [identity profile] juunitaki.livejournal.com
Разве четное число повторений не отменяет основное значение?

Date: 2013-05-10 12:31 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
#pragma по определению нестандартна.

A preprocessing directive of the form

   # pragma pp-tokensopt new-line

causes the implementation to behave in an implementation-defined manner.
Edited Date: 2013-05-10 12:32 pm (UTC)

Date: 2013-05-10 12:38 pm (UTC)

Date: 2013-05-10 12:41 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
ну я не знаю, может, гугловцев за использование нестандартных штук квартальной премии лишают и на парткоме песочат.

Re: Гугл молодая компания

Date: 2013-05-10 04:37 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Не такая уж молодая - 15 лет. На прошлых работах мне приходилось выбрасывать и с нуля переписывать код, написанный парой лет ранее. В гугле же успешно работает код, которому десять лет и более. Потому что прикладываются значительные усилия, чтобы код был качественным - и оставался таковым и после нескольких лет существования.

Date: 2013-05-10 05:38 pm (UTC)
From: [identity profile] janatem.livejournal.com
Ля-ля ля-ля ля-ля ля-ля — советская милиция.

Date: 2013-05-10 07:07 pm (UTC)
From: [identity profile] lazyreader.livejournal.com
Поддерживаю, и остаётся только добавить, что и warning по определению нестандартен.

Вообще, коллективный разум c.l.c++.m уже много лет назад установил, что вполне стандартный компилятор C++ мог бы на всё, что ему не нравится, прерывать компиляцию и печатать единственный знак "?" (или любой другой, по вкусу). Это было бы абсолютно по стандарту.

Re: Гугл молодая компания

Date: 2013-05-10 07:09 pm (UTC)
From: [identity profile] lazyreader.livejournal.com
А меня такое дело совершенно не удивляет после чтения гугловских C++ guidelines, которые есть учебник спесивого невежества.

Date: 2013-05-10 07:11 pm (UTC)
From: [identity profile] lazyreader.livejournal.com
свежий взгляд, да.

относится ли следующий deprecated к предыдущему deprecated, здесь есть о чём помедитировать. Устаревание данной функции устарело, во как.

Re: Гугл молодая компания

Date: 2013-05-10 07:12 pm (UTC)
From: [identity profile] avva.livejournal.com
Черт, надо же. А какие там три самые спесивые и невежественные вещи?

Re: Гугл молодая компания

Date: 2013-05-10 07:37 pm (UTC)
From: [identity profile] lazyreader.livejournal.com
Я уж давно читал, и сходу мне трудно вспомнить. Одна, определённо - запрещение исключений. За другими мне нужно сходить, посмотреть.

Многое вытекает из запрещения исключений, например, http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Doing_Work_in_Constructors. Избегать вызова виртуальных методов в конструкторе - по-моему, не style guide, а абсолютное правило.

Вспомнил: второе - запрет RTTI. В идеальном мире хорошо было бы обходиться, как положено, исключительно механизмом виртуальных функций; вот только C++ как язык пока что не пролезает в идеальный мир. Рад бы в рай, да грехи не пускают.

Вообще, я читал это довольно давно, более чем несколько лет назад, во всяком случае, тогда там не было ничего ни про boost, ни про C++11. Там, в общем, много и полезного, но любой, запрещающий исключения, не может считаться мною разумным.

Date: 2013-05-10 08:27 pm (UTC)
From: [identity profile] asox.livejournal.com
Возможно оно его усугубляет.

Re: Гугл молодая компания

Date: 2013-05-10 08:59 pm (UTC)
From: [identity profile] dimrub.livejournal.com
> довольно давно, более чем несколько лет назад, во всяком случае, тогда там не было ничего ни про boost, ни про C++11.

:)

Date: 2013-05-11 04:05 am (UTC)
From: [identity profile] furry.livejournal.com
"Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo" (http://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffalo_buffalo_buffalo_Buffalo_buffalo) ;)

Date: 2013-05-11 08:00 am (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
А там, где API заменили на другой, написано, я надеюсь, в традициях конторы


// 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!
...

Date: 2013-05-11 08:02 am (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Эх, у знакомого человека, разбирающегося в API карт, аккаунт-то тут удалён :-\

Date: 2013-05-11 08:04 am (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Ну, вон в long long int значения от повторения только усиливаются!

Re: Гугл молодая компания

Date: 2013-05-11 11:20 am (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
Когдя я читал эти наставления несколько лет назад, они тоже показались мне довольно-таки экстремистскими. Но то ло их подредактировали, то ли еще что, только сейчас они уже такими не кажутся. Отказ от исключений обставляется большим количеством извинений, мол, мы бы и рады, да существующий codebase не дает. А больше ничего такого выдающегося там нет.

Re: Гугл молодая компания

Date: 2013-05-11 01:14 pm (UTC)
From: [identity profile] blainemono.livejournal.com
RTTI там не запрещается, а рекомендуется избегать - что совершенно правильно.

Про исключения, на мой взгляд, тоже правильно написано - есть отличные механизмы, полностью их заменяющие и при этом не херящие к чертям собачьим control flow. Чем они вам так дороги?

Re: Гугл молодая компания

Date: 2013-05-11 03:53 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
Нет никаких таких механизмов. Ну то есть в смысле тезиса Чёрча всё можно заменить всем, конечно.

Re: Гугл молодая компания

Date: 2013-05-11 06:01 pm (UTC)
From: [identity profile] blainemono.livejournal.com
Как же нету, если есть. Можно перед вызывающей исключение операцией делать необходимые проверки, при особенно дебильных результатах проверки ставить ассерт и выходить из функции с кодом ошибки. Это - хороший и чистоплотный механизм, ничем не отличающийся от человеческого способа обработки исключений и исключающий нечеловеческий.

Re: Гугл молодая компания

Date: 2013-05-11 07:54 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
Можно возвращать коды ошибок, проверять их и передавать по цепочке вверх, конечно (кроме тех случаев, когда этого делать нельзя — из конструктора вернуть код ошибки не получится). Если это человеческий способ, прошу записать меня в марсиане ;)

Re: Гугл молодая компания

Date: 2013-05-11 08:24 pm (UTC)
From: [identity profile] blainemono.livejournal.com
Конструкторы, умеющие бросать исключения - в любом случае плохо, хотя бы потому что не всегда очевидно, где объект будет имплицитно инстанциирован.

И да, с таким подходом именно что получается человеческий, легко читаемый и простой в поддержке и рефакторинге код.

Re: Гугл молодая компания

Date: 2013-05-11 09:19 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
Ну видите, какие люди разные. Одним хорошо одно, другим другое.

Date: 2013-05-12 06:45 am (UTC)

Date: 2013-05-12 09:10 pm (UTC)
From: [identity profile] migmit.livejournal.com
Похоже на вот эту прелесть: http://www.youtube.com/watch?v=yL_-1d9OSdk

Re: Гугл молодая компания

Date: 2013-05-13 07:27 pm (UTC)
From: [identity profile] lazyreader.livejournal.com
Что вас насмешило, если не секрет?

Date: 2013-05-13 07:28 pm (UTC)
From: [identity profile] lazyreader.livejournal.com
Замечательное предложение было когда-то в c.l.c++.m - ввести семейство типов long, loong, looong, loooong...

Re: Гугл молодая компания

Date: 2013-05-13 07:31 pm (UTC)
From: [identity profile] lazyreader.livejournal.com
Это, простите, механизм времён Томпсона и Ритчи (если что не так, вываливаемся в аборт, а система всё подберёт). Как и многие простые механизмы, в простых случаях работает идеально, да.
Edited Date: 2013-05-13 07:32 pm (UTC)

Re: Гугл молодая компания

Date: 2013-05-13 07:36 pm (UTC)
From: [identity profile] lazyreader.livejournal.com
Вот это очень хорошо описывает моё сегодняшнее отношение к этому style guide.

Re: Гугл молодая компания

Date: 2013-05-13 08:00 pm (UTC)
From: [identity profile] dimrub.livejournal.com
То, что более, чем несколько лет назад, когда еще непонятно было, чем именно станет C++11 (и даже неясно было, whether x is decimal) было бы странно, если бы coding guidelines гугля включали в себя упоминание C++0x.

Re: Гугл молодая компания

Date: 2013-05-13 08:16 pm (UTC)
From: [identity profile] lazyreader.livejournal.com
Да нет, моя священная ненависть была вызвана отрицанием исключений :) Я тогда не понимал, как могут существовать люди, не понимающие их пользы.

Про c++0x я сам тогда, можно сказать, не знал - знал только об идеях и дискуссиях, но не о том, что в конце концов это оформится в стандарт.

Re: Гугл молодая компания

Date: 2013-05-13 08:25 pm (UTC)
From: [identity profile] blainemono.livejournal.com
Что коды ошибок, что исключения работают как в простых, так и в сложных случаях совершенно одинаково: если код написан правильно - всё работает, если код написан неправильно - возникают необработанные или обработанные не в том месте исключения и ничего не работает.

Никто не спорит с тем, что на исключениях можно написать хороший C++шный код. Но во-первых этот код будет чуть хуже читаем, так как проверки при каждом чихе работают в том числе как документация, а порядок исполнения всегда очевиден, и во-вторых значительно опаснее при рефакторинге, так как весь синтаксис про исключения в C++ так и остался если не во временах Ритчи, то в молодости Страуструпа точно. Победоносное введение в C++11 nothrow ничего не изменило - всё так же нельзя с уверенностью сказать ни где исключение может или не может возникнуть, ни где и кем оно будет обработано.

Ну и, в конце концов, если хочется писать как на яве - возможно лучше тогда писать на яве?

Re: Гугл молодая компания

Date: 2013-05-13 08:29 pm (UTC)
From: [identity profile] lazyreader.livejournal.com
Если бы у нас с вами была дискуссия мы с вами вели эту дискуссию лет 10 назад, то я доказал бы вам ваше заблуждение.

К сожалению, в настоящее время я 1) окончательно удостоверился, что нет такого технического решения, в правильности которого можно было бы убедить всех, 2) взгляды людей на "правильность" control flow сильно различаются, мягко говоря, 3) бизнес-успех проектов определяется в основном не этим.

Re: Гугл молодая компания

Date: 2013-05-13 08:40 pm (UTC)
From: [identity profile] blainemono.livejournal.com
Это всё бесспорно, но такое дзенское спокойствие плохо сочетается с но любой, запрещающий исключения, не может считаться мною разумным., извините уж.

Re: Гугл молодая компания

Date: 2013-05-14 10:36 am (UTC)
From: [identity profile] netp-npokon.livejournal.com
По-моему, про исключения довольно внятно написано (http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Exceptions#Exceptions), что их запрет продиктован исключительно практическими соображениями - невозможностью переписать весь существующий код так, чтобы исключения им поддерживались.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 01:47 pm
Powered by Dreamwidth Studios