Разработчик Начо Мелладо (Nacho Mellado) рассказал, что он взломал компилятор C++ 28-летней давности (Watcom C++32 версии 11.0 1996 года от Sybase Inc.), чтобы проект поддерживал исключения. Фактически это произошло за два года до того, как исключения стали частью первого стандарта C++.
В 1998 году Мелладо с друзьями выпустили библиотеку The DarkRising Library (TDL) обработки графики и аудио в реальном времени для DOS, в основном для игр и создания проектов типа demoscene. Проект Watcom уже тогда опередил своё время, но поддержки исключений там ещё не было.
Спустя годы Мелладо возобновил работу с библиотекой. Код для обработки в реальном времени в основном писался на ассемблере, но он начал добавлять поддержку C++ для более быстрой интеграции. Однако из-за повсеместной проверки ошибок код стал выглядеть слишком пространным.
Там было множество шаблонов типа «do this or fail gracefully», которые с помощью использования исключений+RAII можно было бы упростить, но при этом дать программе возможность исправить некритическую ошибку. Мелладо написал код с класами для RAII, которые игнорировали ошибки, но его исключения не перехватывались нигде в программе.
Оказалось, что Watcom компилирует try, catch и throw, но сгенерированный код вызывает хуки, которых нет ни в одной библиотеке, поставляемой с компилятором. Поиск по ретрофоруму этого проекта оказался безрезультатным. Судя по всему, команда Sybase готовила поддержку исключений, но тогда разработчики не выпустили её полностью в открытом виде.
Не имея документации, Мелладо фактически работал на ощупь. Итак, он провёл реверс-инжиниринг компилятора, создав множество программ, дизассемблировав сгенерированные двоичные файлы и формулируя гипотезы, пока не объяснил и не понял все двоичные файлы проекта.
Эта доработанная модель компилятора позволила Мелладо кодировать хуки и иметь исключения! С исключениями+RAII приведённый выше код теперь выглядит намного лучше.
Платформа оборачивает всё во внешний try-catch и автоматически обрабатывает ошибки и освобождение ресурсов. Мелладо пояснил, что итоговый код станет более кратким, поскольку класс Image будет включать в себя большую часть базовой простой структуры SLI.
https://habr.com/ru/news/806239/






Ответ на:
комментарий
от cobold



Ответ на:
комментарий
от Stil

Ответ на:
комментарий
от firkax


Ответ на:
комментарий
от cobold


Ответ на:
комментарий
от vel



Ответ на:
комментарий
от vel

Ответ на:
комментарий
от firkax

Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)
Похожие темы
- Форум IDE для D (2010)
- Галерея Perl прямиком из 1987 года (2019)
- Форум lambda vs std::function<...> (2014)
- Форум vectror<const A*> (2015)
- Форум Парсинг и добывание имен С/С++ функций в исходнике (CLANG?) (2015)
- Новости Вышел EAP релиз кроссплатформенной IDE для C++ от JetBrains (2014)
- Форум Проектирование Qt-приложения. Связь QListWidget и QVector (2014)
- Форум алгоритм сохранения связей (2015)
- Форум C++ перенос скомпилированного приложения (2014)
- Форум В каком открытом проекте можно себя попробовать? (начинающий) (2014)