Евгений Музыченко (emuzychenko) wrote,
Евгений Музыченко
emuzychenko

Categories:

Качество программного кода

Работая со своим кодом, начатым лет 15 назад и периодически переделываемым, регулярно огорчаюсь "грязным" решениям, вроде применения двух объектов синхронизации там, где можно было бы обойтись одним. Но периодически попадается код, на фоне которого самый грязный мой выглядит чуть ли не эталоном аккуратности и изящества. :)

Год назад приспичило мне портировать драйвер SiLabs для их микросхем CP2101-2104 с WinCE5.0 под 4.2 (Pocket PC 2003). Списался с ними, попросил исходники, они их прислали. Скомпилировалось легко, а вот работало только в отладочной конфигурации, со включенными отладочными сообщениями, и то не всегда. Понятное дело - ошибки синхронизации. Полез копать код - а он не просто ужасен, а ужасен-ужасен. Синхронизация сделана с помощью десятка событий, которые в сложной последовательности сбрасываются и устанавливаются, причем в ряде мест это очень подозрительно в плане гонок. Все пронизано принудительным преобразованием типов указателей - даже там, где легко можно было бы обойтись без этого, отдав компилятору контроль за соответствием.

Ну и прелести вроде безусловного захвата критической секции с последующим условным освобождением в нескольких местах, где делается преждевременный выход. Формально написано без goto, а фактически - оно самое. Или условный захват и безусловное освобождение.

В итоге после нескольких дней активного допиливания и устранения наиболее кривых мест оно по-прежнему отказывается работать стабильно, хотя виснуть стало реже. В каждом случае комбинация взаимной блокировки или вечного ожидания получается новая - при таком количестве объектов синхронизации оно и неудивительно. Интересно, насколько у меня еще хватит терпения. :)

А сейчас оказалось, что это ни разу не их собственный код - прототипом послужил драйвер MDD из дистрибутива WinCE. В нем такая же жуткая грязь, даже удивительно, как это может работать стабильно...
Tags: компьютеры, криворукие, недовольство, программирование, программы, работа
Subscribe

  • Кредо мизантропа :)

    Цытаты: На вопрос « чот я какое-то унылое говно, и мне от этого как-то хуйово», психотерапия зачастую отвечает «прими это в себе и…

  • Батут, дождь и ОТО :)

    Полез на стоящий во дворе батут, чтобы поправить кольцевой мат, сбитый ветром во время вчерашнего ливня. Стоило потянуть мат, скомканный ветром у…

  • Экран для дверного проема на балкон

    В съемном доме, где мы сейчас живем, нет кондиционеров. Их тут вообще как-то очень мало - народ говорит, что для установки сплит-систем даже в…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments