Новости C++ из прошлого: ретро-компилятор Watcom C++ обзавелся современными функциями

NewsMaker

I'm just a script
Премиум
14,593
22
8 Ноя 2022
Разработчик смог вслепую сделать код лаконичным и надежным.


8jsep3sef04c54qzuxlio6oq0ub3ry0e.jpg


Разработчик Начо Мелладо Для просмотра ссылки Войди или Зарегистрируйся 28-летнего компилятора C++, Watcom C++32 версии 11.0 от 1996 года, выпущенного компанией Sybase Inc., добавив в него поддержку обработки исключений – функционал, который Для просмотра ссылки Войди или Зарегистрируйся в языке C++ лишь двумя годами позже с появлением первого стандарта C++.

В 1998 году Мелладо вместе с коллегами представил Для просмотра ссылки Войди или Зарегистрируйся – передовую библиотеку для обработки графики и аудио в реальном времени, прежде всего для игр на DOS и проектов в духе demoscene. На тот момент проект Watcom уже опережал время, однако в нем отсутствовала поддержка исключений.

Годы спустя Мелладо вернулся к работе над библиотекой, которая в основном использовала язык ассемблера для обработки в реальном времени, и начал интегрировать C++ для ускорения интеграции. Однако изменение привело к излишней громоздкости кода из-за всепроникающей проверки ошибок.


1oa75cyj2oe1g4vxbfuc599qtue99az1.png


Мелладо заметил, что использование шаблонов для обработки ошибок по принципу «do this or fail gracefully» могло бы быть значительно упрощено за счёт исключений и использования паттерна RAII (Получение ресурса есть инициализация), что позволило бы программе исправлять некритические ошибки. Несмотря на реализацию классов RAII, которые игнорировали ошибки, введённые им исключения нигде в программе не перехватывались.

Хотя компилятор Watcom мог компилировать конструкции try, catch и throw, сгенерированный код полагался на хуки, отсутствующие в любой библиотеке, поставляемой с компилятором. Поиски решения на ретрофорумах, посвящённых проекту, не принесли результатов. Это указывало на то, что команда Sybase начала реализацию поддержки исключений, но так и не выпустила её полностью.

Без какой-либо документации Мелладо фактически работал вслепую. Он предпринял попытку реверс-инжиниринга компилятора, создавая множество программ, дизассемблируя сгенерированные двоичные файлы и формулируя гипотезы, пока полностью не понял и не смог объяснить все двоичные файлы, связанные с проектом.

Усовершенствования Мелладо в компиляторе позволили кодировать хуки и реализовать исключения, значительно улучшив ясность и эффективность кода. С исключениями и RAII код, который ранее был громоздким и подверженным ошибкам, стал более лаконичным и надёжным.


ylx5abxmpsnw5r094hi2abh6kqldks4j.png


Платформа оборачивает все операции во внешний блок try-catch, автоматизируя обработку ошибок и освобождение ресурсов. Мелладо пояснил, что итоговый код будет более кратким, поскольку класс Image теперь включает в себя большую часть базовой структуры SLI, делая процесс кодирования более стройным и эффективным.
 
Источник новости
www.securitylab.ru

Похожие темы