Починил Flopster
Одной из задач, которую я планировал решить в процессе написания «дисководного» альбома, была починка VST-плагина Flopster, на котором, собственно, я и пишу альбом.
Дело в том, что этот плагин, как и все мои плагины с GUI, страдает нестабильностью: в Reaper он примерно в одном случае из 5-10 может уронить программу при открытии проекта, без каких-либо сообщений об ошибке: загружаешь проект, и Reaper закрывается. А у некоторых пользователей в FLS это происходило гораздо чаще. Плагинам моим уже много лет, некоторым без малого десять, и я не раз пытался разобраться, в чём же проблема, но ни одна идея не сработала.
Дело в том, что когда я писал эти плагины, а они написаны нормальным голым кодом на C++, а не сконструированы в каком-нибудь SynthEdit, я просто не знал, как это делать. Примеры создания GUI практически полностью отсутствовали. Также отсутствовало понимание, каков вообще жизненный цикл плагина, когда и какие методы вызываются хостом, в каком порядке — VST2.x не отличался хорошей документацией, и так и был deprecated. VST3 же значительно сложнее, и переходить на него я не хотел и не хочу.
Дополнительной проблемой было отсутствие отладки. VST-плагин — это DLL-ка с набором методов, известных хосту. Без хоста её никак не проверить. Поэтому я собирал DLL, загружал в VstHost, Psycle и Reaper, и тестировал там. Если падало, то искал проблему и собирал. К тому же, в старые времена у меня по какой-то причине вообще не собирались плагины в Debug. Таким образом, плагины отлаживались методом тыка: падает — ищу и чиню, не падает — значит работает.
Долгое время я считал, что проблема нестабильности растёт из моего непонимания жизненного цикла плагина и некорректного прикручивания GUI к нему. Типа, возникают гонки доступа, код обращается к ресурсам, которые уже удалены, и так далее. Я обкладывал код всяческими сейфгардами, но это не помогало.
Помог, как водится, ИИ. Обычный чат DeepSeek. Я просто дал ему код трёх разных плагинов и попросил проанализировать проблемы в них. Конечно, проблем там оказалось навалом, но не критических, это скорее просто устаревший менеджмент памяти (без RAII), не лучшая архитектура, и bad practices. Он нашёл некоторые гонки и предложил больше сейфгардов, но это не помогло. Ведь я искал что-то общее, проблему, которую я, предположительно, размножил копи-пастом на все свои разработки.