Я согласен со всем. То что можно сделать быстро, так это - опциональный context для функций sail_read/sail_write. Эта идея уже витала, вы только её озвучили. Контекст хранит метаинформацию о плагинах, это верно! Нужен он например для получения списка поддерживаемых файловых расширений, например, чтобы сделать фильтр в диалоге выбора файлов
- функции sail_read_mem/sail_write_mem для уровня "Новичок"
- объединение sail_image и пиксельных данных - более чем очевидно что это нужно
То что сделать пока не знаю как:
- свой аллокатор - тоже очевидно что рано или поздно всплывёт опять
Что касается техники обработки ошибок, то я работал наверное с десятком из них. Такие TRY() макросы мне нравятся потому что:
- весь SAIL код, который может вернуть ошибку, выглядит унифицировано. Иначе разные функции начнут возвращать что попало как индикатор ошибки. Кто-то 0, кто-то NULL, и т.д. кто в лес, кто по дрова
- SAIL заботится об очистке памяти внутри себя при возникновении ошибки, опять же унифицировано. Макрос для этого просто называется по-другому, но код опять же выглядит унифицировано, хоть и слегка избыточно
- Макросы можно как хочешь тюнинговать. Например, чтобы проводить локальное деструктивное тестирование сделав так, чтобы макрос возвращал рандомные ошибки. Или печатать полотна бэктрейсов
- Клиентскому коду РЕКОМЕНДОВАНО использовать TRY() макросы, но вы же можете их и не использовать. Обрабатывайте результаты вызовов сами. 0 - успех, или код ошибки. Всё предельно просто.