Skip to content

ChildrenOfNiklausWirth/WorstFunnyMistake

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 

Repository files navigation

WorstFunnyMistake

АВТОРЫ: Клабуков Д.В., Еременко Д.Ю

Введение

Июнь 2018. Мы были типичной неблагополучной семьей, постоянно ругавшейся из-за своего капризного ребенка. Нашим ребенком был компилятор языка "Оберон-0".
Наверное мы были не самыми лучшими родителями - все коммиты строго в мастер, 10% коммитов - Merge Conflicts, постоянные сигфолты. Все шло под откос.

Я устал от всей этой семейной жизни и 30 июня уехал из города, не дожидаясь решения органов опеки - сдача проекта должна была состоятся 2 июля.

Моя совесть была чиста. Мне казалось, что я дал своему ребенку все что нужно - лексический анализатор написаный по TDD работал, как швейцарские часы, а вывод в консоль '10/10 TESTS PASSED' добавлял мне +42 к гордости при каждом запуске автотестов.

Звонок 2 июля в полночь

-Данила, друг, привет, у твоего лексического анализатора падают тесты

-Этого не может быть, я всегда запускаю автотесты перед тем, как сделать коммит

-У меня все падает...

-Хорошо, пошли в дискорд...

Знаменитый паттерн поиска ошибки, воспроизводимой только на одном компьютере (ЭКСТРЕМАЛЬНОЕ ПРОГРАММИРОВАНИЕ)

-два программиста созваниваются в дискорде
-тот программист, у которого ошибка воспроизводится, включает демонстрацию экрана
-оба программиста выставляют одну и ту же конфигурацию дебага
-оба программиста подают программе на вход одни и те же входные данные  
-оба программиста запускают программу
-оба программиста синхронно ходят по брейкпоинтам, параллельно проверяя, что в окне expressions у них все совпадает 

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

Лог поиска ошибки

-f7  
-дебагер  
-и полез в LexAnalysis  
-открой мне token  
-да  
-поставь брейпоинт на if и нажимай f9  
-да  
-да  
-вижу  
-секунду  
-открой тест 1  
-у меня кстати все работает  
-а стоп...  
-стой у меня все зависло  
-стоять  
-смотрю свой  
-все тоже самое, но парсится ;  
-подожди, у тебя же линух?  
-у меня есть предположение  
-попробуй закоментировать if ==\n  
-да  
-все правильно  
-@НЕЦЕНЗУРНАЯ ЛЕКСИКА  
-запусти полностью  
-@НЕЦЕНЗУРНАЯ ЛЕКСИКА  
-@МИНУТА МОЛЧАНИЯ  
-короче...  
-в винде '\n' это 2 символа, а в линухе 1  
-можно провернуть что-то типо if(SYSTEM.NAME=!LINUX) fseek(file, -1, SEEK_CUR);  
-да, закомить это пожалуйста  
-кто бы мог подумать, написали кросплатформенный компилятор  

Заключение

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

Releases

No releases published

Packages

No packages published