RTS2, работа над ошибками
Oct. 26th, 2017 02:42 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Позавчера добавил в конфигурации RTS2 флаги "-Werror -Wextra" к CFLAGS и начал править…
Два с половиной дня у меня заняло исправление всех (кроме одной) вещей, на которые ругался gcc. Лишь одну пришлось оставить: автор использует старую версию libjsoncpp, и gcc ругается, что кое-что уже "deprecated". Но с этим мне разбираться совсем никакого желания нет, если уж прижмет, заменю на свой JSON-парсер.
Самым распространенным у автора было не помечать как __attribute__((__unused__)) неиспользуемые аргументы функций. Вот и думай: то ли лишних аргументов он наделал ради того, чтобы в классах-наследниках их использовать, то ли это рудимент от старых версий и нужен рефакторинг.
Вторым по популярности была попытка присвоить const значениям, возвращаемым функциями.
Еще автор часто путал ssize_t и size_t (вроде size_t x = someth(); if(x < 0)…).
В одном месте вообще жесть была: мода вычислялась по прямой гистограмме! И ладно бы, было ограничение на 16 бит, так нет: даже для 64-битных выражений была попытка выделить 10¹⁹ байт и построить гистограмму.
В нескольких местах отсутствовала проверка кодов возврата system, open и т.п.
Случайно нашел утечку памяти (благодаря предупреждению о сравнении знаковой и беззнаковой величины в той же функции).
Понятно, что множество людей внесли вклад в RTS2: там содержатся куски не только на С++, но и на С. Но везде нет-нет, да какие-то огрехи появляются. Видимо, поэтому до сих пор в репозитории на гитхабе чуть ли не каждый день появляется по несколько коммитов с исправлением тех или иных ошибок.
Явно нужны 5-10 студентов, которые бы провели полный рефакторинг RTS2 с удалением deprecated конструкций, фиксированием проблем и приведением всего дерева кода в одинаковый стиль оформления. Жаль, что нельзя на С RTS2 переписать — из-за явного преимущества ООП в данном случае.
Два с половиной дня у меня заняло исправление всех (кроме одной) вещей, на которые ругался gcc. Лишь одну пришлось оставить: автор использует старую версию libjsoncpp, и gcc ругается, что кое-что уже "deprecated". Но с этим мне разбираться совсем никакого желания нет, если уж прижмет, заменю на свой JSON-парсер.
Самым распространенным у автора было не помечать как __attribute__((__unused__)) неиспользуемые аргументы функций. Вот и думай: то ли лишних аргументов он наделал ради того, чтобы в классах-наследниках их использовать, то ли это рудимент от старых версий и нужен рефакторинг.
Вторым по популярности была попытка присвоить const значениям, возвращаемым функциями.
Еще автор часто путал ssize_t и size_t (вроде size_t x = someth(); if(x < 0)…).
В одном месте вообще жесть была: мода вычислялась по прямой гистограмме! И ладно бы, было ограничение на 16 бит, так нет: даже для 64-битных выражений была попытка выделить 10¹⁹ байт и построить гистограмму.
В нескольких местах отсутствовала проверка кодов возврата system, open и т.п.
Случайно нашел утечку памяти (благодаря предупреждению о сравнении знаковой и беззнаковой величины в той же функции).
Понятно, что множество людей внесли вклад в RTS2: там содержатся куски не только на С++, но и на С. Но везде нет-нет, да какие-то огрехи появляются. Видимо, поэтому до сих пор в репозитории на гитхабе чуть ли не каждый день появляется по несколько коммитов с исправлением тех или иных ошибок.
Явно нужны 5-10 студентов, которые бы провели полный рефакторинг RTS2 с удалением deprecated конструкций, фиксированием проблем и приведением всего дерева кода в одинаковый стиль оформления. Жаль, что нельзя на С RTS2 переписать — из-за явного преимущества ООП в данном случае.