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

Categories:

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

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

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

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

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

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

  • Масочный режим

    Прилетели с семьей в Россию - из Женевы в Шереметьево, оттуда в Новосибирск. Первое, что бросилось в глаза - большое количество людей без масок, и…

  • Французские названия :)

    Французы, как и мы, не заморачиваются придумыванием специальных названий: у нас - кондитерская, булочная, сливочная, у них -…

  • Плывет клипер, на клипере - шкипер, у шкипера - ... :)

    Внезапно сдал экзамен на лицензию International Bareboat Skipper и VHF Radio Operator. :) Учился у Sail Band (стандартный 10-дневный курс) в…

  • 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