bash.im ithappens.me zadolba.li
4671

Компилятор с травмой мозга

Знаете ли вы, что такое компилятор с травмой мозга? О, вы не знаете, что это такое, если не использовали C-компилятор для микроконтроллеров Microchip от некоей якобы высокотехнологичной фирмы.

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

Пришлось звать на помощь царя Ассемблера. После изучения листинга дизассемблера у некоторых по спине побежали мурашки от осознания того, насколько ужасающе чудовищна была та извращённая логика, которой следовал компилятор при оптимизации кода. Увидев, как программа, только что записав во флаг нолик, ждёт появления там единички, компилятор приходил в ярость, так как искренне считал, что такое невозможно в принципе. «Ну что за идиоты написали этот код?» — думал он про себя, после чего выкидывал из кода проверку флага и вставлял вместо неё бесконечный цикл.