АВТОРЫ: Клабуков Д.В., Еременко Д.Ю
Июнь 2018. Мы были типичной неблагополучной семьей, постоянно ругавшейся из-за своего капризного ребенка.
Нашим ребенком был компилятор языка "Оберон-0".
Наверное мы были не самыми лучшими родителями - все коммиты строго в мастер, 10% коммитов - Merge Conflicts,
постоянные сигфолты. Все шло под откос.
Я устал от всей этой семейной жизни и 30 июня уехал из города, не дожидаясь решения органов опеки - сдача проекта должна была состоятся 2 июля.
Моя совесть была чиста. Мне казалось, что я дал своему ребенку все что нужно - лексический анализатор написаный по TDD работал, как швейцарские часы, а вывод в консоль '10/10 TESTS PASSED' добавлял мне +42 к гордости при каждом запуске автотестов.
-Данила, друг, привет, у твоего лексического анализатора падают тесты
-Этого не может быть, я всегда запускаю автотесты перед тем, как сделать коммит
-У меня все падает...
-Хорошо, пошли в дискорд...
Знаменитый паттерн поиска ошибки, воспроизводимой только на одном компьютере (ЭКСТРЕМАЛЬНОЕ ПРОГРАММИРОВАНИЕ)
-два программиста созваниваются в дискорде
-тот программист, у которого ошибка воспроизводится, включает демонстрацию экрана
-оба программиста выставляют одну и ту же конфигурацию дебага
-оба программиста подают программе на вход одни и те же входные данные
-оба программиста запускают программу
-оба программиста синхронно ходят по брейкпоинтам, параллельно проверяя, что в окне expressions у них все совпадает
Поскольку в доме, в котором я жил, все уже давно спали, такую роскошь, как голосовая связь я себе позволить не мог - синхронизация сессий дебага происходила посредством дуплексной передачи текстовых сообщений с одной стороны и потока аудио и видео информации с другой
-f7
-дебагер
-и полез в LexAnalysis
-открой мне token
-да
-поставь брейпоинт на if и нажимай f9
-да
-да
-вижу
-секунду
-открой тест 1
-у меня кстати все работает
-а стоп...
-стой у меня все зависло
-стоять
-смотрю свой
-все тоже самое, но парсится ;
-подожди, у тебя же линух?
-у меня есть предположение
-попробуй закоментировать if ==\n
-да
-все правильно
-@НЕЦЕНЗУРНАЯ ЛЕКСИКА
-запусти полностью
-@НЕЦЕНЗУРНАЯ ЛЕКСИКА
-@МИНУТА МОЛЧАНИЯ
-короче...
-в винде '\n' это 2 символа, а в линухе 1
-можно провернуть что-то типо if(SYSTEM.NAME=!LINUX) fseek(file, -1, SEEK_CUR);
-да, закомить это пожалуйста
-кто бы мог подумать, написали кросплатформенный компилятор
После этого случая все вернулась на круги своя. Что до нашего ребенка - он не стал гением среди компиляторов, во время переходного возраста отказался учиться оптимизации да и вообще возможно ему всегда хотелось быть простеньким веб-сервисом, позволяющим людям загружать свои фотографии и узнавать, какая бы у них была порода, если бы они были собаками.