?

Log in

No account? Create an account
баг (программистское) - По делам сюда приплыл, а не за этим — ЖЖ [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

баг (программистское) [май. 3, 2018|02:39 pm]
Anatoly Vorobey
[Tags|]

Какой прекрасный баг. Можно показывать школьникам и студентам, заинтересованным в программировании, чтобы знали, что им предстоит. И в хорошем смысле, и в плохом.

Missing red channel in Chrome Remote Desktop

Если вы разбираетесь в C++, почитайте сами, а если нет, то вот краткий пересказ:

1. В Хроме, когда он используется для удаленного захода на другой компьютер (Chrome Remote Desktop), внезапно пропал красный цвет, в том числе из комбинаций цветов (так что белый фон стал сине-зеленым, например).

2. Идем по истории изменений, находим, что это произошло в изменении, которое не меняло исходники, а вместо этого перешло к новой версии компилятора ("roll clang"). Вечер перестает быть томным.

3. Ищем и находим способ "дешево" воссоздать проблему для данного набора исходников (в данном случае - как сделать "удаленный" вход внутри одного компьютера).

4. Берем исходники в этот момент, строим две версии компилятора, старую и новую. Компилируем все дерево исходников старой - бага нет, новой - баг есть. Компилируем все дерево старой, и начинаем искать, какие исходники приводят к проблеме, если только их построить новой.

4. Постепенно сужаемся до большой компоненты дерева...

5. ...до конкретной директории...

6. ...до нескольких файлов...

7. ...до одного файла...

8. Находим массивы констант, которые используются для перевода цветов из режима YUV в режим RGB. Массивы определены внутри функции и внутри блока кода, но не помечены static. При этом используются уже после выхода из этого блока кода, через указатель, естественно.

9. Помечаем массивы static, проблема решена. Проблема была вызвана тем, что новая версия компилятора более агрессивно использовала локальное место на стеке, когда она знала, что ей позволено (потому что блок кода завершился и эти массивы должны использоваться только в нем).

И так каждый день! (примечание: не всегда так цветисто).
СсылкаОтветить

Comments:
From: ichthuss
2018-05-03 11:46 pm
Проблема в том, что качество будет в ущерб либо количеству, либо производительности. Первое - из за высокого порога вхождения использования инструментов, позволяющих создавать эффективный и проверенный код. Второе - из-за использования безопасных, но не слишком эффективных подходов.

На досуге, кстати, поинтересуйтесь историей обнаружения heartbleed.
(Ответить) (Parent) (Thread)
[User Picture]From: alaev
2018-05-04 10:43 am
То есть если писать эффективный и проверенный код, то проиграешь гонку конкурентам? Мысль понятная, но вопрос, не передохнем ли мы в итоге, от этого не исчезает.
(Ответить) (Parent) (Thread)
From: ichthuss
2018-05-04 10:57 am
Если писать эффективный и проверенный код, то ты будешь цениться как экстраспециалист. То есть гонку проиграют как раз конкуретны. Но если набирать под свой проект исключительно экстраспециалистов, то и стоить он будет соответственно. И тут уже вопрос - стоит ли он того? Для некоторых задач - безусловно, стоит.

>не передохнем ли мы в итоге

Учитывая, что чем больше в определённой сфере риск передохнуть, тем более там следят за качеством разработки (не только кода), то я бы поставил на то, что не передохнем. Если, конечно, Россия не возжелает переписать прошивки систем управления ядерным оружием силами молодого поколения.
(Ответить) (Parent) (Thread)
[User Picture]From: livelight
2018-05-04 06:14 pm
С Россией и в России проблемы - отнюдь не в качествн молодого поколения технических специалистов.
(Ответить) (Parent) (Thread)
From: ichthuss
2018-05-06 02:21 am
А я это и не утверждаю. Однако, если можно судить о российской военке по российскому же космосу, то можно с определённой степенью надёжности говорить о том, что задачу поручат далеко не лучшей части молодого поколения технических специалистов, причём даже им работать нормально не дадут. Что внушает некоторые опасения.
(Ответить) (Parent) (Thread)